Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Объектная модель компонентов (COM) Модель COM. Создание COM объекта. Повторное применение СОМ объектов. Маршалинг. IDL. Перманентность.





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

В СОМ любая часть программного обеспечения реализует свои сервисы как один или несколько объектов СОМ.

Каждый такой объект поддерживает один или несколько интерфейсов, состоящих из методов.

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

Клиенты получают доступ к сервисам объекта СОМ только через вызовы методов интерфейсов объекта — у них нет непосредственного доступа к данным объекта.

Объект COM может поддерживать более одного интерфейса, например, объект COM, показанный на рис. 4.3, имеет три интерфейса.

Рис. 4.3. Пример объекта COM

Каждый интерфейс включает множество методов. В число этих методов входит три стандартных метода, которые будут рассмотрены далее и произвольное число методов, определяемых пользователем. Однажды определенный интерфейс нельзя изменять и дополнять. Если появляется необходимость изменить интерфейс, то создается новый интерфейс.

Рассмотрим пример. Допустим разработчиками был создан объект COM, для реализации проверки правописания, единственный интерфейс ISpeller, который кроме стандартных содержит три метода: FindWord (); AddWord (), RemoveWord (). которые позволяют находить слово в словаре, добавлять слово в словарь и удалять слово из словаря, соответственно.

Если позднее появляется идея расширить функциональные возможности объект COM за счет включения функции поиска синонимов, то, поскольку интерфейс нельзя изменять, то можно создать новый интерфейс, который можно назвать, например, IThesaur, который помимо 3-х стандартных методов содержит единственный метод GetSynonym ().

Интерфейсы СОМ. Каждый поддерживаемый объектом интерфейс, по сути контракт между этим объектом и его клиентами, в соответствии с которым объект должен поддерживать методы интерфейса в соответствии со спецификайией, а клиент обязуется корректно вызывать методы.

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

Идентификация интерфейса. У каждого интерфейса СОМ имеется два имени. Одно из них предназначено для использования человеком, а второе – для использования ПО.

Первое имя представляет собой строку символов, например ISpeller. По соглашению читабельные имена большинства СОМ-интерфейсов начинаются с буквы I (от interface).

Второе имя – машинное имя, которое представляет собой идентификатор интерфейса IID, имеющий длиной 128 битов (16 байтов), который называют также GUID (Globally Unique IDentifier - глобально уникальный идентификатор).

Этот идентификатор уникален во времени и в пространстве. Идентификатор можно сформировань самостоятельно с помощью утилиты. Он состоит из 2-х частей. Первая часть (48 бит) – это обычно номер сетевой карты хоста, на котором работает утилита, а вторая часть – это текущее значение системых часов. Если в машине отсутствует сетевая карта, то MAC адрес заменяется случайным числом.

Интерфейс IUnknown. Каждый объект СОМ должен поддерживать интерфейс IUnknown, иначе он не будет объектом COM. Интерфейс IUnknown включает три метода: QueryInterface, AddRef и Release. Все интерфейсы наследуют от IUnknown, его методы можно вызывать вызваны через любой из указателей на интерфейс. Обычно первый указатель на интерфейс объекта клиент получает при создании объекта. Затем клиент может получить ссылку на требуемый интерфейс, запросив у объекта указатели с помощью IUnknown::Querylnterface.

Поскольку все интерфейсы СОМ наследуют IUnknown, в каждом интерфейсе есть функции QueryInterface, AddRef и Release.

Внутри COM объекта имеется виртуальная таблица (рис. 4.4), которая содержит указатели на реализуемые методы. Первые три строчки – это указатели на QueryInterface, AddRef и Release.

Метод QueryInterface. При помощи QueryInterface клиент определяет, поддерживается ли тот или иной интерфейс. Метод QueryInterface использует в качестве аргумента (Interface Identifier - IID) GUID), и возвращает указатель на определенный интерфейс.

Рис. 4.4. Виртуальная таблица COM объекта

