1.2. Анализ механизма связывания и внедрения
Научно-технический прогресс 90-х годов обусловил неуклонный рост популярности объектно-ориентированного программирования (ООП), и в настоящее время многие программисты перешли в своей работе на С++ или Visual Basic. Уже существуют объектно-ориентированные базы данных, объектно-ориентированные дизайн и анализ и даже объектно-ориентированный СОВОL. На естественно возникающий вопрос - не остались ли Windows или операционные системы в объектно-ориентированном отношении далеко позади. Безусловно, нет. Продукт OLE ( Objekt Linking and Embedding ) компании Microsoft открывает новые пути для применения объектов в Windows. ОLE предполагает новый способ мышления. Программист в среде ОПП должен мыслить обо всем как об объектах - от файла на диске, элемента данных или приложения до аппаратного обеспечения и операционной системы. Кроме того, OLE заставляет программиста следовать строгому набору правил, на зависящих от языка программирования, операционной системы или даже от аппаратной платформы.
Введение в OLE. OLE служит основанием, на котором строятся объекты. Эта аббревиатура означала изначально связывание и внедрение объектов (Objekt Linking and Embedding) с выпуском версии ОLE 2 применение ОLE уже не укладывается в рамках, связывания и внедрения. ОLЕ сегодня включает в себя унифицированную передачу данных, структурированное хранилище информации и автоматизацию. Не следует сужать представление об ОLЕ связыванием и внедрением; смотреть на ОLЕ следует как на набор строительных блоков, позволяющих создавать сложные приложения. На самом деле Microsoft перестала расшифровывать аббревиатуру ОLE как Objekt Linking and Embedding, чтобы изменить сложившееся восприятие ОLЕ.) / 2 /
Предназначение и история ОLЕ. Если до появления OLE 1 у пользователя Windows имелась электронная таблица, которую ему нужно было вставить в документ текстового редактора, обыкновенно он должен был экспортировать данные из таблицы в файл стандартного формата, импортировать данные из файла в текстовый редактор, а затем в редакторе их переформатировать. Если пользователю везло и оба приложения поддерживали копирование и вставку, то вместо явного экспорта/импорта он мог копировать информацию через буфер Clipboard. Всякий раз, когда электронные таблицы изменялись, процесс переноса данных нужно было повторять. Это, естественно, приводило к лишней затрате времени и сил.
Но незадолго до выхода Windows 3.1 появилось ОLE 1, и это значительно упростило описанную использования общих данных в подобных приложениях (если они умели работать с ОLЕ). На смену операциям экспорта/импорта и копирования пришли связывание и внедрение. Стало возможным так подключить электронную таблицу к текстовому редактору, чтобы документ редактора отражал самые последние изменения, произошедшие в электронной таблице. Кроме того, электронная таблица (которая появилась в текстовом документе) может быть выбрана нажатием кнопки мыши. При этом автоматически запускается приложение электронной таблицы, позволяющее выполнять редактирование данных или другие специфические для таблиц операции. Команда Update закрывает электронную таблицу, и обновленная электронная таблица внедряется в документ текстового процессора.
OLE 2 является следующим логическим шагом в развитии этой стратегии. В ОLE 1 нажатие кнопки на электронной таблице, находящейся в документе текстового документа, приводило к запуску приложения в отдельном окне. В ОLЕ 2 вводится понятие активации по месту (также известное под названием визуального редактирования). Приложение электронной таблицы запускается как и прежде, но вместо отдельного окна электронная таблица как бы сливается с текстовым редактором. Изменяется меню, отражая меню электронной таблицы. Изменяется даже инструментальные линейки, но вы все равно находитесь в текстовом редакторе. Два приложения как бы соединяются и текстовый редактор приобретает функциональные возможности электронной таблицы. Так пользователю нужды переключаться для просмотра данных с одного приложения на другое; вы можете работать с приложением, которое удовлетворяет большинству ваших потребностей, и внутри него использовать возможности других приложений.
Для ОLE 2 пришлось переделать заново многое из существовавшего в ОLE 1 чтобы расширить его функции и улучшить производительность. Например, ОLЕ 1 построено на динамическом обмене данными (DDЕ). Для передачи информации туда и обратно DDE в своей основе использует сообщения Windows и возвратные вызовы. Поскольку используются сообщения Windows, DDЕ ограничивается рамками одной машины. OLE2 не опирается на DDE вместо этого оно построено на протоколе LPRC (Lightweight Remote Procedure Calls - легких удаленных процедурных вызовах).
Архитектура ОLЕ. Чтобы достигнуть своих задуманных функциональных возможностей, ОLE в качестве строительных блоков использует большое количество объектов. OLE содержит новые объекты для реализации таких концепций, как формировка (marshaling), которая обслуживает коммуникацию между процессами и опирается на LPRC; структурированное хранилище, которое обеспечивает хранение документов, содержащих другие документы; ярлык (moniker), управляющий подключением и переключением связанных данных. Каждый из этих механизмов необходим ОLE для выполнения своей работы. Кроме того, ОLE вводит понятие автоматизации, которое не требуется для связывания и внедрения в традиционном смысле. Автоматизацию можно понимать как способ, посредством которого пользователь может работать с вашим приложением внутри определенного им самим макроязыка. Сервер-автомат OLЕ управляется любым автоматным контроллером OLE (см. таблицу).
Приложения-автоматы - серверы и контроллеры.
Продукт | Автоматный сервер | Автоматный контроллер |
Visual Basic | да | да |
Exel | да | да |
Word 6.0 | да | нет |
AutoCad 12LT | да | нет |
PhotoShop 3.0 | да | нет |
CorelDraw 5.0 | да | нет |
Приложения которые одновременно являются и серверами и контроллерами могут как управляться из вне, так и управлять другими приложениями. В традиционном программировании приложение либо сервер, либо контроллер, но не одновременно и то и другое. OLE вынуждает расстаться с таким способом мышления и предоставляет разработчику приложения право выбора - будет ли его приложение сервером или контроллером.
Объекты. Под понятие о6ьекта ОLЕ попадает все, что может иметь машинное представление. Объектом может быть документ текстового процессора, рисунок или чертеж, также часть чертежа (допустим какой либо слой чертежа печатной платы), видео-клип, звук или даже приложение. Такое понимание расходится со стандартной интерпретацией, в которой объекты - данные, над которыми производятся манипуляции посредством функций и процедур. Хотя OLE поддерживает объекты только в рамках одной машины, это не ограничение архитектуры OLE, а лишь ограниченность ее реализации. Уже демонстрировалась версия OLE, названная распределенным ОLЕ, в которой границы между машинами для объектов прозрачны. Другими словами, если ваше приложение запрашивает OLE-объект, то поставщик этого объекта не обязательно находится на вашей машине, хотя с точки зрения вашего приложения ОLE -объект - локальный.
Интерфейсы. OLЕ интерфейс - это механизм, используемый для доступа к группе связанных с объектом функций. Если вы хотите выполнить в OLE операцию над объектом, можно запросить специфический интерфейс, имеющий нужную вам функцию. Когда вы запрашиваете интерфейс, то обращаетесь к объекту, указывая его ID-номер. Каждый интерфейс имеет уникальный номер-идентификатор (Interface ID или IID). Объект возвращает либо состояние ошибки, если объект не поддерживает запрашиваемый интерфейс или происходит другая ошибка, либо он возвращает указатель на требуемый интерфейс.
Компонентная модель объекта. Компонентная модель объекта (также известная под аббревиатурой СОМ) - это спецификация, определяющая связующий ОLЕ клей. СОМ определяет, каким образом объекты взаимодействуют. СОМ предусматривает для объектов ОLЕ такую специфику, в частности диктуя, какие интерфейсы объекту необходимы, как объект может быть создан и когда он может быть уничтожен.
Структурированное хранилище. Структурированное хранилище - это спецификация, определяющая метод хранения объектов. Структурированное хранилище можно представить себе как OLE-аналог DOS. Этот механизм поддерживает большинство из функций DOS - файлы и каталоги, копирование и перемещение файлов (файлы называются потоками, а каталоги - хранилищами. Кроме того, термин “структурированное хранилище” информации не подразумевает, что данные хранятся на диске. Так же как и файлы DOS, которые могут находится на RAM-диске, жестком диске, флоппи-диске или даже на CD-ROM, объекты, размещенные в структурированном хранилище, могут находиться в любом из этих мест, а также и в других. Чтобы DOS могла использовать для хранения информации другие устройства, такие, как оптический флоппи-диск или сетевой диск, обычно нужен драйвер устройства. Структурированное хранилище информации также имеет методы для поддержки нестандартных устройств.
Составной документ является специальным случаем структурированного хранилища, предназначенного для хранения наборов объектов в приложениях-контейнерах (контейнерные приложения - это приложения которые используют и сохраняют объекты).
Автоматизация. OLE-автоматизация - это надзор интерфейсов, в типичном случае псзволяющий использовать приложение в качестве ОLЕ объекта. Автоматизация возможна не только для приложений в форме исполняемых модулей (ЕХЕ), но и для динамически присоединяемых библиотек (DLL). Автоматизация позволяет посредством набора определенных правил извне запрограммировать или специализировать приложение. Это дает приложению, например, Visual Basic, возможность управлять Exel, в результате чего функции Ехсеl становятся доступны вашему приложению на Visual Basic. Автоматный контроллер OLE управляет объектами-автоматами через посредство автоматного сервера.
Унифицированная передача данных. Унифицированная передача данных - это набор интерфейсов, которые позволяют клиенту и серверу обмениваться данными. Она является DDE-эквивалентом и функций буфера cut/сору/paste, собранных воедино. Унифицированная передача данных посылает уведомление в случай если данные изменяются (подобно связи DDE), а также поддерживает переговоры о формате, в котором данные будут передаваться. Кроме того, унифицированная передача данных предусматривает возможность передачи одного лишь дескриптора (handle) данных вместо самих данных. Объект-сервер может решить, что вместо передачи 20 Мбайт данных в оперативную память через буфер обмена объекту-клиенту будет передан дескриптор данных, чтобы клиент сам мог их получить. Это избавляет сервер от необходимости чтения всех данных и передачи их клиенту, а клиента от необходимости самостоятельной обработки данных. Это также избавляет конечного пользователя от сидения перед экраном компьютера в ожидании окончания обмена.
Связывание и внедрение (Linking and Embedding). Связывание и внедрение - два принципа, которые по традиции известны в OLE (Objekt Linking and Embedding) лучше всего. Связывание и внедрение (вместо этого теперь говорят просто о документах ОLЕ) позволяют объекту-клиенту (который может быть другим приложением) прикрепиться к объекту-серверу. Присоединение может либо осуществляться связыванием (данные находятся вне составного документа), либо данные могут внедряться внутрь составного документа. Внедренные данные сохраняются непосредственно в документе, в то время как при связывании для доступа к данным OLE в действительности сохраняет своего рода дорожную карту. Дорожной карта называется ярлыком (moniker). Когда ОLЕ получает запрос на восстановления данных, оно смотрит на ярлык (дорожную карту), чтобы их отыскать. Связанные данные могут храниться в не принадлежащем ОLЕ файле или в структурированном хранилище (возможно даже, что данные находятся где-то в самом составном документе).
Составной частью связывания и внедрения является способность OLE выполнять активацию по месту. В OLE 1 при двойном нажатии кнопки мыши над связанным или внедренным объектом запускается сервер этого объекта. В ОLЕ 2 возможна активация по месту. Для пользователя два приложения являются как бы одним. Активация по месту присоединяет нужные части приложения сервера (такие, как пункты меню и инструментальные линейки) к приложению клиента, когда пользователь работает с внедренным объектом. При двойном нажатии кнопкой мыши над внедренным объектом происходит преобразование приложения клиента, в нем изменяются меню и линейки инструментов, а также прочие элементы интерфейса, для работы с приложением сервера внедренного объекта. При двойном нажатии кнопкой мыши над связанным объектом приложение сервер запускается в отдельном окне (как в OLE 1).
В терминах OLE описанное выше действие (двойное нажатие для активации сервера) называется активацией извне (outside-in). При активации извне сервер объекта не активируется (не запускается), пока пользователь не нажмет над объектом кнопку мыши дважды. Активация изнутри (inside-out) требует, чтобы объект-клиент активировал объект-сервер всегда, когда объект-сервер виден. Сервер принимает управление по однократному нажатию кнопки мыши - потому, что для активируемых изнутри объектов он уже запущен заранее.
Как можно видеть, архитектура ОLE достаточно богата, а связывание и внедрение - лишь часть общей структуры.
... самом деле включает в себя только данные и их структуру. Таким же образом как и структура OLE клиента, должна выглядеть структурная схема той части контроллера автоматически связываемых объектов, которая отвечающая за взаимодействие с механизмом связывания и внедрения Windows 95. Поскольку, по сути, контроллер должен являться клиентом практически для всех приложений присутствующих в системе, ...
0 комментариев