Что такое «технология COM» и как с ней бороться?№3
...велики, но не беспредельны
COM
- многообещающая и перспективная
технология, находящаяся в русле общего
направления развития программных
технологий. С помощью COM можно
разрабатывать программы и программные
комплексы разного масштаба,
функциональности и назначения. COM -
социально-ориентированная технология,
поскольку она защищает как права
разработчика, так и кошельки пользователей…
Ну
просто не может быть, чтобы в такой бочке
мёда не было хотя бы маленькой ложки дёгтя!
И дёготь действительно есть…
Во-первых,
технология COM - сложная технология. Сложная
как в концепции, так и в реализации. Она -
намного сложнее, чем технология С++,
реализуемая компилятором. Эта сложность не
должна пугать - к настоящему времени
разработано достаточное количество
инструментов и средств разработки, которые
позволяют «легко писать» и «легко
использовать» COM-компоненты. Но эта
сложность есть. На её преодоление тратятся
ресурсы компьютера во время выполнения, а
слабо понимающий концепции COM программист,
несмотря на все эти редакторы, не сможет
создать что-то приемлемо работающее,
большее, чем примитивный пример. К счастью,
это стандартная проблема - умение
программировать есть не умение писать код,
а только умение мыслить соответствующими
категориями и конструкциями. И на VB можно
написать плохо работающую программу, хотя
на C++ сделать это значительно легче :). Никакая
технология не в состоянии предложить
приемлемого решения этой проблемы -
технические средства могут только избавить
от рутины, но не от необходимости думать и
понимать.
Во-вторых,
технология COM - замкнутая технология. Ее
решения применимы пока только на платформе Microsoft.
Нельзя сказать, что другие платформы не
предлагают ничего подобного, но это - другие,
несовместимые на двоичном уровне с COM
технологии.
В-третьих,
технология COM - неполна. Неполна в том смысле,
что она разрабатывалась «снизу», как
средство «склеивания модулей в единую
конструкцию». И до полноценного
проектирования распределенных приложений
она пока еще не добралась. Так что для тех,
кого интересует действительно изначально
кроссплатформенное распределённое
приложение, больше подойдет технология CORBA,
которая как раз для этих целей и
разрабатывалась «сверху».
В-четвертых…
давайте остановимся на этом. Всякое решение
имеет область своего определения, вне
пределов которой его использование
становится попыткой воспользоваться
ластами на заснеженном склоне. Технология
COM - не исключение. С использованием этой
технологии можно решить немало задач
уровня настольного приложения или уровня
локальной сети на платформе Microsoft. Это
получается очень удобно и практично - все
решения Microsoft так или иначе эту технологию
поддерживают, поэтому появляется
возможность их интеграции в собственное
изделие. Но на платформе COM нельзя решить
всех задач.
Для
читателя, который бы хотел сам сравнить
преимущества и недостатки технологий COM и
CORBA ниже я привожу две ссылки (фактически, в
Сети можно найти их значительно больше).
Следует знать, что принципиально эти
технологии сравнимы очень относительно,
поскольку ориентированы на решение задач
совершенно разного уровня и, если можно так
выразиться, ориентированы на решение задач
с разных концов. Я хочу напомнить - «COM или
CORBA?» это такая же «религиозная
война», как «C или Pascal?» или «NT или
Unix?»:
Если
приведенные на этих двух сайтах высокие
рассуждения не позволили вам
составить собственное мнение, то вот сайт,
содержащий рассуждения меньшего уровня на
ту же самую тему: Java
и ActiveX: что лучше для интрасети?
Кроме
того, следует знать, что наблюдается и
взаимная конвергенция - COM проникает в CORBA, и
CORBA проникает в COM. Имеется в виду то, что
исторически каждая из этих технологий
имеет «вотчину», с территории которой и
ведется религиозная война. Между тем,
необходимость и технологий COM/CORBA и вообще
кроссплатформенного взаимодействия -
экономическая, а не идейная. Поэтому, когда
возникает рыночный потенциал и возможная
прибыльность проекта конвергенции, эти
проекты немедленно возникают:
Кстати,
нужно где-то сказать и о том, что COM имеет
большое множество ассоциированных с собой
аббревиатур, технологий и торговых марок.
То, что мы сейчас называем COM в момент своего
рождения называлось совсем по другому, OLE -
Object Linking & Embedding - встраивание и связывание
объектов. (что, после небольшой
стилистической правки, соответствующей
русскому языку, вполне можно перевести как
ПиВО - привязывание и встраивание объектов)
«Чистая
OLE» породила технологию OLE Automation -
автоматизацию, а затем из OLE концептуально
выкристаллизовалась технология самого
нижнего уровня - COM. После этого Microsoft
переименовала OLE в ActiveX и заявила, что
COM
является не частью OLE, а самостоятельной
платформой. Платформой, на которой и
располагаются все другие «компонентные»
технологии. Поэтому ActiveX является
производной технологией, выстроенной на
платформе COM. От перемены названия суть
технологий (да и большая часть кода) не
изменилась - ActiveX и OLE являются
преемственными технологиями, а OLE Automation
вообще осталась почти в первозданном виде.
Впоследствии
Microsoft разработала на платформе COM набор
интерфейсов для доступа к базам данных и
опубликовала его под названием OLE DB, а также
предложила платформу промежуточного
уровня Transaction Server - MTS. При разработке
операционной системы Windows 2000 (NT 5.0) средства
MTS были встроены в систему (ранее это был
только option pack), и результирующая платформа
получила название COM+. Это многообразие не
должно сбивать с толку, все эти
наименования относятся к одной и той же
области понятий, база которой - COM.