| [Домашняя страничка][Резюме][Фотоальбом][Диплом][Научные статьи] | |
|
|
|
3.2. Component Object Model (COM) |
|
Содержание 3-го вопроса Модель СОМ разрабатывалась с
учетом совместимости на бинарном уровне.
В качестве бинарных объектов элементы
СОМ рассматриваются в плане
взаимодействия с другими объектами. 3.2.1. Как работает
СОМ В
СОМ любая часть программного
обеспечения реализует свои сервисы как
один или несколько объектов СОМ. Каждый
такой объект поддерживает один или
несколько интерфейсов,
состоящих из методов. Метод — это функция или
процедура, которая выполняет некоторое
действие и может быть вызвана
программным обеспечением, использующим
данный объект (клиентом объекта). Методы,
составляющие каждый из интерфейсов,
обычно определенным образом
взаимосвязаны. Клиенты могут получить
доступ к сервисам объекта СОМ только
через вызовы методов интерфейсов
объекта — у них нет непосредственного
доступа к данным объекта. На Рис.3.3 показан объект СОМ. Большинство объектов СОМ поддерживают более одного интерфейса, и показанный здесь объект не исключение: у него три интерфейса, каждый из которых представлен маленьким кружком, связанным с объектом. Сам объект всегда реализуется внутри некоторого сервера (прямоугольник вокруг объекта). Рис. 3.3. Доступ к сервисам объекта
СОМ осуществляется через его интерфейсы. Сервер
может быть либо динамически
подключаемой библиотекой (DLL),
подгружаемой во время работы приложения,
либо отдельным самостоятельным
процессом. 3.2.2. Каждый интерфейс содержит
один или несколько методов Чтобы
вызывать методы интерфейса объекта СОМ,
клиент должен получить указатель на
этот интерфейс. Обычно СОМ-объект
предоставляет свои сервисы посредством
нескольких интерфейсов, и клиенту
требуется отдельный указатель для
каждого интерфейса, методы которого он
намерен вызывать. Любой СОМ-объект — это
экземпляр определенного класса.
Объекты одного класса могут,
например, реализовывать сервисы
корректировки орфографии и словаря
синонимов, тогда как объекты другого
класса — представлять банковские счета.
Обычно
знать класс объекта необходимо для
запуска экземпляра этого объекта,
выполняемого с помощью библиотеки
СОМ. Эта библиотека присутствует
на любой системе, поддерживающей СОМ, и
имеет доступ к справочнику
всех доступных на данной машине
классов СОМ-объектов. Клиент может,
например, вызвать функцию библиотеки
СОМ, передав ей класс нужного ему СОМ-объекта
и задав один из поддерживаемых объектом
интерфейсов, указатель которого нужен
клиенту в первую очередь. Затем
библиотека СОМ запускает сервер,
реализующий объекты данного класса.
Кроме того, библиотека возвращает
клиенту указатель требуемого
интерфейса вновь созданного экземпляра
объекта. Далее клиент может запросить
указатели на другие необходимые ему
интерфейсы непосредственно у самого
объекта. Получив указатель на нужный ему интерфейс выполняющегося объекта, клиент может использовать сервисы объекта, просто вызывая методы этого интерфейса. С точки зрения программиста, вызов метода аналогичен вызову локальной процедуры или функции. Но на самом деле код, выполняющийся по вызову метода, может быть частью или библиотеки, или отдельного процесса, или операционной системы и даже располагаться вообще на другом компьютере. Благодаря СОМ, клиентам нет нужды учитывать данные отличия — доступ ко всему осуществляется единообразно. Для доступа к сервисам, предоставляемым любыми типами программного обеспечения, используется одна общая модель (Рис. 3.4.). Рис 3.4. В СОМ приложение обращается к сервисам объекта (независимо от того, где последний расположен), вызывая методы некоторого интерфейса.
3.2.3. Объектно-ориентированный
подход в СОМ Объекты — центральная идея СОМ. Но определение и использование объектов здесь иногда отличается от других популярных объектных технологий. Чтобы понять соотношение СОМ и других объектно-ориентированных технологий, необходимо разобраться, что обычно стоит за термином "объектно-ориентированный" и как СОМ этому соответствует. 3.2.3.1.
Определение объекта Принято считать, что объект состоит из двух элементов: предопределенного набора данных (его также называют состоянием или атрибутами) и группы методов. Последние, реализуемые обычно в виде процедур или функций, позволяют клиенту запросить у объекта выполнение определенных задач. 3.2.3.2. Объект обладает как методами, так и данными. В
большинстве объектных технологий
объект поддерживает только один
интерфейс с одним набором методов. А вот
СОМ- объекты могут поддерживать более
одного интерфейса. Например, у С++-объекта
лишь один интерфейс, включающий в себя
все методы объекта. СОМ-объект с его
несколькими интерфейсами может быть
отлично реализован с несколькими
объектами C++ — по одному на каждый
интерфейс СОМ-объекта. Еще одна распространенная концепция в объектно-ориентированной технологии — понятие класса. Любой конкретный объект какого либо класса является экземпляром этого класса.
Класс
в СОМ понимается как конкретная
реализация набора интерфейсов. Может
существовать несколько разных
реализации одного и того же набора
интерфейсов, каждая из которых будет
отдельным классом. С точки зрения
клиента, только интерфейсы имеют
значение. Клиента
не касается реализация интерфейсов, т.е.
то, что фактически определяет класс.
Возможность работать с объектами разных
типов, каждый из которых поддерживает
данный набор интерфейсов, но реализует
их по-разному, называется полиморфизмом. 3.2.3.3. Инкапсуляция, полиморфизм и наследование Инкапсуляция
означает, что данные объекта недоступны
его клиентам непосредственно. Вместо
этого они инкапсулируются — скрываются
от прямого доступа извне. Единственный
способ доступа к данным объекта — его
методы. Инкапсуляция предохраняет
данные объекта от нежелательного
доступа, позволяя объекту самому
управлять доступом к своим данным.
Предотвращая случайные, некорректные
изменения данных объекта, инкапсуляция
может оказать значительную помощь в
создании более качественных программ. Хотя
СОМ и не является языком
программирования, идея остается той же
самой. Клиент имеет доступ к данным
объекта СОМ только через методы
интерфейсов этого объекта. Данные
объекта СОМ инкапсулированы. Второй
определяющей характеристикой объектно-ориентированных
технологий является полиморфизм.
Полиморфизм означает, что клиент может
рассматривать разные объекты как
одинаковые и каждый из объектов будет
вести себя соответствующим образом. Возможность
рассматривать разные вещи единообразно,
хотя каждая ведет себя по-своему, — суть
полиморфизма. Эту идею в полной мере
реализуют СОМ-объекты. Объекты двух
разных классов вполне могут
предоставлять своим клиентам
одинаковый набор интерфейсов или, может
быть, только одно общее определение
метода, даже если каждый объект
реализует соответствующие методы по-своему. Последняя
определяющая характеристика
традиционных объектно-ориентированных
технологий — наследование.
Виды наследования бывают разные.
Следует отметить различия наследования
реализации и наследования
интерфейса. В первом случае объект
наследует от своего родителя код. Когда
клиент дочернего объекта вызывает один
из унаследованных методов, на самом деле
выполняется код метода родителя. Однако
в случае наследования интерфейса
потомок наследует только определения
методов родителя. При вызове клиентом
потомка одного из этих методов
последний должен самостоятельно
предоставить код обработки запроса. СОМ-объекты
поддерживают только наследование
интерфейса. 3.2.4. СОМ и
многокомпонентные программы Повторное
применение — это путь к созданию
лучшего программного обеспечения.
Создание новых приложений из
существующих, протестированных
компонентов, вероятно, должно приводить
к более надежному коду. И — что не менее
важно — оно может быть гораздо быстрее и
дешевле. Именно
этот подход и реализуется в СОМ. Объекты
СОМ являются эффективным механизмом
применения повторного программного
обеспечения, так как позволяют
создавать дискретные, повторно
используемые компоненты. Рассмотрим
две наиболее распространенные схемы
повторного применения: библиотеки и
объекты. Как
механизм повторного применения,
библиотеки могут дать многое. Это
особенно верно для динамически
подключаемых библиотек, которые могут
загружаться по запросу и обычно
используются программами совместно, а
не компонуются статически с одним
приложением. Библиотеки привычны и
просты в использовании. Поскольку их можно распространять в двоичной форме, нет риска открыть секреты реализации исходного кода. Но библиотеки не лишены недостатков. Один из них — сложность расширения функциональных возможностей: как установить новую версию библиотеки и не повредить приложениям, ориентированным на старую? И где простой и легкий способ установить в системе более одной реализации одной и той же библиотеки, что может потребоваться в некоторых обстоятельствах? Библиотечный подход просто недостаточен. Благодаря
инкапсуляции данных и методов, объекты
также способны предоставить ясный
способ оформления повторно
используемых функциональных элементов.
Как и традиционные библиотеки, объекты,
предназначенные для решения
определенных проблем, можно создать
только раз и многократно использовать.
Но возможности объектов даже больше, чем
у библиотек. Наследование позволяет
объекту повторно задействовать
определение интерфейса другого объекта,
или его код, или и то и другое.
Полиморфизм упрощает повторное
применение, скрывая несущественные
различия от клиентов объектов. Несмотря
на все эти преимущества, до максимума
потенциальных возможностей объектной
технологии по повторному применению
программ еще далеко. Почему? Существует
ряд проблем: 1.
Самая важная проблема заключается в том,
что стандартов для компоновки двоичных
объектов в единое целое не существует. 2. Вторая проблема в том, что в приложении, написанном на одном языке трудно применить объект, написанный на другом. 3.
Третья проблема такова, что если создано
приложение из объектов, написанных на
языке типа C++, и затем возникла
необходимость изменить один из них, то в
лучшем случае придется перекомпоновать,
а может быть, и перекомпилировать все
приложение. Все
эти проблемы решены в СОМ. Объекты СОМ
можно собрать в библиотеки или
исполняемые файлы и затем
распространять в двоичном виде (без
исходных текстов). Так как СОМ
определяет стандартный доступ к этим
двоичным объектам, то СОМ-объекты,
написанные на одном языке, можно
использовать на другом. И так как
экземпляры объектов СОМ создаются,
только когда это действительно
необходимо, то после установки в системе
новой версии объекта все его клиенты
автоматически получат новый вариант при
следующем обращении к данному объекту.
Преимущества повторного использования,
предоставляемые СОМ, включают в себя
преимущества как библиотек, так и
объектов, а также и другие плюсы, которых
ни библиотеки, ни объекты сами по себе
предоставить не могут. И
главный плюс— универсальный метод
доступа ко всем типам программных
сервисов. 3.2.5. Преимущества
СОМ СОМ
предоставляет удобный способ
структурирования сервисов,
предоставляемых разными фрагментами
программного обеспечения. Разработчик
может вначале организовать проект в
виде СОМ-объектов, а затем определить
интерфейсы каждого объекта. Это одно из
традиционных преимуществ объектно-ориентированного
подхода к проектированию. Но СОМ идет
дальше, позволяя разработчикам
создавать программные компоненты,
которые можно распространять и повторно
использовать разными путями. Второе
преимущество СОМ — последовательность.
Общий подход к созданию всех типов
программных сервисов в СОМ упрощает
проблемы, с которыми сталкиваются
разработчики. Находится ли нужное
программное обеспечение в библиотеке, в
другом процессе, является ли частью
операционной системы, доступ к нему
всегда осуществляется единообразно. В
дополнение к этому СОМ безразличен язык
программирования. СОМ определяет
двоичный интерфейс, который должны
поддерживать объекты, поэтому объекты
СОМ можно создавать на любом языке,
способном поддерживать данный
интерфейс. Затем
обращаться к методам этих объектов
можно будет на любом языке, позволяющем
осуществлять вызовы данного двоичного
интерфейса. Ни объект, ни его клиент не
знают на каком языке написан другой. Еще
одно преимущество СОМ вытекает из ее
подхода к одной из сложнейших проблем
разработки и установки программ — контролю
версий (versioning) — т.е. как заменить
текущую версию программы на новую, с
дополнительными возможностями, не
повредив существующим клиентам старой
версии? Способность СОМ-объекта
поддерживать более одного интерфейса —
ключ к решению этой проблемы. Клиент
объекта СОМ должен получить указатель
нужного ему интерфейса. Дополнительные
возможности новой версии объекта можно
ввести через новый интерфейс. Старые
интерфейсы не изменяются (фактически
СОМ запрещает изменение существующих
интерфейсов), так что использующие их
клиенты не затрагиваются. Причем
старые клиенты никогда не запросят
указатель на новые интерфейсы. А вот у
новых клиентов имеется достаточная
информация, чтобы запрашивать новые
интерфейсы, реализующие дополнительные
возможности; таким образом, новая версия
повлияет только на новых клиентов. [Содержание]
|
|
[Диплом индекс][Доклад][Реферат Рус][Реферат Укр][Abstract] |
|
| Copyright (c) 1998-2001, Alexandr S. Lukichov
|
|