Селютин А.В., Теплинский С.В.
Донецкий национальный технический университет.
Исследование возможностей COM-технологии для построения распределённых программных продуктов.
Тезисы доклада на III международной научно-технической конференции молодых учёных и студентов "Информатика и компьютерные технологии 2007", Донецк, ДонНТУ, 12 декабря 2007 г.


Исследование возможностей COM-технологии для построения распределённых программных продуктов

В этом докладе кратко рассматривается технология COM (Component Object Model), которая имеет широкое применение при разработке ПО и интеграции программных продуктов в единые информационные системы. Особенность данной технологии в стандартизированном взаимодействии программных модулей (компонент) между собой, которые выполнены на двоичном уровне. Технология COM - масштабируема, что позволило на её базе создать целый ряд разнообразных технологий, таких как ActiveX, OLE Automation, DCOM и др.

Что же такое COM? COM - это объектно-ориентированная программная спецификация. Она указывает, как создать динамически взаимосвязанные двоичные компоненты. Технология COM определяет стандарт, которому должны следовать компоненты и клиенты, чтобы гарантировать возможность надёжной совместной работы [1]. Данная технология не определяет структуру программного продукта, язык программирования и прочие детали реализации.

Компоненты COM состоят из исполняемого кода, распространяемого в виде динамически компонуемых библиотек (DLL) или EXE-файлов Win32. Компоненты, написанные в соответствии со стандартом COM, удовлетворяют всем требованиям компонентной архитектуры. Компонент представляет собой дерево объектных классов.

Программный объект, созданный согласно спецификации COM называется COM-объектом. COM относится к так называемым двоичным стандартам, так как прилагается к оттранслированному в двоичный код программному объекту. Взаимодействие COM-объектов обеспечивается набором предопределенных подпрограмм, называемых интерфейсами. Доступ к интерфейсам обеспечивается через уникальные идентификаторы интерфейсов IID (Interface Identifier), которые являются разновидностью GUID (Globally Unique Identifier), уникальность которых, в свою очередь, гарантирует операционная система [2]. Такой механизм схож с использованием указателей при доступе к объектам в объектно-ориентированных языках программирования, что дает возможность прозрачного управления объектами, так как доступ к ним обеспечивается через указатели. COM-технология расширяет этот механизм, перенося применение указателей (в виде GUID) для доступа к объектам на уровень операционной системы. Таким образом, COM-объекты могут быть прозрачно модифицироваться друг для друга, так как доступ к объектам обеспечивается через GUID. COM технология включает в себя также библиотеку, в которой содержится набор стандартных интерфейсов, которые определяют ядро функциональности COM, и небольшой набор API функций, разработанных для создания COM-объектов и управления ими.

В COM-технологии различаются следующие строительные блоки, используемые для создания объектов: интерфейс, объект, сервер, фабрика классов, библиотека типов, механизм автоматизации.

Интерфейсы являются основными строительными единицами COM и обеспечивают некоторые функциональные возможности, которые являются общими для многих объектов. Они объединяются в семантически связанные группы подпрограмм, через которые COM-объекты осуществляют взаимодействие. Существует ряд ограничений со стороны COM на интерфейсы: методы интерфейса абстрактны (чисто определены), интерфейс подчиняется двоичному стандарту, включает в себя определённую функциональность, имеет IID, интерфейс не может изменяться после регистрации в системе, наследует функциональность от одного базового предка - IUnknown.

COM-объект - это объект CoClass, который является классом, реализующим один или более интерфейсов. COM-объект предоставляет функции, которые доступны через указатель на один из его интерфейсов.

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

Разница между внутренним и удаленным серверами в том, какой тип межпроцессной связи используется. В данном случае существует необходимость использования посредников, которые обеспечивают передачу параметров и вызов функций. Такой механизм называется маршаллингом (marshalling).

Фабрики или производители классов (class factories) - специальный тип COM-объектов, используемый для создания и регистрации других COM-объектов. Фабрики классов реализуют стандартный механизм создания объектов COM-классов. Классы без идентификаторов класса (CLSID) и фабрики классов могут быть созданы посредством вызова конструктора. Использование фабрики классов для создания объектов означает, что для клиентского приложения, которому необходимо создать объект класса, не нужно знать об этом классе ничего, кроме его идентификатора CLSID. Фабрика классов возьмет вызов конструктора на себя, включая передачу аргументов в конструктор и остальные специфичные действия.

Библиотека типов (type library) предоставляет информацию об используемых типах объектов и интерфейсах, которые предоставляются сервером. Библиотека типов по смыслу аналогична, например, заголовочному файлу (header) для разработок на языке C и любому другому модулю, содержащему информацию об используемых типах данных и объектах. Большинство информации подобного рода может быть записано в библиотеку типов. Получить информацию из библиотеки типов можно путем опроса запущенного объекта или же посредством загрузки непосредственно библиотеки типов.

Автоматизация представляет собой стандартный механизм, позволяющий осуществлять независимое от языка взаимодействие программных модулей. Чтобы удовлетворять этому важному требованию, большая часть СОМ-компонентов поддерживает автоматизацию как метод предоставления функциональных возможностей. Автоматизация поддерживается посредством СОМ-интерфейса IDispatch, который предоставляет целый набор методов, позволяющих приложению клиента динамически осуществлять доступ к функциональным возможностям сервера. Описание интерфейсов СОМ-объектов происходит с помощью задания информации о типах. Файл, содержащий эту информацию, создается с использованием языка определения интерфейса (IDL) Microsoft и компилируется MIDL-компилятором. При этом создается двоичная библиотека типов, которая затем передается вместе с компонентом [3].

Рассматривая методику построения распределённых приложений, можно выделить достоинства и недостатки технологии COM. К достоинствам относят: приложение COM является динамичным, поддерживается возможность эволюции приложения с течением времени, адаптация приложения к нуждам пользователя, быстрая разработка приложений благодаря готовым компонентам, клиент-серверное компонентное приложение. Недостатками COM являются: сложность самой технологии и применение её для простых задач, которые требуют более простого решения. Таким образом, если возникают проблемы при разработке ПО, направленного на межпроцессорное взаимодействие и создание библиотек, доступных из VBScript, JavaScript, внутреннего языка 1С предприятия, MBS Axapta X++ и других сложных с точки зрения ООП реализации задач, тогда есть необходимость использования технологии COM.


Литература

[1]       Donald Box. Essential COM. Addison Wesley Longman, Inc., 1998
[2]       Джесс Либерти. C++. Энциклопедия пользователя. ДиаСофт, 2001
[3]       Сайт для разработчиков: http://www.rsdn.ru/


Селютин А.В., Теплинский С.В.
Донецкий национальный технический университет.
Исследование возможностей COM-технологии для построения распределённых программных продуктов.
Тезисы доклада на III международной научно-технической конференции молодых учёных и студентов "Информатика и компьютерные технологии 2007", Донецк, ДонНТУ, 12 декабря 2007 г.