Hvis du kan kjøre en 4-dørs pendlerbil, kan du også kjøre en pickup. Hvis du har kjørt bil med forbrenningsmotor, kan du også kjøre elbil.
Form og størrelse på personbiler kan være forskjellig fra den ene til den andre. Motoren som kjører disse bilene kan også være helt annerledes. Men det spiller ingen rolle for sjåføren.
Du går bare inn, spenner, starter bilen, setter den i gir og kjører. Det er fordi biler, lastebiler og varebiler er det polymorf.
Polymorfisme: Breaking it Down
La oss se på ordet polymorfisme. Du kan bryte det ned i poly, morph, og Er m.
Poly betyr mange, som hvordan polygon betyr mange vinkler. Når det brukes som substantiv, a morph er en variant av en art. Og Er m kan bety system.
Så polymorfisme betyr ganske enkelt et system med mange variasjoner. Det forteller deg fortsatt ikke mye om hvordan det brukes i programmering. Det er neste.
Hvis den går som en and... Hvorfor polymorfe objekter er fantastiske
Når du oppretter en klasse i koden din som arver fra en annen klasse, binder du den nye klassen til en kontrakt. Kontrakten sier at hver variabel og funksjon i forelder også vil være i barnet.
Hvert kjøretøy har ratt, gass- og bremsepedaler og et blinklys. Du trenger ikke åpne panseret for å kjøre bil. Det eneste som betyr noe er at det er en bil.
Det samme gjelder klasser som arver fra andre klasser. Her er et eksempel i TypeScript:
klasse kjøretøy {
privat _motor: streng;
private _tires: nummer;
konstruktør (motor: streng = "forbrenning", dekk: antall = 4) {
this._engine = motor;
this._tires = dekk;
}
akselerere (hastighet: tall) {
console.log ("akselerere med en hastighet på" + hastighet);
}
brems (trykk: tall) {
console.log ("påføring" + trykk + "trykk");
}
ta til venstre() {
console.log ("sving til venstre");
}
ta til høyre() {
console.log ("sving til høyre");
}
}
klasse Bil utvider kjøretøyet {
}
klasse Tesla utvider bilen {
konstruktør () {
super ("elektrisk");
}
}
I dette eksemplet er det en Kjøretøy klasse. De Bil klassen arver fra Kjøretøy klasse. Og Tesla arver fra Bil. La oss nå lage et par objekter og se på dem.
la myCoupe: Bil = nytt kjøretøy ();
console.log (myCoupe);
console.log (myCoupe.constructor.name);
la mySedan: Kjøretøy = ny Tesla ();
console.log (mySedan);
console.log (mySedan.constructor.name);
myCoupe.turnLeft ();
mySedan.turnLeft ();
Du kan se at vi erklærte myCoupe å være en Bil og mySedan å være en Kjøretøy. Så skjønte vi myCoupe som en ny Kjøretøy og mySedan som en ny Tesla. Hvis du besøk TypeScript -sandkassen og kjør koden, vil du se at den fungerer uten feil. Og den oppfører seg som du forventer, basert på kontrakten.
Med andre ord kan alle kjøretøyer svinge til venstre fordi de arvet den fra Kjøretøy klasse. Kompilatoren vet at hvert barn av Kjøretøy godtok kontrakten. Så det antar at alt er bra, uansett hvilke klasser objektene ble skrevet eller instantiert som.
Dette kalles noen ganger "andetyping". Kompilatoren antar at hvis den går som en and og snakker som en and, kan den like godt være en and. Så kompilatoren bekymrer seg ikke om detaljene og behandler objektet bare som en and.
Polymorfisme gjør koden din skuddsikker
En annen fordel med polymorfikkontrakten er en garanti for at koden din fungerer. Hvis du har skrevet alle variablene dine sterkt og hva hver funksjon returnerer, vet du at hvert barn alltid vil matche variabler, funksjoner og typer.
Det betyr at du kan legge til og endre koden i klassene dine uten å bryte programmet. Hvert objekt som refererer til a Kjøretøy objektet vil alltid få data og funksjonalitet som oppfyller forventningene, uansett hvor mye Bil Endringer.
Koden inne i funksjonen gir kanskje ikke de riktige resultatene. Men det er en annen type problem. Så lenge funksjonen følger kontrakten og returnerer den forventede typen variabel, vil det ikke resultere i en kodebrytende feil.
Polymorfisme er enormt, og her er 10 flere programmeringsprinsipper du bør vite.
Tren polymorfisme
- Bruk sandkasselinken ovenfor for å lage en Båt klasse.
- Instantier et nytt båtobjekt på en slik måte at det er en Kjøretøy type, men ser fortsatt ut som en båt.
- Sørg for at båten fremdeles oppfører seg som et kjøretøy.
Et siste eksempel på polymorfisme
Polymorfisme kan være et vanskelig konsept å forstå i utgangspunktet. Men når du får det, har du tatt et stort skritt mot å forstå hva objektorientert programmering egentlig handler om. Konseptet kan fortsatt virke teoretisk. Så her er et solid eksempel fra den virkelige verden for å hjelpe deg med å se hvor nyttig det er.
Tenk deg at du bygger en webapp som kobles til en MySQL -database. Deretter bestemmer sjefen seg for å bytte til en PostgreSQL -database. Betyr det at du må skrive om alle databasesamtalene dine?
Nei, det gjør det ikke. Hvis appen din bruker en DataAccess klasse med underklasser som faktisk sliter med dataene, har du lykke til. De DataAccess klasse definerer hvordan appen din samhandler med data, ikke hvordan den samhandler med databasen.
Du har underklasser som MySQLAaccess og PostgresQLAaccess som gjør alt det skitne arbeidet. Men hvis appen din bare har DataAccess objekter, kan du bytte ut databaser uten å skrive om en eneste linje med appkode.
Å få objektorientert programmering riktig betyr at du trenger å vite om arv og hvordan det kan forenkle koding og redusere feil.
Les neste
- Programmering
- Programmering
- Objektorientert programmering
Lee er en nomad på heltid og en polymat med mange lidenskaper og interesser. Noen av disse lidenskapene kretser rundt produktivitet, personlig utvikling og skriving.
Abonner på vårt nyhetsbrev
Bli med i vårt nyhetsbrev for tekniske tips, anmeldelser, gratis ebøker og eksklusive tilbud!
Klikk her for å abonnere