Сущность технологии СОМ. Библиотека программиста - Страница 2
Эта податливость достигнута благодаря тому, что разработчики СОМ поставили во главу угла принцип: ядро модели будет настолько простым, насколько это необходимо, но не более. Одной из наиболее явных сторон этого подхода является нудность программирования на СОМ на сегодняшний день. Программисты, работающие на С или C++, должны возиться со всей этой ерундой, в том числе с GUID и со счетчиками ссылок. Можно было бы добавить к СОМ всякого рода усовершенствования с целью упрощения работы с ней. Но разработчики вместо этого акцентировали внимание на том, чтобы заставить модель работать. Они считали, что если они достигнут успеха, то сервисную поддержку можно будет обеспечить позднее. И это предположение было подтверждено недавними выпусками простых в употреблении инструментов СОМ, таких как Visual Basic, поддержка СОМ в Visual C++ 5.0, а также Active Template Library. К тому времени, когда вы читаете этот текст, фирма Microsoft должна уже объявить о своих будущих планах радикально упростить разработку СОМ с помощью внедрения общего времени выполнения (runtime), которое будет доступно для всего инструментария: СОМ+.
Любая технология, распространенная так широко, как СОМ, начинает обрастать фольклором. Ради забавы приведу несколько, возможно, неизвестных вам тезисов. Некоторые из них даже правдивы.
Огромное множество людей из различных групп по всей фирме Microsoft внесли серьезный вклад в разработку СОМ, но главными архитекторами СОМ были Боб Аткинсон (Bob Atkinson), Тони Вильямс (Tony Williams) и Крейг Виттенберг (Craig Wittenberg). Все трое по-прежнему в Microsoft за работой над воистину редкостной чепухой.
Боб, Тони и Крейг были частью кросс-группы, получившей привилегию создания базовой технологии, которая позволила бы воплотить в жизнь мечту Билла Гейтса о IAYF (Information at Your Fingertips – информация на кончиках ваших пальцев)[4]. Но хотя эти трое прекрасно осознавали грядущую мощь СОМ, на деле они были обременены выпуском того, что лишь использовало СОМ: OLE 2.0. Это помогает объяснить, почему оформление документации для собственно СОМ заняло столько времени. Жаль.
Первая реализация СОМ была выпущена в свет как часть программного продукта OLE 2.0 в мае 1993 года.
Корневой интерфейс (тогда он еще не назывался IUnknown) имел в своем составе метод GetClassID. Тот факт, что он был перемещен в IPersist, иллюстрирует принцип поддерживать модель СОМ настолько простой, насколько это возможно.
В одно время IUnknown не имел метода AddRef. В дальнейшем стало ясно, что запрещение копирования указателей интерфейсов – слишком жесткое ограничение для пользователей.
«Unknown» в «IUnknown» возник как результат создания Тони Вильямсом в декабре 1988 года внутреннего документа фирмы Microsoft под названием Object Architecture: Dealing with the Unknown—or—Type Safety in a Dynamically Extensible Class Library (Архитектура объектов: борьба с неизвестным – или – безопасность типов в динамически расширяемой библиотеке классов).
Решение использовать RPC в качестве механизма межпроцессорного управления (interprocess remoting mechanism) было принято в первые два месяца 1991 года. Служебная записка Боба Аткинсона, озаглавленная IAYF Requirements for RPC (Технические требования IAYF для RPC), документирует требования, предъявленные команде создателей RPC теми, кого впоследствии назвали «командой IAYF». Эта команда отвечала за создание основы того, что осуществило бы мечту Билла Гейтса об «Information at Your Fingertips». Этой основой и была СОМ (хотя тогда она еще так не называлась).
Моникеры (monikers) намного мощнее, чем вы думаете.
Это Марк Райланд (Mark Ryland) виноват в том, что некоторые расшифровывают аббревиатуру СОМ как «Common Object Model» (модель общих объектов). Он глубоко сожалеет об этом и рассыпается в извинениях.
«MEOW» (мяу) в действительности не является сокращением Microsoft Extensible Object Wire (наращиваемый провод для объектов Microsoft). Это шутка Рика (Rick).
Windows NT 3.5 включали в себя первые версии 32-разрядных СОМ и OLE. Кто-то случайно оставил «#pragma optimization off» в одном из основных заголовочных файлов. Упс! (Oops).
Нет ни одной книги (на английском) о СОМ, DCOM, OLE или ActiveX, которую бы я не прочитал. Вы, вероятно, найдете мое имя в качестве технического обозревателя в списке разработчиков. Я также сам написал множество статей об этих технологиях, и был первым издателем СОМ Specification (Спецификация СОМ). Я провел сотни презентаций СОМ для технических и нетехнических аудиторий. Из всего этого должно быть ясно, что я потратил огромное количество времени и энергии, чтобы найти наилучший способ объяснить, что такое СОМ.
А теперь, похоже, весь мой тяжкий труд пропал даром, поскольку после прочтения последнего чернового варианта этой книги мне стало ясно, что никто не объясняет СОМ лучше, чем Дон Бокс.
Надеюсь, что вы насладитесь этой прогулкой в той же мере, как и я.
Чарли Киндел (Charlie Kindel)
СОМовец (СОМ guy), корпорация Microsoft
Сентябрь 1997 г.
Предисловие Грэйди Буча
Порой о книге можно не просто сказать много хорошего, а сказать это дважды. Это одна из причин, по которой к книге Дона написано два предисловия – она заслуживает этого.
Если вы занимаетесь созданием систем для Windows 95 или NT, вы никак не можете обойтись без СОМ. Visual Studio, и особенно Visual Basic, скрывают некоторые сложности СОМ, но если вы: а) действительно хотите понять, что происходит «за кулисами» и/или б) использовать мощность СОМ, то книга Дона – для вас.
Что мне особенно нравится в этой книге, так это путь, которым идет Дон, освещая СОМ для читателя. Сначала перед вами открываются проблемы создания рассредоточенных и действующих одновременно систем; затем вам подробно и тщательно объясняют, как эти проблемы решает СОМ. Даже если вы не знаете абсолютно ничего о СОМ, когда начинаете читать эту книгу, вас проведут по простой и понятной концептуальной модели СОМ, после чего вы поймете все задачи, которые СОМ ставит перед собой, и вам станет ясен характер сил, придающих ему ту структуру и тот образ действий, которыми он обладает. Если же вы – опытный разработчик СОМ, то вы в полной мере оцените предложенные Доном остроумные и нестандартные способы применения СОМ для решения обычных задач.
СОМ – наиболее широко используемая объектная модель для разработки рассредоточенных и действующих одновременно систем. Эта книга поможет вам использовать СОМ для успешного развития такого рода систем.
Грэйди Буч (Grady Booch)
От автора
Моя работа завершена. Наконец-то я могу отдохнуть, осознав, что наконец изложил на бумаге то, что часто называют развернутой летописью СОМ. Книга отражает эволюцию моего собственного понимания этой норовистой технологии, которую фирма Microsoft в 1993 году сочла достаточно послушной для показа программистскому миру. Хотя я и не присутствовал на конференции профессиональных разработчиков по OLE (OLE Professional Developer's Conference), я по-прежнему чувствую себя так, как будто я занимаюсь СОМ всегда. После почти четырех лет работы с СОМ я с трудом вспоминаю доСOМовскую эру программирования. Тем не менее, я прекрасно помню свой мучительный путь через прерию СОМ в начале 1994 года.
Прошло около шести месяцев, прежде чем я почувствовал, что понял в СОМ хоть что-либо. В течение этого шестимесячного стартового периода работы с СОМ я мог успешно писать СОМ-программы и почти мог объяснить, почему они работают. Однако у меня не было органического понимания того, почему модель программирования СОМ была тем, чем она была. К счастью, в один из дней, а именно 8 августа 1994 года, примерно через шесть месяцев с момента покупки книги OLE2 изнутри (Inside OLE2), на меня снизошло прозрение, и в одночасье СОМ стал для меня понятен. Это никоим образом не означало, что я понимал каждый интерфейс СОМ и каждую API-функцию. Но я в значительной степени понял главные побудительные мотивы СОМ. А значит, стало ясно, как применить эту модель программирования к ежедневным программистским задачам. Многие разработчики испытали нечто похожее. А так как я пишу это введение три августа спустя, эти разработчики все еще вынуждены пройти сквозь этот шестимесячный период ожидания, прежде чем стать продуктивными членами сообщества СОМ. Я хотел бы надеяться, что моя книга сможет сократить этот период, но обещаний не даю.