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 Цифровой сертификат гарантирует лишь, что полученный код: разработан квалифицированным разработчиком, подписавшим его не был случайно поврежден или преднамеренно изменен