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