Содержание

 

Задание №1 Реализация интерфейса COM

Задание №1А QueryInterface

Задание №1B Подсчет ссылок


Задание №1 Реализация интерфейса COM

Цель работы:

Разработать код на С++, реализующий простой интерфейс СОМ без динамической компоновки:

-       клиент и компонент взаимодействуют через два интерфейса IX иIY, интерфейсы COM реализованы как чисто абстрактные базовые классы С++;

-       в качестве клиента использовать процедуру main;

-       компонент реализуется классом СА, который наследует как IX так и IY;

-       класс СА реализует функции-члены обоих интерфейсов (множественное наследование);

-       клиент создает экземпляр компонента (для управления существованием компонента клиент применяет оператора new и delete), далее он получает указатели на интерфейсы, поддерживаемые компонентом, использовать эти указатели анологично указателям на классы С++;

-       выводить промежуточные сообщения при использовании интерфейсов IX и IY;

-       удалить компонент;

-       вместо определения интерфейса как класса использовать определение из заголовочного файла OBJBASE.H

#define interface struct

и функции-члены объявлять с помощью

virtual void _stdcall … .

Теоретические сведения:

В СОМ интерфейсы — это все. Для клиента компонент представляет собой набор интерфейсов. Клиент может взаимодействовать с компонентом СОМ только через интерфейс. С точки зрения программиста СОМ, интерфейсы — важная часть любого приложения. Компоненты сами по себе есть просто детали реализации интерфейсов.

Утверждение, что компонент — всего лишь деталь реализации интерфейса, конечно, преувеличение. В конце концов, интерфейс без реализации ничего не сделает. Однако компонент можно удалить и заменить другим; если новый компонент поддерживает те же интерфейсы, что и старый, приложение будет работать по-прежнему. Отдельные компоненты сами по себе не определяют приложения. Приложение определяют интерфейсы между компонентами. Пока интерфейсы неизменны, компоненты могут появляться и исчезать

Теперь рассмотрим код, реализующий простой интерфейс. В приведенном ниже тексте программы компонент CA использует IX и IY для реализации двух интерфейсов.

class IX // Первый интерфейс

{

public:

virtual void Fx1() = 0;

virtual void Fx2() = 0;

};

class IY // Второй интерфейс

{

public:

virtual void Fy1() = 0;

virtual void Fy2() = 0;

};

class CA : public IX, public IY // Компонент

{

public:

// Реализация абстрактного базового класса IX

virtual void Fx1() { cout << “Fx1” << endl; }

virtual void Fx2() { cout << “Fx2” << endl; }

// Реализация абстрактного базового класса IY

virtual void Fy1() { cout << “Fy1” << endl; }

virtual void Fy2() { cout << “Fy2” << endl; }

};

IX и IY — это чисто абстрактные базовые классы, которые используются для реализации интерфейсов. Чистоабстрактный базовый класс (pure abstract base class) — это базовый класс, который содержит только чисто виртуальные функции (pure virtual functions). Чисто виртуальная функция — это виртуальная функция, «помеченная =0 — знаком спецификатора чистоты (pure specifier). Чисто виртуальные функции не реализуютсяв классах, в которых объявлены. Как видно из приведенного выше примера, функции IX::Fx1, IX::Fx2, IY::Fy1 и IY::Fy2 только декларируются. Реализуются же они в производном классе. В приведенном фрагменте кода компонент CA наследует два чисто абстрактных базовых класса — IX и IY — и реализует их чисто виртуальные функции.

Для того, чтобы реализовать функции-члены IX и IY, CA использует множественное наследование. Последнее означает, что класс является производным более чем от одного базового класса. Класс С++ чаще всего использует единичное наследование, т.е. имеет только один базовый класс.

 

Текст программы:

 

#include "stdafx.h"

#include "iostream.h"

#include "objbase.h" // Определить интерфейс

#include "conio.h"

void trace(const char* pMsg) { cout << pMsg << endl; }

// Абстрактные интерфейсы

interface IX

{

virtual void __stdcall Fx1() = 0;

virtual void __stdcall Fx2() = 0;

};

interface IY

{

virtual void __stdcall Fy1() = 0;

virtual void __stdcall Fy2() = 0;

};

// Реализация интерфейса

class CA : public IX,

public IY

{

public:

// Реализация интерфейса IX

virtual void __stdcall Fx1() { cout << "CA::Fx1" << endl; }

virtual void __stdcall Fx2() { cout << "CA::Fx2" << endl; }

// Реализация интерфейса IY

virtual void __stdcall Fy1() { cout << "CA::Fy1" << endl; }

virtual void __stdcall Fy2() { cout << "CA::Fy2" << endl; }

};

// Клиент

int main()

{

trace("Client: Sozdanie ekzemplyra komponenta");

CA* pA = new CA;

// Получить указатель IX

IX* pIX = pA;

trace("Client: Ispol'zovanie interface IX");

pIX->Fx1();

pIX->Fx2();

// Получить указатель IY

IY* pIY = pA;

trace("Client: Ispol'zovanie interface IY");

pIY->Fy1();

pIY->Fy2();

trace("Client: Delete komponent");

delete pA;

getch();

return 0; }

Результат работы программы:

 

Вывод:

В данном задании мы реализововали простой интерфейс СОМ без динамической компоновки. Интерфейсы COM реализованы как чисто абстрактные базовые классы С++, в качестве клиента использовали процедуру main.

Задание 2 №1А QueryInterface

Цель работы:


Информация о работе «Распределенная обработка данных»
Раздел: Информатика, программирование
Количество знаков с пробелами: 22503
Количество таблиц: 0
Количество изображений: 3

Похожие работы

Скачать
28863
0
0

... ЭВМ. Особенностью этого способа является отделение технологически и по времени процедуры обработки от процедур сбора, подготовки и ввода данных.   1.3 Комплекс технических средств обработки информации Комплекс технических средств обработки информации – это совокупность автономных устройств сбора, накопления, передачи, обработки и представления информации, а также средств оргтехники, управления ...

Скачать
192976
8
10

... в пенсионный фонд (1% от зарплаты) 1345 Затраты на эксплуатацию оборудования (амортизацию) 976000 ИТОГО: 1207213 Заключение За время работы над дипломным проектом по теме «Организация удаленного доступа к распределенным базам данных» были изучены теоретические основы построения распределенных информационных систем с возможностью оперативного удаленного доступа к данным. ...

Скачать
26696
11
0

... мобильности означает сравнительную простоту переноса программной системы в широком спектре аппаратно-программных средств, соответствующих стандартам. Интероперабельность означает упрощения комплексирования новых программных систем на основе использования готовых компонентов со стандартными интерфейсами. Преимуществом для пользователей является то, что они могут постепенно заменять компоненты ...

Скачать
158931
0
1

... дискретного программирование для решения задач проектирование систем обработки данных. -  Сформулированы задачи диссертационного исследования. 2. БЛОЧНО-СИММЕТРИЧНЫЕ МОДЕЛИ И МЕТОДЫ ПРОЕКТИРОВАНИЯ СИСТЕМ ОБРАБОТКИ ДАННЫХ В данном разделе рассматриваются общая постановка блочно-симметричной задачи дискретного программирования, её особенности и свойства. Разработан общий подход решения задач ...

0 комментариев


Наверх