‫In dieser Lektion lernen Sie den entscheidenden Unterschied zwischen Assetklassen und Schnittstellen beim Design von Anwendungen
‫kennen.
‫Es ist wichtig zu wissen, wann eine abstrakte Klasse und wann eine Schnittstelle verwendet werden sollte und wann keine von beiden verwendet werden
‫sollte.
‫Abstrakte Klassen und Schnittstellen scheinen in gewisser Weise ähnlich zu sein, aber es gibt wichtige Unterschiede, die bestimmen,
‫welche die beste Wahl für das ist, was Sie erreichen möchten.
‫Es ist sehr wichtig, den Unterschied zwischen einer abstrakten Klasse und einer Schnittstelle zu
‫verstehen, damit wir lose gekoppelte und erweiterbare Anwendungen entwerfen können, sodass wir Anwendungen einfach modifizieren und ändern
‫können, ohne alles zu zerstören.
‫In diesem Video werden wir diese Unterschiede besprechen und entscheiden, wann welche verwendet werden sollen.
‫Aber bevor wir das tun, wollen wir zunächst unser Gedächtnis über abstrakte Klassen und Schnittstellen auffrischen.
‫Erstens sind abstrakte Klassen und abstrakte Klassen eine unvollständige Klasse oder eine Klasse, die nicht instanziiert werden kann, was bedeutet, dass
‫wir daraus keine Objekte erstellen können.
‫Der Zweck einer abstrakten Klasse besteht darin, eine Blaupause für abgeleitete Klassen bereitzustellen und einige Regeln festzulegen, z. B.
‫was die abgeleiteten Klassen implementieren müssen.
‫Aber warum brauchen wir eine Klasse, die zunächst als abstrakte Klasse gekennzeichnet wird?
‫Was ist falsch am regulären Unterricht?
‫Stellen Sie sich vor, wir haben ein Klasse-Motorrad und ein Klasse-Auto und sie teilen sich einige Funktionen, um die Code-Redundanz
‫zu reduzieren.
‫Wir erstellen eine Basisklasse namens Vehicle, um das Erstellen von Instanzen des Typs Fahrzeug zu verhindern und jede Methode zu
‫erzwingen, um ihre Version der Fahrzeugmethoden zu implementieren.
‫Wir müssen es als abstrakte Klasse markieren.
‫Wir können abstrakte Klassen nutzen, um Komponenten zu entwerfen und ein gewisses Maß an allgemeiner Funktionalität anzugeben, die
‫von den richtigen Klassen implementiert werden müssen.
‫Lassen Sie uns dieses Fahrzeug abstrakt machen und das wird gut.
‫Schauen wir uns nun noch einmal die Schnittstellen an.
‫Eine Schnittstelle ist also ein Vertrag und kann nur Methodendeklarationen enthalten.
‫Es darf keine Methodendefinitionen enthalten.
‫Sie definieren eine Fähigkeit, die eine Klasse hat.
‫Stellen wir uns vor, wir haben drei Klassen.
‫Wir haben also die Klasse, Fahrrad, Motorrad und Auto.
‫Und dann wollen wir sicherstellen, dass alle diese Klassen von diesem Klassenfahrzeug erben.
‫Und wenn Sie beispielsweise unser Auto um Selbstfahrfunktionen erweitern möchten und wir beispielsweise andere Klassen
‫erstellen möchten, die so etwas wie ein Flugzeug erstellen könnten, ist es nicht sinnvoll, die Selbstfahrfunktionalität
‫hinzuzufügen das Fahrzeug der besten Klasse, da nicht alle unsere Unterklassen diese Funktion
‫haben.
‫Es wäre bequemer, es in Form einer Schnittstelle namens AI Self-Driving hinzuzufügen.
‫Dann können diese Klassen, die diese Schnittstelle implementieren, die Logik bereitstellen, um dies zu erreichen.
‫Lassen Sie uns nun über Ähnlichkeiten zwischen Schnittstellen und abstrakten Klassen sprechen, sowohl Schnittstellen als auch
‫abstrakte Klassen können instanziiert werden.
‫Das bedeutet, dass wir daraus keine Objekte erstellen können.
‫Aber beide unterstützen Polymorphismus, was bedeutet, dass wir ein Objekt vom Typ cad in einer Variablen vom Typ abstrakte
‫Klasse animal speichern können.
‫Das gleiche gilt für Schnittstellen, in denen wir jede Sammlung wie eine Liste oder einen Stapel in einer aufzählbaren Variablen vom
‫Typ II speichern können.
‫Schauen wir uns nun die wichtigsten Unterschiede an.
‫Eine abstrakte Klasse soll von Unterklassen geerbt werden, die ihre Methoden entweder implementieren oder überschreiben.
‫Anders ausgedrückt, abstrakte Klassen sind entweder teilweise oder gar nicht implementiert.
‫Andererseits sind Schnittstellen gar nicht implementiert.
‫Dann kann eine abstrakte Klasse keinen entgegengesetzten Konstruktor haben.
‫Abstrakte Klassen können Konstruktoren und Felder sowie Methodendefinitionen haben, und die Implementierung liegt in
‫der Verantwortung der Klasse, die die Schnittstelle implementiert hat.
‫Andererseits kann eine abstrakte Klasse Methoden, Definitionen und Felder enthalten und Interfaces haben keine Konstruktoren, wie
‫bereits erwähnt, sie können auch keine Felder haben.
‫Klassen können jetzt also viele Schnittstellen implementieren, wodurch eine Art Mehrfachvererbung erreicht wird.
‫Da Teashop eine einzelne Vererbungssprache ist und dies standardmäßig nicht zulässt.
‫Eine Klasse kann jedoch nur eine Klasse erben.
‫Wenn eine Klasse also eine Schnittstelle implementiert hat, muss sie alle ihre Member wie Eigenschaften,
‫Methoden usw. implementieren. Wenn eine Klasse andererseits eine abstrakte Klasse erweitert, muss
‫sie nur ihre abstrakten Member implementieren, damit sie den nicht implementierten Teil kennen der abstrakten Klasse.
‫Schauen wir uns hier eine Analogie an.
‫Stellen Sie sich ein scharfes Leitartikel-Editorial vor, bei dem der Dozent nichts erreichen kann, es sei denn, er ist ein Experte
‫in einem Thema oder sie ist ein Experte in einem Thema, weil wir keine abstrakten Klassen haben können.
‫Ein Ausbilder müsste also ein Experte in einem Thema werden, um es zu unterrichten.
‫So wurde der Dozent zum Cs-Experten und jetzt kann er
‫oder sie diese Sharp irgendwann unterrichten.
‫Also haben wir die Schnittstelle I Video Editor implementiert, damit dies funktioniert.
‫Daher müssen nicht alle Dozenten in der Lage sein, zu bearbeiten, aber diejenigen, die diesen Videoeditor implementieren,
‫müssen dies tun.
‫Gut.
‫Erstens, sollten Sie beim Entwerfen von C-Shop-Klassen die Vererbung über eine Schnittstelle wählen, verwenden Bibliotheken eine zusätzliche
‫Klasse.
‫Wenn Sie über einige Funktionen verfügen, die Sie benötigen, sind dies Unterklassen.
‫Wenn Sie beispielsweise über eine Reihe von Funktionen verfügen, möchten Sie, dass Unterklassen diese in eine abstrakte Klasse
‫einfügen.
‫Die abstrakte Klasse wird verwendet, wenn die abgeleitete Klasse ihre Kerneigenschaften und ihr Verhalten mit der abstrakten
‫Klasse teilt, die Art von Verhalten, die tatsächlich die Klassenbenutzerschnittstelle definiert.
‫Wenn Sie einen allgemeinen Vertrag über ein Verhalten oder eine Funktionalität wünschen, sind Schnittstellen im Vergleich zu abstrakten
‫Klassen normalerweise locker.
‫Sie möchten Schnittstellen nicht in einer Situation verwenden, in der Sie ständig denselben Code für
‫alle Schnittstellenmethoden schreiben.
‫Verwendet eine abstrakte Klasse und definiert jede Methode einmal.
‫Also eine kurze Zusammenfassung.
‫Wenn wir über abstrakte Klassen sprechen, definieren wir die Eigenschaften eines Objekttyps, die angeben, was ein
‫Objekt ist.
‫Wenn wir über eine Schnittstelle sprechen und die von uns versprochenen Funktionen definieren, sprechen wir über
‫den Abschluss eines Vertrags darüber, was das Objekt tun kann.
‫Was also das Objekt ist, ist abstrakte Klasse, was das Objekt tun kann.
‫Und Schnittstelle.
‫Alles klar, ich hoffe, Sie haben die Zusammenfassung und diesen Überblick über die beiden verschiedenen Arten
‫von Ansätzen genossen und verstanden.
‫Und nun lassen Sie uns diese Konzepte und verschiedene Beispiele in den nächsten Vorlesungen und im Rest des
‫Kurses verwenden.