Понятие компонента. Компонентные технологии
Термин компонент в ИТ-отрасли используется для обозначения различных понятий. Во-первых, можно выделить аппаратные (hardware components) и программные компоненты (software components).
Термин программный компонент (ПК) используется для обозначения 2-х связанных, но разных понятий. Если речь идет о программной архитектуре, то обычно под компонентом подразумевается программный модуль, реализующий некоторую функцию или набор функций и решает определенные подзадачи в рамках общих задач, решаемых системой. Это те компоненты, которые могут быть изображены на диаграммах компонентов (component diagram) в языке UML. Если речь идет о компонентных технологиях программирования или компонентно-ориентированной (component based) разработке программного обеспечения (ПО), то под ПК понимают объекты со специальными свойствами. В дальнейшем термин компонент будет употребляться во втором смысле.
В этом случае понятие ПК выступает в качестве в качестве ключевого для определения понятия таких понятий как компонентно-ориентированное программирование и компонентно-ориентированный подход к проектированию ИС.
Согласно [21], ПК представляет собой структурную единицу программной системы, обладающую четко определенным интерфейсом, который полностью описывает ее зависимости от контекста.
ПК представляет собой откомпилированный автономный программный модуль, который можно объединять с другими модулями или кодом, организованным другим способом с целью создания приложений. ПК могут быть как простыми, таким как кнопка или сложным, таким как компонент, реализующий управление сетью.
Чаще всего под ПК понимают откомпилированный «двоичный компонент», который можно интегрировать в приложение «на лету». При работе с компонентами исходный код обычно недоступен и поэтому компонент нельзя изменять. Под данное определение подпадают, в частности, динамические библиотеки.
Компонентно-ориентированное приложение обычно состоит из множества компонентов. Само приложение представляет собой некоторую среду, включающую средства «склеивания» или скелетный код, в который можно встраивать ПК, которые могут взаимодействовать со средой и операционной системой и друг с другом. Изменение интерфейса ПК приводит к изменению его кода, но изменение способа реализации не обязательно приводит к изменению интерфейса.
ПК можно рассматривать и как пакет, ориентированный на повторное использование кода, который можно приобрести у независимого производителя.
У некоторых авторов ПК – это элемент системы, который обладает явно определенной функциональностью и может быть заменен на другой ПК. И, наконец, ПК можно определить как физическую реализацию некоторого набора интерфейсов.
Из сказанного выше понятно, что не существует общепринятого определения понятие компонента, которое позволило бы определить, что является и что не является компонентом.
ПК можно рассматривать с трех точек зрения:
· реализуемой функциональности;
· реализации;
· исполняемого кода.
В первом случае речь идет об описании ПК в терминах реализуемых сервисов. Для этого обычно используются языки определения интерфейсов. Во втором случае описывается внутреннее устройство ПК. Для этого можно использовать, например, диаграммы классов. В третьем случае описывается функционирование ПК с учетом специфики платформы.
Возникает естественный вопрос о том, как соотносятся понятия ПК и объект. На данный вопрос имеются разные точки зрения. Крайние точки зрения выглядят следующим образом. Одна точка зрения состоит в том, что ПК – это объект со специальными свойствами. Другая – в том, что ПК и объект – это разные сущности, компонент не является объектом и представляет собой самостоятельную сущность. Наличие различных точек зрения определяется, с одной стороны, отсутствием общепринятого определение понятия ПК, а, с другой стороны, наличием разных различных компонентных технологий, которые существенно отличаются друг от друга с точки зрения используемых моделей компонентов.
Безусловно, ПК и объекты имеют много общего, но имеются и отличия.
Концептуальнообъект представляет собой элемент модели реального мира, который имеет уникальный идентификатор и описывает некоторый класс сущностей. Объект имеет состояние, которое хранится во внутренних переменных. Поведение объекта описывается через множество доступных методов. Состояние объекта может изменяться только посредством вызова его методов. На базе конкретного класса можно создавать произвольное число объектов. Объект может взаимодействовать другими объектами посредством вызова методов объекта-сервера, причем один и тот же объект может выступать как в качестве клиента, так и в качестве сервера.
Как ПК, так и объекты, поддерживают инкапсуляцию и доступ через «хорошо определенные интерфейсы». Обычно как объекты, так и ПК поддерживают «сильную» инкапсуляцию, при которой доступ к переменным (атрибутам) возможно только с использованием методов объектов. Как объекты, так и компоненты являются моделями объектов реального мира. Очевидно, что для моделирования объектов могут использоваться как объекты, так и ПК. Часто принято считать, ПК – это большие объекты, однако с этим трудно согласиться, поскольку объекты могут быть большими, а компоненты маленькими.
Типовой ПКобладает следующими свойствами:
· представляет собой фрагмент самодостаточного кода, т. е. для его функционирования не требуется наличия дополнительные библиотек;
· является самоустановливаемым модулем, который может быть включен в состав системы, исключен из ее состава или заменен на другой модуль, например, принадлежащий другому производителю, при минимальном участии пользователя;
· может повторно использоваться в различных контекста;
· при работе с ПК используются механизмы динамического связывания;
· можно объединять с другими ПК с целью создания более крупных ПК;
· пользователи используют ПК преимущественно по принципу черного ящика, т.е. пользователю известны только интерфейсы, но не внутренняя структура системы.
ПК может быть независимо поставлен или не поставлен, добавлен в состав некоторой системы или удален из нее, в том числе, может включаться в состав систем других поставщиков.
ПК можно определить как фрагмент самодостаточного, самоустанавливаемого кода, обладающий хорошо определенной функциональностью и имеющий четко определенные интерфейсы. ПК могут агрегатироваться с другими компонентами в более сложные системы. Компоненты и системы компонентов могут повторно использоваться в различных контекста. Пользователи используют компоненты преимущественно по принципу черного ящика, т.е. пользователю известны только интерфейсы, но не внутренняя структура ПК.
На основе выщеизложенного можно говорить о следующих основных различиях между компонентами и объектами.
- как ПК, так и объекты ориентированы на повторное использование кода, однако объекты ориентировано преимущественно на повторное использование на низком уровне, а ПК – на высокоуровневое повторное использование кода;
- ПК в большей степени ориентированы на интерфейсы, чем объекты;
- ПК разрабатываются в рамках конкретного фреймворка, а объекты в рамках конкретного языка программирования;
- объекты тесно связаны с конкретным языком программирования в то время как ПК в явном виде не связаны с конкретным языком программирования, но связаны с платформой, а платформа может быть связана с конкретным языком, например, JEE связана с Java.
Обычно объекты не являются автономными модулями, которые можно легко заменить на другие объекты, поскольку они, как правило имеют вложенные объекты, для выполнения процедуры замены объекта обычно требуется перекомпилировать приложение, а для замены компонента часто оказывается достаточным поместить файл, в котором находится исполняемый код, в заданное место и отредактировать конфигурационный файл [22].
Для функционирования ПК, как правило, необходимо наличие соответствующей инфраструктуры, которая позволяет компонентам находить друг друга и взаимодействовать по определенным правилам. Набор правил, определяющих интерфейсы ПК и их реализаций, а также правил, по которым ПК работают в системе и взаимодействуют друг с другом, называют компонентной моделью (component model)[23]. В компонентную модель входят также правила, регламентирующие жизненный цикл ПК. Взаимодействовать друг с другом могут только ПК, построенные в рамках одной модели.
Для работы ПК необходим некоторый набор базовых служб (basic services), которые обеспечивают, например, нахождение компонентов, в распределенной среде, обеспечение обмена данными через сеть.
Набор таких базовых, необходимых для функционирования большинства компонентов служб, вместе с поддерживаемой с их помощью компонентной моделью называется компонентной средой(или компонентным фрейворком, component framework).
Компонентные технологии можно рассматривать как одну из фаз развития технологий разработки распределенных систем, при этом можно выделить следующие основные фазы (Рис. 4.1):
· сокеты;
· вызов удаленных процедур;
· системы распределенных объектов;
· компонентные технологии;
· сервисно-ориентированные системы.
Рис. 4.1. Фазы развития технологий разработки распределенных систем
Перечисленные технологии появлялись именно в таком порядке. Переход к следующей фазе можно рассматривать как достижение некоторого уровня зрелости, поскольку технологии нижележащего уровня используются в качестве сервисов более низкого уровня. В частности, вызов удаленных процедур основывается на использовании сокетов, в системы распределенных объектов, в свою очередь, базируются на вызове удаленных процедур, компонентные технологии могут использовать такие механизмы как RMI, а веб-сервисы могут быть реализованы как компоненты.
Известно достаточно много различных компонентных технология. Некоторые из них остались на уровне теоретических исследования, однако ряд технологий активны используются на практике в течение уже многих лет. К последней группе можно отнести такие компонентно-ориентированные (component based) технологии как JavaBeans, EJB, CORBA, ActiveX, VBA, COM, DCOM, .Net компоненты. Принципиально мультиагентные технологии также можно рассматривать как разновидность компонентных технологий.
Дата добавления: 2018-09-24; просмотров: 1070;