- •107 Методические указания «Программное обеспечение сетей эвм. Часть 4. Версия 2. Развитие схемы «клиент-сервер» в com и corba»
- •Введение
- •1.1. Необходимость использования компонент
- •1.2. Методы встраивания компонентов
- •1.3. Основы com
- •1.4. Типы компонентов
- •1.5. Размещение управляющих элементов при помощи cWnd
- •1.6. Использование директивы #import
- •1.7. Компоновка тестовой программы
- •1.7.1 О компонентах
- •1.7.2 Регистрация компонентов
- •1.7.3 Импортирование библиотеки типов
- •1.7.4 Определение членов cDemoClientView
- •1.7.5 Создание компонентов
- •1.7.6 Создание точек взаимодействия
- •1.7.7 Синхронизация параметров
- •1.7.8 Обработка событий от компонентов
- •1.7.9 Очистка
- •1.7.10 Шаблонный код
- •1.9. Индивидуальные задания на работу
- •2.1. Проект. Основные принципы
- •2.2. Как создать компонент
- •Шаг 2: Создание компонента:
- •2.3. Значения по умолчанию
- •2.5. Индивидуальные задания на работу
- •3.1. Cоздание сервера com
- •3.2. Использование com-объектов
- •3.3. Индивидуальные задания на работу
- •Лабораторная работа № 4. Использование atl
- •4.1 Создание dcom-сервера с использованием atl
- •4.1.1 Введение в atl
- •4.1.2 Что такое atl?
- •4.1.3 Разделение труда
- •4.1.4 Создание хранилища компонентов с помощью atl Com AppWizard
- •4.1.5 Вставка кода заглушки/прокси-объекта.
- •4.1.7 Atl com-карта
- •4.1.9 Класс cComModule
- •4.1.10 Язык скриптов реестра в atl
- •4.1.11 Распределенная com (dcom)
- •4.1.12 Dcom и службы nt
- •4.1.13 Структура службы nt
- •4.1.14 Основанный на службах nt сервер сом
- •4.1.15 Создание проекта при помощи atl
- •4.1.16 Добавление функциональных средств
- •4.1.17 Функция CacheQuotes (dcomServiceXdcomService.Cpp)
- •4.1.18 Функция GetQuote (dcomServiceXdcomService.Cpp)
- •4.2 Создание dcom сервера
- •4.3 Создание dcom клиента
- •4.4 Индивидуальные задания на работу
- •Лабораторная работа № 5. Разработка corba приложений
- •5.1. Конфигурирование
- •5.2. Порядок действий
- •5.3. Объектно-ориентированный анализ и моделирование
- •5.4. Описание и трансляция объектов
- •5.5. Создание сервера
- •5.6. Создание клиента
- •5.7. Отладка объектов
- •5.8. Индивидуальные задания на работу
- •Лабораторная работа № 6. Адаптер роа
- •6.1. Архитектура poa
- •6.2. Политики poa
- •Политика обработки запросов
- •6.3. Создание серверов на основе poa
- •6.4. Индивидуальные задания на работу
- •Лабораторная работа № 7. Прикладная задача связи
- •7.1. Постановка задачи
- •7.1.1. Сотовая станция
- •7.1.2. Телефоны
- •7.1.3. Система
- •7.2. Функционирование системы
- •7.3. Индивидуальные задания на работу
- •Лабораторная работа № 8. Работа по умолчанию
- •8.1. Сервер с сервантом по умолчанию
- •8.2. Индивидуальные задания на работу
- •Лабораторная работа № 9. Создание менеджеров сервантов
- •9.1. Менеджеры сервантов
- •ServantActivator
- •ServantLocator
- •9.2. И снова практика
- •9.3. Индивидуальные задания на работу
- •Лабораторная работа № 10. Сервис именования
- •10.1. Сервис для именования (Naming Service)
- •10.2. Индивидуальные задания на работу
1.7. Компоновка тестовой программы
Для того, чтобы продемонстрировать интеграцию визуальных и невизуальных компонентов, включая те, что используют точки взаимодействия, и те, что взаимодействуют при помощи событий, можно собрать тестовую программу, использующую 3 компонента. Хотя в этой программе используются достаточно простые компоненты, концептуально процедуры работы с ними не отличаются от тех, которые требуются при интеграции "настоящих" компонентов.
В программе используется концепция "модель - представление - управление": программа состоит из трех модулей (в данном случае - COM-компонентов), выполняющих основные функции приложения. Первый компонент - "модель" - выполняет основную полезную вычислительную нагрузку, преобразуя вводимые данные в результат. Второй компонент - "представление" - занимается отображением работы приложения. Компонент "управление" обеспечивает ввод данных. Такая концепция положена в основу многих приложений, и модель приложения MFC "Документ - представление" - частный вариант использования того же подхода.
В приводимом примере компоненты интегрированы в MFC-приложение с использование возможностей MFC и директивы #import. Приложение создает анимированный компонент представления, скорость анимации и цвет фона в котором контролируются отдельным компонентом с управляющими элементами. "За кулисами" третий компонент обновляет данные компонента представления, переводя установки элементов управления в значения параметров компонента представления. Клиентское приложение, содержащее компоненты, выполняет роль посредника во взаимодействии компонентов, показывая, как можно непосредственно управлять компонентами. Основные связи между компонентами и клиентским приложением показаны на рис. 1.1.

Рис. 1.1. Архитектура "Модель - представление - управление", используемая в тестовом приложении.
Создание приложения можно начать с мастера приложений MFC для создания программы, которая будет содержать компоненты. Пусть она называется DemoClient. Все, что нужно изменить в параметрах, предлагаемых мастером - это выбрать однодокументный интерфейс для программы. В этом случае для приложения будет использоваться модель "Документ - представление", но все необходимые изменения будут внесены непосредственно в класс CDemoClientView.
1.7.1 О компонентах
Все компоненты программы собраны вместе с исходным кодом в один проект, поэтому вся информация о компонентах собрана в одной библиотеке внутри одного DLL-файла. Именно поэтому директива #import применяется только к одному файлу. Все три компонента созданы при помощи ATL, это значительно упростило их создание.
Компонент, выполняющий роль модели, называется DemoModel. Он выполняет трансляцию установок компонента управления в команды для компонента представления (DemoView). В нем реализован интерфейс, построенный на точках взаимодействия, позволяющий компоненту-модели после начальной инициализации управлять компонентом представления напрямую, без посредничества клиентского приложения. Компонент DemoView использует ATL Composite Control для размещения в нем компонента DirectAnimation. Управляющий элемент используется только как контейнер для компонента DirectAnimation, который заполняет клиентскую область компонента DemoView, выполняя все прорисовки на основании установленных при помощи его интерфейса параметров.
Компонент DemoController - также составной ATL-компонент. Он содержит набор стандартных элементов управления Windows: ползунок, выпадающий список и кнопку. Помимо этого он является источником событий, которые захватываются клиентским приложением и передаются в виде команд компонентам модели и представления.
