106 votes

Qu'est-ce que le COM (Component Object Model) en un mot ?

Il semble que les objets COM soient des objets d'utilisation générale qui sont régis par le système d'exploitation. Les objets suivent une interface stricte et vous permettent d'interroger les objets pour déterminer des informations. Est-ce cela que sont les objets COM?

132voto

Carl Seleborg Points 7748

COM est un mécanisme qui permet la réutilisation d'objets (ou plutôt de composants), indépendamment des langages utilisés par le programmeur qui a implémenté le composant et le programmeur qui l'utilise, et indépendamment de savoir si le composant a été implémenté dans le programme du client ou ailleurs sur la machine (ou le réseau).

De manière générale, chaque composant COM fournit une implémentation d'une ou plusieurs interfaces. Ces interfaces sont définies de manière neutre par rapport au langage en utilisant le Langage de Définition d'Interface (IDL). Par exemple, l'une des interfaces fondamentales dans COM, IUnknown, est définie comme ceci :

interface IUnknown
{
   virtual HRESULT QueryInterface(REFIID riid, void **ppvObject) = 0;
   virtual ULONG AddRef(void) = 0;
   virtual ULONG Release(void) = 0;
};

Cette petite interface est fondamentale en COM, car chaque composant COM doit l'implémenter. Elle définit deux aspects importants de la machinerie COM :

  • QueryInterface permet au code appelant d'obtenir une implémentation pour une interface connue. En COM, les interfaces sont référencées par des GUID (également connus sous le nom d'Identifiants d'Interface, IID). Si un objet implémente plusieurs interfaces, c'est ainsi que le code client obtient une référence à chacune de ces interfaces. Cela agit comme une sorte d'opérateur de conversion, si vous voulez.
  • AddRef() et Release() implémentent le mécanisme de gestion de la mémoire pour les objets COM. Comme leur nom l'indique, le modèle le plus courant est le mécanisme de comptage de références, où une instance est détruite après que le dernier client ait libéré sa référence.

Tous les composants COM sont enregistrés dans le système lors de l'installation. Si un programmeur souhaite utiliser un certain composant, il doit :

  • S'assurer que le composant est installé à un emplacement accessible. La plupart du temps, il se trouve sur le système de l'application en cours d'exécution, mais COM+ permet également aux composants d'exister sur des ordinateurs distants.
  • Connaître le GUID du composant donné. Avec ce GUID, le client peut ensuite demander au système d'instancier le composant (en C, la fonction pour faire cela s'appelle CoCreateInstance()). Vous pouvez consulter le registre sous HKEY_CLASSES_ROOT\CLSID : chaque GUID dedans est (très probablement) un identifiant pour un composant ou une interface COM, et les entrées sous cette clé indiquent au système comment il doit être instancié.

La machinerie COM est extrêmement complexe. Par exemple, implémenter ou utiliser des composants COM en C nécessite une quantité énorme de travail, mais des langages de plus haut niveau comme Visual Basic ont beaucoup simplifié l'implémentation et l'utilisation de composants COM. Les avantages sont cependant très réels. Cela permet d'écrire une application en, disons, Visual Basic, mais d'implémenter quand même les algorithmes critiques en termes de performances en C ou C++ en tant qu'objets COM, qui peuvent être utilisés directement à partir du code VB. Le système se charge de marshalling des arguments d'appel de méthode, les passant à travers des threads, des processus et des connexions réseau au besoin, de sorte que le code client a l'impression d'utiliser un objet normal.

De nombreuses parties fondamentales de Windows sont basées sur COM. Explorer Windows (le gestionnaire de fichiers), par exemple, est essentiellement une coquille vide. Il définit un ensemble d'Interfaces COM pour naviguer et afficher des hiérarchies d'arborescence, et tout le code qui affiche réellement "Mon Ordinateur", les lecteurs, les dossiers et les fichiers est un ensemble de composants COM qui implémentent ces interfaces.

Avec l'avènement de .NET, COM devient lentement obsolète.

36voto

McDowell Points 62645

COM est un mécanisme qui a été développé pour permettre aux gens de distribuer des binaires qui pourraient être réutilisés même si l'appelant utilisait un autre compilateur C++ du fournisseur ou (au final) une langue différente.

Si vous voulez une bonne introduction à COM, lisez Essential COM par Don Box.

10voto

Igal Serban Points 7058

Vous ne pourrez pas battre wikipedia à ce sujet.

7voto

SnOrfus Points 6457

Pensez-y de cette façon : quand .NET est sorti, j'ai immédiatement pensé "Wow... c'est du COM, mais ça ne craint pas."

2voto

Steve Fallows Points 4059

Cela. :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X