dimanche 23 décembre 2001

Interface


INTERFACE

Dans le chapitre précédent, nous avons vu que nous pouvons déclarer des méthodes abstraites dans une classe mère. Les méthodes peuvent ensuite être définies dans les classes enfants.

Nous pouvons créer une interface au lieu d'avoir une classe avec de nombreuses méthodes abstraites. Une interface peut ressembler à une classe mais c'en est pas une. Une interface permet de déclarer plusieurs méthodes sans les définir. Elles sont très utilisées pour les objets com.



En delphi comparativement au langage C++ on peut seulement hériter d'une seule classe. Il est impossible de faire de l'héritage multiple (image ci-dessus) avec delphi tout comme java. C'est là que les interfaces deviennent intéressantes.
La structure d'une interface ressemble à

type nomInterface = interface (interfaceAncêtre)
  ['{GUID}']
  listeMembres
end;

La longue série de lettres et de chiffres dans l'interface est un identifiant numérique.
L'interfaceAncêtre et le GUID sont facultatifs.
Il est nécessaire d'en avoir un pour pouvoir faire des «QueryInterface» et des cast dynamiques
en utilisant cette interface, il n'est pas nécessaire pour le reste.

Il faut appuyer sur «Ctrl+Shift+G» dans le l'éditeur de code pour générer un GUID.
Un exemple d'une interface

type
  IEncrypt = Interface
  ['{F26B6D20-F718-11D5-8E23-BCD4F752513A}'] //GUID
  function Encrypt(S: String; Key: Word): String;
  function Decrypt(S: String; Key: Word): String;
end;

Il est impossible de déclarer des méthodes virtual, dynamic, abstract ou override étant
donné que les interfaces n'implantent pas les méthodes. Seulement des propriétés et des
méthodes peuvent être utilisés dans les interfaces.
Code source disponible ici