Министерство образования и науки Украины Донецкий национальный технический университет III международная научно-техническая конференция молодых учёных и студентов “Информатика и компьютерные технологии 2007” ИССЛЕДОВАНИЕ ВОЗМОЖНОСТЕЙ COMТЕХНОЛОГИИ ДЛЯ ПОСТРОЕНИЯ РАСПРЕДЕЛЕННЫХ ПРОГРАММНЫХ ПРОДУКТОВ Выполнил: Селютин А.В. Научный руководитель: доцент Теплинский С.В. Component Object Model Донецк 2007 1 Введение COM – это объектно-ориентированная программная спецификация. Она указывает, как создать динамически взаимосвязанные двоичные компоненты. Технология COM определяет стандарт, которому должны следовать компоненты и клиенты, чтобы гарантировать возможность надёжной совместной работы. Компонент – дерево объектных классов, в котором каждый родительский класс может производить объекты своих потомков. Компонент COM состоит из исполняемого кода, распространяемого в виде DLL. Интерфейс – абстрактный класс, который описывает методы и свойства объекта. Наследуется от IUnknown. Монолитное приложение Компонентное приложение A B C D E 2 COM-объект – это объект CoClass, который является классом, реализующим один или более интерфейсов. COM-объект предоставляет функции, которые доступны через указатель на один из его интерфейсов. COM-сервер – это приложение, или библиотека, предоставляющее определенный набор сервисных функций для клиентских приложений или библиотек. COM-сервер состоит из COM-объектов. Все взаимодействия между клиентом и сервером осуществляется через указатели на интерфейс сервера. COM-сервер может быть следующих типов: внутренний сервер, локальный сервер, удаленный сервер. IUnknown IUnknown IClassFactory IZero1 IOne1 CTest1 CFactory ITwo1 DLL 3 Требования к компонентам COM Динамическая компоновка (т.е. замена компонент во время работы приложения без статической перекомпоновки или перекомпиляции) Инкапсуляция деталей реализации: Компонент скрывает используемый язык программирования. Распространение компонент в двоичной форме. Модернизация компонентов не затрагивающая клиента. Прозрачная перемещаемость компонентов по сети. Требования к интерфейсам COM Методы интерфейса абстрактны (чисто определены). Интерфейс подчиняется двоичному стандарту, включает в себя определённую функциональность. Интерфейс имеет IID (GUID). Интерфейс не может изменяться после регистрации в системе (данные об интерфейсе записываются в реестр Windows). Наследует функциональность от одного базового предка – IUnknown. 4 Внутренняя структура интерфейса COM Указатель на интерфейс Указатель на VTable Указатель 1 Метод 1 Указатель 2 Метод 2 Указатель N Метод N VTable Первые 3 указателя VTable любого интерфейса в COM – это QueryInterface, AddRef и Release, унаследованные от IUnknown. 5 Фабрика классов Фабрика классов (Class Factories) – это компонент, единственной задачей которого является создание других компонентов. Точнее, конкретная фабрика класса создает компоненты, соответствующие только одному конкретному CLSID. Клиент использует поддерживаемые фабрикой класса интерфейсы для управления тем, как фабрика класса создает каждый компонент. Стандартный интерфейс создания компонентов – IClassFactory. Компоненты, создаваемые CoCreateInstance, порождаются именно при помощи этого интерфейса. IUnknown IClassFactory CFactory 6 Создание объекта сервера на локальной машине Клиент запрашивает интерфейс IZero1 IUnknown 6 Client IZero1 4 CoCreateInstance(IID_IZero1) 1 Указатель pIZero1 IOne1 CTest1 ITwo1 Библиотека COM Server Библиотека COM запрашивает реестр 3 Сервер запускается в соответствии с записью из реестра 2 5 IID_IZero1= Windows Registry IID_IZero1 {0x32bb8320, 0xb41b, 0x11cf, {0xa6, 0xbb, 0x0, 0x80, 0xc7, 0xb2, 0xd6, 0x82}}; IID_IOne1= IID_IOne1 {0x32bb8321, 0xb41b, 0x11cf, {0xa6, 0xbb, 0x0, 0x80, 0xc7, 0xb2, 0xd6, 0x82}}; IID_ITwo1= IID_ITwo1 {0x32bb8322, 0xb41b, 0x11cf, {0xa6, 0xbb, 0x0, 0x80, 0xc7, 0xb2, 0xd6, 0x82}}; 7 Взаимодействие клиента и сервера в разных процессах Процесс клиента Процесс сервера IUnknown Proxy (Внутрипроцессный прокси) IUnknown COM RPC Stub (Заглушка) CTest1 Client Разница между внутренним и удаленным серверами в том, какой тип межпроцессной связи используется. В данном случае существует необходимость использования посредников, которые обеспечивают передачу параметров и вызов функций. Такой механизм называется маршаллингом (marshalling). 8 Изменения в реестре В рамках объекта COM для обеспечения работоспособности сервера необходимо создать несколько функций по обращению в реестр. Эти функции создают необходимую для сервера ветку и задают параметры для COM-объекта, изменяя несколько важных ключей: ProgID - программый идентифиактор (programmatic identifier) <Программа>.<Компонент>.<Версия> 9 Достоинства COM Динамичное приложение. Эволюция приложения с течением времени. Адаптация приложений к нуждам пользователя, библиотекам компонентов и распределённым компонентам. Быстрая разработка приложений благодаря готовым компонентам. Клиент-серверное компонентное приложение. Решение объектной парадигмы ООП. Недостатки COM Сложность изучения и разработки крупных приложений!!! Программист-разработчик собственноручно должен следить за вызовом метода Release(). Не все типы данных участвуют в маршаллинге, что приводит к неудобству (напр. массив переводить в строку, а затем его обратно распаковывать). Лень программистов (можно отнести и к достоинствам технологии). 10