Компонентно-ориентированное программирование

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Парадигмы программирования
 • Императивная
(контрастирует с декларативной)
Процедурная
Структурная
Аспектно-ориентированная
Объектно-ориентированная
Агентно-ориентированная
Компонентно-ориентированная
Прототипно-ориентированная
Обобщённое программирование

 • Декларативная
(контрастирует с императивной)

Чистота языка
Чистота функции
Функциональная
В терминах Рефал-машины
Аппликативная
Комбинаторная
Бесточечная
(чистая конкатенативная)
Логическая
Ограничениями

 • Конкатенативная
 • Векторная[en]
 • Метапрограммирование

Языково-ориентированная
Предметно-ориентированная
Пользователями[en]
Автоматизация процесса программирования
Рефлексивность
Гомоиконность[en]

 • Связанные темы

Программирование в крупном и мелком масштабе[en]
Модульность
Полиморфизм
Продолжения и CPS
Параллелизм и конкурентность

 • Методы и алгоритмы

Автоматное
Динамическое
Потоков данных
Событийно-ориентированное
Реактивное
Сервис-ориентированное

Компонентно-ориентированное программирование (англ. component-oriented programming, COP) — парадигма программирования, существенным образом опирающаяся на понятие компонента — независимого модуля исходного кода программы, предназначенного для повторного использования и развёртывания и реализующегося в виде множества языковых конструкций (например, «классов» в объектно-ориентированных языках программирования), объединённых по общему признаку и организованных в соответствии с определёнными правилами и ограничениями.

Применение[править | править вики-текст]

Компонентно-ориентированное программирование, в применении к объектно-ориентированным языкам, подразумевает набор ограничений, налагаемых на объектные механизмы — и нацеленных, прежде всего, на повышение надёжности больших программных комплексов.

Пример: При применении «неограниченного» объектно-ориентированного подхода, характерна проблема «хрупких» базовых классов: ситуация, когда изменить реализацию типа-предка невозможно, не нарушив корректность функционирования типов-потомков (даже при прежних интерфейсах его методов)[1].

Решение: Компонентно-ориентированный подход, позволяющий через понятие «компонента» объединить в группу связанные конструкции и определяющий схемы и правила для них — позволяет избежать подобного рода проблем.

История[править | править вики-текст]

Компонентно-ориентированный подход появился в 1987 году[2], когда Никлаус Вирт предложил для языка «Оберон» паттерн написания блоков. Данный паттерн сформировался при изучении проблемы «хрупких» базовых классов, возникающей при построении объёмной иерархии классов. Паттерн заключался в том, что компонент компилируется отдельно от других, а на стадии выполнения — необходимые компоненты подключаются динамически.

В 1989 году[2]Бертран Мейер предложил идею единого взаимодействия между вызываемым и вызывающим компонентами. Эта идея воплотилась в виде готовых решений: CORBA, COM, SOAP. Впоследствии, поддержка со стороны языка осуществилась в «Компонентном Паскале».

Ситуация со внедрением компонентно-ориентированного подхода, — как ограничения для существующих парадигм программирования, — сходна с появлением структурного программирования, которое ограничивало неупорядоченные переходы управления с помощью оператора «GOTO» (затруднявшего анализ алгоритма программы для уже существующих языков и не привносившего новых конструкций).

Реализация в различных языках программирования[править | править вики-текст]

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

  • Существуют языки программирования, реализующие на конструктивном уровне компонентно-ориентированное программирование:
  • В рамках языка «Java» — компонентно-ориентированное программирование реализуется посредством компонентов, называемых «JavaBeans», поддержанных в одной из ранних спецификаций языка;
  • В платформе «.NET» — реализован компонентно-ориентированный подход, обеспечивающий создание и повторное использование компонентов для любого языка программирования, поддерживаемого платформой.

Примечания[править | править вики-текст]

Ссылки[править | править вики-текст]