Če lahko vozite 4-vratni osebni avtomobil, lahko vozite tudi tovornjak. Če ste vozili avto z motorjem na zgorevanje, lahko vozite tudi električni avto.

Oblika in velikost osebnih vozil se lahko med seboj razlikujeta. Motor, ki poganja ta vozila, je lahko tudi popolnoma drugačen. Za voznika pa to ni pomembno.

Samo vstopite, se pripnite, zaženite vozilo, ga prestavite in zapeljite. To je zato, ker so avtomobili, tovornjaki in dostavna vozila polimorfni.

Polimorfizem: razbijanje

Poglejmo besedo polimorfizem. Lahko ga razdelite na poli, morph, in izm.

Poly pomeni veliko, na primer, kako poligon pomeni veliko kotov. Ko se uporablja kot samostalnik, a morph je varianta vrste. In izm lahko pomeni sistem.

Polimorfizem torej preprosto pomeni sistem številnih variacij. To pa še vedno ne pove veliko o tem, kako se uporablja v programiranju. To je naslednje.

Če hodi kot raca... Zakaj so polimorfni predmeti izjemni

Ko v kodi ustvarite razred, ki ga podeduje od drugega razreda, novi razred povežete s pogodbo. Pogodba določa, da bo vsaka spremenljivka in funkcija v staršu tudi v otroku.

instagram viewer

Vsako vozilo ima volanski obroč, stopalke za plin in zavoro ter smernik. Za vožnjo avtomobila vam ni treba odpreti pokrova. Pomembno je le, da gre za avto.

Enako velja za razrede, ki dedujejo od drugih razredov. Tu je primer v TypeScript:


razred Vozilo {
zasebni _motor: niz;
zasebne gume: število;
konstruktor (motor: niz = "zgorevanje", pnevmatike: številka = 4) {
this._motor = motor;
this._tires = pnevmatike;
}
pospešiti (hitrost: število) {
console.log ("pospeševanje s hitrostjo" + hitrost);
}
zavora (tlak: število) {
console.log ("uporaba" + tlak + "tlak");
}
zavijemo levo() {
console.log ("zavijanje levo");
}
zavij desno() {
console.log ("zavijanje desno");
}
}
razred Avto razširja Vozilo {
}
razred Tesla podaljšuje avtomobil {
constructor () {
super ("električno");
}
}

V tem primeru obstaja a Vozilo razred. The Avto razred podeduje po Vozilo razred. In Tesla podeduje od Avto. Zdaj pa ustvarimo nekaj predmetov in si jih oglejmo.

naj myCoupe: Car = novo vozilo ();
console.log (myCoupe);
console.log (myCoupe.constructor.name);
naj mySedan: Vozilo = nova Tesla ();
console.log (mySedan);
console.log (mySedan.constructor.name);
myCoupe.turnLeft ();
mySedan.turnLeft ();

Vidite, da smo izjavili myCoupe biti Avto in mySedan biti Vozilo. Nato smo naredili primer myCoupe kot nov Vozilo in mySedan kot nov Tesla. Če ti obiščite peskovnik TypeScript in zaženite kodo, videli boste, da deluje brez napak. In obnaša se, kot bi pričakovali, na podlagi pogodbe.

Z drugimi besedami, vsa vozila lahko zavijejo levo, ker so jih podedovali od Vozilo razred. Prevajalec ve, da je vsak otrok Vozilo strinjal s pogodbo. Predpostavlja torej, da je vse v redu, ne glede na razrede, v katere so bili predmeti vneseni ali ustvarjeni.

To se včasih imenuje "račje tipkanje". Sestavljalec domneva, da če bi hodil kot raca in govoril kot raca, bi to lahko bila tudi raca. Tako prevajalnik ne skrbi za podrobnosti in obravnava predmet kot raco.

Polimorfizem naredi vašo kodo neprebojno

Druga prednost pogodbe o polimorfizmu je jamstvo, da bo vaša koda delovala. Če ste močno vnesli vse spremenljivke in kaj vsaka funkcija vrne, veste, da se bo vsak otrok vedno ujemal s spremenljivkami, funkcijami in vrstami.

To pomeni, da lahko kodo dodajate in spreminjate v razredih, ne da bi pri tem kršili program. Vsak predmet, ki se sklicuje na a Vozilo objekt bo vedno dobil podatke in funkcionalnost, ki izpolnjuje pričakovanja, ne glede na to, koliko Avto spremembe.

Koda znotraj funkcije morda ne bo dala pravilnih rezultatov. Ampak to je drugačna težava. Dokler funkcija sledi pogodbi in vrne pričakovano vrsto spremenljivke, to ne bo povzročilo napake pri prekinitvi kode.

Polimorfizem je ogromen in tukaj je še 10 načel programiranja, ki bi jih morali poznati.

Vadite polimorfizem

  • Z zgornjo povezavo v peskovniku ustvarite datoteko Čoln razred.
  • Ustvarite nov čolnski predmet tako, da je a Vozilo tip, vendar še vedno izgleda kot čoln.
  • Poskrbite, da se čoln še vedno obnaša kot vozilo.

Zadnji primer polimorfizma

Polimorfizem je lahko na začetku težaven koncept. Ko pa to dobite, ste naredili velik korak k razumevanju, kaj v resnici pomeni objektno usmerjeno programiranje. Čeprav se lahko koncept zdi še teoretičen. Torej, tukaj je trden primer iz resničnega sveta, ki vam bo pomagal videti, kako koristen je.

Predstavljajte si, da gradite spletno aplikacijo, ki se poveže z bazo podatkov MySQL. Nato se šef odloči za prehod na bazo PostgreSQL. Ali to pomeni, da morate prepisati vse klice v zbirko podatkov?

Ne, ne gre. Če vaša aplikacija uporablja datoteko DataAccess razred s podrazredi, ki se dejansko prepirajo s podatki, imate srečo. The DataAccess class določa, kako vaša aplikacija komunicira s podatki, ne pa, kako deluje z zbirko podatkov.

Imate podobrazrede, kot so MySQLAccess in PostgresQLAccess ki opravljajo vsa umazana dela. Če pa ima vaša aplikacija le DataAccess objektov, lahko zamenjate zbirke podatkov, ne da bi napisali eno vrstico kode aplikacije.

DelitiCvrkutatiE-naslov
Kako organizirati svojo objektno usmerjeno kodo z dedovanjem

Pravilno pridobivanje objektno naravnanega programiranja pomeni, da morate vedeti o dedovanju in kako lahko poenostavi kodiranje in zmanjša napake.

Preberite Naprej

Sorodne teme
  • Programiranje
  • Programiranje
  • Objektno usmerjeno programiranje
O avtorju
Lee Nathan (19 objavljenih člankov)

Lee je nomad s polnim delovnim časom in polimat z mnogimi strastmi in interesi. Nekatere od teh strasti se vrtijo okoli produktivnosti, osebnega razvoja in pisanja.

Več od Lee Nathan

Naročite se na naše novice

Pridružite se našemu glasilu za tehnične nasvete, ocene, brezplačne e -knjige in ekskluzivne ponudbe!

Kliknite tukaj, če se želite naročiti