‫In dieser Lektion lernen Sie an einem konkreten Beispiel, wie Sie eigene Interfaces erstellen und
‫implementieren und bekommen eine Vorstellung davon, warum Interfaces verwendet werden, insbesondere wenn unsere Klassen keine Beziehung
‫zueinander haben und daher t teilen eine Basisklasse.
‫Eine Vererbung als solche ist also keine Option.
‫Stellen Sie sich vor, wir arbeiten an einem Videospiel, bei dem der Spieler Dinge zerstören kann, aber alles, was
‫wir zerstören, wird sich je nach dem, was zerstört wird, unterschiedlich verhalten.
‫Wenn Sie beispielsweise einen Stuhl zerstören, wird ein Zerstörungsgeräusch abgespielt und zerstörte Stuhlteile erscheinen.
‫Aber das Zerstören eines Autos wird ein Explosionsgeräusch abspielen, Feuer erzeugen und andere Objekte in der Nähe zerstören.
‫Für unser Spiel haben wir die folgenden Klassen, einen Stuhl, der von Klassenmöbeln erbt und das Auto,
‫das von Klassenfahrzeugen erbt.
‫Schauen wir uns diese Klassen also ganz schnell an.
‫Wir haben also diesen Stuhl, der von Möbeln erbt, und der Stuhl hat hier nur einen einfachen
‫Konstruktor, bei dem wir die Farbe sowie das Material basierend auf dem, was dem erstellten Objekt gegeben wird, festlegen.
‫Aber jetzt erbt diese Klasse natürlich von Möbeln, deshalb haben wir hier die Eigenschaften, Farbe und
‫Material, die wir gerade in der Stuhlklasse verwendet haben.
‫Und dann haben wir hier den Konstruktor, den Standardkonstruktor, in dem diese Werte standardmäßig
‫festgelegt werden.
‫Die Farbe und das Material sind also standardmäßig weiß.
‫Und dann haben wir auch noch einen einfachen Konstruktor, der sowohl die Farbe als auch das Material verwendet, um sie
‫standardmäßig festzulegen.
‫Okay, nichts Besonderes, aber natürlich haben wir auch ein Auto und wollen den Stuhl und das Auto zerstören
‫können, wie ich schon sagte.
‫Schauen wir uns das Auto also kurz an.
‫Hier haben wir also die gleiche Geschichte, ein Auto der Unterklasse, das das Fahrzeug erweitert, bei dem wir sowohl die Geschwindigkeit des Autos als auch die
‫Farbe festlegen.
‫Jetzt verwenden wir übrigens einen einfachen Konstruktor, wie wir es hier tun.
‫Aber natürlich hätten wir auch hier die Basis verwenden können, die Geschwindigkeit sowie die Farbe.
‫OK, das ist also auch eine gültige Option und wir müssten sie hier nicht verwenden.
‫Es gibt also natürlich zwei verschiedene Möglichkeiten, dies zu tun.
‫OK, und dann erbt dieses Auto von einem Fahrzeug, bei dem natürlich Geschwindigkeit und Farbe definiert werden müssen.
‫Schauen wir uns also die Fahrzeugklasse an.
‫Und wir können hier sehen, dass dieses Fahrzeug der Basisklasse eine Geschwindigkeit, eine Farbe, einen Standardkonstruktor hat, der
‫diese beiden Werte Geschwindigkeit auf 120 Stundenkilometer und die Farbe auf Weiß setzt.
‫Und dann haben wir den einfachen Konstruktor, der die Geschwindigkeit und die Farbe basierend auf
‫den Werten festlegt, die dem Fahrzeugobjekt gegeben werden.
‫Natürlich auch auf das erbende Objekt, wie zum Beispiel ein Auto.
‫OK, nun, da wir all diese verschiedenen Klassen haben und wir sehen, wie sie strukturiert sind, schauen
‫wir uns die eigentliche Zerstörungsfunktion an.
‫Was ist also der beste Ansatz, um eine solche Zerstörungsfunktion zu erstellen?
‫Wenn wir darüber nachdenken, können wir keine Klasse hinzufügen, damit unsere Klassen davon erben, da dies
‫eine einzelne Vererbungssprache und keine Mehrfachvererbungssprache ist, die wir bereits von einer Klasse erben.
‫Das Auto erbt also bereits vom Fahrzeug und der Stuhl erbt bereits vom Möbel.
‫Es kann also nicht von etwas anderem erben.
‫Das hier gezeigte Fahrzeug C Sharp lässt dies zum Beispiel nicht zu, da es nicht mehrere Basisklassen
‫haben kann.
‫Eine Klasse kann nicht mehrere Basisklassen in Cis haben.
‫Außerdem gibt es sowieso keine konkrete Beziehung zwischen einem Auto und einem Stuhl, um sich eine Basisklasse zu teilen, weil
‫sie sich von zwei Dingen völlig unterscheiden, oder?
‫Wenn wir zum Beispiel normale Methoden namens Destroye-Methode in jeder dieser Klassen implementieren, die wir hier haben,
‫wird es schwierig, sie zu verwalten.
‫Was, wenn wir uns entscheiden, das Zerstörungssystem in Zukunft komplett zu ändern oder unseren zerstörbaren Objekten
‫visuelle Effekte hinzuzufügen, wird es mühsam sein, jede Klasse durchzugehen und sie zu modifizieren.
‫Denn in diesem Fall haben wir sozusagen nur zwei Unterklassen, richtig, aber stell dir vor, du hast 50
‫oder gar 100 verschiedene Klassen, 100 verschiedene Arten von Objekten in deinem Spiel, dann müsstest du jede
‫einzelne durchgehen und passen Sie den Code entsprechend an.
‫Das ist wirklich eine Belastung und wir wollen das nicht durchmachen.
‫Deshalb müssen wir eine bessere Lösung finden.
‫Was wir brauchen, ist eine Möglichkeit, unser zerstörbares Verhalten für jede Klasse, die es verwendet, wie einen Vertrag
‫durchzusetzen.
‫Und wenn Sie unser Video zu Schnittstellen gesehen haben, wissen Sie, dass es sich um Verträge handelt, die wir erstellen können.
‫Daher ist der beste Ansatz in diesem Fall die Verwendung einer Schnittstelle, die wir als zerstörbar bezeichnen.
‫Und jede Klasse, die diese Schnittstelle implementiert, wird gezwungen sein, unseren Zerstörungsanforderungen zu folgen
‫und sie gleichzeitig abhängig von der Klasse selbst anzupassen.
‫Lassen Sie uns also eine solche Schnittstelle erstellen, daher können Sie hier zu Ihrem Projekt gehen, ein neues Element
‫hinzufügen und dann direkt hier Schnittstelle auswählen und ihr einen Namen geben.
‫Also nenne ich das hier ich.
‫D stroy Elbo, damit Sie sehen können, wenn Schnittstellen verwendet werden, fügen Sie die KI am Anfang des Dateinamens hinzu,
‫um anzuzeigen, dass dies eine Schnittstelle sein wird.
‫Also fügen wir diese Schnittstelle hinzu.
‫Diese Schnittstelle hat also nur eine Eigenschaft zum Speichern der Audiodatei, die ausgeführt wird, sobald wir die Zerstörung ausführen,
‫was der Zerstörungssound sein wird, und dann haben wir nur eine Methode, die ein Objekt zerstört, und
‫wir werden dies nennen Methode zerstören.
‫Es wird nichts zurückgeben.
‫Es wird nur etwas zerstören.
‫So könnten Sie zum Beispiel die Grafiken zurückgeben, die Sie haben.
‫Also die KI-Objekte, die Sie anzeigen möchten, wenn der Gegenstand zerstört ist, beispielsweise das Auto oder der
‫Stuhl und so weiter.
‫Stellen wir nun sicher, dass unsere Klassen dieses Interface tatsächlich implementieren und implementieren dann natürlich
‫den Interface-Inhalt, also den Destruktionssound sowie die Destroy-Methode.
‫Wie können wir das machen?
‫Kommen wir zum Beispiel zu unserem Auto.
‫Und hier muss unser Auto hier oben in der Klasse ein Komma, oben eine Definition hinzufügen
‫und diese zerstörbare Schnittstelle verwenden.
‫Wenn Sie dies jetzt hinzufügen, können Sie sehen, dass Sie eine Fehlermeldung erhalten, die besagt, dass car nicht den
‫Zerstörton von Interface-Mitgliedern ebenso implementiert wie Destroy.
‫So können wir mögliche Fixes aufzeigen und alle Mitglieder implementieren.
‫Dadurch wird beispielsweise dieser automatische Code für uns erstellt.
‫Es wird also die zerstörbare Leere erschaffen, und es wird das Zerstörungsgeräusch für uns erzeugen.
‫Das wäre also die automatisch generierte Version.
‫Aber wir können es auch manuell machen.
‫Das ist kein Problem.
‫Hier können wir zum Beispiel den Zerstörungssound implementieren.
‫Und dann möchte ich in der Lage sein, eine Immobilie zu haben, um die zerstörbaren Gegenstände in der Nähe zu
‫lagern.
‫Wenn also ein Auto zerstört wird, sollte es auch das Objekt in der Nähe zerstören.
‫Und diese Liste wird auch zerstörbar vom Typ I sein, was bedeutet, dass sie jedes Objekt speichern kann, das diese Schnittstelle implementiert,
‫und wir können nur auf Eigenschaften und Methoden in dieser Schnittstelle zugreifen.
‫Um das zu erstellen, werde ich eine öffentliche Liste von hochzerstörbaren Objekten erstellen und sie
‫in der Nähe als zerstörbar bezeichnen.
‫Jetzt können wir also unseren Konstruktor erweitern, also wollen wir einerseits sicherstellen, dass wir den
‫Sound initialisieren, damit wir sicherstellen, dass wir einen Explosionssound haben.
‫Nehmen wir zum Beispiel an, wir haben dieses Geräusch namens Autoexplosionsgeräusch und drei, und dann möchten wir
‫die Liste der zerstörbaren Objekte initialisieren.
‫Dies ist zum Beispiel nur eine neue Liste von zerstörbaren Objekten.
‫Und dann müssen wir nur noch die Destroy-Methode implementieren.
‫Also das ich hier oben zerstörbar bin, sieht man es noch nicht gerne.
‫Es erwartet immer noch, dass wir die Methode Destroy implementieren.
‫Sie sehen also, wenn Sie eine Schnittstelle implementieren, müssen Sie ihre Member implementieren, da die
‫Schnittstelle hier zwei Member hat.
‫Beides müssen wir umsetzen.
‫OK, das bedeutet also, dass wir hierher zurückgehen und die Methode Destroy tatsächlich implementieren müssen.
‫Also lassen Sie uns das wirklich schnell tun, um es zu tun.
‫Was ich hier hinzufügen möchte, sind zunächst zwei Aussagen.
‫Ich werde nur die richtigen Zeilenanweisungen verwenden.
‫Ich werde es einfach halten, weil wir hier kein Spiel entwickeln, sondern nur versuchen, die Konzepte
‫von Schnittstellen zu verstehen.
‫Wenn also ein Auto zerstört wird, sollten wir den Zerstörungssound spielen und einen Feuereffekt erzeugen.
‫Also ahmen wir hier nur so nach, als ob es tatsächlich den Sound spielen würde, und es wird nur
‫sagen, OK, die Autoexplosion und drei Geräusche spielen, und dann erzeugen wir das Feuer.
‫Es brennt also alles.
‫Alles brennt, weil das Auto zerstört ist.
‫Lassen Sie uns nun jedes einzelne Zerstörbare in der Nähe durchgehen und es tatsächlich zerstören.
‫Hier werden wir also jedes einzelne zerstörbare Objekt durchgehen, das sich in unserer Liste der zerstörten Wände in der
‫Nähe befindet.
‫Wir nennen es zerstörbar, damit jedes einzelne Element ein zerstörbares Element ist, das im Grunde nur ein
‫lokaler Variablenname ist.
‫Also sagen wir, OK, das zerstörbare Objekt, das die zerstörbare Schnittstelle implementiert, wird in unserer für jede
‫Schleife einfach zerstörbar genannt.
‫Also durchlaufen wir es, was bedeutet, dass wir durch die Sammlung des Zerstörbaren in der Nähe
‫iterieren, die eine Liste von KI-zerstörbaren Objekten ist, im Grunde Objekte, die es implementieren, KI-zerstörbares Interface
‫und dann rufen wir einfach die Methode Destroy auf.
‫Im Grunde erzeugen wir hier also eine Kettenreaktion, die alles um alles herum zerstört, was zerstört wird und das auch
‫ein Auto ist und so weiter.
‫Nehmen wir in diesem Fall an, wir haben zwei Autos nebeneinander und sie haben ein paar Stühle
‫nebeneinander.
‫Also werden die Autos diese Zerstörungsmethode nennen, bei der sie die Gegenstände in der Nähe zerstören, weil es eine
‫riesige Explosion ist, oder?
‫Es ertönt ein Ton und jedes Element erzeugt einen Ton.
‫Jetzt könnten Sie natürlich einen Timer erstellen, der benötigt wird, bis die eigentliche Explosion stattfindet, nachdem
‫etwas Feuer fängt.
‫Aber wir werden es hier einfach halten.
‫Okay, wir zerstören die anderen Autos, aber auch die anderen Cheers, damit jedes Auto andere Gegenstände in
‫der Nähe infiziert.
‫Und das könnte, sagen wir, alles sein, was 10 Meter oder fünf Meter entfernt ist oder wie viele
‫Zoll auch immer, wenn man hier das amerikanische System nehmen will.
‫Aber im Grunde wird das passieren.
‫Schauen wir uns nun die Stühle an, denn die Stühle müssen einen ähnlichen Ansatz durchlaufen, weil wir auch
‫sicherstellen möchten, dass ein Stuhl zerstörbar ist, aber die Zerstörung eines Stuhls wird ganz anders
‫sein.
‫OK, hier werden wir auch die Schnittstelle hinzufügen.
‫Also die zerstörbare KI-Schnittstelle und natürlich müssen wir den Zerstörungssound implementieren, und das wird
‫eine ganz andere Zerstörung sein, weil der Stuhl einfach auseinanderfällt und es wird Holz zerschmettern,
‫das Sie hören.
‫Hier wird es also ganz anders klingen.
‫OK, und dann wollen wir natürlich auch den Zerstörungssound in unserem Konstruktor definieren.
‫Also werde ich sagen, dass der Stuhlzerstörungssound gespielt werden sollte.
‫Es wird immer dasselbe sein.
‫Deshalb füge ich es hier nicht in die Erklärung des Lehrstuhls ein.
‫Also halte ich es hier einfach.
‫Natürlich könnten Sie verschiedene Stühle mit unterschiedlichen Explosionsgeräuschen haben, dann würden Sie
‫dies hier oben als Parameter für Ihren Konstruktor hinzufügen.
‫Okay, jetzt implementieren wir die Methode Destroy.
‫Und in diesem Fall werden wir etwas zerstören und wir werden zuerst den farbigen Stuhl zerstören, basierend auf der
‫Farbe, die der Stuhl hat, werden das schreiben.
‫Dann werden wir den Zerstörungssound spielen und schließlich werden wir Stuhlteile spawnen.
‫OK, in unserem Fall schreiben wir es einfach auf die Konsole.
‫Aber stellen Sie sich in einem echten Spiel vor, wie Sie das machen würden, denn der beste Weg, etwas in einem Videospiel zu
‫zerstören, besteht darin, nicht die physische Sache zu machen, bei der Sie die gesamte Zerstörung vornehmen, was
‫sehr schwierig zu bauen ist, als besonders wenn.
‫Habt ihr kein großes Team, das alles Mögliche macht, dann würdet ihr im Grunde
‫einfach eine große Explosions- oder Zerstörungsanimation machen und dann würdet ihr die zerstörten Teile der Einzelteile, die herumliegen, spawnen.
‫Sie sehen hier also, dass es bei dieser Zerstörungsmethode keine Kettenreaktion gibt.
‫Die Implementierung der Destroy-Methode für den Stuhl unterscheidet sich also stark von der des
‫Fahrzeugs, aber beide erben von der zerstörbaren KI-Schnittstelle und müssen die Destroy-Methode implementieren und können dies auf
‫ihre eigene Weise tun.
‫Im Grunde erlauben uns Schnittstellen also eine Art Mehrfachvererbung, obwohl es nicht wirklich eine Mehrfachvererbung
‫ist.
‫OK, also lasst uns jetzt zu unseren Programmen gehen.
‫Jawohl.
‫Und tatsächlich unsere neu erstellten Klassen verwenden, weil.
‫Naja, sonst ist es langweilig.
‫Rechts.
‫Lassen Sie uns also weitermachen und zwei Stühle erstellen.
‫Wir haben also einen Bürostuhl, der braun und aus Plastik sein wird, und dann haben wir einen Gaming-Stuhl, der rot
‫und Holz sein wird.
‫Und dann lassen Sie uns auch ein neues Auto erstellen.
‫Dieses Auto wird also eine Geschwindigkeit von 80 haben, blau sein und ein beschädigtes Auto sein.
‫Und dann werden wir die beiden Stühle in der Nähe dieses beschädigten Autos hinzufügen.
‫Also fügen wir sie unserem beschädigten Auto als zerstörbar in der Nähe hinzu.
‫Also sowohl der Bürostuhl als auch der Gaming-Stuhl werden jetzt, wenn wir ihn hier als zerstörbar betrachten, in der Nähe sein, denn
‫beim Erstellen eines Autos wird diese Liste leer sein.
‫Aber dann können wir natürlich, weil es hier eine öffentliche Liste ist, Elemente hinzufügen, was wir tun.
‫Wir fügen zerstörbare Gegenstände hinzu.
‫Und warum können wir unserem Zerstörbaren in der Nähe Stühle hinzufügen?
‫Nun, weil ein Stuhl diese Schnittstelle implementiert.
‫Dass wir I Zerstörbar genannt haben, bedeutet, dass ein Stuhl nun als zerstörbares Objekt vom Typ II akzeptiert wird, was bedeutet, dass
‫wir ihn jetzt als unser Zerstörbares in der Nähe hinzufügen können.
‫Also können wir jetzt weitermachen und das Auto zerstören.
‫Nennen wir also einfach die Zerstörmethode für unser beschädigtes Auto, damit die Explosion teilnehmen kann, das Explosionsgeräusch
‫beginnt und all die guten Sachen.
‫Lassen Sie uns das also ausführen.
‫Und natürlich wird dies eher ein Abenteuerspiel sein und nicht so sehr ein Spiel, bei dem Sie echte 3D-Grafiken oder
‫ähnliches sehen.
‫Also spielen wir den Zerstörungssound, den Autoexplosionssound.
‫Wir machen das Feuer.
‫Der braune Stuhl wurde zerstört.
‫Wir spielen den Zerstörungssound des Stuhls, den Zerstörungssound und B3.
‫Dann drehen wir die Stuhlteile für unseren braunen Stuhl.
‫Dann wurde der rote Stuhl zerstört.
‫Wir spielen das Zerstörungsgeräusch des Stuhls, Zerstörung, Geräusch und Wut und dann reagierende Stuhlteile
‫für unseren roten Stuhl.
‫Sie sehen also, das ist es so ziemlich.
‫So können Sie Ihre eigenen Schnittstellen erstellen und verwenden.
‫Und ich hoffe, dass Sie jetzt verstehen, was Schnittstellen für Sie tun können und welche Vorteile sie haben.
‫Ein wichtiger Knoten hier von Schnittstellen wird also für die Kommunikation zwischen zwei ähnlichen oder nicht ähnlichen Klassen verwendet,
‫die sich nicht um eine Klasse kümmern, die die Schnittstelle implementiert, genau wie unser Auto mit dem Lehrstuhl kommuniziert hat, um
‫die Methode Destroy aufzurufen, alles nur, weil sie nur implementiert die gleiche Schnittstelle wie ich
‫bereits erwähnt habe.
‫Obwohl Schnittstellen schwer verständlich erscheinen mögen, bieten sie uns auf den ersten Blick große Vorteile.
‫Diese Vorteile werden als Lesbarkeit bezeichnet.
‫Eine Schnittstelle stellt also eine Absichtserklärung dar und definiert somit die Fähigkeiten Ihrer Klasse.
‫Was also kann Ihre Klasse?
‫Wenn Sie zum Beispiel das sortierbare I implementieren, geben Sie klar an, dass Objekte Ihrer
‫Klasse sortiert werden können, dann Code-Semantik.
‫Indem Sie Schnittstellen bereitstellen und implementieren, trennen Sie aktiv Konzepte und Schnittstellen definieren ein Verhaltensmodell,
‫eine Definition dessen, was ein Objekt tun kann.
‫Durch die Trennung dieser Konzepte bleibt die Semantik Ihres Codes viel klarer.
‫Dann hast du den Code.
‫Wartbarkeitsschnittstellen tragen dazu bei, die Kopplung zu reduzieren und ermöglichen Ihnen den einfachen Austausch von Implementierungen für dasselbe
‫Konzept, ohne dass der zugrunde liegende Code beeinträchtigt wird.
‫Und dann haben wir Designmuster.
‫Es ist das Gesamtbild der Verwendung von Verträgen, Abstraktion und Schnittstellen, die für die objektorientierte Programmierung von entscheidender Bedeutung
‫sind.
‫Also menschliches Verständnis und komplexe Systemarchitektur.
‫Es geht also im Grunde nur darum, es als Mensch besser zu verstehen und dann Mehrfachvererbung.
‫Schnittstellen können also unser Gateway sein, um die Mehrfachvererbung in Cis zu verwenden.
‫Angenommen, Sie schreiben eine Bibliothek und möchten, dass sie von Benutzern geändert werden kann.
‫Sie schreiben eine Schnittstelle und ihre Klassenimplementierung.
‫Andere Entwickler, die Ihre Bibliothek verwenden, können weiterhin ihre eigene Implementierungsklasse schreiben, die möglicherweise
‫andere Technologien oder Algorithmen verwendet, die das gleiche Ergebnis erzielen.
‫Auch deshalb treffen wir in Bibliotheken auf so viele Schnittstellen.
‫Wir verwenden, haben aber selten das Bedürfnis, unsere eigenen Schnittstellen zu schreiben, da wir selbst keine Bibliotheken schreiben.
‫Abschließend ist es wichtig zu verstehen, wie Schnittstellen an dieser Stelle implementiert werden.
‫Natürlich werden wir, während wir verschiedene Technologien wie WP und AP dot net und
‫die C-Meisterklasse durchlaufen, mehr Schnittstellen verwenden, was Ihnen helfen wird, sie in Zukunft besser zu verstehen.
‫Gut.
‫Also vielen Dank für das Anschauen dieses Videos.
‫Wir sehen uns im nächsten.