Архитектура СОМ. Интерфейсы СОМ (общие сведения)

   
На этом шаге мы приведем общие сведения об интерфейсах.

   
Услуги Вашего СОМ-объекта доступны через один или несколько интерфейсов.
Интерфейс СОМ - это множество логически взаимосвязанных методов. Для его
идентификации служит GUID, именуемый идентификатором интерфейса (Interface Identifier, IID).
Компоненты СОМ часто описываются в терминах модели "клиент-сервер" в которой СОМ-сервер -
это компонент, предоставляющий свои услуги (методы) клиентским программам. В соответствии с этой моделью
интерфейс является описанием услуг, предоставляемых компонентом.

   
Доступ к предоставляемым интерфейсом методам Вы получаете через указатель на интерфейс, который содержит
ссылку на vtable, таблицу указателей на функции, каждый из которых позволяет обратиться к
отдельному методу интерфейса.

   
На рисунке 1 показан СОМ-сервер Encoder, предоставляющий три интерфейса.
IUnknown (его мы обсудим на следующем шаге) - обязательный интерфейс
любого СОМ-компонента. Интерфейсы IEncode и ICommunicate созданы для предоставления
услуг объекта Encoder. Рисунок 1 иллюстрирует нотацию, принятую по умолчанию для описания СОМ-компонентов.
Методы, предоставляемые интерфейсами, показаны слева от диаграммы.


Рис.1. Компоненты и интерфейсы

   
На рисунке 1 видно, что у компонентов и интерфейсов GUID различаются. Показанные здесь GUID - всего лишь
идентификаторы, передаваемые в коде препроцессорной директивой #define для обращения к различным типам GUID.
Как Вы узнаете позже, GUID - это большие шестнадцатеричные числа.

   
Интерфейс логически отделен от компонента, который его предоставляет, то есть один и тот же интерфейс иногда
предоставляет целое множество различных компонентов. Интерфейс похож на определение абстрактного класса в C++.
Уникальность интерфейса обеспечивается уникальностью его IID. Выпустив собственную спецификацию интерфейса,
Вы тем самым гарантируете любому его пользователю, что изменяться он не будет. Номера и порядок методов, так же как
и типы параметров и возвращаемых значений, обязательно останутся теми же. Желая добавить или изменить методы,
Вы обязаны определить новый интерфейс с другим IID.

   
Тот факт, что клиент получает интерфейс как указатель на таблицу функций (vtable), может навести на мысль,
что СОМ-объекты способны предоставлять только методы. Однако во многих языках, поддерживающих
СОМ (например Microsoft Visual Basic) существует понятие свойств - открытых членов-данных,
которые являются аналогами переменных-членов класса в C++. Компоненты, написанные в C++,
реализуют свойства как пары методов - задающих значение скрытых классом переменных и извлекающих информацию
из них.

   
На следующем шаге мы рассмотрим интрефейс IUnknown.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий