Смекни!
smekni.com

Что такое COM - современный взгляд (стр. 1 из 2)

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

Харківський національний університет радіоелектроніки

Кафедра економічної кібернетики

Контрольна робота

З дисципліни «Сучасні економічні технології»

ПІБ студента: Яницька Катерина Юріївна

Курс: ІІІ

Група: ЕКз-04-06

Шифр:

Домашня адреса: м. Маріуполь, пр. Будівельників 109 - 73

Телефон: 8(0629)33-34-76

Харків 2006


План

1. Что такое СОМ

2. Двоичный стандарт (или независимость от языка программирования)

3. Особенности применения


COM - это Component Object Model, т.е. Компонентная Объектная Модель. Модель эта разработана фирмой Microsoft и служит разработчикам программного обеспечения уже более 10 лет.

COM не является единственной доступной в настоящее время объектной моделью, и даже не является самой развитой из имеющихся. Существуют альтернативные модели, например, CORBA, которая поддерживается OMG (Object Management Group) и реализована на различных аппаратных и программных платформах.

COM реализована в среде операционных систем семейства Microsoft Windows. COM имеет эталонную реализацию от Microsoft. Это обеспечивает высокую степень совместимости компонентов, написанных различными производителями ПО. Проблемы совместимости весьма актуальны, например, для той же CORBA, которая при ее отсутствии в принципе могла бы составить весьма существенную конкуренцию COM.
Объектная модель Microsoft возникла не сразу, она развивалась более 10 лет, время от времени меняя название. Аббревиатуры OLE, OLE2, COM, DCOM, COM+, ActiveX – это различные ипостаси COM.

Идея COM возникла не на пустом месте. С момента появления первых компьютеров стало очевидно, что задача создания программного обеспечения для них не столь тривиальна, как могло бы показаться со стороны. И проблема эта усугублялась буквально с каждым днем, т.к. оборудование дешевело и становилось доступным, а значит, все новые категории пользователи присоединялись к существующим, добавляя свои задачи к списку нерешенных.

Одним из краеугольных камней в фундаменте любой технологии является унификация. При создании любого нового устройства обычно оказывается, что большая часть его компонентов уже была использована в аналогичных изделиях. Сначала появилась концепция подпрограммы, которая позволила вызывать фрагмент кода многократно из разных участков программы, избегая дублирования. Затем в качестве естественного развития появилась идея создания библиотек стандартных подпрограмм. Первые библиотеки подключались к главной программе на уровне исходного текста – к колоде перфокарт с программой добавлялась пачка карт со стандартными подпрограммами, и вся эта конструкция подвергалась совместной компиляции.

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

Подход с использованием объектных библиотек, безусловно, прогрессивнее, но тоже не решает всех проблем. Первая из них – различные языки используют различные механизмы передачи параметров подпрограммам. Вторая серьезная проблема – это невозможность проверить соответствие количества и типов фактических параметров формальным при вызове подпрограммы как на этапе компиляции, так и во время выполнения. Подобные ошибки происходят довольно часто по небрежности либо из-за плохого качества документации к библиотекам и приводят к весьма неожиданным и непредсказуемым сбоям во время выполнения программы.

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

Вместо традиционной подпрограммы модель COM предлагает более высокоуровневую конструкцию – компонент, который гораздо лучше, чем подпрограмма, согласуется с общепринятыми нынче принципами объектного проектирования и программирования.

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

Многоразовое использование программного обеспечения является одной из первоочередных задач при его разработке и обеспечивается составляющими его модулями, которые должны работать в разнообразных средах. Обычно программное обеспечение разрабатывается с использованием определенного языка программирования, например C++, и может эффективно применяться только в том случае, если другие разработчики компонентов также применяют C++.

Например, если мы разрабатываем С++ - класс, предназначенный для манипулирования с данными, то необходимым условием его использования в других приложениях является их разработка на языке C++. Только С++ - компиляторы могут распознать С++ - классы. Фактически, поскольку средства C++ не поддерживают никакого стандартного способа адаптации вызовов С++ - функций к новой программной среде, использование программного обеспечения в этой новой среде требует применения такого же (или аналогичного) инструментального средства для его обработки. Другими словами, использование класса в другой операционной среде требует обязательного переноса в эту среду исходного текста программы данного класса.

Применение двоичного кода позволяет разработчику создавать программные компоненты, которые могут применяться без использования языков, средств и систем программирования, а только с помощью двоичных компонентов (например, DLL- или ЕХЕ - файлов). Эта возможность является для разработчиков очень привлекательной. Ведь теперь они могут выбирать наиболее удобный для себя язык и средство разработки компонентов, не заботясь о языке и средствах, которые будет использовать другой разработчик.

Сравнение объектов C++ и СОМ

C++-объект (экземпляр класса) СОМ-объект
Позволяет использовать только один общий интерфейс, представляющий собой множество С++-методов. Обычно предоставляет более одного общего интерфейса
Зависит от языка программирования. Обеспечивается независимость от языка - CОМ-объекты реализуются и используются в различных языках программирования.
Отсутствует встроенная возможность проверки версии. Поддерживается встроенный способ проверки версий объектов. Обеспечивается независимость от местоположения на жестком диске.

Другое важное свойство СОМ известно под названием независимости от местоположения (Location Transparency). Независимость от местоположения означает, что пользователь компонента, клиент, не обязательно должен знать, где находится определенный компонент. Клиентское приложение использует одинаковые сервисы СОМ для создания экземпляра и использования компонента независимо от его фактического расположения. Компонент может находиться непосредственно в адресном пространстве задачи клиента (DLL-файл), в пространстве другой задачи на том же компьютере (ЕХЕ-файл) или на компьютере, расположенном за сотни миль (распределенный объект). Технологии СОМ и DCOM (Distributed СОМ - распределенная СОМ) обеспечивают независимость от местоположения. Другими средствами, реализующими эту способность, являются сервисы распределенных объектов. Аналогичные возможности обеспечивает стандарт CORBA. Поскольку клиентское приложение взаимодействует с СОМ - компонентами, вне зависимости от их положения, одинаковым образом, интерфейс клиента тоже не меняется. Независимость от местоположения позволяет разработчику создавать масштабируемые приложения.

Основная особенность COM – это независимость от языка программирования. Нередко встречается ситуация, когда клиентское приложение, написанное на Visual Basic, использует компоненты, созданные посредством Visual C++. Для достижения этой независимости в COM имеются собственный механизм передачи параметров и собственная система типов, нейтральные по отношению к используемым языкам программирования.

Для того чтобы избавиться от языковой зависимости, в СОМ было введено два фундаментальных понятия: тип данных VARIANT и интерфейс.

Тип данных VARIANT знаком тем, кто имеет опыт работы с MS Visual Basic, поскольку из всех систем программирования из состава MS Visual Studio именно VB имеет наибольшую ориентацию в направлении СОМ. Переменная типа VARIANT может хранить практически что угодно: логическое, целочисленное или действительное значение, дату, указатели на них, на массив или интерфейс и т.п. Причем такая переменная хранит не только значение, но и «знает», к какому типу оно относится. Это позволяет наладить контроль типов на этапе выполнения, поскольку компилятор не знает, что на самом деле окажется в этой переменной в дальнейшем.

Физическая реализация типа VARIANT весьма проста. Если посмотреть ее описание на языке С, то мы увидим простую структуру с двумя полями: тег (VARTYPE vt), который хранит информацию о типе содержимого переменной (VARTYPE - это перечисление всевозможных «подтипов» VARIANT), и объединение (union), в котором собраны воедино все эти подтипы.