1 ИССЛЕДОВАНИЕ ВОЗМОЖНОСТЕЙ COM- ТЕХНОЛОГИИ ДЛЯ ПОСТРОЕНИЯ РАСПРЕДЕЛЕННЫХ ПРОГРАММНЫХ ПРОДУКТОВ Component Object Model Министерство образования и науки Украины Донецкий национальный технический университет III международная научно-техническая конференция молодых учёных и студентов Информатика и компьютерные технологии 2007 Выполнил: Селютин А.В. Научный руководитель: доцент Теплинский С.В. Донецк 2007
2 Введение COM – это объектно-ориентированная программная спецификация. Она указывает, как создать динамически взаимосвязанные двоичные компоненты. Технология COM определяет стандарт, которому должны следовать компоненты и клиенты, чтобы гарантировать возможность надёжной совместной работы. Компонент – дерево объектных классов, в котором каждый родительский класс может производить объекты своих потомков. Компонент COM состоит из исполняемого кода, распространяемого в виде DLL. Интерфейс – абстрактный класс, который описывает методы и свойства объекта. Наследуется от IUnknown.
3 COM-объект – это объект CoClass, который является классом, реализующим один или более интерфейсов. COM-объект предоставляет функции, которые доступны через указатель на один из его интерфейсов. COM-сервер – это приложение, или библиотека, предоставляющее определенный набор сервисных функций для клиентских приложений или библиотек. COM-сервер состоит из COM-объектов. Все взаимодействия между клиентом и сервером осуществляется через указатели на интерфейс сервера. COM-сервер может быть следующих типов: внутренний сервер, локальный сервер, удаленный сервер.
4 Требования к компонентам COM Динамическая компоновка (т.е. замена компонент во время работы приложения без статической перекомпоновки или перекомпиляции) Инкапсуляция деталей реализации: Компонент скрывает используемый язык программирования. Распространение компонент в двоичной форме. Модернизация компонентов не затрагивающая клиента. Прозрачная перемещаемость компонентов по сети. Требования к интерфейсам COM Методы интерфейса абстрактны (чисто определены). Интерфейс подчиняется двоичному стандарту, включает в себя определённую функциональность. Интерфейс имеет IID (GUID). Интерфейс не может изменяться после регистрации в системе (данные об интерфейсе записываются в реестр Windows). Наследует функциональность от одного базового предка – IUnknown.
5 Внутренняя структура интерфейса COM Первые 3 указателя VTable любого интерфейса в COM – это QueryInterface, AddRef и Release, унаследованные от IUnknown.
6 Фабрика классов Фабрика классов (Class Factories) – это компонент, единственной задачей которого является создание других компонентов. Точнее, конкретная фабрика класса создает компоненты, соответствующие только одному конкретному CLSID. Клиент использует поддерживаемые фабрикой класса интерфейсы для управления тем, как фабрика класса создает каждый компонент. Стандартный интерфейс создания компонентов – IClassFactory. Компоненты, создаваемые CoCreateInstance, порождаются именно при помощи этого интерфейса.
7 Создание объекта сервера на локальной машине
8 Взаимодействие клиента и сервера в разных процессах Разница между внутренним и удаленным серверами в том, какой тип межпроцессной связи используется. В данном случае существует необходимость использования посредников, которые обеспечивают передачу параметров и вызов функций. Такой механизм называется маршаллингом (marshalling).
9 Изменения в реестре В рамках объекта COM для обеспечения работоспособности сервера необходимо создать несколько функций по обращению в реестр. Эти функции создают необходимую для сервера ветку и задают параметры для COM-объекта, изменяя несколько важных ключей: ProgID - программый идентифиактор (programmatic identifier) -..
10 Достоинства COM Динамичное приложение. Эволюция приложения с течением времени. Адаптация приложений к нуждам пользователя, библиотекам компонентов и распределённым компонентам. Быстрая разработка приложений благодаря готовым компонентам. Клиент-серверное компонентное приложение. Решение объектной парадигмы ООП. Недостатки COM Сложность изучения и разработки крупных приложений!!! Программист-разработчик собственноручно должен следить за вызовом метода Release(). Не все типы данных участвуют в маршаллинге, что приводит к неудобству (напр. массив переводить в строку, а затем его обратно распаковывать). Лень программистов (можно отнести и к достоинствам технологии).