
- •1 Билет
- •1) Стандарт орс (назначение и общее представление, орс сервер, орс группа, орс item).
- •2) Процесс разработки по систем управления(обычный подход – «waterfall», итеративный подход).
- •2 Билет.
- •1) По систем управления. Основные понятия(представление о классах, сом интерфейсах, ActiveX).
- •Билет №3.
- •2) Оригинальные инструментальные средства разработки программного обеспечения систем управления (nCsApp Wizard, State Machine Builder).
- •Билет №4.
- •1) Основные классы mfc (cObject, коллекции, cString, cWnd, механизм документа отображение).
- •2) Идеи компонентного подхода (базовый интерфейс iUnknown, включение, агрегация).
- •IUnknown
- •5 Билет.
- •1) Операционные системы реального времени и системы управления (классификация систем реального времени, Windows nt & rtx, VxWorks, многопоточность).
- •2) Поддержка com в Windows nt (реестр Widows, dcom, реализация сервера в процессе, реализация сервера за пределами процесса).
- •6 Билет.
- •1)Средства синхронизации потоков на примере Windows nt & rtx (Критическая секция,mutex, семафор, shared memory, приоритеты, ...).
- •2) Распределенная модель системы управления (Пример выделения компонентов на базе геометрического канала).
- •Глава 4. Технологии разработки программного обеспечения систем управления 221
- •7 Билет.
- •2.2.3. Базовые понятия операционной системы реального времени
- •2.2.4. Использование в системах управления операционной системы Windows nt
- •2) Общее представление, назначение и использование ActiveX (место ActiveX-элементов в системе управления, способы их создания на базе mfc и на базе atl).
- •4.4.1. Базовые понятия
- •9 Билет.
- •1)Стратегия диспетчеризации на базе расширения rtx (основные потоки системы управления с использованием Windows nt и rtx).
- •2)Назначение страниц свойств, сериализация свойств (стандартные и пользовательские property page).
- •2) Назначение страниц свойств, сериализация свойств (стандартные и пользовательские property page).
- •10 Билет.
- •1) Базовые функции коммуникационной среды (запрос, управление, отображение, вспомагательные функции; выделение фазы обмена данными).
- •2) Идеи ole-автоматизации (базовый интерфейс iDispatch, его ключевые функции).
2) Идеи компонентного подхода (базовый интерфейс iUnknown, включение, агрегация).
COM — это метод разработки программных компонентов, небольших двоичных исполняемых файлов, которые предоставляют необходимые сервисы приложениям, операционным системам и другим компонентам.
Компонентная модель СОМ лежит в основе таких технологий разработки прикладного программного обеспечения систем управления, как DCOM, OLE, OLE Автоматизация, ActiveX и ОРС (рис. 134). Компонентная объектная модель СОМ делает стандартную структуру объекта регулярной, управляет его жизненным циклом и общением с другими объектами [81]. Другими словами, СОМ определяет правила структурирования объектов и их распределения в памяти, создания и уничтожения объектов, взаимодействия объектов между собой. Компонентная модель существует в рамках клиент-серверной архитектуры, когда клиент и сервер (компонент) связаны через СОМ-интерфейс. СОМ-интерфейс специфицирует функциональные возможности, которые компонент предлагает некоторой программе или другим компонентам
IUnknown
От стандартного СОМ-интерфейса IUnknown произведены все остальные. Интерфейс IUnknown обязателен в любом компоненте и предназначен для (С++)-программистов; он обращает к методам (функциям) интерфейса через таблицу виртуальных методов [82]. Располагая указателем на IUnknown, клиент может запросить и другие интерфейсы компонента.
Производный от IUnknown интерфейс наследует три базовых метода: Querylnterface(), позволяющий клиенту получить указатель на любой интерфейс компонента из другого указателя интерфейса; Add() и Release(), поддерживающие механизм управления временем жизни клиента. С этой целью компонент хранит внутренний «счетчик ссылок» на своих клиентов. Если счетчик обнуляется, объект выгружает себя из памяти. При запросе указателя на интерфейс метод QuerylnterfaceO неявно вызывает метод Add() для увеличения содержимого счетчика, а после окончания работы с интерфейсом клиент явно вызывает метод Release() для уменьшения содержимого счетчика ссылок.
Компонент может располагать одним или несколькими СОМ-интерфейсами; клиент, в свою очередь, может пользоваться сервисом от нескольких СОМ-интерфейсов. Это значит, что один СОМ-сервер может обслуживать нескольких клиентов, а один СОМ-клиент может получать сервис от нескольких компонентов.
СОМ-сервер и СОМ-интерфейс имеют свои глобальные уникальные идентификаторы GUID (Globally Unique Identifier). Один и тот же СОМ-сервер на двух разных компьютерах будет иметь один и тот же идентификатор GUID, а разные СОМ-серверы на разных компьютерах не могут иметь одинаковых интерфейсов. Уникальность GUID обеспечивается тем, что при изменении компонента или интерфейса утилита guidgen.exe генерирует новые идентификаторы на основе уникального сетевого адреса и точного
времени запроса на создание GUID. Идентификаторы компонента (класса) и интерфейса обозначаются соответственно CLSID и IID.
Компоненты СОМ бинарно совместимы, что означает, что компонент будет совместимым для использования с любыми другими СОМ-компонентами независимо от языка, на котором он создан. Объекты и компоненты, разработанные на разных языках программирования и работающие в различных операционных системах, могут взаимодействовать без каких-либо изменений в двоичном (исполняемом) коде. Любой клиент, желающий воспользоваться сервисом компонента, нуждается в предварительных сведениях о его интерфейсе. Существует технология, которая обеспечивает клиентов информацией о типах компонента. Файл, содержащий такую информацию, создается с помощью языка определения интерфейсов - IDL (Interface Definition Language).
Включение
Включение (containment) предполагает, что внешний компонент предоставляет интерфейс включаемому компоненту и обращается к нему для организации интерфейса.
Создадим, например, компонент геометрического канала системы ЧПУ и вместо реализации функций управления приводом воспользуемся включенным компонентом управления приводом. Если клиент обращается к интерфейсу IDriveControl (рис. 138), компонент геометрического канала CMachineChannelServer переправляет вызов компоненту CDriveServer. Внешний компонент может специализировать этот интерфейс, добавив свой код перед вызовом внутреннего компонента или после этого.
Агрегация
Агрегация (aggregation) означает, что внешний компонент агрегирует интерфейс внутреннего компонента, не создавая интерфейс заново и не передавая вызов этого интерфейса явно, как при включении. Вместо этого внешний компонент передает клиенту указатель на интерфейс внутреннего компонента.
Агрегация интерфейса IDriveControl компонентом геометрического канала показана на рис. 139. Она применяется тогда, когда реализация интерфейса устраивает разработчика полностью.
////Пример для умных/////
Небольшой пример пояснит различия между включением и агрегированием. Предположим, что Вы хозяин небольшой металлоремонтной мастерской. У Вас есть две работницы — Памела и Анжела. Памела работает уже давно и знает свое дело досконально. Если заказ будет выполнять Памела, достаточно просто направить клиента к ней. Анжела, напротив, новичок и у нее нет опыта работы с металлом. Когда работу поручают ей, обычно нужно дать начальные указания, а иногда и сделать вместо нее наиболее сложную часть. Вы же должны и договариваться с клиентом. После того, как Анжела закончит работу, Вы вместе с ней должны проверить результаты и, может быть, что-то подправить. Случай Памелы сходен с подходом агрегирования. Дав работу, Вы уходите со сцены. Однако в случае Анжелы Вы по-прежнему ведете все переговоры с клиентом, даете начальные указания и проверяете работу в конце. Этот вариант аналогичен включению.