Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Высокоуровневые методы информатики и программир...docx
Скачиваний:
25
Добавлен:
12.11.2019
Размер:
6.53 Mб
Скачать

4.8. Технология применения объектов com, dcom

Объект COM (Component Object Model) представляет собой объект (EXE или DLL‑файл) со свои­ми свойствами и ме­то­дами, который рас­прост­­раняется и встраивается (по­до­бно компоненту) в приложение. Об­ъ­екты Distributed COM (DCOM) дополнительно обеспечи­ва­ют распре­деленную обработку в сети.

При создании приложения COM используются следующие понятия.

Интерфейс COM описывает методы и свойства, доступные клиен­там че­рез ме­­ханизм публикации (регистрации в операционной системе). Ба­зовый интерфейс имеет имя Iunknown, и его характеристики насле­дуются интер­фей­сами‑потомками (имена интерфейсов начинаются с “I”). Каждый интер­­фейс имеет уникальный глобальный идентификатор длиной 16 байтов (GUID), а каждый интерфейс в объекте COM имеет идентифи­ка­тор интерфейса IID на основе GUID. Благодаря наличию стандартных ин­тер­­фейсов объект COM может быть реализован на любом языке.

Сервер COM представляет собой модуль (EXE или DLL) с програм­мным кодом объектов COM. При обращении к серверу передается идентифика­тор GUID класса CLSID. Сервер создает специальный объект (фаб­ри­ку клас­сов ICLassFactory), который занимается созданием и загруз­кой экзем­пляра нужного объекта COM.

Клиент COM является программой, обращающейся к серве­ру COM.

Пример создания объекта COM с методом умножения двух чисел

В ыполним команду File/New/ActiveX/ActiveX Library. Добавим объ­ект COM командой File/New/ActiveX/COM Object и настроим создавае­мый объект (рис. 4.8.1): способ соз­дания объ­екта Multiple instance (соз­да­ние нескольких объ­ек­тов), спо­соб обращения к ин­терфей­су Apartment (для каж­дого объ­ек­та создается по­­­ток), краткое опи­сание ин­тер­­фей­са (Des­crip­tion). После на­жа­тия кноп­ки ОК фор­ми­руются ин­тер­фейс и опи­са­ние класса TMy­Object, и поя­в­ляется окно ре­дактора биб­лиотеки (рис.4.8.2).

Рис. 4.8.1. Окно настройки объекта COM

Окно редактора библиотеки можно вызвать и командой View/Type Library. Левая часть окна содержит дерево объектов, интерфейсов и мето­дов. Выделим строку ImyObject, нажмем кнопку New Method и введем имя соз­даваемого метода GetMulti. Перейдем на страницу Parameters и кноп­кой Add введем два параметра и укажем их имена и типы (рис. 4.8.2).

Рис. 4.8.2. Задание параметров метода GetMulti в интерфейсе объекта COM

К нопкой New Property можно создать новые свойства объекта. Нажмем кнопку Refresh для обновления реализации.

Перейдем в модуль Unit1 и заполним тело метода кодом:

function TMyObject.GetMulti(X, Y: Single): Single; begin Result:=X*Y; end;

Перейдем в редактор библиотеки и нажмем кнопку Register. В результате выполняется компиляция, создается модуль Project_TLB.Pas, биб­лиоте­ка Project1.DLL и содержащийся в ней сервер COM регист­рируется в системе. Закроем проект.

Для отладки объекта COM создадим новый проект (клиент COM) в другой папке (рис. 4.8.3).

Рис. 4.8.3. Окно проверки работы метода GetMulti объекта COM MyObject

Откорректируем модуль Unit1. В строку Uses добавим модуль Pro­ject1_TLB с описанием интерфейса. В подразделе Public раздела Type объ­явим глобальные переменные: UkazIUnknown, UkazIMyObject : IMyObject.

Добавим процедуру создания формы для установки связи с сервером:

procedure TForm1.FormCreate(Sender: TObject);

begin // создание подкласса Co с описанием общего интерфейса IUnknown

UkazIUnknown:=CoMyObject.Create; //указатель интерфейса IUnknown

// формирование указателя на интерфейс IMyObject

