Смекни!
smekni.com

Структура и назначение программ в области информационных технологий (стр. 6 из 29)

2) Сигнатура интерфейса.

Сигнатура интерфейса, называемая также синтаксисом интерфейса, предоставляет пользователям достаточно информации для записи параметров в стек и определения смещения, используемого в таблице VTBL для доступа к адресу метода. Сигнатура интерфейса определяет следующие показатели:

• число и порядок методов в интерфейсе;

• число, порядок и тип всех параметров каждого метода;

• тип возвращаемого значения каждого метода.

Тип параметра указывает, является ли параметр входным (in), выходным (out) или же входным/выходным (in/out). Сигнатура интерфейса содержит определение типов, используемых в интерфейсе, и соглашения о вызовах (cdecl, Pascal, _stdcall и т.д.).

Значения каждой константы, относящейся к интерфейсу (в том числе коды ошибочных и успешных завершений), также являются частью сигнатуры, но назначение этих констант относится к семантике интерфейса.

3) Семантика интерфейса.

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

23. Правила реализации компонентов СОМ

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

При построении компонентов СОМ создаваемый код должен соответствовать определенным правилам. Правила, применяемые при реализации СОМ в среде VB и VC+.

1) Правила реализации интерфейса IUnknown. Объект не станет объектом СОМ, пока для него не реализован хотя бы один интерфейс, и этот интерфейс - IUnknown.

2) Правила управления памятью. Управление памятью заключается в управлении указателями. Управление временем жизни указателей на интерфейсы выполняется посредством методами AddRef и Release, имеющимися в каждом интерфейсе СОМ. Есть несколько правил, применяемых к параметрам функций-элементов интерфейсов. И всего три типа параметров:

Параметры In (Ввод). Для параметров In вызывающая программа выделяет и освобождает память.

Параметры Out (Вывод). Параметры Out выделяются и освобождаются вызывающей программой с помощью стандартного средства выделения памяти СОМ.

Параметр In-Out (Ввод-вывод). Параметры In-Out первоначально выделяются вызывающей программой, затем освобождаются и, при необходимости, повторно выделяются вызывающей программой. Вызывающая программа ответственна за освобождение окончательного возвращаемого значения.

Вызывающая программа не имеет возможности очистить параметры Out и In-Out. Поэтому - еще несколько правил:

• при возврате ошибки параметрам Out задаются значения, которые будут очищены без всякого воздействия вызывающей программы;

• все указатели параметров Out должны быть явно установлены в NULL;

• при возврате ошибки все параметры In-Out должны быть или оставлены без внимания, или явно заданы, как при возврате ошибки параметром OUT.

3) Правила подсчета ссылок. Подсчет ссылок определяет, как приложение отслеживает экземпляры объектов СОМ. Это позволяет согласовать их со спецификацией СОМ. VB выполняет подсчет ссылок внутренними средствами; поэтому эта операция скрыта от разработчиков.

Среда VC++ требует от разработчиков явной поддержки этого функционального средства.

Правила подсчета ссылок таковы.

• Для корректного подсчета ссылок в VC++ для каждой новой копии указателя интерфейса вызывается метод AddRef, а при каждом разрушении указателя интерфейса — метод Release. • С точки зрения клиента СОМ подсчет ссылок является некой концепцией, относящейся к отдельным интерфейсам. Клиенты и не подозревают, что объекты подсчитывают ссылки одинаково для всех интерфейсов.

Значения, возвращаемые методами AddRef и Release, нужны только при отладке кода, и никогда - при вводе его в действие или выполнении операций выбора в программном коде (code decision).

24. Активация СОМ

При создании открытого класса (public class) исполняющая система VB создает стандартный интерфейс для этого класса. Объявив класс открытым, вы согласовываете его с СОМ. Когда клиенты хотят создать в компоненте сервера объект СОМ, вы должны добавить ссылку на сервер и вызвать интерфейсы, В среде VB вам не требуется выполнять множество активаций, которые происходят в скрытой форме. При вызове объекта СОМ выполняется следующее. Средства СОМ кэшируют указатели на объекты, которые уже загружены в память, и пока вы будете запрашивать одну модель поточной обработки, COM загрузит из памяти еще один экземпляр модели. Если средства СОМ не найдут кэшированного экземпляра, удовлетворяющего запросу, они попытаются загрузить внутрипроцессный сервер (если необходимо). Если это не получится, средства СОМ попытаются связаться с SCM (Service Control Manager - диспетчер управления службами). Диспетчер SCM является службой СОМ, которая управляет активацией СОМ, используя следующие процедуры:

