Программный компонент
Программный компонент — это элемент архитектуры программного обеспечения, представляющий собой часть программы, которая может взаимодействовать с другими частями программного обеспечения согласно правилам компонентной модели.
Определение
Термин «компонент» происходит от латинского componere («составлять»). В программной инженерии понятие компонента употребляется в различных смыслах. Часто это слово ошибочно используется как синоним модуля, что подчеркивает схожесть обоих понятий (см. раздел «Компонентные интерфейсы»).
В 1996 году на Европейской конференции по объектно-ориентированному программированию (ECOOP) программный компонент был определён следующим образом:
- «Программный компонент — это элемент сборки с контрактно определёнными интерфейсами и исключительно явно заданными контекстными зависимостями. Программный компонент может распространяться независимо и использоваться третьими сторонами в их собственных сборках.»[1]
В более общем виде и в контексте нового подхода компонентно-ориентированной разработки можно дать другое определение компонента:
- «Программный компонент — это программный элемент, соответствующий компонентной модели и способный без изменений связываться и выполняться с другими компонентами в соответствии со стандартом композиции.»[2]
Таким образом, компонент характеризуется тем, что он является элементом компонентного приложения и имеет определённые интерфейсы для взаимодействия с другими компонентами. Конкретный вид компонента зависит от применяемой компонентной модели.
Компонентные интерфейсы
Интерфейс компонента — это определённый контракт (англ. interface) между компонентом и остальной частью программного обеспечения. Интерфейс можно рассматривать как договор между компонентом и программной системой. Благодаря явному описанию контекстных зависимостей становится ясно, насколько компонент независим от окружающей среды.
Интерфейсы и чётко определённые условия контекста обеспечивают повторное использование компонента. Чем меньше контекстных зависимостей у компонента, тем меньше требований нужно соблюдать для его применения. Следовательно, чем меньше зависимостей, тем проще повторное использование; в то же время низкая степень зависимости позволяет независимо развивать и сопровождать компонент. Однако высокая независимость компонентов зачастую приводит к появлению избыточности — разработчику приходится искать компромисс.
Интерфейс компонента можно сравнить с контрактом между компонентом и программной системой. Интерфейс задаёт, как компонент может быть повторно использован, и определяет, как другие компоненты могут с ним взаимодействовать.
Компоненты, расширяющие функциональность программного обеспечения, часто называют дополнением (add-on), модулем или плагином, хотя обратное не всегда верно. Например, набор математических функций может называться модулем; при этом модуль может быть полностью независимым в своей реализации, но если у него нет стандартного интерфейса, он не соответствует определению программного компонента.
Могут выделяться различные типы интерфейсов. Примеры разных видов интерфейсов компонентов:
- Графический пользовательский интерфейс (GUI), также известный как человеко-машинный интерфейс (HMI): позволяет пользователю взаимодействовать с компонентом с помощью графического интерфейса (например, мышь, экран).
- Командная строка (CLI): особенно актуальна, когда компоненты должны вызываться системой без участия пользователя, например, для выполнения повторяющихся задач по расписанию; взаимодействие — через ввод команд в терминал.
- Данные-интерфейсы: позволяют компоненту читать и записывать собственные данные; обычно к такому интерфейсу обращаются из внутреннего кода программы.
- Программный интерфейс (API): предоставляет программисту или другим компонентам доступ к функциональности и сервисам компонента через программные вызовы. В дальнейшем под интерфейсом чаще всего подразумевается именно API компонента.
Один компонент может иметь несколько интерфейсов одного типа — например, чтобы интегрироваться в разные системы, что расширяет возможности повторного использования.
Преимущества и польза
Разработка компонентов направлена на снижение издержек и повышение гибкости в разработке продуктов[3]. Возросшие затраты на создание компонента окупаются за счет его повторного использования. Использование компонентов ускоряет процесс разработки, поскольку в идеале сводится к их компоновке и настройке (см. также модульность).
Компоненты могут содержать ошибки. Отсюда вытекает ещё одно требование: независимость компонента означает, что он должен самостоятельно обрабатывать свои ошибки, становясь замкнутой единицей[4]. В случае ошибки её легче локализовать. Исключение из этого правила возможно только тогда, когда соответствующее поведение оговорено контрактом интерфейса. Таким образом, ошибка в компоненте не приводит к некорректной работе всей системы компонентов, поскольку поведение определено контрактом. Всё это также способствует снижению расходов на поддержку и разработку.
Формы повторного использования
В зависимости от формы повторного использования программные компоненты условно делятся на следующие типы:
- blackbox
- Чёрный ящик — компонент интегрируется как полностью готовая и неделимая сущность; его нельзя изменить, сведения о реализации и внутренней структуре отсутствуют. Использование строится исключительно на основе его интерфейсов и спецификаций.
- whitebox
- Белый ящик — компонент предназначен для модификации; сведения о внутренней структуре доступны для анализа и доработки, что позволяет адаптировать его к новым требованиям. Использование происходит не только через интерфейсы, но и через изучение реализации.
- greybox
- Промежуточные формы между blackbox и whitebox.
Компоненты на этапе разработки
Компоненты могут интегрироваться в интегрированную среду разработки и демонстрировать свои свойства и поведение уже на стадии программирования, что существенно облегчает работу программиста, поскольку позволяет заранее увидеть, как будет выглядеть и функционировать компонент.
Именно использование готовых компонентов делает возможной ускоренную разработку программного обеспечения.
Реализации
По мнению специалистов, компонентные технологии в программном обеспечении являются краеугольным камнем программных разработок ближайших лет[4]. Существует несколько стандартов; помимо CORBA, большинство из них являются специфичными для конкретных языков программирования, приложений или платформ, формируя так называемые компонентные миры или рынки. Примеры таких миров:
- Microsoft (.NET Framework, .NET, COM, DCOM, OLE, ActiveX, COM+)
- Object Management Group (CORBA)
- Sun Microsystems (JavaBeans, серверлеты, апплеты, Enterprise JavaBeans)
- OSGi Alliance (OSGi)
Для компонентно-ориентированной разработки существуют специальные интегрированные среды разработки и языки программирования, например:
- Advanced Component Framework
- BlackBox Component Builder
- Component Pascal
Примечания
- ↑ Szyperski, Clemens. Component Software — Beyond Object-Oriented Programming : [англ.]. — Addison-Wesley, 2002. — P. 41. — ISBN 0-201-74572-0.
- ↑ Councill, William T. Component-Based Software Engineering : [англ.] / William T. Councill, Heineman, George T.. — Addison-Wesley, 2001. — ISBN 0-201-70485-4.
- ↑ Dumke, Reiner. Software Engineering : [нем.]. — 4. — Friedr. Vieweg & Sohn Verlagsgesellschaft/GWV Fachverlage GmbH, 2003.
- ↑ 1 2 Open Source – kurz & gut (нем.). O’Reilly (2002). Дата обращения: 15 июня 2024. Архивировано 2 февраля 2020 года.
Литература
- Олаф Цвинтцшер. Обзор программных компонентов. W3L, 2004. ISBN 3937137602.
- Клеменс Шиперски. Программное обеспечение-компоненты — за пределами объектно-ориентированного программирования. Второе издание, 2002. ISBN 0-201-74572-0.
- M. D. McIlroy. Mass produced software components // Software Engineering, Report on a conference sponsored by the NATO Science Committee, Garmisch, Germany, 7th to 11th October 1968. 1969. С. 138–155. Текст (англ.)
Ссылки
- Components, Remoting Middleware and Webservices – how it all fits together (англ.). voelter.de. Дата обращения: 15 июня 2024. Архивировано 30 октября 2012 года.
- UML Components (англ.). syntropy.co.uk. Дата обращения: 15 июня 2024.
- Web-сервисы как компоненты: дипломная работа о программных компонентах в веб-приложениях (нем.). schwinkendorf.info. Дата обращения: 15 июня 2024.