Component Object Model
Component Object Model (abr. COM) est une technique de composants logiciels développée par Microsoft et DEC, depuis 1994, populaire sur Windows et également disponible sur les systèmes d'exploitation OpenVMS, Tru64 ainsi que d'autres Unix[1]. Utilisée pour mettre en œuvre OLE et ActiveX, COM est dépassé depuis 2009 par le Framework .NET de Microsoft. Les technologies COM regroupent OLE, COM+, Distributed COM et ActiveX[2].
Pour les articles homonymes, voir COM.
Fonctionnalités
Component Object Model est une spécification créée par Microsoft, qui décrit comment un programme exécutable peut être emballé dans un objet par un programmeur, permettant l'utilisation de l'objet par d'autres programmeurs[3]. La spécification COM décrit une interface de programmation ainsi qu'un procédé de communication entre les objets qui est indépendant des langages de programmation[4].
Un des objectifs de COM est de faciliter la création de programmes par assemblage de composants, où chaque composant peut être mis à jour ou amélioré indépendamment des autres. Ceci est rendu possible par le fait que tous les composants peuvent être assemblés selon la même technique[5]. COM unifie la manière dont les composants mettent à disposition leurs fonctionnalités et la manière dont les autres programmes vont les rechercher et s'en servir[5]. Les programmes qui adhèrent à la spécification COM pourront être réutilisés dans plusieurs langages de programmation[6], tels que C, Visual Basic, Java, Delphi, FoxPro ou COBOL[6].
Caractéristiques
Un objet COM est essentiellement un programme qui met en œuvre une ou plusieurs interfaces de programmation. Chaque interface est une liste de fonctions. Toutes les interfaces sont dérivées de l'interface nommée IUnknown
[5]. Les objets COM peuvent être mis en œuvre par des fichiers .exe ou .dll de Microsoft Windows[4].
L'interface IUnknown
comporte trois fonctions: QueryInterface
, AddRef
et Release
. La fonction QueryInterface
permet à un programme de demander au composant COM les caractéristiques d'une interface qu'il met en œuvre. Les fonctions AddRef
et Release
servent à informer le composant qu'un programme est en train de s'en servir[5]. Plusieurs programmes peuvent se servir simultanément d'un composant COM. Un composant COM est exécuté dès qu'un programme s'en sert, et s'arrête automatiquement lorsqu'il n'est plus utilisé par aucun programme[5].
Historique
Un des pères de cette technologie fut Anthony Williams, qui la valorisa dans ses livres Object Architecture: Dealing With the Unknown - or - Type Safety in a Dynamically Extensible Class (1988) et On Inheritance: What It Means and How To Use It (1990).
OLE 1.0
La précédente technologie Microsoft orientée objet fut Object Linking and Embedding (OLE) 1.0, qui a été construit sur les Dynamic Data Exchange (DDE) et spécifiquement conçus pour les documents composés (par exemple lorsqu'un tableau est inséré dans un document Word des changements opérés sur le tableau Excel seront propagés dans le document Word). Cela fut introduit par Word et Excel en 1991 et dans Windows 3.1 un an plus tard. De même en 1991, Microsoft introduisit les contrôles Visual Basic, ou VBX grâce à Visual Basic 1.0.
OLE 2.0
En 1993, Microsoft sortit les OLE 2, et créa le COM comme modèle objet pour OLE 2. Alors que OLE 1 s'occupait principalement des documents composés, OLE 2 fut destiné à adresser des composants logiciels en général. En 1994, les contrôles OLE (OCX) furent introduits en tant que successeurs des VBX. Dans le même temps, Microsoft décida que OLE 2 s'appellerait simplement OLE, et qu'il ne désignait dès lors plus un acronyme, mais le nom des technologies composants de la firme.
En début d'année 1996, Microsoft renomma certaines parties de OLE concernant Internet, ActiveX, et petit à petit toutes les parties de OLE passèrent sous le signe ActiveX, exception faites des composants faits pour les documents composés et utilisés par exemple par Microsoft Office.
Produits connexes
COM sert de fondations aux technologies OLE et ActiveX[4] et est disponible dans divers langages de programmation. Les contrôles de Microsoft Foundation Classes (abr. MFC) sont des objets COM[7] et Active Template Library est un ensemble de modèles pour créer des objets COM en langage C++[6]. DCOM et COM+ sont des logiciels de service qui étendent les possibilités d'utilisation des objets COM.
Java RMI, IBM SOM, et CORBA sont des technologies similaires à COM. CORBA offre des fonctionnalités semblables à COM/DCOM. Il existe des logiciels de pont qui permettent d'utiliser un objet COM comme s'il s'agissait d'un objet CORBA ou inversement[8].
Depuis 2003 la technologie .Net remplace la technologie COM, elle offre bon nombre de ses avantages tout en corrigeant certains problèmes. .Net et Visual Studio offrent diverses possibilités d'utilisation conjointe des technologies COM et .Net. Un objet COM peut être utilisé dans un programme en .Net, par le biais d'un wrapper qui lui donnera l'apparence d'un objet .Net et un objet en .Net peut être utilisé pour mettre en œuvre un composant COM par le biais d'un wrapper qui lui donnera l'apparence d'un composant COM.
Distributed COM
DCOM est un logiciel middleware de type ORB : un logiciel moteur qui permet à des objets qui s'exécutent sur un ordinateur d'échanger des services avec des objets exécutés par un autre ordinateur. L´ORB fait appel à un ORB exécuté par l'autre ordinateur[9]. Il permet en particulier au programmeur de se servir de l'objet sans tenir compte du fait qu'il est sur un autre ordinateur, DCOM traitant automatiquement les communications entre les deux ordinateurs, y compris l'application du protocole Remote Procedure Call, l'authentification, la sérialisation et l'utilisation de la mémoire cache[10].
COM+
COM+ est une suite intégrée de logiciels composée de COM, DCOM et Microsoft Transaction Server. Ce dernier met en œuvre un environnement d'exécution pour les composants COM avec des fonctionnalités de regroupement des threads et des connexions aux bases de données, ainsi que des fonctionnalités d'exécution automatique des composants COM[11]. COM+ comporte un dispositif de contrôle d'accès à base de rôles[11], une console permet de manipuler un catalogue de composants. Une fois ajoutés au catalogue, ceux-ci peuvent être utilisés depuis un autre ordinateur, et un service se chargera d'arrêter l'exécution d'un composant en cas d'inactivité prolongée[12]. COM+ est incorporé dans Windows 2000[11].
OLE
OLE (pour Object Linking and Embedding) vise à permettre d'incorporer un document dans un autre document. Cette fonctionnalité utilise initialement la technique de communication entre programmes Dynamic Data Exchange (abr. DDE).
La version 2.0 de OLE n'utilise plus la technique de communication DDE[13] et la fonctionnalité est assurée par le partage d'un bloc de données entre différentes applications, le bloc en question est un objet COM. Un conteneur OLE est une application qui peut manipuler des blocs de données OLE, et un serveur OLE est une application qui peut produire des blocs OLE[4].
OLE 2.0 introduit une nouvelle fonctionnalité - Automation - qui permet à un programme de demander à un autre programme d'effectuer des opérations[13].
ActiveX
ActiveX est un buzzword[14] qui fait référence à une technologie destinée à transformer des pages web en applications qui, selon l'auteur, sont plus rapides que celles utilisant des applet Java. Dans les faits les objets ActiveX sont des objets COM avec quelques fonctionnalités de plus qui permettent de les utiliser sur le web[15]. Le nom ActiveX a été choisi pour se distancer de la fonction de liaison et incorporation d'objet (anglais Object Linking and Embedding abr. OLE) parce que l'objectif des contrôles ActiveX n'a plus rien à voir. Techniquement il n'y a pas de différence entre un objet COM et un objet ActiveX[7]: l'objet met en œuvre les interfaces IUnknown
et IDispatch
[13], la fonction QueryInterface
et la fonction DllRegisterServer
[16].
Représentation dans Common Information Model
Des classes CIM héritées des classes de base du CIM Schema définissent des fonctionnalités de COM. Parmi elles:
- Win32_COMClass[17] représente les propriétés d'un composant COM
- Win32_COMApplication[18], regroupement logique de classes COM.
- Win32_COMApplicationClasses[19] est une associatiohn abstraite qui lie une instance de Win32_COMClass avec une instance de Win32_COMApplication.
- Win32_COMSetting[20]: Les paramètres associés à un composant ou une application COM.
- Win32_DCOMApplication[21], propriétés d'une application DCOM
Notes et références
- (en) Gene Cronin et Terence P. Sherlock, Com Beyond Microsoft: Designing and Implementing Com Servers on Compaq Platforms, Digital Press - 2000, (ISBN 9781555582265)
- (en) « COM: Component Object Model Technologies » (consulté le )
- (en) Don Jones, Managing Windows With Vbscript and Wmi, Addison-Wesley Professional - 2004, (ISBN 9780321213341)
- (en)Steve Teixeira et Xavier Pacheco, Delphi 6 - Sams Developer's Guides, Sams Publishing - 2002, (ISBN 9780672321153)
- (en) Peter Walsh, Advanced 3D Game Programming with DirectX 10.0, Jones & Bartlett Learning - 2010, (ISBN 9781598220544)
- (en) Andrew W. Troelsen, Developer’s Workshop to COM and ATL 3.0, Jones & Bartlett Publishers - 2012, (ISBN 9781449683221)
- « support.microsoft.com - Différence entre les contrôles OLE et ActiveX »
- (en) Jason Pritchard, Com and CORBA Side by Side: Architectures, Strategies, and Implementations, Addison-Wesley Professional - 1999, (ISBN 9780201379457)
- (en) Network World, 10 août 1998,Vol. 15 - N° 32, (ISSN 0887-7661)
- (en) R Rock-Evans, Dcom Explained, Digital Press - 1998, (ISBN 9781555582166)
- (en)Peishu Li, Visual Basic and COM+ programming, Que Publishing - 2000, (ISBN 9780789724588)
- (en)Juval Löwy, COM and .NET: Component Services, O'Reilly Media, Inc. - 2001, (ISBN 9780596001032)
- (en) Dave Roth, Win32 Perl Programming: The Standard Extensions, Sams Publishing - 2001, (ISBN 9781578702169)
- (en)James D. Foxall, McSd in a Nutshell: The Visual Basic Exams, O'Reilly Media - Inc., 2000, (ISBN 9781565927520)
- (en)InfoWorld, 19 mai 1997,Vol. 19 -no 20, (ISSN 0199-6649)
- « microsoft.com - Introduction to ActiveX Controls »
- Win32_COMClass class
- Win32_COMApplication class
- Win32_COMApplicationClasses class
- Win32_COMSetting class
- Win32_DCOMApplication class
Voir aussi
Articles connexes
- Pour l'identifiant de classe OLE (le CLSID), voir GUID.
- UNO
- D-Bus
- Bonobo
- WCF
- VBScript
- Windows PowerShell
- Cocoa (Apple)
- AppleEvents : Système de communication inter-application sous Mac OS ;
Liens externes
- COM sur microsoft.com
- ActiveXObject dans les scripts Windows
- COM for HP OpenVMS Version 1.4, documentation de HPE
- Portail de Microsoft
- Portail de la programmation informatique