Ja jūs varat vadīt četru durvju piepilsētas automašīnu, varat vadīt arī pikapu. Ja esat vadījis automašīnu ar iekšdedzes motoru, varat vadīt arī elektromobili.

Pasažieru transportlīdzekļu forma un izmērs var atšķirties. Motors, kas vada šos transportlīdzekļus, varētu būt arī pilnīgi atšķirīgs. Bet vadītājam tas nav svarīgi.

Jūs vienkārši iekāpjat, piesprādzējieties, iedarbiniet transportlīdzekli, ieslēdzat pārnesumus un braucat. Tas ir tāpēc, ka automašīnas, kravas automašīnas un furgoni ir polimorfs.

Polimorfisms: tā nojaukšana

Apskatīsim vārdu polimorfisms. Jūs varat to sadalīt poli, morfs, un isms.

Poli nozīmē daudz, piemēram, kā daudzstūris nozīmē daudzus leņķus. Lietojot kā lietvārdu, a morfs ir sugas variants. Un isms var nozīmēt sistēmu.

Tātad polimorfisms vienkārši nozīmē daudzu variāciju sistēmu. Tomēr tas joprojām daudz nepasaka par to, kā tas tiek izmantots programmēšanā. Tas ir nākamais.

Ja tas staigā kā pīle... Kāpēc polimorfie objekti ir satriecoši

Izveidojot klasē klasi, kas tiek mantota no citas klases, jūs saistāt jauno klasi ar līgumu. Līgumā teikts, ka katrs mainīgais un vecāku funkcija būs arī bērnam.

Katram transportlīdzeklim ir stūre, gāzes un bremžu pedāļi un pagrieziena signāls. Lai vadītu automašīnu, nav nepieciešams atvērt pārsegu. Svarīgi ir tikai tas, ka tā ir automašīna.

Tas pats attiecas uz klasēm, kuras pārmanto no citām klasēm. Šeit ir TypeScript piemērs:


