Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТП лекции Раздел 4.doc
Скачиваний:
16
Добавлен:
28.09.2019
Размер:
2.56 Mб
Скачать

Тема 4.12. Com-технология.

4.12.1. Основные понятия.

Чтобы выполнить некоторые требования, предъявляемые к современным деловым приложениям, например легкость модификации и возможность много­кратного использования, была предложена концепция программных компонентов. Компонент — это дискретная часть программного обеспечения, предназначенная для выполнения отдельной, заранее определенной работы. Компонент может использоваться любой программой. Поскольку компонент автономен, его легко заменить. Использование компонентов — хорошая идея: можно один раз написать программный код компонента, а затем применять его в любом месте. Можно корректировать или совершенствовать функциональные возможности компонента, обновляя его или заменяя. Однако для таких изменений требуется наличие в системе некоего формального стандарта, которым мог бы руководствоваться любой пользователь, желающий создать компонент, чтобы быть уверенным в его совместимости и взаимозаменяемости.

Аббревиатура СОМ означает Component Object Model - компонентная объектная модель. Она является стандартом фирмы Microsoft для создания компо­нентов программного обеспечения. Указывает, кто и как должен их создавать, но не определяет, чем они в действительности являются.

Модель СОМ представляет собой инструкцию по созданию бинарно-совмес­тимых компонентов программного обеспечения. Это означает, что СОМ не является языком программирования, библиотекой программного кода или компи­лятором. Более того, поскольку модель СОМ представляет собой спецификацию по созданию бинарного кода, она позволяет строить компоненты, которые могут обмениваться информацией независимо от языка программирования или инст­рументальных средств, выбранных для их построения. Модель СОМ позволяет сконцентрироваться на разработке приложений, чтобы далее специ­альный фирменный компилятор создал из них скомпилированные компоненты.

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

Главная цель COM — предоставить разработчикам возможность создавать прило­жения, собирая их из уже готовых частей-компонентов. Компоненты — это не что иное, как физическая реализация бизнес-объектов. При создании такого приложения в реальности разработчи­ки сталкиваются с некоторыми техническими трудностями.

Во-первых, непонятно, как разместить компонент на компьютере или в сети и. если это удалось, как его запустить. Эти вопросы входят в компетенцию службы каталогов для компонентов. Если нет какого-либо стандарта, резко возрастают рас­ходы на изучение компонентов. Кроме того, из-за несогласованности алгоритмов, размещающих компоненты и создающих объекты, затрудняется повторное исполь­зование готовых компонентов. Ведь приложение должно уметь находить и выпол­нять не только компоненты, созданные для внутреннего применения, но и компо­ненты от сторонних производителей.

Вторая трудность состоит в создании стандартов взаимодействия приложений с компонентами. Как и в предыдущем случае, если таких стандартов нет, накладные расходы на изучение использования компонентов будут препятствовать повторно­му использованию кода. Идеальный механизм взаимодействия компонентов не дол­жен зависеть от их местонахождения; он должен работать независимо от того, су­ществует ли этот объект в процессе собственного или другого приложения на ло­кальном или на удаленном компьютере. Реализация удаленной связи и взаимодей­ствия между процессами очень сложна, но стандарты могут значительно сократить время, затрачиваемое на создание такого кода.

Третья трудность — языковая независимость. Все составляющие объекта — вы­деление памяти, названия методов, типы параметров, соглашения о вызовах и т. д. — должны быть определены так, чтобы объект можно было создать на одном языке программирования, а вызвать его из приложения, написанного на другом языке. При этом разработчики не должны тратить время на выяснение языка или инструментальных средств, с помощью которых был создан компонент. Без широ­кой поддержки инструментальных средств разные объектные модели разбивают рынок компонентов на мелкие части, что увеличивает затраты на поиск, приобре­тение и разработку компонентов.

