Utilisation des interfaces

De RAD Studio
Aller à : navigation, rechercher

Remonter à Utilisation du modèle objet - Index

Delphi est un langage à héritage unique. Cela signifie que toute classe ne possède qu'un seul ancêtre direct. Toutefois, dans certains cas, vous pouvez souhaiter qu'une nouvelle classe hérite de propriétés et de méthodes de plus d'une classe de base afin de pouvoir l'utiliser parfois comme l'une et d'autres fois comme l'autre. Les interfaces vous permettent de réaliser cela.

Une interface est semblable à une classe ne contenant que des méthodes abstraites (méthodes sans implémentation) et une définition claire de leurs fonctionnalités. Les définitions des méthodes d'interface incluent le nombre et le type de leurs paramètres, le type de retour et le comportement prévu. Par convention, les interfaces sont nommées en fonction de leur comportement en préfixant leur nom par une lettre I en majuscule. Par exemple, une interface IMalloc doit allouer, libérer et gérer de la mémoire. De même, une interface IPersist peut être utilisée comme interface de base générale pour des descendants, chacun d'eux définissant des prototypes de méthode spécifiques pour le chargement et l'enregistrement de l'état d'un objet dans un stockage, un flux ou un fichier.

Une interface utilise la syntaxe suivante :

IMyObject = interface
  procedure MyProcedure;
end;

Voici un exemple simple de déclaration d'une interface :

type
IEdit = interface
  procedure Copy;
  procedure Cut;
  procedure Paste;
  function Undo: Boolean;
end;

Les interfaces ne sont jamais instanciées. Pour utiliser une interface, vous devez l'obtenir à partir d'une classe d'implémentation.

Pour implémenter une interface, définissez une classe qui déclare l'interface dans sa liste d'ancêtres, ce qui indique qu'elle implémentera toutes les méthodes de cette interface :

TEditor = class(TInterfacedObject, IEdit)
  procedure Copy;
  procedure Cut;
  procedure Paste;
  function Undo: Boolean;
end;

Alors que les interfaces définissent le comportement et la signature de leurs méthodes, elles n'en définissent pas les implémentations. Dès lors que l'implémentation de la classe se conforme à la définition de l'interface, l'interface est totalement polymorphe : son accès et son utilisation demeurent identiques dans toutes ses implémentations.

Rubriques

Voir aussi