COM модель многокомпонентных объектов

advertisement
COM (Component Object Model) –
модель многокомпонентных
объектов
Наиболее распространенные схемы повторного
применения: библиотеки и объекты.
Недостатки динамических библиотек:
• сложность расширения функциональных
возможностей
• проблема установки в системе более одной
реализации одной и той же библиотеки
• не поддерживают объектно-ориентированный
подход
Проблемы использования объектов:
• отсутствие стандартов для компоновки двоичного
кода объектов
• несовместимость языков
• необходимость перекомпиляции всех приложений,
использующих объект при его изменении
История развития СОМ
• технология СОМ начала развиваться как технология
OLE (Object Linking and Embedding – связывание и
внедрение объектов).
• OLE появилась как одно из направлений развития
технологии обмена данными (DDE – Dynamic Data
Exchange).
• Первое воплощение OLE представляло собой
механизм создания и работы с составными
документами.
• В начале 1996 года Microsoft ввела в оборот новый
термин – ActiveX.
• Развитие технологии СОМ не остановилось,
следующим её поколением стала технология СОМ+.
• Сейчас фирма Microsoft работает над технологией
.NET.
Функционирование СОМ
• Основная цель технологии СОМ – обеспечение
возможности экспорта объектов. Идея экспорта
объектов заключается в том, что один модуль создает
объект, а другой его использует посредством
обращения к методам.
• Клиент получает доступ к сервисам объекта только
через интерфейс и его методы, непосредственного
доступа к объекту у них нет.
• Уже созданный интерфейс не может быть изменен
ни при каких обстоятельствах.
• Объект COM всегда реализуется внутри некоторого
сервера.
• Сервер СОМ представляет собой исполняемый файл.
Различают три типа серверов
• внутренний сервер (in-process server)
реализуется динамическими библиотеками,
которые подключаются к приложению-клиента и
работают в одном с ним адресном пространстве.
• локальный сервер (local server) создается
отдельным процессом, который работает на
одном компьютере с клиентом.
• удаленный сервер (remote server) создается
процессом, который работает на другом
компьютере по отношению к клиенту.
• Для обеспечения работы локальных и удаленных
серверов используется механизм маршалинга и
демаршалинга. Маршалинг реализует единый в
рамках СОМ формат упаковки параметров запроса,
демаршалинг отвечает за распаковку.
• Чтобы вызывать методы интерфейса объекта СОМ,
клиент должен получить указатель на этот
интерфейс. Для каждого интерфейса существует
собственный указатель.
• Любой объект СОМ является экземпляром
некоторого класса. Информация обо всех
зарегистрированных и доступных в данной
операционной системе классах СОМ собрана в
специальной библиотеке СОМ .
Схема работы с COM
1. Сначала клиент обращается к библиотеке СОМ,
передавая ей имя требуемого класса и необходимого
в первую очередь интерфейса
2. Библиотека при помощи диспетчера управления
службами (SCM – Service Control Manager)
обращается к системному реестру, по
идентификатору класса находит информацию о
сервере и запускает его
3. Сервер создает экземпляр класса – объект и
возвращает библиотеке указатель на запрошенный
интерфейс
4. После этого библиотека возвращает клиенту
указатели на объект и интерфейс
• После создания происходит инициализация –
объект должен загрузить необходимые данные,
считать настройки из системного реестра и т. д. За
это отвечают специальные объекты СОМ, которые
называются моникерами (monikers).
• Для запуска экземпляра класса используется
специальный объект – фабрика класса. Для
каждого класса должна существовать собственная
фабрика класса.
Объект COM
Каждый объект представляет собой экземпляр
соответствующего класса и содержит один или
несколько интерфейсов.
Объект имеет три основные характеристики:
• инкапсуляция
• наследование
• полиморфизм
Различают два способа наследования
• Наследование реализации - передача родителем
потомку всего программного кода.
• Наследование интерфейса - передача только
объявления методов, их программный код
потомок должен предоставить самостоятельно.
• Объекты СОМ используют механизм включения,
т. е. при необходимости потомок вызывает
нужный метод родителя.
• Также применяется механизм агрегирования,
когда один или несколько интерфейсов одного
объекта на время включаются в другой объект
путем передачи указателей.
Интерфейсы
Интерфейс является контрактом между
программистом и компилятором:
• программист обязуется реализовать все методы,
описанные в интерфейсе, и следовать требованиям
на реализацию некоторых из них;
• компилятор обязуется создать в программе
внутренние структуры, позволяющие обращаться к
методам этого интерфейса из любого
поддерживающего те же соглашения средства
программирования.
Объявление интерфейса включает в себя описание
методов и их параметров, но не включает
реализации методов.
Для идентификации каждый интерфейс имеет два
атрибута:
• имя
• глобальный уникальный идентификатор (GUID)
Интерфейс IUnknown
Каждый объект СОМ обязательно имеет интерфейс
IUnknown. Он содержит три метода:
• QueryInterface
• AddRef
• Release
• Метод QueryInterface возвращает указатель на
интерфейс объекта, идентификатор IID которого
передаётся в параметре метода. Если такого
интерфейса объект не имеет, метод возвращает
Null.
• AddRef и Release – механизм учёта ссылок.
Виртуальные таблицы
• Адреса методов хранятся в так называемой виртуальной
таблице (VTBL), создаваемой в адресном пространстве СОМсервера для каждого интерфейса
• Первые три члена VTBL – из состава интерфейса IUnknown, а
последующие относятся к другим поддерживаемым
интерфейсам
• VTBL содержит список адресов всех свойств и методов,
включенных в объект
• При компиляции вместо имени метода в код клиента
подставляется не адрес, а порядковый номер метода в VTBL.
Получение ссылки на интерфейс означает получение
соответствующего адреса VTBL
• Проблема доступа к интерфейсам объекта, находящимся в
чужом адресном пространстве, решается с помощью
маршаллинга
• При доступе с помощью VTBL клиентской программе
необходима библиотека типов
• Иногда встречаются ситуации, когда
связывание с помощью VTBL затруднительно
или не представляется возможным
▫ у пользователя компонента может
отсутствовать библиотека типов с описанием
интерфейсов
▫ вызов СОМ-объектов часто осуществляется из
программ, написанных на языках
интерпретируемого типа или на скриптовых
языках
• Для решения этой проблемы Microsoft был
разработан специальный интерфейс
IDispatch
Интерфейс IDispatch
• IDispatch — это интерфейс автоматизации
для контроллеров, не использующих
интерфейсы СОМ напрямую
• При доступе к объекту через интерфейс
IDispatch применяется отложенное
связывание – реальный доступ происходит во
время выполнения
Методы IDispatch
• GetIDsOfNames – отображает имя одного члена класса и,
по желанию, набор имен аргументов в соответствующий
набор целых идентификаторов связи, которые затем
можно использовать в вызовах метода Invoke
• GetTypeInfo – извлекает информацию о типах объекта
• GetTypeInfoCount – извлекает информацию о типах,
предоставляемых объектом (возвращает 0, если
информации о типах нет, и 1 – если есть)
• Invoke – предоставляет доступ к свойствам и методам
объекта
• Во время выполнения клиент передает строку с именем
свойства (метода), которое он хочет вызвать, методу
IDispatch.GetIDsOfNames
• Если данное свойство (метод) объекта существует, клиент
получает идентификатор соответствующей функции
• Затем его можно использовать для фактического вызова
свойства (метода) средствами метода IDispatch.Invoke
• Методы GetTypeInfoCount и GetTypeInfo позволяют
получать из библиотеки типов компонента информацию
об интерфейсах, методах и свойствах, которые он
поддерживает
Распределенная модель многокомпонентных
объектов
• Распределённая модель многокомпонентных
объектов (Distributed Component Object Model,
DCOM) – это протокол, обеспечивающий гибкое,
защищённое и эффективное взаимодействие
программных компонентов в сетевой среде
• Когда клиент и компонент хранятся на разных
машинах, DCOM просто заменяет локальный
механизм взаимодействия процессов сетевым
протоколом. Ни клиент, ни компонент не знают
о том, что соединение между ними стало гораздо
длиннее
Технологии ActiveX
• ActiveX – это основанная на СОМ технология,
предоставляющая в распоряжение
разработчика базовые строительные блоки
для создания Windows-приложений
• ActiveX применяют для создания элементов
управления, документов и компонентов,
предназначенных как для рабочего стола, так
и для работы в Интернете
• Компоненты ActiveX можно реализовать на
многих языках программирования
• Элементы управления ActiveX – это
объекты, допускающие повторное
использование и содержащие визуальные
элементы и код
• Они применяются в контейнерах и служат
для организации или обогащения средств
взаимодействия пользователя с
приложением
• Элементы управления ActiveX можно
встраивать в Web-страницы, но область их
применения не ограничена Интернетом
Элементы управления ActiveX и Интернет
• Инфраструктура ActiveX допускает
встраивание элементов управления в Webстраницы для интерактивной реакции на
происходящие события
• Элементы управления ActiveX для Интернета
оптимизированы по размеру и скорости и
поддерживают асинхронные соединения
Преимущества элементов управления ActiveX
для Интернета
1. упрощают и автоматизируют создание
страниц
2. обогащают средства отображения данных
3. расширяют функциональные возможности
страниц
Подпись кода ActiveX
• Microsoft и другие компании-производители
программного обеспечения разработали
безопасный и надежный способ
распространения программ по Интернету,
основанный на цифровой подписи кода
элементов управления ActiveX
• Цифровой сертификат гарантирует лишь, что
полученный код:
▫ разработан квалифицированным
разработчиком, подписавшим его
▫ не был случайно поврежден или
преднамеренно изменен
Download