Сборка может осуществляться вручную или может быть задана на некотором языке сборки, или извлечена полуавтоматическим образом из спецификации задачи. Цейтин в 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. Технология стерильного цеха
Читать дальше