Спецификация ПИК
В качестве ПИК могут быть объекты, созданные в рамках объектно–ориентированного программирования с наследованием их реализации, а также компоненты в компонентном программировании, для них наследуется не реализация, а интерфейсы. При этом компонент обладает такими свойствами:
– связывания компонентов на последних этапах разработки ПС,
– инкапсуляции (компонент, как “черный ящик ” без вмешательств в код),
– наследования интерфейсов,
– повторное использование кода.
Для компонентов повторного использования сложилось несколько разных определений.
Определение 1. Компонент ПИК – это некоторая функция с определенными атрибутами, обеспечивающая функциональность, взаимодействие со средой и поведение.
Определения 2. Готовый к повторному использованию компонент представляет собой совокупность методов определенной сигнатуры и типов данных, которые передаются и возвращаются после выполнения метода.
Определение 3. ПИК – это самостоятельный программный элемент, который удовлетворяет определенным функциональным требованиям, требованиям архитектуры, структуры и организации взаимодействия в заданной среде, имеет спецификацию, помогающую пользователю объединять его с другими компонентами в интегрированную ПС.
Нас более всего интересует последнее определение компонента, модель спецификации которого имеет вид:
ПИК = ( T, I, F, R, S),
где T – тип компоненты, I – множество интерфейсов компонента; F – функциональность компонента; R – реализация (скрытая часть) – программный код;
S – сервис для взаимодействия со средой или шаблон развертывания.
Каждый из элементов спецификации компонента представляет собою видимую или скрытую от пользователя часть его абстракции.
В зависимости от сложности ПИК их можно разделить на следующие группы:
– простые компоненты (функция, модуль, класс и пр.);
– объекты–компоненты, имеющие интерфейс, функциональность и реализацию на любом ЯП, а также возможность дополнять спецификации шаблоном развертывания и интеграции;
– готовые к использованию ПИК (например, beans компоненты в Java, AWT компоненты, классы и др.);
– сложные ПИК типа каркасов, паттернов с элементами группирования из нескольких простых ПИК и взаимодействия между ними при решении одной общей задачи ПС.
Большое количество готовых компонентов требует от разработчиков и пользователей задания их категории, т.е. метаинформации о том, какие классы совместимы с заведомо определенными семантическими ограничениями описания ПИК, и состоят из:
– интерфейсов, которые реализуют компоненты,
– механизмов повторного использования,
– среды развертывания компонента
– сервиса, поддерживаемого компонентом,
– ролей, которые выполняют компоненты в ПС,
– формализованные языки описания ПИК.
Современная технология применения ПИК базируются на таких особенностях:
– отображение, как способность ПС анализировать самого себя и описывать свои возможности динамично во время выполнения, а не во время компиляции, что обеспечивает управление большинством свойств, событий и методов компонента;
– анализа компонента для определения его возможностей.
– отсутствие средств поддержки реинженерии программного компонента и необходимости задания параметров его разработки;
– способности компонента к рефакторингу т.е. к трансформации компонента с сохранением функциональности, но с возможным изменением структуры и исходного кода для повторного использования.
– сохранение параметров конфигурации (шаблонов отладки) в постоянной памяти для использования в нужное время;
– регистрация сообщений о событиях, полученных от других объектов либо через ссылки (например, beans компоненты и инструментарий архива в технологии JAVA), а также группирование компонентов в JAR файле для дальнейшего повторного использования;
– использование компонента в разных языковых средах;
– адаптация ПИК к разным контекстам их использования и выделение свойств, которые мешают повторному использованию и модификации для применения в конкретных целях.
Компоненты в отличие от объектов могут изменяться и пополняться новыми функциями и интерфейсами. Они конструируются в виде некоторой программной абстракции, состоящей из трех частей: информационной, внешней и внутренней.
Информационная часть содержит описание: назначение, даты изготовления, условия применения (ОС, платформа и т.п.), возможностей ПИК, среды окружения и др.
Внешняя часть – это интерфейс, который определяет взаимодействие компонента с внешней средой и с платформой, на которой он будет выполняться и включает следующие общие характеристики:
– интероперабельность – способность взаимодействовать с компонентами других сред;
– переносимость – способность компонента выполняться на разных платформах компьютеров;
– интеграционость – объединение компонентов на основе интерфейсов в более сложные ПС;
– нефункциональность – требование на обеспечение безопасности, надежности и защиты компонентов и данных.
Внутренняя часть компонента – это программный фрагмент кода, системная или абстрактная структура, представленные в виде проекта компонента, спецификации и выходного кода.
Данная часть компонента состоит из полей (рис.6.1):
– интерфейса (interfaces),
– реализации (implementation),
– схемы развертки (deployment).
Структурные части компонента |
||
Интерфейс ¨ Один или несколько; ¨ Уникальность именования в пределах системы; ¨ Клиентский или серверный (входной или выходной); ¨ Определенная сигнатура; ¨ Описание методов взаимодействия |
Реализация ¨ Одна или несколько; ¨ Ориентация на конкретную платформу и операционное окружение ¨ Выбор конкретной реализации; ¨ Поддержка интерфейсов компонента |
Схема развертывания ¨ Типовость процедуры развертывания; ¨ Управляемость; ¨ Настраиваемость на операционную среду; ¨ Модифицируемость |
Рис.6.1. Структурные части компонента
Интерфейс компонента содержит обращения к другим компонентам через описание параметров средствами языков IDL или APL. В нем указываются типы данных и операции передачи параметров для взаимодействия компонентов друг с другом. Каждый компонент может реализовать совокупность интерфейсов. Интерфейс компонента – это видимая часть спецификации компонента, которая является неизменной и обязательной в описании компонента. Например, система Inspector Components предназначена для изменения необходимых параметров интерфейса компонента без вмешательства в его код.
Параметры интерфейса могут определяться типом ПИК и включать в себя инварианту спецификации с указанием: типа и названия компонента, входных и выходных параметров, методов компонента и др. В языке JAVA, например, можно определять такие типы компонентов: проекты, формы (AWT компоненты), beans компоненты, COBRA компоненты, RMI компоненты, стандартные классы-оболочки, БД, JSP компоненты, сервелети, XML документы, DTD документы и т.п.
Реализация – это код, который будет использоваться при обращении к операциям, определенным в интерфейсах компонента. Компонент может иметь несколько реализаций, например, в зависимости от операционной среды или от модели данных и соответствующей системы управления базами данных, которая необходима для функционирования компонента.
Развертка - это физический файл или архив, готовый к выполнению, который передается пользователю и содержит все необходимые инструкции для создания, настройки и функционирования компонента.
Компонент описывается в ЯП, не зависит от операционной среды (например, от среды виртуальной машины JAVA) и от реальной платформы (например, от платформ в системе CORBA), где он будет функционировать.
Расширением понятия компонента есть паттерн – абстракция, которая содержит описание взаимодействия совокупности объектов в общей кооперативной деятельности, для которой определены роли участников и их ответственность.Паттерн является повторяемой частью программного компонента, как схемы или взаимосвязи контекста описания решения проблемы.