Технология компонентного программирования
Курс по выбору
Лектор: к.ф.-м.н., доц. Антонов С.А.- Объектно-ориентированный подход.
- Объединение полей в структуре, типы определенные пользователем, функции-утилиты.
- Тривиальное понимание инкапсуляции.
- Отделение реализации от поведения, точное понимание инкапсуляции.
- Понятие класса, экземпляр класса как объект.
- Наследование как способ повторного использования кода.
- Раздельная компиляция как способ защиты кода.
- Одиночное и множественное наследование преимущества и недостатки.
- Идентичность поведения при различиях в реализации.
- Два подхода к обеспечению полиморфного поведения.
- Сигнатурный полиморфизм.
- Механизм виртуальных функций.
- Чистая виртуальность, абстрактные классы, интерфейсы.
- Предпосылки компонентного подхода.
- Проблемы распространения программного обеспечения, различные подходы к их решению.
- Проблемы межязыкового и межплатформенного взаимодействия.
- Программные библиотеки, динамическое и статическое связывание, экспорт функций.
- Библиотеки MFC и возможность экспорта классов.
- Таблица виртуальных функций как универсальный способ обращения к интерфейсу объекта.
- Языки поддерживающие работу с таблицами виртуальных функций.
- Принцип решения этой проблемы в скриптовых языках.
- Пишем свой COM.
- Косвенные обращения.
- Умные указатели, ведущие указатели, дескрипторы.
- Подсчет объектов и управление временем жизни объекта, прототипы функций AddRef и Release.
- Идиома интерфейсных указателей.
- Дублирование интерфейса.
- Маскировка указываемого объекта.
- Изменение интерфейса.
- Идея граней и кристаллов.
- Инкапсуляция указываемого объекта, проверка граней.
- Способы извлечения граней, прототип функции QueryInterface.
- Классы посредники.
- Пишем свой COM (продолжение)
- Подстановочный критерий Лисков.
- Гомоморфные иерархии классов.
- Нормальное наследование и интерфейсы как вырожденный случай.
- Производящие функции, использование символических классов для поддержки инкапсуляции.
- Объекты классов, информация о классе и создание экземпляров по имени.
- Прототип фабрики классов.
- Как это делает Microsoft.
- Коклассы, COM объекты, интерфейсы и серверы.
- GUID как способ идентификации интерфейсов и коклассов.
- Размещение объектов в памяти, внутрипроцессный сервер, локальный сервер, удаленный сервер, динамические библиотеки и выполняемые файлы.
- Подсистема COM, SCM, реестр системы.
- Стандартный интерфейс IUnknown.
- Фабрики классов и интерфейсы IClassFactory, IClassFactory2.
- Как технология COM поддерживает инкапсуляцию, наследование и полиморфизм.
- Языковая независимость.
- Проектируем внутрипроцессный сервер.
- Полный цикл работы с COM объектом в случае использования inproc сервера.
- Пример создания простейшего кокласса, создание и реализация интерфейса, создание фабрики класса, экспорт функций DllGetClassObject и DllCanUnloadNow.
- Основные принципы управления временем жизни объекта и сервера, порядок вызова функций AddRef и Release, блокировка сервера.
- Регистрация сервера на локальной машине.
- Типичный пример кода стороны клиента на языке С++.
- Информация о типе и языковая независимость.
- Решение проблемы описания интерфейсов, Microsoft Interface Definition Language, компилятор MIDL.
- Базовые и универсальные типы данных IDL.
- Операторы и ключевые слова языка IDL, определение пользовательских интерфейсов.
- Атрибуты параметров, библиотек и вызова функций.
- Определение коклассов.
- Определения интерфейсов и библиотеки типов.
- Файлы генерируемые компилятором MIDL.
- Регистрация информации о типе.
- Утилиты для работы с библиотеками типов.
- Использование Visual Basic для работы с COM.
- Информация о типе и прозрачность местонахождения.
- Процессы и потоки.
- Проблема передачи указателей за границы процессов.
- Еще раз о посредниках.
- Механизмы обеспечения прозрачности местонахождения в COM, объекты представители (proxy) и объекты заместители (заглушки).
- Менеджеры прокси объектов.
- Обзор работы протоколов LRPC и RPC.
- Объекты канала.
- Идентификаторы приложений.
- Размещение COM DLL в суррогатном процессе.
- Маршалинг в модели COM.
- Как передавать данные за границы процесса, понятие маршалинга.
- Реализуем свой собственный механизм маршалинга, пользовательский маршалинг, интерфейс IMarshal.
- Стандартный маршалинг, передача пользовательских интерфейсов.
- Маршалинг библиотеки типов.
- Регистрация заглушек/прокси.
- Особенности построения локальных и удаленных серверов.
- Предоставление фабрик класса из локального сервера, функции CoRegisterClassObject, CoRevokeClassObject.
- Плавный переход к удаленному серверу.
- DCOM, механизм обмена информацией между менеджерами подсистемы COM.
- Утилита DCOMCNFG.
- Различие в работе клиентов с локальным или удаленным сервером.
- Введение в технологию ATL.
- Работа с шаблонами, что может ATL.
- Работа мастера проектов ATL.
- Объекты ATL и их категории.
- Создание коклассов, добавление и реализация интерфейсов, реализация методов и свойств, COM-карты.
- Основные классы ATL, макросы преобразования, тип CComBSTR.
- Файлы генерируемые мастером ATL, библиотеки классов, модификация реестра, язык скриптов.
- Потоковая модель COM.
- Синхронизация потоков.
- Концепция апартаментов, однопотоковый и многопотоковый апартаменты, что выбрать.
- Маршалинг при работе с апартаментами.
- Поддержка работы с потоками в ATL.
- Базовые потоковые классы.
- Шаблоны CComObject.
- Виртуальные конструкторы.
- Механизм обработки исключений.
- Механизмы повторного использования в COM.
- Почему не подходит наследование в COM.
- Контейнеры и делегирование.
- Поддержка контейнеризации в ATL.
- Использование контейнеризованных объектов.
- Агрегация в модели COM, поддержка в ATL, автоагрегация.
- Условия налагаемые на клиенты и сервера.
- Мастера ATL и конфигурирование объектов.
- Хранилища компонентов.
- Вопросы связанные с экспонированием фабрик классов, управлением временем жизни, регистрацией сервера.
- Класс CComModule, карта объектов, элементы карты объектов, макросы ATL.
- Класс-создатель _ClassFactoryCreatorClass.
- Фабрика классов CComClassFactory.
- Обзор и классификация категорий COM, карты категорий.
- Скриптовые языки.
- Языки не поддерживающие виртуальные таблицы.
- Методы посредники, интерфейс IDispatch, интерфейс диспетчеризации, идентификаторы DISPID.
- Реализация интерфейса IDispatch на языке С++.
- Ограничения накладываемые интерфейсом IDispatch, тип CComVariant ATL.
- Дуальные интерфейсы.
- Использование информации о типе.
- Средства ATL, шаблон IDispatchImpl<>.
- Код стороны клиента.
- Перечисления и коллекции в COM.
- Использование безопасных массивов, структур и COM-интерфейсов в качестве параметров методов.
- Перечисления и стандартные интерфейсы.
- Создание и использование объектов перечислений с применением ATL, шаблоны CComIEnum и CComEnumImpl, код стороны клиента.
- Коллекции, стандартные методы коллекций COM.
- Создание коллекции средствами ATL.
- Косвенно-вызываемые интерфейсы и соединяемые объекты.
- Идея поддержки коммуникации с клиентом, механизм косвенного вызова.
- Использование косвенного вызова из Visual Basic и C++.
- Механизм двустороннего обмена, соединяемые объекты, интерфейсы IConnectionPointContainer и IEnumConnectionPoints, события и уведомления.
- Построение соединяемых объектов с применением ATL.
- Использование соединяемых объектов из Visual Basic и C++.
- Разработка элементов управления ActiveX.
- Элементы управления и страницы свойств.
- Структура стандартного элемента управления ActiveX.
- Использование мастера ATL.
- Элементы управления и категории COM.
- Постоянства свойств.
- Код стороны клиента.
- Пример разработки элемента управления ActiveX с помощью ATL.
Рекомендуемая литература и источники
- Трельсен Э. Модель COM и применение ATL 3.0. - BHV, 2000 г.
- Frank E., III Redmond Dcom: Microsoft Distributed Component Object Model
- D. Box Essential COM (Component Object Model)
- http://www.swtech.com/tp/dcom/