Компонентная объектная модель


Модель компонентных объектов ( COM ) — это стандарт двоичного интерфейса для программных компонентов , представленный Microsoft в 1993 году. Он используется для обеспечения возможности создания объектов межпроцессного взаимодействия в большом количестве языков программирования . COM является основой для нескольких других технологий и сред Microsoft, включая OLE , OLE Automation , Browser Helper Object , ActiveX , COM+ , DCOM , оболочку Windows , DirectX , UMDF иСреда выполнения Windows . Суть СОМ заключается в независимом от языка способе реализации объектов, которые можно использовать в средах, отличных от той, в которой они были созданы, даже за пределами машин. Для тщательно разработанных компонентов СОМ допускает повторное использование объектов, не зная их внутренней реализации, поскольку это вынуждает разработчиков компонентов предоставлять четко определенные интерфейсы , которые отделены от реализации. Различная семантика распределения языков обеспечивается за счет того, что объекты несут ответственность за собственное создание и уничтожение посредством подсчета ссылок . Преобразование типов между различными интерфейсами объекта достигается с помощьюQueryInterfaceметод. Предпочтительным методом «наследования» в COM является создание подобъектов, которым делегируются «вызовы» методов.

COM — это технология интерфейса, определенная и реализованная в качестве стандарта только в Microsoft Windows и Apple Core Foundation 1.3 и более поздних версиях подключаемого интерфейса прикладного программирования (API). [1] Последний реализует только подмножество всего COM-интерфейса. [2] Для некоторых приложений COM был заменен, по крайней мере в некоторой степени, платформой Microsoft .NET и поддержкой веб-служб через Windows Communication Foundation (WCF). Однако COM-объекты можно использовать со всеми языками .NET через .NET COM Interop . Сетевой DCOM использует собственные двоичные форматы., а WCF поощряет использование обмена сообщениями SOAP на основе XML . COM очень похож на другие технологии интерфейсов компонентного программного обеспечения , такие как CORBA и Enterprise JavaBeans , хотя каждая из них имеет свои сильные и слабые стороны. В отличие от C++, COM предоставляет стабильный двоичный интерфейс приложения (ABI), который не меняется между выпусками компилятора. [3] Это делает COM-интерфейсы привлекательными для объектно-ориентированных библиотек C++, которые должны использоваться клиентами, скомпилированными с использованием разных версий компилятора.

Одним из первых методов межпроцессного взаимодействия в Windows был динамический обмен данными (DDE), [4] впервые представленный в 1987 году [5] , который позволял отправлять и получать сообщения в так называемых «диалогах» между приложениями. Энтони Уильямс , участвовавший в создании архитектуры COM, позже распространил в Microsoft два внутренних документа, в которых охватывалась концепция программных компонентов: « Архитектура объектов: работа с неизвестным — или — безопасностью типов в динамически расширяемой библиотеке классов» в 1988 г. и О наследовании: что это значит и как это использовать в 1990 году. Они легли в основу многих идей, лежащих в основе COM.Связывание и внедрение объектов (OLE), первая объектно-ориентированная платформа Microsoft, была построена на основе DDE и разработана специально для составных документов . Он был представлен в Word для Windows и Excel в 1991 году, а затем был включен в Windows, начиная с версии 3.1 в 1992 году. Примером составного документа является электронная таблица , встроенная в документ Word для Windows: по мере внесения изменений в электронную таблицу в Excel они автоматически появляются внутри документа Word.