Utilisation d'interfaces dans les applications distribuées
Remonter à Utilisation du modèle objet - Index
Dans les applications VCL, les interfaces sont des éléments fondamentaux des modèles d'objets distribués COM et SOAP. Delphi fournit des classes de base pour les technologies qui étendent la fonctionnalité d'interface de base de TInterfacedObject, qui implémente simplement les méthodes de l'interface IInterface.
Quand on utilise COM, les classes et les interfaces sont définies en termes de IUnknown plutôt que IInterface. Il n'y a pas de différence sémantique entre IUnknown et IInterface ; l'utilisation de IUnknown est simplement un moyen d'adapter les interfaces Delphi à la définition COM. Les classes COM ajoutent la fonction d'utilisation de factories et d'identificateurs de classes (CLSID). Les factories de classes sont responsables de la création des instances de classes via les CLSID. Les CLSID sont utilisés pour recenser et manipuler des classes COM. Les classes COM qui ont des factories et des identificateurs de classes sont appelées des CoClasses. Les CoClasses tirent profit des capacités de gestion des versions de QueryInterface, de sorte que lorsqu'un module logiciel est mis à jour, QueryInterface peut être appelée à l'exécution pour connaître les capacités actuelles d'un objet.
De nouvelles versions d'anciennes interfaces, ainsi que de nouvelles interfaces ou fonctionnalités d'un objet, peuvent devenir disponibles aux nouveaux clients de façon immédiate. En même temps, les objets gardent l'entière compatibilité avec le code client existant ; aucun recompilation n'est requise puisque les implémentations des interfaces sont cachées (les méthodes et les paramètres restent constants). Dans les applications COM, les développeurs peuvent changer l'implémentation pour améliorer les performances ou pour toute autre raison interne, sans perdre le code client basé sur cette interface. Pour plus d'informations sur les interfaces COM, voir Présentation des technologies COM.
Quand vous distribuez une application en utilisant SOAP, les interfaces sont requises pour transporter leurs propres informations de type à l'exécution (RTTI). Le compilateur ajoute les informations RTTI à une interface uniquement lorsqu'elle est compilée en utilisant le commutateur {$M+}. De telles interfaces sont appelées interfaces invocables. Le descendant de toute interface invocable est également invocable. Cependant, si une interface invocable descend d'une autre interface qui n'est pas invocable, les applications client peuvent appeler uniquement les méthodes définies dans l'interface invocable et dans ses descendants. Les méthodes héritées d'ancêtres non invocables ne sont pas compilées avec les informations de type et donc ne peuvent être appelées par les clients.
Le moyen le plus simple de définir des interfaces invocables est de définir votre interface de sorte qu'elle descende de IInvokable. IInvokable est identique à IInterface, sauf qu'elle est compilée en utilisant le commutateur {$M+}. Pour plus d'informations sur les applications Web Service qui sont distribuées en utilisant SOAP, et sur les interfaces invocables, voir Utilisation de services Web.