Jos voit ajaa 4-ovisella työmatka-autolla, voit myös ajaa pick-upilla. Jos olet ajanut polttomoottorilla varustettua autoa, voit ajaa myös sähköautolla.

Henkilöautojen muoto ja koko voivat vaihdella. Näitä ajoneuvoja käyttävä moottori voi olla myös täysin erilainen. Mutta sillä ei ole väliä kuljettajalle.

Astu vain sisään, solki ylös, käynnistä ajoneuvo, vaihda se ja aja. Tämä johtuu siitä, että autot, kuorma -autot ja pakettiautot ovat polymorfinen.

Polymorfismi: hajottaminen

Katsotaanpa sanaa polymorfismi. Voit jakaa sen poly, morphja ismi.

Poly tarkoittaa monia, kuten kuinka monikulmio tarkoittaa monia kulmia. Kun sitä käytetään substantiivina, a morph on lajin muunnelma. Ja ismi voi tarkoittaa systeemiä.

Joten polymorfismi tarkoittaa yksinkertaisesti monen muunnelman järjestelmää. Se ei kuitenkaan vielä kerro paljon siitä, miten sitä käytetään ohjelmoinnissa. Se on seuraava.

Jos se kävelee kuin ankka... Miksi polymorfiset esineet ovat mahtavia

Kun luot koodiin luokan, joka periytyy toiselta luokalta, sitoudut uuden luokan sopimukseen. Sopimuksessa todetaan, että kaikki muuttujat ja toiminnot vanhemmissa ovat myös lapsessa.

Jokaisessa ajoneuvossa on ohjauspyörä, kaasu- ja jarrupolkimet sekä suuntavilkku. Sinun ei tarvitse avata konepeltiä ajaaksesi autoa. Tärkeintä on, että se on auto.

Sama koskee luokkia, jotka periytyvät muista luokista. Tässä on esimerkki TypeScriptistä:


luokan ajoneuvo {
yksityinen _moottori: merkkijono;
yksityiset _renkaat: numero;
rakentaja (moottori: merkkijono = "palaminen", renkaat: numero = 4) {
this._engine = moottori;
this._tires = renkaat;
}
kiihdyttää (nopeus: luku) {
console.log ("kiihtyvyys nopeudella" + nopeus);
}
jarru (paine: numero) {
console.log ("levittäminen" + paine + "paine");
}
käänny vasemmalle() {
console.log ("kääntyminen vasemmalle");
}
käänny oikealle() {
console.log ("kääntyminen oikealle");
}
}
luokan auto laajentaa ajoneuvoa {
}
Tesla laajentaa autoa {
rakentaja () {
super ("sähköinen");
}
}

Tässä esimerkissä on Ajoneuvo luokka. Auto luokka perii Ajoneuvo luokka. Ja Tesla perii Auto. Luodaan nyt pari esinettä ja katsotaan niitä.

anna myCoupe: Auto = uusi ajoneuvo ();
console.log (myCoupe);
console.log (myCoupe.constructor.name);
anna mySedan: Vehicle = uusi Tesla ();
console.log (mySedan);
console.log (mySedan.constructor.name);
myCoupe.turnLeft ();
mySedan.turnLeft ();

Voit nähdä, että julistimme myCoupe olla Auto ja mySedan olla Ajoneuvo. Sitten esittelimme myCoupe uutena Ajoneuvo ja mySedan uutena Tesla. Jos sinä käy TypeScript -hiekkalaatikossa ja suorita koodi, niin näet, että se toimii virheettömästi. Ja se käyttäytyy odotetusti sopimuksen perusteella.

Toisin sanoen kaikki ajoneuvot voivat kääntyä vasemmalle, koska ne ovat perineet sen Ajoneuvo luokka. Kääntäjä tietää, että jokainen lapsi Ajoneuvo suostui sopimukseen. Joten oletetaan, että kaikki on hyvin, riippumatta siitä, millä luokilla objektit kirjoitettiin tai näytettiin.

