Интерфейс

Объект.

Центральным элементом СОМ является объект. Приложения, поддерживающие СОМ, имеют в своем составе один или несколько объектов СОМ. Каждый объект представляет собой экземпляр соответствующего класса и содержит один или несколько интерфейсов, т.е. является переменной объектного типа. Как и любому объекту, объекту СОМ присущи три основные характеристики: инкапсуляция, наследование и типизация (полиморфизм).

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

Объект СОМ может иметь любое число интерфейсов, причем каждый интерфейс обладает собственным указателем. Это первое отличие объектов СОМ от обычных. У объектов СОМ имеется еще одна особенность в объектном механизме – наследовании. Вообще различают два способа наследования. Наследование реализации подразумевает передачу родителем потомку своего программного кода. Наследование интерфейса означает передачу только объявления методов, их программный код потомок должен предоставить самостоятельно.

Объекты СОМ поддерживают только наследование интерфейса, избегая тем самым возможного нарушения инкапсуляции родителя. Тем не менее, просто так выбросить наследование из реализации нельзя. Вместо нее объекты СОМ используют механизм включения, т.е. при необходимости потомок вызывает нужный метод родителя. Также применяется механизм агрегирования, когда один или несколько интерфейсов одного объекта включаются в другой объект путем передачи указателей.

Таким образом, объект СОМ с точки зрения ООР несомненно является объектом. Однако, как ключевой элемент технологии СОМ, он обладает рядом особенностей реализации.

Интерфейс.

Если объект СОМ является ключевым элементов реализации СОМ, то интерфейсы являются центральным звеном идеологии СОМ. Как двум принципиально разным объектам обеспечить взаимодействие друг с другом? ответ прост: им необходимо заранее договориться о том, как они будут общаться. Интерфейс является тем средством, которое позволяет клиенты правильно обратиться к объекту СОМ, а объекту СОМ ответить так, чтобы клиент его понял.

Для идентификации каждый интерфейс имеет два атрибута. Во-первых, это его имя, составленное в соответствии с правилами используемого языка программирования. Каждое имя должно начинаться с символа «I». Это имя используется в программном коде. Во-вторых, это глобальный уникальный идентификатор (GUID), который представляет собой гарантированно уникальное сочетание символов, практически не повторяемое ни на одном компьютере в мире. Для интерфейсов такой идентификатор носит название IID.

В общем случае клиент может не знать какие интерфейсы имеются у объекта. Для получения их перечня используется базовый интерфейс IUnkown, который есть у любого объекта СОМ.

Затем клиенту необходимо знать, какие методы имеет выбранный им интерфейс. Для этого разработчик должен распространять описание методов интерфейсов вместе с объектом. Эту задачу помогает решить зык IDL (он также используется в библиотеках всех типов). Его синтаксис очень похож на С++.

Для правильного вызова метода объекта СОМ используется реализация интерфейса на основе стандартного двоичного формата. Это обеспечивает независимость от языка программирования (СЛАЙД 3).

Доступный клиенту указатель интерфейса ссылается на внутренний указатель объекта и, через него, на специальную виртуальную таблицу. Эта таблица содержит указатели на все методы интерфейса. При этом первые три строки всегда заняты под методы интерфейса IUnkown, т.к. любой интерфейс СОМ является его наследником.

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: