Вопросы реализации программного обеспечения, разработка которого велась с применением одной из объектно-ориентированных методологий, рассматриваются в разделе 5. Реализация программного обеспечения связана с использованием одного из языков программирования. Показано, что наиболее удобными для реализации программных систем, разработанных в рамках объектно-ориентированного подхода, являются объектно-ориентированные языки программирования, хотя возможна реализация и на обычных (не объектно-ориентированных) языках (например, на языке C и на языке Fortran).
Объектно-ориентированные языки программирования пользуются в последнее время большой популярностью среди программистов, так как они позволяют использовать преимущества объектно-ориентированного подхода не только на этапах проектирования и конструирования программных систем, но и на этапах их реализации, тестирования и сопровождения.
Первый объектно-ориентированный язык программирования Simula 67 был разработан в конце 60-х гг. в Норвегии. Авторы этого языка очень точно угадали перспективы развития программирования: их язык намного опередил своё время. Однако современники (программисты 60-х гг.) оказались не готовы воспринять ценности языка Simula 67, и он не выдержал конкуренции с другими языками программирования (прежде всего, с языком Fortran). Прохладному отношению к языку Simula 67 способствовало и то обстоятельство, что он был реализован как интерпретируемый (а не компилируемый) язык, что было совершенно неприемлемым в 60-е гг., так как интерпретация связана со снижением эффективности (скорости выполнения) программ.
Но достоинства языка Simula 67 были замечены некоторыми программистами, и в 70-е гг. было разработано большое число экспериментальных объектно-ориентированных языков программирования: например, языки CLU, Alphard, Concurrent Pascal и др. Эти языки так и остались экспериментальными, но в результате их исследования были разработаны современные объектно-ориентированные языки программирования: C++, Smalltalk, Eiffel и др.
Наиболее распространённым объектно-ориентированным языком программирования, безусловно, является C++. Свободно распространяемые коммерческие системы программирования C++ существуют практически на любой платформе. Широко известна свободно распространяемая система программирования G++, которая даёт возможность всем желающим разобрать достаточно хорошо и подробно прокомментированный исходный текст одного из образцовых компиляторов языка C++. Завершается работа по стандартизации языка C++: последний Draft стандарта C++ выпущен в июне 1995 г. (он доступен по Internet).
Разработка новых объектно-ориентированных языков программирования продолжается. С 1995 г. стал широко распространяться новый объектно-ориентированный язык программирования Java, ориентированный на сети компьютеров и, прежде всего, на Internet. Синтаксис этого языка напоминает синтаксис языка C++, однако эти языки имеют мало общего. Java – интерпретируемый язык: для него определены внутреннее представление (bytecode) и интерпретатор этого представления, которые уже сейчас реализованы на большинстве платформ. Интерпретатор упрощает отладку программ, написанных на языке Java, обеспечивает их переносимость на новые платформы и адаптируемость к новым окружениям. Он позволяет исключить влияние программ, написанных на языке Java, на другие программы и файлы, имеющиеся на новой платформе, и тем самым обеспечить безопасность при выполнении этих программ. Эти свойства языка Java позволяют использовать его как основной язык программирования для программ, распространяемых по сетям (в частности, по сети Internet).
Сквозной пример
В качестве сквозного примера будет рассмотрена задача о разработке программного обеспечения банковской сети (рис. 1.3). В состав этой сети входит центральный компьютер, принадлежащий объединению банков (консорциуму), компьютеры банков, к которым непосредственно (минуя центральный компьютер) присоединены кассовые терминалы, обслуживаемые кассирами, и сеть терминалов для клиентов банка (банкоматов).
Клиенты банков имеют пластиковые банковские карточки (один клиент может иметь несколько карточек); карточка содержит код карточки, код банка, код клиента и другую информацию, обеспечивающую доступ к счёту (счетам) клиента в этом банке. Клиент может вставить свою карточку в ATM (банкомат) и, при условии, что код карточки и код банка верны, начать банковскую проводку. Данные с карточки поступают в центральный компьютер, который распределяет их по компьютерам банков в соответствии с кодами банков до начала проводки; после окончания проводки её результаты поступают снова в центральный компьютер, который распределяет их по ATM. Являясь распределителем данных между компьютерами банков и ATM, центральный компьютер должен регулировать коллективный доступ со стороны клиентов и банков, организуя и поддерживая соответствующие очереди.
Рис. 1.3. Схема банковской сети
Проводка состоит в согласованном изменении данных на счетах клиента и отчетной документации банка, хранящихся в базе данных банка, в соответствии с данными проводки. Проводка включает в себя и проверку права клиента на доступ к его счетам на момент проводки (проверка безопасности), и проверку соответствия суммы, затребованной клиентом, текущему состоянию его счёта. Если проверки прошли успешно, клиент получает из ATM затребованную им сумму денег и квитанцию, в противном случае он получает только квитанцию. Во время осуществления проводки могут произойти сбои в работе аппаратуры либо клиент может раздумать получать деньги и отменить уже начавшуюся проводку. В этом случае все счета и отчётные документы должны быть восстановлены в том состоянии, в котором они были до начала проводки (откат). Для реализации отката используется служба ведения записей об изменениях, вносимых в базу данных банка при выполнении проводки. Все действия, связанные с выполнением проводки (в том числе протоколирование и обеспечение безопасности проводки), производятся программным обеспечением системы управления банковской сетью, процесс разработки которого и составляет содержание сквозного примера.
Компьютер банка поддерживает счета клиентов, т.е. хранит их в своей базе данных и выполняет проводки над этими счетами по запросам с ATM (удалённая проводка) или с кассовых терминалов (проводка кассира, данные о которой вводятся кассиром).
Несмотря на внешнюю простоту, эта задача достаточно сложна, чтобы на её примере можно было продемонстрировать основные особенности объектно-ориентированного подхода к разработке программных систем: в этой задаче есть и необходимость распределения по сети компьютеров (банкомат, который мы в дальнейшем будем для краткости называть ATM, тоже можно рассматривать как специализированный компьютер (рис. 1.4), и асинхронные процессы, и необходимость синхронизации таких процессов для организации параллельного обслуживания нескольких клиентов, и работа с базами данных (информация о клиентах хранится в базах данных банков), в частности, обслуживание транзакций (транзакциями являются банковские проводки).
Рис. 1.4. Схема банкомата (ATM)
Наряду с описанным примером будет рассмотрено достаточно боль-шое число других примеров, предназначенных для демонстрации особенностей, не охватываемых этим основным примером.
Контрольные вопросы
1. Технология программирования: определение, цель и инструментарий.
2. Стадии разработки и жизненный цикл ПО. Основные стадии цикла разработки и его характеристики.
3. Создание автоматизированной информационной системы в соответствии с ГОСТ 34.601–90.
4. Этапы жизненного цикла ПО в соответствии с ISO/IEC 12207:1995.
5. Стадии жизненного цикла ПО, взаимосвязь между процессами и стадиями.
6. Модели жизненного цикла ПО, их особенности и сравнительная характеристика.
7. Понятие алгоритма и способы его описания.
8. Блок-схема алгоритма, предикативные и функциональные вершины (привести примеры).
9. Понятие UML, его назначение и области применимости.
10. Виды диаграмм UML. Диаграмма классов.
11. Виды диаграмм UML. Диаграммы компонентов и составной структуры.
12. Виды диаграмм UML. Диаграммы развёртывания и объектов.
13. Виды диаграмм UML. Диаграммы пакетов и профилей.
14. Виды диаграмм UML. Диаграмма деятельности и схемы алгоритмов по ГОСТ 19.701–90.
15. Виды диаграмм UML. Диаграммы автомата и прецедентов.
16. Виды диаграмм UML. Диаграммы коммуникации, последовательности и сотрудничества.
17. Виды диаграмм UML. Диаграммы обзора взаимодействия и синхронизации.
2. Первая фаза жизненного цикла –