Hvis du kan køre en 4-dørs pendlerbil, kan du også køre en pickup. Hvis du har kørt en bil med en forbrændingsmotor, kan du også køre en elbil.

Personbilenes form og størrelse kan variere fra den ene til den anden. Motoren, der kører disse køretøjer, kan også være helt anderledes. Men det gør ikke noget for chaufføren.

Du kommer bare ind, spænder, starter bilen, sætter den i gear og kører. Det er fordi biler, lastbiler og varevogne er det polymorf.

Polymorfisme: Breaking it Down

Lad os se på ordet polymorfisme. Du kan bryde det ned i poly, morph, og ism.

Poly betyder mange, ligesom hvordan polygon betyder mange vinkler. Når det bruges som substantiv, a morph er en variant af en art. Og ism kan betyde system.

Så polymorfisme betyder ganske enkelt et system med mange variationer. Det fortæller dig stadig ikke meget om, hvordan det bruges til programmering. Det er det næste.

Hvis det går som en and... Hvorfor polymorfe objekter er fantastiske

Når du opretter en klasse i din kode, der arver fra en anden klasse, binder du den nye klasse til en kontrakt. Kontrakten siger, at hver variabel og funktion i forælderen også vil være i barnet.

instagram viewer

Hvert køretøj har et rat, gas- og bremsepedaler og et blinklys. Du behøver ikke at åbne motorhjelmen for at køre bil. Det eneste, der betyder noget, er, at det er en bil.

Det samme gælder klasser, der arver fra andre klasser. Her er et eksempel i TypeScript:


klasse køretøj {
privat _motor: streng;
private _dæk: nummer;
konstruktør (motor: string = "forbrænding", dæk: antal = 4) {
denne._motor = motor;
dette._dæk = dæk;
}
accelerere (hastighed: antal) {
console.log ("acceleration med en hastighed på" + hastighed);
}
bremse (tryk: tal) {
console.log ("påføring" + tryk + "tryk");
}
Drej til venstre() {
console.log ("dreje til venstre");
}
Drej til højre() {
console.log ("drej til højre");
}
}
klasse Bil forlænger køretøj {
}
klasse Tesla forlænger bil {
konstruktør () {
super ("elektrisk");
}
}

I dette eksempel er der en Køretøj klasse. Det Bil klasse arver fra Køretøj klasse. Og Tesla arver fra Bil. Lad os nu oprette et par objekter og se på dem.

lad myCoupe: Bil = ny Vehicle ();
console.log (myCoupe);
console.log (myCoupe.constructor.name);
lad mySedan: Køretøj = ny Tesla ();
console.log (mySedan);
console.log (mySedan.constructor.name);
myCoupe.turnLeft ();
mySedan.turnLeft ();

Du kan se, at vi erklærede minCoupe at være en Bil og mySedan at være en Køretøj. Så instantierede vi minCoupe som en ny Køretøj og mySedan som en ny Tesla. hvis du besøg TypeScript -sandkassen og kør koden, vil du se, at den fungerer uden fejl. Og det opfører sig som du ville forvente, baseret på kontrakten.

Med andre ord kan alle køretøjer dreje til venstre, fordi de har arvet det fra Køretøj klasse. Kompilatoren ved, at hvert barn af Køretøj accepteret kontrakten. Så det går ud fra, at alt er godt, uanset hvilke klasser objekterne blev skrevet eller instantieret som.

Dette kaldes undertiden "andetypning". Kompilatoren antager, at hvis den går som en and og taler som en and, kan den lige så godt være en and. Så kompilatoren bekymrer sig ikke om detaljerne og behandler bare objektet som en and.

Polymorfisme gør din kode skudsikker

En anden fordel ved polymorfismekontrakten er en garanti for, at din kode fungerer. Hvis du har skrevet stærkt alle dine variabler og hvad hver funktion returnerer, ved du, at hvert barn altid vil matche variabler, funktioner og typer.

Det betyder, at du kan tilføje og ændre koden i dine klasser uden at bryde dit program. Hvert objekt, der refererer til a Køretøj objekt vil altid få data og funktionalitet, der opfylder forventningerne, uanset hvor meget Bil ændringer.

Koden inde i funktionen udsender muligvis ikke de korrekte resultater. Men det er en anden slags problem. Så længe funktionen følger kontrakten og returnerer den forventede type variabel, resulterer det ikke i en kodebrydende fejl.

Polymorfisme er enorm, og her er 10 flere programmeringsprincipper, du bør kende.

Øv polymorfisme

  • Brug sandkasselinket ovenfor til at oprette en Båd klasse.
  • Instantier et nyt bådobjekt på en sådan måde, at det er et Køretøj type, men ligner stadig en båd.
  • Sørg for, at båden stadig opfører sig som et køretøj.

Et sidste eksempel på polymorfisme

Polymorfisme kan være et vanskeligt begreb at forstå i starten. Men når du får det, har du taget et stort skridt i retning af at forstå, hvad objektorienteret programmering egentlig handler om. Konceptet kan dog stadig virke teoretisk. Så her er et solidt eksempel fra den virkelige verden for at hjælpe dig med at se, hvor nyttigt det er.

Forestil dig, at du bygger en webapp, der opretter forbindelse til en MySQL -database. Derefter beslutter chefen at skifte til en PostgreSQL -database. Betyder det, at du skal omskrive alle dine databaseopkald?

Nej, det gør den ikke. Hvis din app bruger en DataAccess klasse med underklasser, der rent faktisk narrer med dataene, har du held og lykke. Det DataAccess klasse definerer, hvordan din app interagerer med data, ikke hvordan den interagerer med databasen.

Du har underklasser som MySQLAccess og PostgresQLAccess der gør alt det beskidte arbejde. Men hvis din app kun har DataAccess objekter, kan du skifte databaser ud uden at omskrive en enkelt linje med appkode.

DelTweetE -mail
Sådan organiseres din objektorienterede kode med arv

At få objektorienteret programmering rigtigt betyder, at du skal vide om arv, og hvordan det kan forenkle kodning og reducere fejl.

Læs Næste

Relaterede emner
  • Programmering
  • Programmering
  • Objektorienteret programmering
Om forfatteren
Lee Nathan (19 artikler udgivet)

Lee er en nomad på fuld tid og en polymat med mange lidenskaber og interesser. Nogle af disse lidenskaber kredser om produktivitet, personlig udvikling og skrivning.

Mere fra Lee Nathan

Abonner på vores nyhedsbrev

Tilmeld dig vores nyhedsbrev for tekniske tips, anmeldelser, gratis e -bøger og eksklusive tilbud!

Klik her for at abonnere