Interfaces dans la programmation Delphi 101

Dans Delphi, "interface" a deux significations distinctes. Dans le jargon OOP, vous pouvez considérer une interface comme une classe sans implémentation. Dans Delphi, la section d'interface de définition d'unité est utilisée pour déclarer toutes les sections publiques de code qui apparaissent dans une unité. Cet article expliquera les interfaces du point de vue POO.

Si vous êtes en train de créer une application solide comme une manière que votre code soit maintenable, réutilisable et flexible, la nature POO de Delphi vous aidera à conduire les premiers 70% de votre itinéraire. Définir des interfaces et les implémenter aidera avec les 30% restants.

Classes abstraites

Vous pouvez considérer une interface comme une classe abstraite avec toute l'implémentation supprimée et tout ce qui n'est pas public supprimé. Une classe abstraite dans Delphi est une classe qui ne peut pas être instanciée - vous ne pouvez pas créer un objet à partir d'une classe marquée comme abstraite.

Jetons un coup d'œil à un exemple de déclaration d'interface:

type
IConfigChanged = interface['0D57624C-CDDE-458B-A36C-436AE465B477']
procédure ApplyConfigChange;
fin;

le IConfigChanged est une interface. Une interface est définie un peu comme une classe, le mot clé "interface" est utilisé à la place de "classe". La valeur Guid qui suit le mot clé interface est utilisée par le compilateur pour identifier l'interface de manière unique. Pour générer une nouvelle valeur GUID, appuyez simplement sur Ctrl + Maj + G dans l'IDE Delphi. Chaque interface que vous définissez a besoin d'une valeur Guid unique.

Une interface en POO définit un abstraction - un modèle pour une classe réelle qui implémentera l'interface - qui implémentera les méthodes définies par l'interface. Une interface ne fait rien, elle a seulement une signature pour l'interaction avec d'autres classes (ou implémentations) ou interfaces.

L'implémentation des méthodes (fonctions, procédures et méthodes Get / Set de propriété) se fait dans la classe qui implémente l'interface. Dans la définition de l'interface, il n'y a pas de sections de portée (privées, publiques, publiées, etc.) tout est public. Un type d'interface peut définir des fonctions, des procédures (qui deviendront éventuellement des méthodes de la classe qui implémente l'interface) et des propriétés. Lorsqu'une interface définit une propriété, elle doit définir les méthodes get / set - les interfaces ne peuvent pas définir de variables.

Comme pour les classes, une interface peut hériter d'autres interfaces.

type
IConfigChangedMore = interface(IConfigChanged)
procédure ApplyMoreChanges;
fin;

Programmation

La plupart des développeurs Delphi, lorsqu'ils pensent aux interfaces, pensent à la programmation COM. Cependant, les interfaces ne sont qu'une fonctionnalité OOP du langage - elles ne sont pas liées spécifiquement à COM. Les interfaces peuvent être définies et implémentées dans une application Delphi sans toucher du tout à COM.

la mise en oeuvre

Pour implémenter une interface, vous devez ajouter le nom de l'interface à l'instruction de classe, comme dans:

type
TMainForm = classe(TForm, IConfigChanged)
Publique
procédure ApplyConfigChange;
fin;

Dans le code ci-dessus, un formulaire Delphi nommé "MainForm" implémente l'interface IConfigChanged.

avertissement: lorsqu'une classe implémente une interface, elle doit implémenter toutes ses méthodes et propriétés. Si vous échouez / oubliez d'implémenter une méthode (par exemple: ApplyConfigChange) une erreur de temps de compilation "E2003 Identificateur non déclaré: 'ApplyConfigChange'" se produira.
avertissement: si vous essayez de spécifier l'interface sans la valeur GUID, vous recevrez: "E2086 Le type 'IConfigChanged' n'est pas encore complètement défini".