Технологии программирования
Шрифт:
• основное внимание уделяется раннему определению архитектуры;
• возможность конфигурирования, настройки и масштабирования.
Рис. 3.7. Рациональный унифицированный подход к видам работ
3.5. ГЕНЕТИЧЕСКИЕ ТЕХНОЛОГИЧЕСКИЕ ПОДХОДЫ
Термин "генетический" в названии этой группы подходов связан с происхождением программы
Синтезирующее программирование предполагает синтез программы по ее спецификации. В отличие от программы, написанной на алгоритмическом языке и предназначенной для исполнения на вычислительной машине после трансляции в используемый код, документ на языке спецификаций является лишь базисом для последующей реализации. Для получения этой реализации необходимо решить следующие основные задачи:
— доопределить детали, которые нельзя выразить при помощи языка спецификации, но которые необходимы для получения исполняемого кода;
— выбрать язык реализации и аппаратно-программную платформу для реализации;
— зафиксировать отображение понятий языка спецификаций на язык реализации и аппаратно-программную платформу;
— осуществить трансформацию представления (из спецификации в исполняемую программу на языке реализации);
— отладить и протестировать исполняемую программу.
Автоматическая генерация программ по спецификациям возможна для многих языков спецификаций, особенно для SDL, ASN.1, LOTOS, Estelle, UML (Rational Rose).
Сборочное (расширяемое) программирование предполагает, что программа собирается путем повторного использования уже известных фрагментов (рис. 3.8).
Сборка может осуществляться вручную или может быть задана на некотором языке сборки, или извлечена полуавтоматическим образом из спецификации задачи. Цейтин в 1990 г. изложил основные направления для создания техники сборочного программирования:
— выработка стиля программирования, соответствующего принятым принципам модульности;
— повышение эффективности межмодульных интерфейсов; важность аппаратной поддержки модульности;
— ведение большой базы программных модулей; решение проблемы идентификации модулей и проверки пригодности по описанию интерфейса. (Модули должны стать "программными кирпичиками", из которых строится программа.)
Рис. 3.8. Сборочное программирование
Сборочное программирование тесно связано с методом повторного использования кода, причем как исходного, так и бинарного. Выделяют несколько разновидностей технологических подходов сборочного программирования, которые в значительной степени определяются базисной методологией.
1. Модульное сборочное программирование — исторически первый подход, который базировался на процедурах и функциях методологии структурного программирования.
2. Объектно-ориентированное сборочное программирование базируется на методологии объектно-ориентированного программирования и предполагает распространение библиотек классов в виде исходного кода или упаковку классов
3. Компонентное сборочное программирование предусматривает распространение классов в бинарном виде и предоставление доступа к методам класса через строго определенные интерфейсы, что позволяет снять проблему несовместимости компиляторов и обеспечивает смену версий классов без перекомпиляции использующих их приложений. Существуют конкретные технологические подходы, поддерживающие компонентное сборочное программирование — COM (DCOM, COM+), CORBA, Net. (см. 6.6).
4. Аспектно-ориентированное сборочное программирование, при котором концепция компонента дополняется концепцией аспекта — варианта реализации критичных по эффективности процедур. Аспектно-ориентированное сборочное программирование заключается в сборке полнофункциональных приложений из многоаспектных компонентов, инкапсулирующих различные варианты реализации.
Конкретизирующее программирование предполагает, что частные, специальные программы извлекаются из универсальной программы.
Наиболее известная технология конкретизирующего программирования — это подход с применением паттернов проектирования (см. 8.6).
Дополнительно к паттернам существуют каркасы (framework) — наборы взаимодействующих классов, составляющих повторно используемый дизайн для конкретного класса программ. Каркас диктует определенную архитектуру приложения, в нем аккумулированы проектные решения, общие для проектной области. Например, существуют каркасы, которые используются для разработки компиляторов.
3.6. ПОДХОДЫ НА ОСНОВЕ ФОРМАЛЬНЫХ ПРЕОБРАЗОВАНИЙ
Эта группа подходов содержит максимально формальные требования к виду работ создания программного обеспечения.
Технология стерильного цеха. Основные идеи технологии стерильного цеха (cleanroom process model) были предложены Харланом Миллзом в середине 80-х годов XX в. Технология складывается из следующих частей (рис. 3.9):
• разработка функциональных и пользовательских спецификаций;
• инкрементальное планирование разработки;
• формальная верификация;
• статистическое тестирование.
Процесс проектировании связан с представлением программы как функции в виде так называемых "ящиков":
• черного ящика с фиксированными аргументами (стимулами) и результатами (ответами);
• ящика с состоянием, в котором выделяется внутреннее состояние;
• прозрачного (белого) ящика, представляющего реализацию в виде совокупности функций при пошаговом уточнении.
Использование ящиков определяют следующие три принципа:
— все определенные при проектировании данные скрыты (инкапсулированы) в ящиках;
— все виды работ определены как использующие ящики последовательно или параллельно;
— каждый ящик занимает определенное место в системной иерархии.
Рис. 3.9. Технология стерильного цеха
Черный ящик представляет собой точную спецификацию внешнего, видимого с пользовательской точки зрения поведения. Ящик получает стимулы от пользователя и выдает ответ.