Размышляя о технологии COM...

Feb 07, 2010 23:38

В процессе поиска ответов о принципах действия COM-компонентов набрел на интересный ресурс: Архив статей "Что такое "технология COM". Автор Михаил Безверхов, дата опубликования 2001-2004 гг.

Если Вы читали последние посты, то наверное догадываетесь, что интерес к технологии COM связан с вопросом расширения функциональности Excel через так называемые COM-надстройки. Впрочем, не только этим. Скажем так, технология COM - это вообще мостик между MS Office и прочими программными продуктами, включая не только Visual Studio, но также и Java. Кроме того, концепция COM, которая стала ответом на реалии "кошмара DLL", должна быть тесно связана с проектом Framework .NET. Так, в частности, если процитировать Википедию, то получается следующее:

DLL hell как мотивация проекта .NET

В 2001 фирма Майкрософт определила подсистему .NET Framework для разработки пакетов (assemblies). Эта подсистема стала поддерживать общую библиотеку времени исполнения, присоединяя DLL к основному исполняемому классу.

В первых статьях, посвященных разъяснению сути технологии COM (см. раздел "Введение в предмет"), Михаил описывает основные черты технологии COM. Постараюсь их здесь обобщить (из главы "Технология COM - отличная технология... от других"):

1) компонента COM - это объект (или совокупность связанных объектов), что следует понимать в контексте концепции ООП, который хранится и используется как исполняемый бинарный файл (в этом смысле DLL - практически то же самое)
2) в отличие от DLL, вызов компоненты COM программой происходит также просто, как и вызов своей внутренней процедуры или функции (достаточно знать только имя, в то время как для DLL надо еще знать и путь, т.е.место расположения библиотеки - в принципе понятно, хотя неясно, как практически это осуществляется)
3) если в C# или Java объект - это некая абстракция, понятная только компилятору, которая при выполнении программы уже преобразуется в двоичный исполняемый код, то для COM-компоненты объект - это физическая реальность, уже существующая в рамках исполняемого файла в виде двоичного кода

Далее следует перечисление преимуществ COM-технологии (взято из главы "СОМ - возможности велики..."):

1) хранение объекта COM в виде двоичного кода обеспечивает кроссплатформенность - очень важное качество, которое позволяет использовать COM-объекты в разных операционных системах и в программах, написанных на разных языках (например, на том же Visual Basic)
2) из этой кроссплатформенности проистекает другое преимущество, которую я сам для себя обозначил как "автономность" и "универсальность" COM-объекта. Благодаря COM появляется реальная возможность обеспечить доступ к этой функции или алгоритму для других пользователей без дублирования и копирования текста программы в разных библиотеках.
3) из универсальности проистекает возможность создания распределенных приложений, то есть приложений, которые созданы путем соединения разных компонент через локальную или глобальную сеть. Это, как утверждается, едва ли не ключевое преимущество COM-технологии, объяснению которой посвящена практически вся вторая глава. Выберу оттуда только следующую цитату:

В этом - пожалуй, самое большое преимущество COM. Вы знаете, что практически никогда не встречается случай, когда бы ваша программа в момент ее окончания была бы именно тем, что вы представляли себе, когда начинали ее писать. Изменения технического задания, переделки во внутренней конструкции, изменение требований заказчика - да мало ли что может произойти, почему вдруг вашей программе понадобилось стать другой. Если вы работаете над большим проектом, то в какой-то момент времени это становится проклятием - вы не можете изменить что-то без того, чтобы не "поплыло" что-то другое. Если же ваш проект делается как "грамотный COM", то фактически, вы разбиваете его на много согласованно работающих, но самостоятельных частей. Причем - несущественно, работают ли эти части на одной машине или на нескольких... Конечно, и здесь не все так просто, но переконфигурирование безусловно проще переписывания и последующего полнообъёмного тестирования. Что делает COM очень удобной архитектурной платформой для проектов, масштаб которых заранее не очень понятен и впоследствии может измениться.

4) защищенность, которая обуславливается наличием контроля у программиста непосредственно над бинарным исполняемым файлом, а не над файлом, в котором записан текст программы на языке более высокого уровня. Об этом свойстве Михаил пишет так:

Если в исходном тексте программист волен использовать "те" объекты и не использовать "эти", но теряет всяческий контроль над тем, что он делал, как только исходный текст был скомпилирован, то при использовании COM эти возможности сохраняются на протяжении всего жизненного цикла программы.

Отсюда больше возможностей по защите своего труда от несанкционированного доступа, что имеет немалое значение при написании коммерческого кода.

Завершает свою вторую статью Михаил следующими словами:

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

Вот в следующий раз и продолжим :)

программирование, размышление, ссылка, концептуально

Previous post Next post
Up