Ako možete voziti putnički automobil s 4 vrata, možete voziti i kamionet. Ako ste vozili automobil s motorom sa sagorijevanjem, možete voziti i električni automobil.

Oblik i veličina osobnih vozila mogu se razlikovati od jednog do drugog. Motor koji pokreće ta vozila mogao bi biti i potpuno drugačiji. Ali vozaču to nije važno.

Samo uđite, zakopčajte se, pokrenite vozilo, stavite ga u brzinu i vozite. To je zato što automobili, kamioni i kombiji jesu polimorfni.

Polimorfizam: razbijanje

Pogledajmo riječ polimorfizam. Možete ga razbiti na poli, pretvoriti, i izam.

Poli znači mnogo, poput toga kako poligon znači mnogo kutova. Kad se koristi kao imenica, a pretvoriti je varijanta vrste. I izam može značiti sustav.

Dakle, polimorfizam jednostavno znači sustav mnogih varijacija. To vam ipak ne govori mnogo o tome kako se koristi u programiranju. To je sljedeće.

Ako hoda kao patka... Zašto su polimorfni objekti izvrsni

Kada stvorite klasu u svom kodu koja nasljeđuje od druge klase, novu klasu vežete za ugovor. U ugovoru je navedeno da će svaka varijabla i funkcija u roditelju također biti u djetetu.

Svako vozilo ima upravljač, papučice gasa i kočnice te pokazivač smjera. Ne morate otvarati poklopac motora da biste vozili automobil. Bitno je samo da se radi o automobilu.

Isto se odnosi i na klase koje nasljeđuju od drugih klasa. Evo primjera u TypeScript -u:


klasa Vozilo {
privatni _motor: niz;
privatne _gume: broj;
konstruktor (motor: string = "sagorijevanje", gume: broj = 4) {
this._motor = motor;
this._tires = gume;
}
ubrzati (brzina: broj) {
console.log ("ubrzavanje brzinom od" + brzina);
}
kočnica (tlak: broj) {
console.log ("primjena" + pritisak + "pritisak");
}
skrenite lijevo() {
console.log ("skretanje ulijevo");
}
skrenuti desno() {
console.log ("skretanje udesno");
}
}
klasa Auto produžuje vozilo {
}
klasa Tesla proširuje Car {
constructor () {
super ("električni");
}
}

U ovom primjeru postoji a Vozilo razred. The Automobil klasa nasljeđuje od Vozilo razred. I Tesla nasljeđuje od Automobil. Sada napravimo nekoliko objekata i pogledajmo ih.

neka myCoupe: Automobil = novo vozilo ();
console.log (myCoupe);
console.log (myCoupe.constructor.name);
neka mySedan: Vozilo = novi Tesla ();
console.log (mySedan);
console.log (mySedan.constructor.name);
myCoupe.turnLeft ();
mySedan.turnLeft ();

Vidite da smo se izjasnili myCoupe biti Automobil i mySedan biti Vozilo. Zatim smo napravili instancu myCoupe kao nova Vozilo i mySedan kao nova Tesla. Ako ti posjetite TypeScript pješčanik i pokrenite kôd, vidjet ćete da radi bez greške. I ponaša se onako kako biste očekivali, na temelju ugovora.

Drugim riječima, sva vozila mogu skrenuti ulijevo jer su ga naslijedila od Vozilo razred. Sastavljač zna da je svako dijete od Vozilo pristao na ugovor. Dakle, pretpostavlja se da je sve u redu, bez obzira na klase objekata kao što su tipovi ili instanci.

To se ponekad naziva "patka tipkanje". Sastavljač pretpostavlja da ako hoda kao patka i govori kao patka, to bi moglo biti i patka. Dakle, prevoditelj ne brine o detaljima i samo tretira objekt kao patku.

Polimorfizam čini vaš kod neprobojnim

Još jedna prednost ugovora o polimorfizmu je jamstvo da će vaš kod funkcionirati. Ako ste snažno upisali sve svoje varijable i ono što svaka funkcija vraća, znate da će se svako dijete uvijek podudarati s varijablama, funkcijama i vrstama.

To znači da možete dodavati i mijenjati kôd u svojim razredima bez smetnji u programu. Svaki objekt koji upućuje na a Vozilo objekt će uvijek dobiti podatke i funkcionalnost koja zadovoljava očekivanja, bez obzira na to koliko Automobil promjene.

Kod unutar funkcije možda neće dati točne rezultate. Ali to je drugačija vrsta problema. Sve dok funkcija slijedi ugovor i vraća očekivani tip varijable, to neće rezultirati pogreškom u razbijanju koda.

Polimorfizam je ogroman i evo još 10 principa programiranja koje biste trebali znati.

Vježbajte polimorfizam

  • Upotrijebite gornju vezu sandbox za stvaranje Čamac razred.
  • Instantirajte novi brodski objekt na takav način da je a Vozilo tipa, ali i dalje izgleda kao čamac.
  • Pazite da se čamac i dalje ponaša kao vozilo.

Jedan posljednji primjer polimorfizma

Polimorfizam može biti lukav koncept za shvatiti u početku. Ali kad to shvatite, napravili ste ogroman korak prema razumijevanju što je zapravo objektno orijentirano programiranje. Koncept se ipak može činiti teoretskim. Dakle, evo solidnog primjera iz stvarnog svijeta koji će vam pomoći da vidite koliko je to korisno.

Zamislite da gradite web aplikaciju koja se povezuje s MySQL bazom podataka. Tada šef odlučuje prijeći na PostgreSQL bazu podataka. Znači li to da morate prepisati sve pozive iz baze podataka?

Ne, nije. Ako vaša aplikacija koristi Pristup podacima klase s podrazredima koji se zapravo petljaju s podacima, imate sreće. The Pristup podacima class definira kako vaša aplikacija stupa u interakciju s podacima, a ne u načinu na koji stupa u interakciju s bazom podataka.

Imate podrazrede poput MySQLAccess i PostgresQLAccess koji obavljaju sve prljave poslove. Ali ako vaša aplikacija ima samo Pristup podacima objekata, možete zamijeniti baze podataka bez prepisivanja jednog retka koda aplikacije.

UdioCvrkutE -pošta
Kako naslijediti svoj objektno orijentirani kôd

Pravilno usvajanje objektno orijentiranog programiranja znači da morate znati o nasljeđivanju i kako ono može pojednostaviti kodiranje i smanjiti pogreške.

Pročitajte Dalje

Povezane teme
  • Programiranje
  • Programiranje
  • Objektno orijentirano programiranje
O autoru
Lee Nathan (19 objavljenih članaka)

Lee je nomad s punim radnim vremenom i znalac s mnogo strasti i interesa. Neke od tih strasti vrte se oko produktivnosti, osobnog razvoja i pisanja.

Više od Lee Nathana

Pretplatite se na naše obavijesti

Pridružite se našem biltenu za tehničke savjete, recenzije, besplatne e -knjige i ekskluzivne ponude!

Kliknite ovdje za pretplatu