Компонентный подход к проектированию

По оценкам экспертов, 75 % работ по программированию в мире дублируются (например, программы складского учета, начисления зарплаты, расчета затрат на производство продукции и т.п.). Большинство из этих программ типовые, но каждый раз находятся особенности, которые влияют на их повторное разработку. Компонентное проектирование сложных программ из готовых компонентов является наиболее производительным [8–12].

Переход к компонентам происходил эволюционно: от подпрограмм, модулей, функций. При этом усовершенствовались элементы, методы их композиции и накопления для дальнейшего использования (рис.5.2).

Компонентный подход дополняет и расширяет существующие подходы в программировании, особенно ООП. Объекты рассматриваются на логическом уровне проектирования программной системы, а компоненты – это непосредственная физическая реализация объектов.

Один компонент может быть реализацией нескольких объектов или даже некоторой части объектной системы, полученной на уровне проектирования. Компоненты конструируются как некоторая абстракция, которая состоит из трех частей: информационной, внешней и внутренней.

Информационная часть представляет собой информацию о компоненте: назначение, дата изготовления, условия применения (ОС, среда, платформа и т.п.); уровень повторного использования; контекст или окружение; способ взаимодействия между собою компонентов.

Элемент композиции Описание элемента Схема взаимодействия Представле–ние, хранение Результат композиции
Процедура, подпрограмма, функция Идентификатор Непосредственное обращение, оператор вызова Библиотеки подпрограмм и функций Программа
Модуль Паспорт модуля, связи Вызов модулей, интеграция модулей Банк, библиотеки модулей Программа с модульной структурой
Объект Описание класса Создание экземпляров классов, вызов методов Библиотеки классов Объектно–ориентиро–ванная программа
Компонент Описание логики (бизнес), интерфейсов (APL,IDL), схемы развертывания Удаленный вызов в компонентных моделях (COM, CORBA, OSF, …) Репозитарий компонентов, серверы и контейне–ры компонентов Распреде–ленное компонентно–ориенти–рованное приложение
Сервис Описание бизнес–логики и интерфей–сов сервиса (XML, WSDL, …) Удаленный вызов (RPC, HTTP, SOAP, …) Индексация и каталогизация сервисов (XML, UDDI, …) Распреде–ленное сер–висо–ориен–тированное приложение

Рис.5.2. Схема эволюции элементов компонентов

Внешняя часть определяет взаимодействие компонента со средой и с платформой, на которой он будет выполняться. Эта часть имеет следующие основные характеристики:

– интероперабельность как способ взаимодействия с другими компонентами, с клиентом или сервером, а также обеспечения переносимости на другую платформу;

– способ интеграции (композиции) компонентов;

– нефункциональные сведения (безопасность, аутентификация, надежность и др.);

– технология проектирования (например, объектно–ориентированная среда и т.п.) и повторное использования компонентов.

Внутренняя часть – это некоторый артефакт (кластер, системная или абстрактная структура, фрагмент кода и др.) и вид его представления: проектный компонент, проектная спецификация, вычисляемая часть, код и др.

Разработана новая архитектура компонента – контейнер, в котором определяются функции, порядок их выполнения, вызываемые события и сервисные свойства. Выполнение контейнера осуществляется через его интерфейс с помощью провайдера..

Компоненты наследуются в виде классов и используются в модели или композиции, а также в каркасе интегрированной среды. Управление компонентами проводится на трех уровнях: архитектурном, компонентном и на уровне инфраструктуры интерфейса. Между этими уровнями существует взаимная связь.

Внутренняя часть компонента состоит из (рис.5.3): интерфейса (interfaces), реализации (implementation), схемы развертки (deployment).

ХАРАКТЕРИСТИКИ
Интерфейс     ¨ Один или несколько; ¨ Уникальность именования в пределах системы; ¨ Клиентский или серверный (входной или выходной); ¨ определенная сигнатура; ¨ описание методов взаимодействия Реализация     ¨ одна или несколько; ¨ ориентация на конкретную платформу и операционное окружение ¨ выбор конкретной реализации; ¨ поддержка интерфейсов компонента Схемы развертывания     ¨ типовость процедуры развертывания; ¨ управляемость; ¨ настраиваемость на операционную среду; ¨ модифицируемость

Рис.5.3. Основные составные элементы компонента

Интерфейсы отображают взгляд пользователя на компонент, то есть что компонент будет делать, когда к нему обращаются.

Реализация – это код, который будет использоваться при обращении к операциям, которые определены в интерфейсах компонента. Компонент может иметь несколько реализаций, например, в зависимости от операционной среды или от модели данных и соответствующей системы управления базами данных, которая необходима для функционирования компонента.

Развертка – это физический файл или архив, готовый к выполнению, который передается пользователю и содержит все необходимые способы для создания, настройки и функционирования компонента.

Компонент описывается в языке программирования, не зависит от операционной среды (например, от среды виртуальной машины JAVA) и от реальной платформы (например, от платформ в системе CORBA), где он будет функционировать.

Расширением понятия компонента есть паттерн – абстракция, которая содержит описание взаимодействия совокупности объектов в общей кооперативной деятельности, для которой определены роли участников и их ответственность. Представляется повторяемой

частью программного элемента, как схемы или взаимосвязи контекста описания решения проблемы.

Интерфейс компонентов. Для объединения компонентов в компонентную модель необходимым условием является наличие формально определенных интерфейсов в языках IDL и APL, а также механизмов динамического контроля связей между компонентами в современных средах.

Спецификация интерфейса в API и IDL включает описание функциональных свойств компонентов, их типов и порядка задания операций передачи аргументов и результатов для взаимодействия компонентов. То есть, компонент – физическая сущность, которая реализует определенную совокупность интерфейсов. Сами интерфейсы являются понятием, которое связывает логическую и физическую модели. Для описания самих компонентов, как правило, применяется ООП и его свойства: наследование, инкапсуляция, полиморфизм. В языке JAVA понятие интерфейса и класса являются базовыми. Компонентные модели – Javabeans и Enterprise Javabeans, а также модель CORBA используют объектно–ориентированные свойства.

Наши рекомендации