Основы COM. Рудалев В.Г - 4 стр.

UptoLike

4
сходит со сцены , уступая место технологии Microsoft .NET, а используется с
ней параллельно .
Причина столь широкого распространения состоит, прежде всего, в том, что
COM решает несколько важных проблем , стоящих перед разработчиками
сложных программных комплексов .
Во-первых это проблема создания единого, унифицированного и независимо-
го от языка программирования и архитектуры вычислительной среды (локаль -
ной или сетевой ) механизма обмена информацией между приложениями или
частями одного приложения.
Во-вторых, это проблема экспорта методов объектов между приложениями .
Традиционные DLL экспортируют (делают доступными извне) процедуры и
функции, а не объекты . Методы же объектов по своей сути не могут выпол-
няться вне контекста объекта , которому они принадлежат (принцип инкапсуля-
ции). Доступ к объектам, находящимся в отдельных процессах, выполняющих-
ся в изолированных адресных пространствах , традиционными способами не-
возможен в принципе.
В -третьих, применение пользователем компонентов сторонних разработчиков
(например, Delphi-компонентов ) в собственной программе может быть затруд -
нено конфликтами версий компонентов или несовместимостью языковой сре -
ды. Этот перечень проблем может быть продолжен.
Поддержка COM встроена в большинство современных языков программиро -
вания. Далее, без ограничения общности , мы будем рассматривать основные
принципы COM на примере среды программирования Delphi 6.
COM базируется на объектно - ориентированном программировании. Экземпляр
COM-объекта обычно называется просто объектом, а тип, который идентифи-
цирует этот объект, компонентным классом (component class или coclass).
COM-сервер программа, создающая COM-объект. Это всегда исполняемый
файл или динамически компонуемая библиотека (DLL). COM-клиент про -
грамма, обращающаяся к экспортируемым методам сервера .
Можно выделить три вида серверов .
1. Внутренний (In-Process) сервер. Представляет собой динамически компонуе-
мую библиотеку (DLL), которая может создавать COM-объекты для исполь -
зования в вызывающем (клиентском) приложении (DLL-сервер). Относится к
тому же процессу , что и клиентское приложение, использует его адресное
пространство. Разновидностью внутренних серверов являются компоненты
ActiveX, поставляемые в виде файлов *.dll, *.ocx и пригодные для редактиро -
вания в различных визуальных средах программирования (Visual C++, Del-
phi и др.).
2. Локальный или внешний сервер (Out-Of-Process Server). Создается отдель -
ным процессом на том же компьютере , что и клиентское приложение, но ра -
ботает, разумеется, в отдельном адресном пространстве. Хранится в виде
EXE-файлов (EXE-сервер). Примерами локальных серверов являются при -
ложения MS Word, Excel и др. из пакета MS Office.
                                           4
сход и т со сцены , уступая место технологи и Microsoft .NET, а и спольз уется с
ней параллельно.
При чи на столь ш и рокого распространени я состои т, преж д е в сего, в том, что
COM реш ает несколько в аж ны х проблем, стоящ и х перед раз работчи ками
слож ны х программны х комплексов .
В о-первы х –это проблема соз д ани я ед и ного, уни фи ци ров анного и нез ав и си мо-
го от яз ы ка программи ров ани я и архи тектуры в ы чи сли тельной сред ы (локаль-
ной и ли сетев ой ) механи з ма обмена и нформаци ей меж д у при лож ени ями и ли
частями од ного при лож ени я.
В о-в торы х, это проблема экспорта метод ов объектов меж д у при лож ени ями .
Т рад и ци онны е DLL экспорти рую т (д елаю т д оступны ми и з в не) процед уры и
функци и , а не объекты . М етод ы ж е объектов по св оей сути не могут в ы пол-
няться в неконтекста объекта, которому они при над леж ат(при нци п и нкапсуля-
ци и ). Д оступ кобъектам, наход ящ и мсяв отд ельны х процессах, в ы полняю щ и х-
ся в и з оли ров анны х ад ресны х пространств ах, трад и ци онны ми способами не-
в оз мож ен в при нци пе.
В -третьи х, при менени е польз ов ателем компонентов сторонни х раз работчи ков
(напри мер, Delphi-компонентов ) в собств енной программе мож ет бы ть з атруд -
нено конфли ктами в ерси й компонентов и ли несов мести мостью яз ы ков ой сре-
д ы . Э тотперечень проблем мож етбы ть прод олж ен.
Под д ерж ка COM в строена в больш и нств о сов ременны х яз ы ков программи ро-
в ани я. Д алее, без ограни чени я общ ности , мы буд ем рассматри в ать основ ны е
при нци пы COM на при мересред ы программи ров ани яDelphi 6.
COM баз и руется на объектно-ори енти ров анном программи ров ани и . Э кземпляр
COM-объекта обы чно наз ы в ается просто объектом, а ти п, которы й и д енти фи -
ци руетэтотобъект, –компонентны м классом (component class и ли coclass).
COM-сервер– программа, соз д аю щ ая COM-объект. Э то в сегд а и сполняемы й
фай л и ли д и нами чески компонуемая би бли отека (DLL). COM-кли ент – про-
грамма, обращ аю щ аясякэкспорти руемы м метод ам сервера.
М ож но в ы д ели ть три в и д а серв еров .
1. В нутренни й (In-Process) сервер. Пред став ляетсобой д и нами чески компонуе-
   мую би бли отеку (DLL), которая мож ет соз д ав ать COM-объекты д ля и споль-
   з ов ани яв в ы з ы в аю щ ем (кли ентском) при лож ени и (DLL-сервер). О тноси тсяк
   тому ж е процессу, что и кли ентское при лож ени е, и спольз ует его ад ресное
   пространств о. Раз нов и д ностью в нутренни х серверов яв ляю тся компоненты
   ActiveX, постав ляемы ев в и д ефай лов *.dll, *.ocx и при год ны ед ляред акти ро-
   в ани я в раз ли чны х в и з уальны х сред ах программи ров ани я (Visual C++, Del-
   phi и д р.).
2. Л окальны й и ли в неш ни й сервер(Out-Of-Process Server). Соз д ается отд ель-
   ны м процессом на том ж екомпью тере, что и кли ентскоепри лож ени е, но ра-
   ботает, раз умеется, в отд ельном ад ресном пространств е. Х рани тся в в и д е
   EXE-фай лов (EXE-сервер). При мерами локальны х серверов яв ляю тся при -
   лож ени яMS Word, Excel и д р. и з пакета MS Office.