Здравствуйте,при покупке печатной формы сертификата,будут ли выданы обе печатные сторны? |
Инженерия приложений и предметной области
9.2. Спецификация ПИК
В качестве ПИК могут быть объекты, созданные в рамках объектно-ориентированного программирования (например, огромная библиотека повторно используемых классов в С++) с наследованием их реализации. В компонентном программировании наследуется реализация компонента и его интерфейсы.
Пример ПИК - контейнерные классы, которые хранят структуры данных с правилами их запоминания или выдачи очередного элемента, входящего в контейнер. Механизм контейнеров реализован в С++ в виде так называемых шаблонов (templates) и их библиотек ПИК этого типа.
Каждый компонент имеет такие аспекты и свойства:
- связь компонентов через интерфейсы на этапах разработки системы;
- инкапсуляция компонента, как "черный ящик" без возможности вмешательства в выходной код);
- наследование интерфейсов, их изменение и настройка на применение;
- повторное использование исходного или выходного кода.
С общей точки зрения компонент определяется поразному в зависимости от среды и функций, приведем некоторые их них [9.1, 9.2].
Определение 1. ПИК - это некоторая функция с определенными атрибутами, обеспечивающая функциональность, взаимодействие со средой и поведение.
Определение 2. Готовый ПИК - это совокупность методов определенной сигнатуры и типов данных, которые передаются и возвращаются после выполнения метода.
Определение 3. Компонент типа ПИК - это самостоятельный программный элемент, который удовлетворяет определенным функциональным требованиям, требованиям архитектуры, структуры и организации взаимодействия в заданной среде, имеет спецификацию, помогающую пользователю его использовать и объединять с другими компонентами в интегрированную систему.
Определение 4. Программный компонент - это независимый от языка программирования, самостоятельно реализованный объект, который обеспечивает выполнение определенной совокупности прикладных сервисов, доступ к которым возможен только с помощью интерфейсов, указывающих функции и порядок обращения к нему операций.
Эти и другие определения приведены в публикациях, они отображают разные тонкости определения или использования компонента. Мы остановимся на двух последних определениях компонента, модель спецификации которого имеет следующий вид:
где - тип компонента,
- множество интерфейсов компонента;
- функциональность компонента;
- реализация, скрытая часть - программный код;
- сервис для взаимодействия со средой или набор правил развертывания.
Каждый из элементов спецификации компонента представляет собою видимую или скрытую от пользователя часть его абстракции.
В зависимости от сложности ПИК их можно разделить на следующие группы:
- простые компоненты (функция, модуль, класс и пр.);
- объектыкомпоненты, имеющие интерфейс, функцию и реализацию на любом ЯП, а также возможность дополнять спецификации шаблоном развертывания и интеграции;
- готовые к использованию ПИК (например, beans компоненты в Java, AWT компоненты, классы и др.);
- сложные ПИК типа каркасов, паттернов с элементами группирования нескольких простых ПИК в законченную функциональность и их взаимодействие между собой при решении одной общей задачи системы.
Большое количество готовых компонентов требует от разработчиков и пользователей задания метаинформации о том, какие классы совместимы с заведомо определенными семантическими ограничениями спецификации ПИК. Метаинформация включает информацию, касающуюся сведений относительно:
- интерфейсов, которые реализуют компоненты;
- механизмов повторного использования;
- среды развертывания компонента;
- сервиса, поддерживаемого компонентом;
- ролей, которые выполняют компоненты в системе;
- формализованных языков описания ПИК.
Современная технология применения ПИК базируется на таких особенностях:
- отображение способности ПИК анализировать самого себя и предоставлять свои возможности динамично во время выполнения, а не во время компиляции, т.е. управлять большинством свойств, событий и методов, встроенных в компонент;
- стандартизованное описание компонента для удобного анализа и понимания его посторонним лицом, а не самим разработчиком;
- способности обеспечивать изменения в нем, не затрагивая целевую направленность и добавления новых параметров;
- способности компонента к рефакторингу, т.е. к трансформации компонента с сохранением функциональности, но с возможным изменением структуры и исходного кода;
- сохранение параметров конфигурации (шаблонов отладки) в постоянной памяти для использования в нужное время;
- регистрация сообщений о событиях, полученных от других объектов через ссылки (например, beans компоненты и инструментарий поддержки архива в технологии JAVA), сообщения, а также группирование компонентов в JAR файле для дальнейшего повторного использования;
- использование компонента в разных языковых средах;
- адаптация ПИК к разным контекстам их использования и выделение свойств, которые мешают повторному использованию и модификации для применения в конкретных целях.Компоненты в отличие от объектов могут изменяться и пополняться новыми функциями и интерфейсами. Они конструируются в виде некоторой программной абстракции, состоящей из трех частей: информационной, внешней и внутренней.
Информационная часть содержит такие сведения: назначение, дата изготовления, условия применения (ОС, платформа и т.п.), возможности ПИК, тип среды окружения и др.
Внешняя часть - это интерфейс, который определяет взаимодействие компонента с внешней средой и с платформой, на которой он будет выполняться и включает характеристики типа:
- интероперабельность - способность взаимодействовать с компонентами других сред;
- переносимость - способность компонента выполняться на разных платформах компьютеров;
- интеграционность - объединение компонентов с помощью интерфейсов в более сложные структуры ПС;
- нефункциональность - требование к безопасности, надежности и защиты компонентов и данных.
Внутренняя часть компонента - это программный фрагмент кода, системная или абстрактная структура, представленные в виде каркаса компонента, спецификации и выходного кода (табл. 9.1). Данная часть компонента состоит из полей:
- интерфейса (interfaces);
- реализации (implementation);
- схемы развертки (deployment).
Интерфейс - компонента содержит обращения к другим компонентам через описание параметров средствами языков IDL или APL. В нем указываются типы данных и операции передачи параметров для взаимодействия компонентов друг с другом. Каждый компонент может реализовывать целую совокупность интерфейсов. Интерфейс - видимая неизменная и обязательная часть спецификации компонента. Например, система Inspector Components изменяет некоторые параметры интерфейса компонента без вмешательства в его код.
Параметры интерфейса определяются типом ПИК и включают инвариант спецификации с указанием типа и имени компонента, его входных и выходных параметров, методов компонента и др. В языке JAVA, например, типами компонентов могут быть: проекты, формы (AWT-компоненты), beans-компоненты, CORВA-компоненты, RMI-компоненты, стандартные классы-оболочки, БД, JSP-компоненты, сервелети, XML-документы, DTD-документы и т.п.
Свойства элементов структуры компонента | ||
---|---|---|
Интерфейс | Реализация | Схемы развертывания |
|
|
Реализация - это код, который будет использоваться при обращении к операциям, определенных в интерфейсах компонента. Компонент может иметь несколько реализаций, например, в зависимости от операционной среды или от модели данных и соответствующей системы управления базами данных, которая необходима для функционирования компонента.
Развертка - это физический файл или архив, готовый к выполнению, который передается пользователю и содержит все необходимые операции и инструкции для создания, настройки и функционирования компонента.
Компонент описывается в ЯП, которое не зависит от операционной среды (например, виртуальной машины JAVA) и от реальной платформы (например, в системе CORBA), где он будет функционировать.
Расширение понятия компонента есть паттерн - абстракция, которая содержит описание взаимодействия совокупности объектов в общей кооперативной деятельности, для которой определены роли участников и их ответственность. Паттерн - повторяемая часть программного компонента, его схема или взаимосвязь контекста описания пути решения проблемы.