Tätä kutsutaan joskus "ankan kirjoittamiseksi". Kääntäjä olettaa, että jos se kävelee kuin ankka ja puhuu kuin ankka, se voi yhtä hyvin olla ankka. Joten kääntäjä ei välitä yksityiskohdista ja kohtelee kohdetta vain kuin ankka.

Polymorfismi tekee koodistasi luodinkestävän

Toinen etu polymorfisopimuksesta on takuu koodin toimivuudesta. Jos olet kirjoittanut kaikki muuttujasi ja mitä jokainen funktio palauttaa, tiedät, että jokainen lapsi vastaa aina muuttujia, toimintoja ja tyyppejä.

Tämä tarkoittaa, että voit lisätä ja muuttaa luokkasi koodia rikkomatta ohjelmaa. Jokainen kohde, joka viittaa a Ajoneuvo objekti saa aina odotuksia vastaavat tiedot ja toiminnot riippumatta siitä, kuinka paljon Auto muutoksia.

Toiminnon sisällä oleva koodi ei ehkä anna oikeita tuloksia. Mutta se on erilainen ongelma. Niin kauan kuin funktio seuraa sopimusta ja palauttaa odotetun tyyppisen muuttujan, se ei aiheuta koodinmurtovirhettä.

Polymorfismi on valtava, ja Tässä on 10 muuta ohjelmointiperiaatetta, jotka sinun pitäisi tietää.

Harjoittele polymorfismia

  • Käytä yllä olevaa hiekkalaatikkolinkkiä luodaksesi Vene luokka.
  • Asenna uusi veneen esine siten, että se on Ajoneuvo tyyppi, mutta näyttää silti veneeltä.
  • Varmista, että vene käyttäytyy edelleen kuin ajoneuvo.

Yksi viimeinen esimerkki polymorfismista

Polymorfismi voi olla hankala käsite ymmärtää aluksi. Mutta kun olet saanut sen, olet ottanut valtavan askeleen ymmärtääksesi, mitä olio-ohjelmointi oikeastaan ​​tarkoittaa. Käsite voi silti vaikuttaa teoreettiselta. Joten tässä on vankka esimerkki todellisesta maailmasta, joka auttaa sinua näkemään, kuinka hyödyllistä se on.

Kuvittele, että rakennat verkkosovellusta, joka muodostaa yhteyden MySQL -tietokantaan. Sitten pomo päättää siirtyä PostgreSQL -tietokantaan. Tarkoittaako tämä, että sinun on kirjoitettava kaikki tietokannan puhelut uudelleen?

Ei, ei. Jos sovelluksesi käyttää a DataAccess luokka, jossa on alaluokkia, jotka todella sekoittavat tietoja, olet onnekas. DataAccess luokka määrittää, miten sovelluksesi on vuorovaikutuksessa tietojen kanssa, ei miten se on vuorovaikutuksessa tietokannan kanssa.

Sinulla on alaluokkia, kuten MySQLAccess ja PostgresQLAccess joka tekee kaiken likaisen työn. Mutta jos sovelluksessasi on vain DataAccess objekteja, voit vaihtaa tietokantoja ilman, että kirjoitat uudelleen yhden sovelluskoodirivin.

JaaTweetSähköposti
Kuinka järjestää objektipohjainen koodisi perinnöllä

Objektisuuntautuneen ohjelmoinnin oikea saaminen tarkoittaa, että sinun on tiedettävä perinnöstä ja miten se voi yksinkertaistaa koodausta ja vähentää virheitä.

Lue seuraava

Liittyvät aiheet
  • Ohjelmointi
  • Ohjelmointi
  • Olio-ohjelmointi
Kirjailijasta
Lee Nathan (19 artikkelia julkaistu)

Lee on kokopäiväinen nomadi ja moniarvoinen, jolla on monia intohimoja ja etuja. Jotkut näistä intohimoista pyörivät tuottavuuden, henkilökohtaisen kehityksen ja kirjoittamisen ympärillä.

Lisää Lee Nathanilta

tilaa uutiskirjeemme

Liity uutiskirjeeseemme saadaksesi teknisiä vinkkejä, arvosteluja, ilmaisia ​​e -kirjoja ja ainutlaatuisia tarjouksia!

Klikkaa tästä tilataksesi