Schnittstellen in der Delphi-Programmierung 101

In Delphi hat "Schnittstelle" zwei unterschiedliche Bedeutungen. Im OOP-Jargon können Sie sich eine Schnittstelle als eine Klasse ohne Implementierung vorstellen. In Delphi wird Unit Definition Interface Section verwendet, um alle öffentlichen Codeabschnitte zu deklarieren, die in einer Unit erscheinen. In diesem Artikel werden Schnittstellen aus OOP-Sicht erläutert.

Wenn Sie in der Lage sind, eine solide Anwendung so zu erstellen, dass Ihr Code gewartet, wiederverwendbar und flexibel ist, hilft Ihnen die OOP-Natur von Delphi dabei, die ersten 70% Ihrer Route zu fahren. Das Definieren und Implementieren von Schnittstellen hilft bei den verbleibenden 30%..

Abstrakte Klassen

Sie können sich eine Schnittstelle als abstrakte Klasse vorstellen, bei der die gesamte Implementierung entfernt und alles, was nicht öffentlich ist, entfernt wird. Eine abstrakte Klasse in Delphi ist eine Klasse, die nicht instanziiert werden kann. Sie können kein Objekt aus einer Klasse erstellen, die als abstrakt markiert ist.

Schauen wir uns ein Beispiel für eine Schnittstellendeklaration an:

Art
IConfigChanged = Schnittstelle['0D57624C-CDDE-458B-A36C-436AE465B477']
Verfahren ApplyConfigChange;
Ende;

Das IConfigChanged ist eine Schnittstelle. Eine Schnittstelle wird ähnlich wie eine Klasse definiert, das Schlüsselwort "interface" wird anstelle von "class" verwendet. Der Guid-Wert nach dem Schlüsselwort interface wird vom Compiler verwendet, um die Schnittstelle eindeutig zu identifizieren. Um einen neuen GUID-Wert zu generieren, drücken Sie einfach Strg + Umschalt + G in der Delphi-IDE. Jede von Ihnen definierte Schnittstelle benötigt einen eindeutigen Guid-Wert.

Eine Schnittstelle in OOP definiert eine Abstraktion - eine Vorlage für eine tatsächliche Klasse, die die Schnittstelle implementiert -, die die von der Schnittstelle definierten Methoden implementiert. Ein Interface macht eigentlich nichts, es hat nur eine Signatur für die Interaktion mit anderen (implementierenden) Klassen oder Interfaces.

Die Implementierung der Methoden (Funktionen, Prozeduren und Get / Set-Methoden für Eigenschaften) erfolgt in der Klasse, die die Schnittstelle implementiert. In der Schnittstellendefinition gibt es keine Bereichsabschnitte (privat, öffentlich, veröffentlicht usw.). Alles ist öffentlich. Ein Schnittstellentyp kann Funktionen, Prozeduren (die später zu Methoden der Klasse werden, die die Schnittstelle implementiert) und Eigenschaften definieren. Wenn eine Schnittstelle eine Eigenschaft definiert, muss sie die get / set-Methoden definieren - Schnittstellen können keine Variablen definieren.

Wie bei Klassen kann eine Schnittstelle von anderen Schnittstellen erben.

Art
IConfigChangedMore = Schnittstelle(IConfigChanged)
Verfahren ApplyMoreChanges;
Ende;

Programmierung

Die meisten Delphi-Entwickler, die an Schnittstellen denken, denken an COM-Programmierung. Schnittstellen sind jedoch nur eine OOP-Funktion der Sprache - sie sind nicht spezifisch an COM gebunden. Schnittstellen können in einer Delphi-Anwendung definiert und implementiert werden, ohne COM zu berühren.

Implementierung

Um eine Schnittstelle zu implementieren, müssen Sie der Klassenanweisung den Namen der Schnittstelle hinzufügen, wie in:

Art
TMainForm = Klasse(TForm, IConfigChanged)
Öffentlichkeit
Verfahren ApplyConfigChange;
Ende;

Im obigen Code implementiert ein Delphi-Formular mit dem Namen "MainForm" die IConfigChanged-Schnittstelle.

Warnung: Wenn eine Klasse eine Schnittstelle implementiert, muss sie alle ihre Methoden und Eigenschaften implementieren. Wenn Sie eine Methode nicht implementieren bzw. vergessen (z. B. ApplyConfigChange), tritt ein Fehler bei der Kompilierung auf "E2003 Nicht deklarierter Bezeichner: 'ApplyConfigChange'" wird passieren.
Warnung: Wenn Sie versuchen, die Schnittstelle ohne den GUID-Wert anzugeben, erhalten Sie: "E2086 Typ 'IConfigChanged' ist noch nicht vollständig definiert".