Dacă puteți conduce o mașină de navetă cu 4 uși, puteți conduce și o camionetă. Dacă ați condus o mașină cu un motor de ardere, puteți conduce și o mașină electrică.

Forma și dimensiunea vehiculelor de călători pot fi diferite de la una la alta. Motorul care rulează aceste vehicule ar putea fi, de asemenea, complet diferit. Dar nu contează pentru șofer.

Pur și simplu urcați, vă închideți, porniți vehiculul, îl puneți în viteză și conduceți. Asta pentru că mașinile, camioanele și camionetele sunt polimorf.

Polimorfism: rupere

Să ne uităm la cuvântul polimorfism. Îl poți descompune în poli, transformare, și ism.

Poli înseamnă multe, cum ar fi modul în care poligonul înseamnă multe unghiuri. Când este folosit ca substantiv, a transformare este o variantă a unei specii. Și ism poate însemna sistem.

Deci polimorfismul înseamnă pur și simplu un sistem cu multe variații. Totuși, asta nu vă spune prea multe despre modul în care este folosit în programare. Acesta este următorul.

Dacă merge ca o rață... De ce sunt minunate obiectele polimorfe

instagram viewer

Când creați o clasă în codul dvs. care moștenește de la o altă clasă, legați noua clasă de un contract. Contractul prevede că fiecare variabilă și funcție din părinte va fi, de asemenea, în copil.

Fiecare vehicul are un volan, pedale de gaz și frână și un semnalizare. Nu trebuie să deschideți capota pentru a conduce o mașină. Tot ce contează este că este o mașină.

Același lucru se aplică claselor care moștenesc de la alte clase. Iată un exemplu în TypeScript:


clasa Vehicul {
privat _motor: șir;
anvelope private: număr;
constructor (motor: șir = "combustie", anvelope: număr = 4) {
this._engine = motor;
this._tires = cauciucuri;
}
accelera (viteza: număr) {
console.log ("accelerarea la o viteză de" + viteza);
}
frână (presiune: număr) {
console.log ("aplicarea" + presiunea + "presiunea");
}
Viraj la stânga() {
console.log („virând la stânga”);
}
Obligatoriu Dreapta() {
console.log („cotind la dreapta”);
}
}
clasa Car extinde Vehicul {
}
clasa Tesla extinde Mașina {
constructor () {
super („electric”);
}
}

În acest exemplu, există un Vehicul clasă. Mașină clasa moștenește de la Vehicul clasă. Și Tesla moștenește din Mașină. Acum să creăm câteva obiecte și să le privim.

lasă myCoupe: Mașină = vehicul nou ();
console.log (myCoupe);
console.log (myCoupe.constructor.name);
let mySedan: Vehicle = new Tesla ();
console.log (mySedan);
console.log (mySedan.constructor.name);
myCoupe.turnLeft ();
mySedan.turnLeft ();

Puteți vedea că am declarat myCoupe a fi un Mașină și mySedan a fi un Vehicul. Apoi am instanțiat myCoupe ca un nou Vehicul și mySedan ca un nou Tesla. daca tu vizitați sandbox-ul TypeScript și rulați codul, veți vedea că funcționează fără erori. Și se comportă așa cum v-ați aștepta, pe baza contractului.

Cu alte cuvinte, toate vehiculele se pot întoarce la stânga pentru că l-au moștenit de la Vehicul clasă. Compilatorul știe că fiecare copil al Vehicul a fost de acord cu contractul. Deci, presupune că totul este bine, indiferent de ce clase au fost tastate sau instanțiate obiectele.

Aceasta se numește uneori „tastarea rațelor”. Compilatorul presupune că, dacă merge ca o rață și vorbește ca o rață, ar putea fi la fel de bine o rață. Așadar, compilatorul nu își face griji cu privire la detalii și tratează doar obiectul ca pe o rață.

Polimorfismul face ca codul dvs. să fie antiglonț

Un alt avantaj al contractului de polimorfism este o garanție că codul dvs. va funcționa. Dacă ați tastat puternic toate variabilele și ceea ce returnează fiecare funcție, știți că fiecare copil se va potrivi întotdeauna cu variabile, funcții și tipuri.

Asta înseamnă că puteți adăuga și modifica codul în clasele dvs. fără a vă rupe programul. Fiecare obiect care face referire la a Vehicul obiectul va obține întotdeauna date și funcționalități care îndeplinesc așteptările, indiferent cât de mult Mașină schimbări.

Este posibil ca codul din interiorul funcției să nu scoată rezultatele corecte. Dar asta este un alt tip de problemă. Atâta timp cât funcția urmează contractul și returnează tipul de variabilă așteptat, nu va rezulta o eroare de rupere a codului.

Polimorfismul este imens și iată încă 10 principii de programare pe care ar trebui să le cunoașteți.

Practicați polimorfismul

  • Utilizați linkul sandbox de mai sus pentru a crea un Barcă clasă.
  • Instantați un nou obiect de barcă în așa fel încât să fie un Vehicul tip, dar încă arată ca o barcă.
  • Asigurați-vă că barca se comportă în continuare ca un vehicul.

Un ultim exemplu de polimorfism

Polimorfismul poate fi un concept dificil de înțeles inițial. Dar, odată ce ați obținut-o, ați făcut un pas uriaș către înțelegerea a ceea ce înseamnă într-adevăr programarea orientată pe obiecte. Conceptul poate părea totuși teoretic. Iată deci un exemplu solid din lumea reală pentru a vă ajuta să vedeți cât de util este.

Imaginați-vă că construiți o aplicație web care se conectează la o bază de date MySQL. Apoi șeful decide să treacă la o bază de date PostgreSQL. Asta înseamnă că trebuie să rescrieți toate apelurile bazei de date?

Nu, nu. Dacă aplicația dvs. folosește un DataAccess clasa cu subclasele care se amestecă cu datele, ești norocos. DataAccess class definește modul în care aplicația dvs. interacționează cu datele, nu cum interacționează cu baza de date.

Ai sub-clase ca MySQLAccess și PostgresQLAccess care fac toată munca murdară. Dar dacă aplicația dvs. are doar DataAccess obiecte, puteți schimba bazele de date fără a rescrie o singură linie de cod al aplicației.

AcțiuneTweetE-mail
Cum să vă organizați codul orientat spre obiecte cu moștenire

Obținerea corectă a programării orientate pe obiecte înseamnă că trebuie să știți despre moștenire și cum poate simplifica codarea și reduce erorile.

Citiți în continuare

Subiecte asemănătoare
  • Programare
  • Programare
  • Programare orientată pe obiecte
Despre autor
Lee Nathan (19 articole publicate)

Lee este un nomad cu normă întreagă și un polimat cu multe pasiuni și interese. Unele dintre aceste pasiuni se învârt în jurul productivității, dezvoltării personale și scrisului.

Mai multe de la Lee Nathan

Aboneaza-te la newsletter-ul nostru

Alăturați-vă newsletter-ului pentru sfaturi tehnice, recenzii, cărți electronice gratuite și oferte exclusive!

Faceți clic aici pentru a vă abona