UkazIUnknown.QueryInterface(IMyObject,UkazIMyObject); end;

Составим процедуру нажатия кнопки Перемножить.

procedure TForm1.Button1Click(Sender: TObject);

begin Label1.Caption:= FloatToStr (UkazIMyObject.GetMulti (StrToFloat (Edit1.Text), StrToFloat(Edit2.Text))); end;

Выполним приложение.

4.9. Распределенные двухуровневые клиент‑серверные приложения

4.9.1. Технология COM/DCOM с использованием сервера транзакций MTS

В данной технологии используется сервер транзакций MTS, который вхо­дит в поставку Web‑сервера Personal Web Server. Он позволяет орга­ни­зо­вать надежную работу серверов COM и клиентов COM (п. 4.8), выпол­няющих­ся на различных компьютерах [2; 7].

4.9.2. Технология CORBA

В данной технологии вместо сервера транзакций MTS используется бро­кер CORBA (Common Object Request Broker Architecture, общая архи­тек­тура брокеров объектных запросов). Брокеры объектных запросов поз­во­ляют орга­ни­зо­вать работу сер­веров COM и клиентов COM (п. 4.8), вы­пол­­няющих­ся на различных ком­пь­ютерах под управлением различных операционных систем (Windows, Unix и др.) [2; 7].

4.10. Распределенные многоуровневые приложения

4.10.1. Технология MIDAS

Чаще используется трехуровневая модель: клиентская программа (формирует запросы пользователя и отображает результаты их выпол­не­ния), сервер приложений (синхронизирует работу компонентов), сервер базы данных (обрабатывает запросы к данным от сервера приложений). В состав приложения MIDAS входят: удаленные модули данных (серверы COM или CORBA), поставщики данных (объекты, возвращающие по за­просу результирующую информацию), компоненты связи, клиентские наборы данных (объекты клиентской программы обработки получаемых данных с использованием MIDAS.DLL). Компоненты технологии MIDAS находятся на одноименной панели [2; 7].

Схема работы приложения MIDAS [2; 7].

  1. Клиентская программа соединяется с сервером приложений и запрашивает данные у сервера.

  2. Сервер приложений обращает к серверу базы за данными, полу­ча­ет, упаковывает их в формате OleVariant(дельта‑наборы),отсылает клиенту.

  3. Клиентская машина распаковывает, отображает данные, корректирует их и посылает новые данные серверу приложений.

  4. Сервер приложений получает, распаковывает данные и передает их серверу базы в виде транзакции. Сервер базы проводит изменения в базу и формирует информа­цию об ошибках, которая посылается на клиентскую машину сервером приложений.

Пример формирования итоговых полей таблицы строек с итоговыми зна­чениями сметных и освоенных сумм по всем стройкам с исполь­зо­ва­ни­ем технологии MIDAS:

  1. Р азместим в модуле данных компонент DataSetProvider, который ор­га­низует обмен данными между клиентскими и внешними наборами данных. В свойстве DataSet укажем имя объекта Stroiki, ранее созданного в модуле базы (п. 3.3).

  2. Р азместим в модуле данных компонент ClientDataSet, который под­держивает наборы клиента, независимые от типа СУБД и источника данных. Укажем свойство AggregatesActive=True и в свойстве ProviderName укажем имя предыдущего компонента. Через редактор по­лей (вызывается двойным щелчком по компоненту) добавим два новых итоговых поля SumSs, SumFs типа Aggregate (итого­вое) со значением свойства Expression равным Sum(Ss) и Sum(Fs). Могут ис­поль­зоваться еще функции Avg (среднее), Count (число непустых значе­ний поля), Max (максимальное), Min (минимальное). Не допускаются вло­жения функций и операций с отдельными полями. Укажем Active=True для этих полей.

  3. Р азместим компонент DataSource со значением свойства Da­taSet=ClientDataSet1. Подключим модуль Modul2 к Modul1

  4. Н а форме разместим два компонента DBText со свойствами DataSource=DataModul2.DataSource1 и DataField равным SumSs, SimFs соот­вет­ственно и компонент DBGrid для работы с таблицей.

  5. Выполним приложение. На форме появятся два итоговых числа.