исследование возможностей com-технологии для построения

advertisement
Министерство образования и науки Украины
Донецкий национальный технический университет
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
Download