Подсчет ссылок AddRef и Release.Пара функций AddRef и Rele a se реализуют технику управления памятью, основанную на подсчете ссылок (reference counting). Подсчет ссылок - простой и быстрый способ, позволяющий управлять жизненным циклом компонента. Компонент СОМ поддерживает счетчик ссылок. Механизм очень прост. Когда клиент получает в свое распоряжение некоторый интерфейс, значение этого счетчика увеличивается на единицу. Когда клиент заканчивает работу с интерфейсом, значение на единицу уменьшается. Когда оно доходит до нуля, компонент удаляет себя из памяти. Клиент также увеличивает счетчик ссылок, когда создает новую ссылку на уже имеющийся у него интерфейс. Внутри функции незачем подсчитывать ссылки для указателей на интерфейсы, хранящиеся в локальных переменных. Однако подсчет ссылок необходим при всяком копировании указателя в глобальную переменную или из нее - глобальная переменная может освободиться в любой момент и в любой функции. С точки зрения клиентов подсчет ссылок осуществляется для интерфейсов, а не для компонентов, для реализации компонента это не имеет значения. Компонент может поддерживать отдельные счетчики для каждого из интерфейсов, а может иметь один общий счетчик. Реализация не имеет значения до тех пор, пока клиент убежден, что подсчет ссылок ведется для самих интерфейсов. Поскольку компонент может реализовывать подсчет для каждого интерфейса, клиент не должен предполагать обратного. Подсчет ссылок для каждого интерфейса в отдельности означает, что клиент должен вызывать AddRef именно для того указателя, с которым собирается работать, а не для какого-нибудь другого. Клиент также должен вызывать Release именно для того указателя, с которым закончил работу. Если клиент не вызвал функцию Release для некоторого из интерфейсов компонента, то компонент будет продолжать занимать память. Еще более неприятная ситуация возникает в случае, если клиент, например, дважды вызовет функцию Release, поскольку в этом случае объект будет уничтожен досрочно.

Допустимо существование в любой данный момент времени одного, двух или многих активных объектов одного класса.

Серверы объектов СОМ. Каждый объект СОМ реализуется внутри некоторого сервера.

Один сервер может поддерживать несколько классов. Выделяются следующие типа серверов:

- сервер «в процессе», который реализуется в виде в динамической библиотеке (.dll), т.е. исполняется в одном адресном пространстве с клиентом;

- локальный сервер, в котором объекты реализованы в отдельном процессе (.exe файл), исполняющемся на том же хосте, что и клиент;

- удаленный сервер, в котором объекты реализованы в DLL или в отдельном процессе, которые расположены на удаленном по отношению к клиенту хосте (в этом случае используются распределенная COM (DCOM)). С точки зрения клиента, объекты, реализованные любой из перечисленных выше трех разновидностей серверов, выглядят одинаково.

Доступ к методам объектов во всех случаях осуществляет через указатели интерфейсов.

Создание объектов СОМ. Библиотека СОМ. Клиент может получить указатель на один один из интерфейсов разными способами. Например, указатель может быть передан другим клиентом, либо клиент может получить его от моникера. (Моникеры будут рассмотрены ниже).

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

Создание одного объекта. Самый простой способ создания одного неинициализированного экземпляра объекта показан на рис. 4.5.

Рис. 4.5. Способ создания одного неинициализированного экземпляра объекта







Дата добавления: 2015-08-29; просмотров: 1538. Нарушение авторских прав; Мы поможем в написании вашей работы!




Шрифт зодчего Шрифт зодчего состоит из прописных (заглавных), строчных букв и цифр...


Картограммы и картодиаграммы Картограммы и картодиаграммы применяются для изображения географической характеристики изучаемых явлений...


Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...


Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Этапы творческого процесса в изобразительной деятельности По мнению многих авторов, возникновение творческого начала в детской художественной практике носит такой же поэтапный характер, как и процесс творчества у мастеров искусства...

Тема 5. Анализ количественного и качественного состава персонала Персонал является одним из важнейших факторов в организации. Его состояние и эффективное использование прямо влияет на конечные результаты хозяйственной деятельности организации.

Билет №7 (1 вопрос) Язык как средство общения и форма существования национальной культуры. Русский литературный язык как нормированная и обработанная форма общенародного языка Важнейшая функция языка - коммуникативная функция, т.е. функция общения Язык представлен в двух своих разновидностях...

Примеры задач для самостоятельного решения. 1.Спрос и предложение на обеды в студенческой столовой описываются уравнениями: QD = 2400 – 100P; QS = 1000 + 250P   1.Спрос и предложение на обеды в студенческой столовой описываются уравнениями: QD = 2400 – 100P; QS = 1000 + 250P...

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

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

Studopedia.info - Студопедия - 2014-2024 год . (0.009 сек.) русская версия | украинская версия