• когда клиенты впервые запрашивают объект сервера СОМ, они предают диспетчеру SCM код Ш объекта;

• диспетчер SCM находит и загружает сервер, получая эту информацию из системного реест-

ра;

• диспетчер SCM просит компонент сервера создать запрашиваемый объект; • диспетчер SCM получает ссылку на интерфейс объекта и возвращает его клиенту;

• после возврата диспетчером SCM ссылки на клиента, его работа завершается.

Процесс активации имеет дополнительную особенность. Это происходит за кулисами, при каждом объявлении объекта оператором New. Когда Диспетчер SCM запрашивает компонент сервера создать новый объект, фактически он запрашивает нечто, называемое фабрикой классов. Фабрика классов создает неинициализированный экземпляр объекта класса. Как программист VB вы не имеете прямого доступа к фабрике классов.

25. Типы СОМ

Вы можете упаковать объекты СОМ тремя способами: в виде клиентов, в виде серверов и в виде элементов ActiveX.

1) Клиенты СОМ являются приложениями или инструментами программирования, которые управляют одним или несколькими объектами СОМ. Эти объекты могут существовать в этом же приложении или в каком-то другом. Клиенты используют существующие объекты, создают новые экземпляры объектов, получают и устанавливают свойства, а также вызывают методы, поддерживаемые объектом.

Инструментальные средства VB представляют собой клиента СОМ. Можно использовать VB и подобные инструменты программирования для создания упакованных сценариев, имеющих доступ к объектам автоматизации. Можно создать клиентов, выполнив следующие действия: • написав программный код в приложении, которое с помощью средств автоматизации обращается к объектам, предоставляемым другим приложением;

• изменив существующий инструмент программирования, например встроенный макроязык, для добавления поддержки автоматизации;

• разработав новое приложение, например компилятор или браузер информации о типе, который поддерживает автоматизацию.

2) Серверы СОМ. Объекты СОМ могут существовать в том же процессе, что и их контроллер.

Также их можно переместить в другой процесс.

• Объекты внутрипроцессного сервера (in-of-process server) реализуются в виде модулей DLL и исполняются внутри пространства процесса контроллера.

• Объекты внепроцессного сервера (out-of-process server) реализуются в виде исполняемых файлов и исполняются в отдельном пространстве процесса.

Доступ к объектам внутрипроцессного сервера гораздо быстрее, чем к объектам внепроцессного сервера, поскольку средствам автоматизации не требуется выполнять удаленный вызов процедур за границами процесса. Это справедливо, если вы ограничитесь средствами VB. Механизм доступа (интерфейс IDispatch или таблица VTBL) и локализация объекта (внутрипроцессный или внепроцессный сервер) определяют неизменную долю накладных расходов, требуемых для доступа к объектам СОМ. Наиболее важные факторы, влияющие на производительность, - специфика и объем работы, выполняемой вызываемыми методами и процедурами. Если метод требует значительных расходов времени или вызова удаленных процедур, то накладные расходы на вызов IDispatch делают вызов функций таблицы VTBL наиболее эффективным решением.

3) Элементы ActiveX реализуются в виде внутрипроцессного сервера, который можно использовать в любом контейнере OLE, например VB. Различие между элементом ActiveX и внутрипроцессным сервером СОМ в том, что элементы ActiveX, как правило, имеют пользовательский интерфейс. Полный набор функциональных возможностей элемента ActiveX доступен только при использовании внутри контейнера, сконструированного специально под элементы ActiveX.

26. Назначение технологии DCOM.

С самого начала СОМ разрабатывалась с учетом обеспечения поддержки распределенных сред, т.е. способности клиента создавать объекты на других машинах и вызывать их методы по сети. Эти планы стали реальностью в 1996 году после выпуска распределенной СОМ (Distributed СОМ — DCOM). DCOM позволяет клиенту создавать и использовать объекты как на удаленных системах, так и на локальной. Более того, клиент может даже не осознавать различия между этими двумя случаями. Подобно тому как клиенты СОМ имеют прозрачный доступ к объектам в динамических библиотеках и локальных процессах, DCOM обеспечивает прозрачный доступ к объектам в удаленных процессах. Фактически самое трудное в достижении подобной прозрачности — это обеспечить взаимодействие объектов, исполняющихся в разных процессах независимо от того, выполняются эти процессы на одной машине или нет. В этом смысле, с точки зрения проектирования, DCOM — довольно незначительное расширение оригинальной СОМ.