Wenn Sie ein 4-türiges Pendlerauto fahren können, können Sie auch einen Pickup fahren. Wenn Sie ein Auto mit Verbrennungsmotor gefahren sind, können Sie auch ein Elektroauto fahren.
Form und Größe von Personenkraftwagen können von einem zum anderen unterschiedlich sein. Der Motor, der diese Fahrzeuge antreibt, könnte auch völlig anders sein. Aber dem Fahrer ist das egal.
Sie steigen einfach ein, schnallen sich an, starten das Fahrzeug, legen den Gang ein und fahren los. Das liegt daran, dass Autos, Lastwagen und Lieferwagen polymorph.
Polymorphismus: Aufbrechen
Schauen wir uns das Wort Polymorphismus an. Du kannst es zerlegen in poly, morph, und ism.
Poly bedeutet viele, wie Polygon viele Winkel bedeutet. Als Substantiv verwendet, a morph ist eine Variante einer Art. Und ism kann System bedeuten.
Polymorphismus bedeutet also einfach ein System vieler Variationen. Das sagt jedoch immer noch nicht viel darüber aus, wie es in der Programmierung verwendet wird. Das ist als nächstes.
Wenn es wie eine Ente läuft... Warum polymorphe Objekte großartig sind
Wenn Sie in Ihrem Code eine Klasse erstellen, die von einer anderen Klasse erbt, binden Sie die neue Klasse an einen Vertrag. Der Vertrag besagt, dass sich jede Variable und Funktion im Elternteil auch im Kind befindet.
Jedes Fahrzeug verfügt über ein Lenkrad, Gas- und Bremspedal sowie einen Blinker. Sie müssen die Motorhaube nicht öffnen, um ein Auto zu fahren. Wichtig ist nur, dass es ein Auto ist.
Das gleiche gilt für Klassen, die von anderen Klassen erben. Hier ist ein Beispiel in TypeScript:
Klasse Fahrzeug {
private _engine: Zeichenfolge;
private _Reifen: Nummer;
Konstruktor (Engine: string = "combustion", Reifen: number = 4) {
this._engine = Motor;
this._tires = Reifen;
}
beschleunigen (Geschwindigkeit: Zahl) {
console.log("Beschleunigung mit einer Geschwindigkeit von " + Geschwindigkeit);
}
Bremse (Druck: Zahl) {
console.log("Anwenden" + Druck + "Druck");
}
Biegen Sie links ab() {
console.log("links abbiegen");
}
Biegen Sie rechts ab() {
console.log("rechts abbiegen");
}
}
Klasse Auto erweitert Fahrzeug {
}
Klasse Tesla verlängert Auto {
Konstrukteur() {
super("elektrisch");
}
}
In diesem Beispiel gibt es a Fahrzeug Klasse. Das Wagen Klasse erbt von der Fahrzeug Klasse. Und Tesla erbt von Wagen. Lassen Sie uns nun ein paar Objekte erstellen und sie betrachten.
let myCoupe: Auto = neues Fahrzeug();
console.log (meinCoupe);
console.log (myCoupe.constructor.name);
let mySedan: Fahrzeug = neuer Tesla();
Konsole.log (meine Sedan);
console.log (mySedan.constructor.name);
myCoupe.turnLeft();
mySedan.turnLeft();
Sie können sehen, dass wir erklärt haben meinCoupe ein... zu sein Wagen und myLimousine ein... zu sein Fahrzeug. Dann haben wir instanziiert meinCoupe als neu Fahrzeug und myLimousine als neu Tesla. wenn du Besuchen Sie die TypeScript-Sandbox und führen Sie den Code aus. Sie werden sehen, dass er fehlerfrei funktioniert. Und es verhält sich so, wie Sie es vom Vertrag erwarten würden.
Mit anderen Worten, alle Fahrzeuge können nach links abbiegen, weil sie es vom geerbt haben Fahrzeug Klasse. Der Compiler weiß, dass jedes Kind von Fahrzeug dem Vertrag zugestimmt. Es wird also davon ausgegangen, dass alles in Ordnung ist, unabhängig davon, als welche Klassen die Objekte typisiert oder instanziiert wurden.
Dies wird manchmal als "Ententypisierung" bezeichnet. Der Compiler geht davon aus, dass es genauso gut eine Ente sein könnte, wenn er wie eine Ente läuft und wie eine Ente spricht. Der Compiler kümmert sich also nicht um die Details und behandelt das Objekt einfach wie eine Ente.
Polymorphismus macht Ihren Code kugelsicher
Ein weiterer Vorteil des Polymorphismus-Vertrags ist eine Garantie dafür, dass Ihr Code funktioniert. Wenn Sie alle Ihre Variablen und das, was jede Funktion zurückgibt, stark typisiert haben, wissen Sie, dass jedes Kind immer mit Variablen, Funktionen und Typen übereinstimmt.
Das bedeutet, dass Sie den Code in Ihren Klassen hinzufügen und ändern können, ohne Ihr Programm zu beschädigen. Jedes Objekt, das auf a verweist Fahrzeug object erhält immer Daten und Funktionalität, die den Erwartungen entsprechen, egal wie viel Wagen Änderungen.
Der Code innerhalb der Funktion gibt möglicherweise nicht die richtigen Ergebnisse aus. Aber das ist ein anderes Problem. Solange die Funktion dem Vertrag folgt und den erwarteten Variablentyp zurückgibt, führt dies nicht zu einem Code-Breaking-Fehler.
Polymorphismus ist riesig, und Hier sind 10 weitere Programmierprinzipien, die Sie kennen sollten.
Üben Sie Polymorphismus
- Verwenden Sie den Sandbox-Link oben, um ein zu erstellen Boot Klasse.
- Instanziieren Sie ein neues Bootsobjekt so, dass es a Fahrzeug Typ, sieht aber immer noch wie ein Boot aus.
- Stellen Sie sicher, dass sich das Boot noch wie ein Fahrzeug verhält.
Ein letztes Beispiel für Polymorphismus
Polymorphismus kann zunächst ein schwieriges Konzept sein. Aber wenn Sie es einmal verstanden haben, haben Sie einen großen Schritt in Richtung des Verständnisses gemacht, worum es bei der objektorientierten Programmierung wirklich geht. Das Konzept mag dennoch theoretisch erscheinen. Hier ist also ein solides Beispiel aus der Praxis, das Ihnen hilft zu sehen, wie nützlich es ist.
Stellen Sie sich vor, Sie erstellen eine Web-App, die eine Verbindung zu einer MySQL-Datenbank herstellt. Dann beschließt der Chef, auf eine PostgreSQL-Datenbank umzusteigen. Bedeutet das, dass Sie alle Ihre Datenbankaufrufe neu schreiben müssen?
Nein, tut es nicht. Wenn Ihre App a. verwendet Datenzugriff Klasse mit Unterklassen, die tatsächlich mit den Daten herumspielen, haben Sie Glück. Das Datenzugriff -Klasse definiert, wie Ihre App mit Daten interagiert, nicht wie sie mit der Datenbank interagiert.
Sie haben Unterklassen wie MySQLZugriff und PostgresQLAccess die die ganze Drecksarbeit machen. Aber wenn Ihre App nur hat Datenzugriff -Objekte können Sie Datenbanken austauschen, ohne eine einzige Zeile App-Code neu schreiben zu müssen.
Die richtige objektorientierte Programmierung erfordert Kenntnisse über Vererbung und wie sie die Codierung vereinfachen und Fehler reduzieren kann.
Weiter lesen
- Programmierung
- Programmierung
- Objekt orientierte Programmierung
Lee ist ein Vollzeit-Nomade und ein Universalgelehrter mit vielen Leidenschaften und Interessen. Einige dieser Leidenschaften drehen sich um Produktivität, persönliche Entwicklung und Schreiben.
Abonniere unseren Newsletter
Abonnieren Sie unseren Newsletter für technische Tipps, Rezensionen, kostenlose E-Books und exklusive Angebote!
Klicken Sie hier, um sich zu abonnieren