И наконец, последняя проблема — сохранение возможности создания новых версий приложений и компонентов. Приложения, разработанные в разное время, могут использовать одинаковые компоненты, что ведет к конфликтам при запуске на одном компьютере. Кроме того, по мере совершенствования компонентов дол­жна сохраняться совместимость версий. Из-за постоянных обновлений может воз­никнуть проблема исправления существующих компонентов, расширения их фун­кций и их замены новыми компонентами.

Программный код компонента (Component code). Это то, что фактически исполняет возложенную на компонент работу. После задания инфраструктуры компонента, он должен выполнить определенную работу. Например, если компо­нент предназначен для выполнения работы, связанной с выписыванием счетов, то вы должны создать программный код компонента для подсчета итоговых сумм, просмотра имеющихся товаров и так далее.

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

GUID. Аббревиатура GUID (Globally Unique Identifier) означает глобально-уникальные идентификаторы, которые назначаются каждому компоненту СОМ и вновь созданному интерфейсу. Они однозначно идентифицируют компонент для операционной системы или другого программного обеспечения. Когда вы изменяете компонент или интерфейс, для них генерируется новый идентификатор GUID. Идентификатор GUID является 128-битовым целым значением; напри­мер для элемента управления Microsoft MSFlexGrid идентификатор GUID равен 6262D3AO-11CF-91F6-C286C385E30. Согласно спецификации СОМ можно без повторения создавать 10 000 000 идентификаторов в секунду на каждом компьютере в течение 3 240 лет.

GUID можно сгенерировать с помощью утилиты GUIDGEN из комплекта Microsoft Platform Software Development Kit (SDK). Это приложение создает GUID, вызывая функцию прикладного интерфейса CoCreateGuid, после чего предлагает выбрать способ его представления. Например, если выбрать статический постоян­ный (static const) идентификатор — обычный метод для включения идентификатора в файлы исходного кода на C++, получится следующее:

// {4C5ECD60-9DDF-11d4-881F-0020AF15C467}

static const GUID GUID_Sample =

{ Ox4c5ecd60, Ox9ddf, 0x11d4, { 0x88, Ox1f, 0x0, 0x20, Oxaf, 0x15, Oxc4, 0x67

}};

Первая строка содержит GUID в символьной форме, в которой его обычно и видят пользователи. Во второй и третьей строке GUID представлен в виде констан­ты, которую можно использовать в коде C++. Большинство средств разработки автоматизируют процесс создания кар­каса СОМ-компонентов. Они же генерируют соответствующий GUID в формате этого каркаса.

Каждый интерфейс идентифицируется по его GUID. Если нам нужно обратиться к интерфейсу, мы используем его GUID, который в данном случае называется идентитификатором интерфейса (interface identification, IID). В качестве IID могут высгупать, например, такие значения: {45D3F4BO-DB76-lldl-AA06-0040052510Fl} или {45D3F4Bl-DB76-lldl-AA06-0040052510Fl}.

Для простоты каждый интерфейс согласно стандарту должен иметь символьное название. Обычно такие названия начинаются с буквы «I» — например, IComputerSalesTax. Конечно, уникальность символьных имен не гарантируется, но маловероятно, что два разных интерфейса с одинаковыми названиями будут использоваться в одном исходном файле.

Бинарная совместимость (Binary compatible). Важно знать, что компоненты СОМ соответствуют требованиям, предъявляемым к стандартному бинарному коду (binary standard). Это значит, что независимо от языка, используемого для создания собственного компонента СОМ, он будет совместимым и пригодным для использования любыми другими компонентами СОМ. Например, если ком­понент, рассчитывающий объем ссуды (loan-calculator), написан в среде VC++, а ваш компонент пользовательского интерфейса создан в среде VB, то эти компо­ненты все-таки смогут воспользоваться имеющимися друг у друга службами.

Подобно другим техническим средствам программирования, модель СОМ имеет как свои достоинства, так и недостатки. Поэтому важно знать, где следует использовать СОМ, а где не следует.