Пояснительная записка (1230040), страница 4
Текст из файла (страница 4)
В объектно-ориентированной декомпозиции термины, которые используются при анализе и проектировании, наследуются прямо из предметной области. Это позволяет моделировать взаимоотношения реального мира естественным и адекватным образом, сохраняя семантические взаимосвязи между функциями и соответствующими данными. Например, при разработке системы резервирования авиабилетов определились бы такие сущности (объекты), как самолеты, маршруты, города и пассажиры. Пользуясь объектно-ориентированной декомпозицией, необходимо применить понятия, термины конкретной предметной области, а не искусственные конструкции системы разработки программного обеспечения. Объектно-ориентированная декомпозиция — это способ решения проблемы с объектной точки зрения. Употребляя объектно-ориентированную декомпозицию, внимание пользователя фокусируется на конкретном объекте. Дополнительно устанавливаются логические и семантические связи между объектами, их поведением.
Объект в объектно-ориентированных технологиях определяется следующим образом: объект — это самодостаточный программный модуль, который абстрактно описывает физическую или логическую сущность реального мира. Он скрывает (инкапсулирует) детали своей реализации и имеет общедоступный интерфейс. Объекты являются автономными программными модулями, которым присуши некоторое состояние на данный момент и определенное поведение. Состояние объекта — это его внутренние, то есть закрытые, данные и скрытые детали его реализации. Общедоступный интерфейс формирует поведение объекта. Он определяет, что объект может делать. Интерфейс реализован как набор функций, называемых методами.
Объект включает в себя функции и данные, на которые эти функции воздействуют. Функции и данные, благодаря такой организации, связаны семантически. Поскольку все объекты в объектно-ориентированной системе имеют семантическую связь, общая структура такой системы является более гибкой и ясной по сравнению с традиционными способами организации. Для современных информационных технологий понятие объекта является основополагающим.
1.8.2 Модель компонентного объекта (COM)
Модель компонентного объекта (Component Object Model — COM) — это вклад компании Microsoft в мир объектных моделей. Она служит основой для OLE, поэтому понимание ее чрезвычайно важно. СОМ представляет собой стандартную объектную модель промышленного уровня, которая унифицирует системы объектов. Эта модель специфицирует следующее:
-
Определение объекта. Правила, по которым объекты структурируются и особым образом располагаются в памяти.
-
Управление жизненным циклом. Правила, по которым объекты создаются и уничтожаются.
-
Протоколы взаимодействия между объектами. Правила, по которым объекты взаимодействуют друг с другом и проявляют свои функции.
Пользуясь СОМ, следует помнить одну важную вещь. СОМ является простой технической спецификацией, то есть представляет собой строгий набор правил, регулирующих базовую структуру объекта и его семантику. Сама по себе СОМ не предоставляет никаких функциональных возможностей, она лишь формулирует строгие технические предписания.
СОМ поддерживает простую модель "клиент-сервер". Объекты, называемые серверами, предоставляют некие функции в распоряжение объектов, называемых клиентами. Серверы всегда являются СОМ-объектами, то есть объектами, которые подчиняются спецификации СОМ. С другой стороны, клиенты могут быть СОМ-объектами или не быть таковыми. Это значит, что некоторые объекты могут быть простыми объектами C++ , приложениями Visual Basic, Delphi и т.п.
Клиенты и СОМ-серверы общаются друг с другом при помощи интерфейсов. Интерфейсы — это группы функций, которыми СОМ-объекты обычно пользуются для взаимодействия друг с другом и своими клиентами. Как было показано в предыдущей части, посвященной объектно-ориентированной технологии, проявление функциональных возможностей посредством интерфейса — это фундаментальная концепция объектно-ориентированного программирования. Используя исключительно интерфейсы, СОМ поддерживает логическую абстракцию и неуклонно проводит в жизнь строгую инкапсуляцию. СОМ-серверы могут одновременно иметь несколько интерфейсов (как правило, так и бывает). Каждый интерфейс предоставляет набор функций, отличный от других.
1.8.3 Архитектура OLE
Архитектура OLE (object linking and embeding) основана на модели компонентного объекта (СОМ). Сама OLE является унифицирующей технологией системного уровня, которая базируется на объектах и реализует интеграцию приложений. Она предоставляет клиентам набор объектно-ориентированных услуг. Можно сказать, что, с практической точки зрения, OLE — это набор системных библиотек (DLL-файлов), которые дают возможность прикладным программам взаимодействовать друг с другом. OLE является внутренней неотъемлемой частью операционной системы Windows, а не подсистемой. Например, в папке SYSTEM или SYSTEM32 на сетевом диске компьютера можно найти дюжину или даже больше файлов OLE *.DLL. Это — составляет ядро OLE.
В OLE изначально заложена возможность расширения. Однако в будущем не планируется новых "выпусков" в традиционном смысле этого слова. Так как когда компания Microsoft добавит в базовую архитектуру новые функции, она не станет называться OLE 2.2 или OLE 3.0. Она останется просто OLE. OLE состоит из нескольких различных технологий, которые пользуются услугами друг друга для формирования объектно-ориентированной системы. Каждая технология реализует определенный набор функций. Однако реальная сила OLE заключается именно во взаимодействии составляющих ее технологий. OLE-технология структурированного хранения, к примеру, позволяет приложениям реализовать постоянство объектов. При этом пользователь не знает, как библиотеки OLE реализуют детали этой технологии, например, каким образом и где именно данные объекта должны быть записаны или считаны с диска. Большое преимущество OLE состоит в том, что ее можно расширить и настроить по своему желанию. Можно легко переопределить встроенные функции (путем реализации соответствующих стандартных СОМ-интерфейсов) и расширить набор доступных функции, создав собственные пользовательские интерфейсы. Библиотеки OLE — это системные утилиты, посредством которых приложения могут взаимодействовать друг с другом, получать совместный доступ к данным, а также вызывать функции друг друга.
Компонент является фундаментом, на котором построена технология OLE. Компонент представляет собой предварительно созданный программный объект, который предоставляет клиентам четко определенный набор функций. Каждый компонент является отдельной сущностью, которая может быть определена и описана независимо от какого-либо конкретного программного пакета. Компоненты объединяются друг с другом различными способами, образуя законченные интегрированные программные системы.
Целью компонентного программного обеспечения является обеспечение возможностей для построения приложений путем комбинирования отдельных компонентов. Приложения будущего не будут такими огромными монолитами, какими они являются сегодня. Наоборот, они будут состоять из разных компонентов, взаимодействующих друг с другом для выполнения некоторых функций высокого уровня. Большое преимущество компонентов состоит в том, что их можно приобретать по мере необходимости у того поставщика, который предлагает лучшие компоненты. Пользователи могут покупать текстовые редакторы у одной компании, а программу для проверки орфографии у другой. Пока компоненты отвечают стандартным протоколам, они работают вместе как единое целое. Поэтому можно обновлять или заменять существующие компоненты, не затрагивая остальную часть системы. Компоненты взаимодействуют друг с другом посредством четко определенных интерфейсов. Чтобы компоненты стали жизнеспособными программными инструментами, они должны взаимодействовать в пределах системы типа OLE, которая дает возможность использовать их за рамками конкретной прикладной программы. Система должна поддерживать взаимодействие компонентов, не накладывая ограничений на способ их реализации. OLE представляет собой именно такую систему.
Далее в этой главе будут рассматриваться отдельные технологии OLE, непосредственно относящиеся к объектам, и их преимущества для пользователей.
Управление памятью. Чтобы зарезервировать область памяти, объект может вызывать любые доступные команды. Обычно при распределении памяти используются операторы из C++. Однако, если объекту необходимо передать блок памяти посредством OLE, он должен использовать встроенные функции.
Структурированное хранение. Структурированное хранение — это термин, который используется для описания технологии, обеспечивающей постоянство объектов. По сути, структурированное хранение является механизмом, который СОМ-объекты используют для считывания своих данных и записи их на диск. Данные становятся "структурированными" благодаря тому, что библиотеки OLE организуют их в виде логического файла. Эта технология сходна с тем, как файловая система организует файлы на жестком диске. Два основных понятия, используемые в структурированном хранении, — это поток и хранилище.
Хранилище является аналогом каталога файловой системы, а поток — аналогом файла. Хранилища могут содержать потоки и другие хранилища. В любой схеме структурированного хранения самое верхнее хранилище называется корневым. Оно представляет собой файл на диске (называемый структурированным файлом), который содержит логические хранилища и потоки более низкого уровня. Технология структурированного хранения позволяет объектам логически организовать и систематизировать хранение своих данных. Каждое хранилище и поток являются "именованными блоками", которые используются объектами для хранения различных данных. Библиотеки OLE обеспечивают необходимые для этого функции.
Библиотеки OLE предоставляют объектам возможность создавать и использовать хранилища и потоки для записи своих данных на диск. При этом библиотеки OLE сами заботятся о размещении информации на диске, тогда как объект заботится лишь о логическом размещении данных (то есть определяет логический поток или хранилище, куда будут записаны данные). Чтобы прочесть данные, объект открывает соответствующие хранилища и считывает данные из нужных потоков. При помощи структурированного хранения OLE абстрагирует конкретные детали физического хранения данных и передает большую часть функций управления операционной системе. Это именно то, что делает с диском файловая система. Когда приложение хочет надолго сохранить некоторую информацию, оно открывает файл, записывает данные на диск и закрывает файл. В какой кластер или сектор были записаны данные? Обычно это не интересует простого пользователя. Все, что ему нужно, — это чтобы данные были сохранены в конкретном файле. Неважно, где он физически размещен. Таким образом, технология структурированного хранения — это, фактически, то же самое, что файловая система для диска. Для реализации хранилищ и потоков библиотеки OLE используют СОМ-объекты. В хранилищах реализован интерфейс IStorage, а в потоках — интерфейс IStream. Чтобы приказать хранилищам и потокам выполнить некоторое действие, приложение получает указатель на интерфейс IStorage и/или IStream и вызывает соответствующие функции этих интерфейсов. Кроме логического разделения данных, структурированное хранение обеспечивает множественный доступ к данным и обработку транзакций.
1.8.4 Типы и библиотеки типов
Библиотеки типов предоставляют сведения об объектах, их методах, интерфейсах, типах данных и исполняемых модулях. Вся эта информация располагается в файле, содержащем данные в особом формате. OLE обеспечивает стандартные методы для создания библиотек типов и поиска информации в них. Так как информация о типе имеет стандартный, четко определенный формат, ее могут просматривать и отображать программы, называемые просмотрщиками объектов. А поскольку данные хранятся в файле, они могут быть получены даже тогда, когда в системе нет объектов такого типа. Между прочим, файл библиотеки типов (TLB-файл) является структурированным файлом. Каждое логическое хранилище и поток в нем имеют четко определенное имя, что позволяет различным просмотрщикам анализировать их.
Постоянные объекты. Постоянными называются объекты, которые знают, каким образом читать и записывать информацию о своем состоянии на диск. Эту информацию могут считывать различные экземпляры объекта. Например, прежде чем быть удаленным из памяти, объект записывает на диск данные о своем состоянии. При создании другого экземпляра объекта того же типа новый объект может отыскать эти данные в заранее определенном месте и восстановить предыдущее состояние. Контейнер (например, составной документ) обычно сообщает объекту о том, когда следует прочесть или записать в хранилище информацию о состоянии, однако эти действия объект выполняет самостоятельно. Это дает возможность разным объектам использовать различные схемы хранения и, в то же время, располагаться во множестве приложений-контейнеров, поддерживающих OLE. Когда составной документ записывается в постоянное хранилище, он приказывает всем своим СОМ-серверам сохранить себя в том же хранилище. Потом он передает каждому серверу указатель на поток ввода-вывода. Каждый сервер записывает свои данные в этот поток так, как считает нужным.
Унифицированная передача данных. Унифицированная передача данных (UDT) — это OLE-технология, которая позволяет объектам обмениваться информацией стандартным образом. Кроме определения стандартов для обмена данными, UDT позволяет объектам извещать заинтересованные стороны (другие объекты) о том, что данные изменились. Те клиенты, которых интересуют изменения данных, могут при этом предпринять соответствующие действия. Объекты, взаимодействующие при помощи UDT, могут находиться в одном или разных адресных пространствах. UDT заменяет устаревшую к настоящему времени технологию DDE (Динамический обмен данными). Имеются два значительных преимущества в применении OLE-технологии UDT по сравнению с традиционной технологией DDE и буфером обмена (clipboard):
-
UDT обеспечивает более подробное описание совместно используемых данных. В этой технологии для описания данных и среды, на которой эти данные располагаются, используются две структуры, FORMATETС и STGMEDIUM. Структура FORMATETC определяет обобщенный формат буфера обмена усовершенствованный таким образом, чтобы описывать целевое устройство (монитор, принтер, плоттер и т.д.), способ интерпретации данных (например, как уменьшенное или полноэкранное изображение) и среду их хранения (например, оперативная память или диск).
-
UDT дает возможность пользоваться другими средствами обмена, помимо физической памяти. К примеру, большое растровое изображение, может быть сохранено на диске в виде структурированного файла, и совместно использоваться посредством отображения файла в памяти. Имея дело с UDT можно гибко выбирать оптимальную среду хранения для тех данных, которые необходимо использовать совместно.
Соединяемые объекты. Соединяемые объекты позволяют устанавливать двунаправленный канал связи между объектом и его клиентами. В стандартной модели OLE клиент совершает вызовы для доступа к функциям объекта. Объект, однако, может дополнительно передать одному или нескольким своим клиентам информацию, которая не была затребована в запросе. Объекты, которые поддерживают пересылку клиентам дополнительной информации, называются соединяемыми. Соединяемые объекты называют также источниками советов, а клиентов — приемниками советов.
Технология Drag-and-Drop. OLE-технология Drag-and-Drop ("перетащить и отпустить") определяет визуальный, ориентированный на использование мыши способ обмена информацией с помощью буфера обмена. Посредством мыши пользователь может переносить информацию из одного объекта, который называется источником перетаскивания, в другой, называемый приемником перетаскивания. Объекты источника и приемника могут находиться в разных адресных пространствах. Технология Drag-and-Drop определяет строгий протокол взаимодействия, которого придерживаются источники и приемники.
Автоматизация. Автоматизация считается одной из самых мощных OLE-технологий. Это механизм, при помощи которого объект предоставляет другим объектам и приложениям доступ к своим методам (функциям) и свойствам (характеристикам). Объект, предоставляющий доступ к своим функциям, называется сервером автоматизации. Объект или приложение, которые используют функции или управляют действиями сервера автоматизации, называются контроллерами автоматизации. Серверы автоматизации существуют для того, чтобы обслуживать запросы и указания контроллеров автоматизации. Первоначально, автоматизация задумывалась как глобальная среда для написания сценариев. Однако впоследствии компания Microsoft решила позволить другим поставщикам разрабатывать языки сценариев и среды программирования и получать доступ к мощным OLE-объектам при помощи механизма автоматизации. Серверы автоматизации разрабатываются с помощью языков, которые позволяют придать им быстродействие и гибкость. Интерфейс IDispatch - это стандартный СОМ-интерфейс, который определяет функции автоматизации. Его должны реализовывать все серверы автоматизации.