klases transportlīdzeklis {
privāts _dzinējs: virkne;
privātas _ riepas: skaits;
konstruktors (dzinējs: virkne = "degšana", riepas: skaitlis = 4) {
this._ dzinējs = dzinējs;
this._ireres = riepas;
}
paātrināt (ātrums: skaitlis) {
console.log ("paātrinot ar ātrumu" + ātrums ");
}
bremze (spiediens: skaitlis) {
console.log ("pielietošana" + spiediens + "spiediens");
}
pagriezies pa kreisi() {
console.log ("pagrieziens pa kreisi");
}
nogriezieties pa labi() {
console.log ("pagrieziens pa labi");
}
}
klases automašīna pagarina transportlīdzekli {
}
klases Tesla paplašina automašīnu {
konstruktors () {
super ("elektriskā");
}
}

Šajā piemērā ir a Transportlīdzeklis klase. Automašīna klase manto no Transportlīdzeklis klase. Un Tesla manto no Automašīna. Tagad izveidosim pāris objektus un apskatīsim tos.

ļaujiet myCoupe: Auto = jauns transportlīdzeklis ();
console.log (myCoupe);
console.log (myCoupe.constructor.name);
ļaujiet mySedan: Transportlīdzeklis = jauna Tesla ();
console.log (mySedan);
console.log (mySedan.constructor.name);
myCoupe.turnLeft ();
mySedan.turnLeft ();

Jūs redzat, ka mēs deklarējām myCoupe būt Automašīna un mySedan būt Transportlīdzeklis. Tad mēs momentāni myCoupe kā jauns Transportlīdzeklis un mySedan kā jauns Tesla. Ja jūs apmeklējiet TypeScript smilšu kasti un palaidiet kodu, un redzēsit, ka tas darbojas bez kļūdām. Un tas uzvedas tā, kā jūs varētu gaidīt, pamatojoties uz līgumu.

Citiem vārdiem sakot, visi transportlīdzekļi var griezties pa kreisi, jo tie to mantojuši no Transportlīdzeklis klase. Sastādītājs zina, ka katrs bērns no Transportlīdzeklis piekrita līgumam. Tātad tiek pieņemts, ka viss ir kārtībā neatkarīgi no tā, kādā klasē objekti tika ierakstīti vai parādīti.

To dažreiz sauc par "pīles rakstīšanu". Sastādītājs pieņem, ka, ja tā staigā kā pīle un runā kā pīle, tad tā varētu būt arī pīle. Tātad kompilators neuztraucas par detaļām un vienkārši izturas pret objektu kā pret pīli.

Polimorfisms padara jūsu kodu ložu necaurlaidīgu

Vēl viena polimorfisma līguma priekšrocība ir garantija, ka jūsu kods darbosies. Ja esat stingri ierakstījis visus mainīgos un to, ko katra funkcija atgriež, jūs zināt, ka katrs bērns vienmēr atbilst mainīgajiem, funkcijām un veidiem.

Tas nozīmē, ka jūs varat pievienot un mainīt kodu savās klasēs, nepārkāpjot programmu. Katrs objekts, kas atsaucas uz a Transportlīdzeklis objekts vienmēr iegūs datus un funkcionalitāti, kas atbilst cerībām, neatkarīgi no tā, cik daudz Automašīna izmaiņas.

Funkcijas kods var nesniegt pareizos rezultātus. Bet tā ir cita veida problēma. Kamēr funkcija seko līgumam un atgriež paredzamo mainīgā veidu, tā neradīs koda laušanas kļūdu.

Polimorfisms ir milzīgs, un šeit ir vēl 10 programmēšanas principi, kas jums jāzina.

Praktizējiet polimorfismu

  • Izmantojiet iepriekš minēto smilškastes saiti, lai izveidotu Laiva klase.
  • Instantiate jaunu laivas objektu tādā veidā, ka tas ir a Transportlīdzeklis tipa, bet tomēr izskatās pēc laivas.
  • Pārliecinieties, vai laiva joprojām darbojas kā transportlīdzeklis.

Pēdējais polimorfisma piemērs

Polimorfisms sākotnēji var būt sarežģīts jēdziens. Bet, kad esat to sapratis, esat spēris milzīgu soli, lai saprastu, kas īsti ir objektorientēta programmēšana. Tomēr jēdziens joprojām var šķist teorētisks. Tātad, šeit ir labs piemērs reālajā pasaulē, lai palīdzētu jums redzēt, cik tas ir noderīgi.

Iedomājieties, ka veidojat tīmekļa lietotni, kas izveido savienojumu ar MySQL datu bāzi. Tad priekšnieks nolemj pāriet uz PostgreSQL datu bāzi. Vai tas nozīmē, ka jums ir jāpārraksta visi datubāzes zvani?

Nē, nav. Ja jūsu lietotne izmanto a DataAccess klasē ar apakšklasēm, kas patiesībā sajaucas ar datiem, jums ir paveicies. DataAccess klase nosaka, kā jūsu lietotne mijiedarbojas ar datiem, nevis to, kā tā mijiedarbojas ar datu bāzi.

Jums ir tādas apakšklases kā MySQLAccess un PostgresQLAccess kas veic visu netīro darbu. Bet, ja jūsu lietotnei ir tikai DataAccess objektus, varat nomainīt datu bāzes, nepārrakstot vienu lietotnes koda rindu.

KopīgotČivinātE -pasts
Kā sakārtot uz objektu orientētu kodu ar mantojumu

Pareiza objektorientēta programmēšana nozīmē, ka jums jāzina par mantojumu un to, kā tas var vienkāršot kodēšanu un samazināt kļūdas.

Lasīt Tālāk

Saistītās tēmas
  • Programmēšana
  • Programmēšana
  • Objektorientēta programmēšana
Par autoru
Lī Neitans (Publicēti 19 raksti)

Lī ir pilna laika nomads un daudzsološs cilvēks ar daudzām kaislībām un interesēm. Dažas no šīm kaislībām ir saistītas ar produktivitāti, personīgo attīstību un rakstīšanu.

Vairāk no Lee Nathan

Abonējiet mūsu biļetenu

Pievienojieties mūsu informatīvajam izdevumam, lai iegūtu tehniskus padomus, pārskatus, bezmaksas e -grāmatas un ekskluzīvus piedāvājumus!

Noklikšķiniet šeit, lai abonētu