![]() |
![]() |
![]() |
Модель программирования COM
Любой программный продукт представляет собой набор данных и функций, которые как-то используют, обрабатывают эти данные. Этот принцип, как вы знаете, лежит в основе ООП. Там класс инкапсулирует данные и методы, которые служат для управления ими. Сходный принцип используется и в модели программирования СОМ. СОМ-объектом (или OLE-объектом) называется такой программный продукт, который обеспечивает доступ к данным с помощью одного или нескольких наборов функций, которые называются интерфейсами.
В отличие от
ООП, которое рассматривает интеграцию классов на уровне исходных модулей — текстов
программ, СОМ рассматривает интеграцию компонентов на двоичном уровне, то есть
на уровне исполняемых модулей. Цель — многократное использование удачно разработанных
компонентов именно на этом уровне. Двоичный уровень дает независимость от аппаратной
архитектуры и языков программирования (взамен порождая массу других проблем).
Двоичный стандарт взаимодействия позволяет СОМ-объектам, разработанным разными
поставщиками и на разных языках, эффективно взаимодействовать друг с другом.
С практической точки зрения СОМ — это набор системных библиотек (DLL-файлов),
которые дают возможность разным приложениям, выполненных с учетом требований
СОМ, взаимодействовать друг с другом. Исторически сложилось так, что СОМ состоит
из нескольких различных технологий, которые пользуются услугами друг друга для
формирования объектно-ориентированной системы. Каждая технология реализует определенный
набор функций.
Преимуществами
двоичных компонентов являются: взаимозаменяемость, возможность многократного
использования, возможность параллельной разработки с последующей сборкой в одном
проекте. Недостатки СОМ настолько очевидны, что я не буду их перечислять. Вы
почувствуете их в тот момент, когда начнете
самостоятельно
разрабатывать
свой первый СОМ-объект. Приведем далеко не полный список литературы, который
поможет более детально разобраться в технологии СОМ.
-
Kraig Brockschmidt. Inside
OLE 2nd Edition, MSDN, Books.
-
Адам Деннинг. ActiveX
для профессионалов. — СПб.: Питер, 1998.
-
Д. Бокс. Сущность технологии
СОМ. Библиотека программиста. — СПб.: Питер, 2001.
-
С. Холзнер. Visual C++6:
учебный курс. — СПб.: Питер, 2001.
-
Д. Круглински, С. Уингоу,
Дж. Шеферд. Программирование на Microsoft Visual C++ для профессионалов. —
СПб.: Питер, 2001.
- Д. Эпплман. Win32 API и Visual Basic. Для профессионалов (+CD). — СПб.: Питер, 2001.
СОМ реализует модель «клиент-сервер». Объекты, называемые серверами, предоставляют набор функций в распоряжение других объектов, называемых клиентами, но СОМ-объект может быть одновременно и клиентом, и сервером. Серверы всегда подчиняются спецификациям СОМ, в то время как клиенты могут быть как СОМ-объектами, так и не быть таковыми. Поставщик СОМ-объектов (сервер) делает объекты доступными, реализуя один или множество интерфейсов. Пользователь СОМ-объектом (клиент) получает доступ к объекту с помощью указателя на один или множество интерфейсов. С помощью указателя клиент может пользоваться объектом, не зная даже как он реализован и где он находится, но быть при этом уверенным, что объект всегда будет вести себя одинаково. В этом смысле интерфейс объекта представляет собой некий контракт, обещающий клиенту надежное поведение, несмотря на язык и местоположение клиента. Благодаря этому решается проблема бесконечных обновлений версий сервера. Новая версия сервера просто добавляет новые интерфейсы, но никогда не изменяет старых. Клиент может либо пользоваться новым интерфейсом, если он о нем знает, либо не пользоваться им, а вместо этого пользоваться старым. Добавление новых интерфейсов никак не влияет на работу клиентов, работающих со старыми. Кроме того, как нас уверяет документация, двоичный уровень делает компоненты независимыми от платформы клиента.
![]() |
![]() |
![]() |