Unterschied zwischen abstrakter Klasse und Schnittstelle

Abstrakte Klasse vs. Schnittstelle

Die abstrakte Klasse (oder der Typ) ist ein Typ eines vom Programm deklarierten Nominativtypsystems. Obwohl der Name dies impliziert, kann eine abstrakte Klasse abstrakte Methoden oder Eigenschaften enthalten oder nicht. Die Unterscheidungsklasse bezieht sich auf verschiedene Sprachkonstrukte, die zum Implementieren abstrakter Typen verwendet werden können. Abstrakte Klassen können durch ein Designproblem charakterisiert werden, das mit der besten objektorientierten Programmierung und ihrer unvollendeten Natur übereinstimmt.

Eine Schnittstelle ist ein abstrakter Typ, den Klassen implementieren müssen, um eine Schnittstelle (generisch) anzugeben. Schnittstellen dürfen nur Methodensignaturen und konstante Deklarationen (statisch und final) enthalten, niemals Methodendefinitionen. Schnittstellen simulieren mehrere Vererbungen und werden zum Codieren von Ähnlichkeiten verwendet, die zwischen verschiedenen Klassenarten gemeinsam sind.

Abstrakte Typen können auf verschiedene Arten erstellt, gekennzeichnet oder simuliert werden. Ein Programmierer kann abstrakte Typen explizit mit dem Schlüsselwort abstract kennzeichnen, indem er eine oder mehrere Methoden in die Klassendefinition einschließt, von einem anderen abstrakten Typ erbt, ohne die fehlenden Features zu überschreiben, die zum Abschluss der Klassendefinition erforderlich sind, oder indem er eine bestimmte Methode an das objektorientierte Objekt sendet Programmiersprache, die als diese bekannt ist und die Methode nicht direkt implementiert.

Schnittstellen können mit abstrakten Methoden definiert werden. Klassen können auch in Schnittstellen implementiert werden. Wenn eine Klasse eine Schnittstelle implementiert und nicht alle ihre Methoden implementiert, muss die abstrakte Signatur verwendet werden, andernfalls ist diese Signatur nicht erforderlich (da alle Schnittstellen von Natur aus abstrakt sind). Klassen können auch mehrere Schnittstellen implementieren.

Während Schnittstellen zum Angeben generischer Schnittstellen verwendet werden, können abstrakte Typen zum Definieren und Durchsetzen von Protokollen verwendet werden (dies ist eine Gruppe von Operationen, die alle Objekte unterstützen müssen, die das gewünschte Protokoll implementieren). Abstrakte Typen kommen in Sprachen ohne Subtyping nicht vor. Da diese Untertypen gezwungen sind, alle erforderlichen Funktionen zu implementieren, wird die Korrektheit der Programmausführung sichergestellt. Es gibt verschiedene Möglichkeiten, abstrakte Typen zu erstellen: Vollständige abstrakte Basisklassen sind Klassen, die entweder explizit als abstrakt deklariert werden oder abstrakte (nicht implementierte) Methoden enthalten. Zu den gängigen Lisp-Objektsystemen gehören Mixins, die auf dem Flavors-System basieren. Natürlich Java; und Traits, die als Erweiterung von Smalltalk fungieren.

Zusammenfassung:
1. Abstrakte Klassen (oder Typen) deklarieren Programme; Schnittstellen sind abstrakte Typen, die alle Klassen implementieren müssen, um ihre Schnittstelle anzugeben.
2. Abstrakte Typen können explizit mit dem Schlüsselwort gekennzeichnet werden. Schnittstellen sind von Natur aus abstrakt und müssen daher überhaupt nicht mit dem Schlüsselwort gekennzeichnet werden (es sei denn, eine bestimmte Klasse implementiert eine Schnittstelle, implementiert jedoch nicht alle ihre Methoden)..