Partager via


Interfaces et implémentations d’interface

COM fait une distinction fondamentale entre les définitions d’interface et leurs implémentations.

Une interface est en fait un contrat qui se compose d’un groupe de prototypes de fonction associés dont l’utilisation est définie, mais dont l’implémentation ne l’est pas. Ces prototypes de fonction sont équivalents à des classes de base virtuelles pures dans la programmation C++. Une définition d’interface spécifie les fonctions membres de l’interface, appelées méthodes, leurs types de retour, le nombre et les types de leurs paramètres, et ce qu’elles doivent faire. Aucune implémentation n’est associée à une interface.

Une implémentation d’interface est le code qu’un programmeur fournit pour effectuer les actions spécifiées dans une définition d’interface. Les implémentations de nombreuses interfaces qu’un programmeur peut utiliser dans une application basée sur des objets sont incluses dans les bibliothèques COM. Toutefois, les programmeurs sont libres d’ignorer ces implémentations et d’écrire leurs propres implémentations. Une implémentation d’interface doit être associée à un objet lorsqu’un instance de cet objet est créé et que l’implémentation fournit les services offerts par l’objet.

Par exemple, une interface hypothétique nommée IStack peut définir deux méthodes, nommées Push et Pop, en spécifiant que les appels successifs à la méthode Pop retournent, dans l’ordre inverse, les valeurs précédemment passées à la méthode Push. Cette définition d’interface ne spécifie pas comment les fonctions doivent être implémentées dans le code. Lors de l’implémentation de l’interface, un programmeur peut implémenter la pile en tant que tableau et implémenter les méthodes Push et Pop de manière à accéder à ce tableau, tandis qu’un autre programmeur peut utiliser une liste liée et implémenter les méthodes en conséquence. Indépendamment d’une implémentation particulière des méthodes Push et Pop, la représentation en mémoire d’un pointeur vers une interface IStack, et donc son utilisation par un client, est entièrement déterminée par la définition de l’interface.

Les objets simples ne prennent en charge qu’une seule interface. Les objets plus complexes, tels que les objets intégrables, prennent généralement en charge plusieurs interfaces. Les clients ont accès à un objet COM uniquement par le biais d’un pointeur vers l’une de ses interfaces, ce qui, à son tour, permet au client d’appeler l’une des méthodes qui composent cette interface. Ces méthodes déterminent comment un client peut utiliser les données de l’objet.

Les interfaces définissent un contrat entre un objet et ses clients. Le contrat spécifie les méthodes qui doivent être associées à chaque interface et le comportement de chacune des méthodes en termes d’entrée et de sortie. Le contrat ne définit généralement pas comment implémenter les méthodes dans une interface. Un autre aspect important du contrat est que si un objet prend en charge une interface, il doit prendre en charge toutes les méthodes de cette interface d’une manière ou d’une autre. Toutes les méthodes d’une implémentation n’ont pas besoin de faire quelque chose. Si un objet ne prend pas en charge la fonction impliquée par une méthode, son implémentation peut être un simple retour ou peut-être le retour d’un message d’erreur significatif, mais les méthodes doivent exister.

Objets et interfaces COM