Jei galite vairuoti 4 durų priemiestinį automobilį, taip pat galite vairuoti pikapą. Jei vairavote automobilį su degimo varikliu, galite vairuoti ir elektromobilį.

Keleivinių transporto priemonių forma ir dydis gali skirtis. Tomis transporto priemonėmis varomas variklis taip pat gali būti visiškai kitoks. Bet vairuotojui tai nesvarbu.

Tiesiog įlipkite, užsisegkite, užveskite transporto priemonę, įjunkite pavarą ir važiuokite. Taip yra todėl, kad tai yra lengvieji automobiliai, sunkvežimiai ir furgonai polimorfinis.

Polimorfizmas: sunaikinti

Pažvelkime į žodį polimorfizmas. Galite jį suskaidyti poli, morfas, ir ism.

Poli reiškia daug, pavyzdžiui, kaip daugiakampis reiškia daug kampų. Kai naudojamas kaip daiktavardis, a morfas yra rūšies variantas. Ir ism gali reikšti sistemą.

Taigi polimorfizmas paprasčiausiai reiškia daugelio variantų sistemą. Tačiau tai vis dar daug nepasako apie tai, kaip jis naudojamas programuojant. Tai toliau.

Jei jis vaikšto kaip antis... Kodėl polimorfiniai objektai yra nuostabūs

instagram viewer

Kai savo kode sukuriate klasę, kuri paveldima iš kitos klasės, jūs susiejate naują klasę su sutartimi. Sutartyje nurodyta, kad kiekvienas iš tėvų kintamasis ir funkcija taip pat bus vaiko.

Kiekviena transporto priemonė turi vairą, dujų ir stabdžių pedalus bei posūkio signalą. Norint vairuoti automobilį, nereikia atidaryti gaubto. Svarbu tik tai, kad tai automobilis.

Tas pats pasakytina ir apie klases, kurios paveldimos iš kitų klasių. Štai „TypeScript“ pavyzdys:


transporto priemonės klasė {
privatus _variklis: eilutė;
privačios _ padangos: skaičius;
konstruktorius (variklis: string = "degimas", padangos: skaičius = 4) {
this._engine = variklis;
this._tires = padangos;
}
pagreitinti (greitis: skaičius) {
console.log ("įsibėgėja" greičiu " + greitis);
}
stabdys (slėgis: skaičius) {
console.log ("taikymas" + slėgis + "slėgis");
}
Pasukite į kairę() {
console.log („sukimas į kairę“);
}
Pasukite į dešinę() {
console.log („pasukti į dešinę“);
}
}
klasės automobilis pratęsia transporto priemonę {
}
„Tesla“ klasė pratęsia automobilį {
konstruktorius () {
super („elektrinis“);
}
}

Šiame pavyzdyje yra a Transporto priemonė klasė. The Automobilis klasė paveldi iš Transporto priemonė klasė. Ir Tesla paveldi iš Automobilis. Dabar sukurkime porą objektų ir pažvelkime į juos.

tegul myCoupe: Automobilis = nauja transporto priemonė ();
console.log (myCoupe);
console.log (myCoupe.constructor.name);
tegul mySedan: Transporto priemonė = nauja Tesla ();
console.log (mySedan);
console.log (mySedan.constructor.name);
myCoupe.turnLeft ();
mySedan.turnLeft ();

Matote, kad mes deklaravome myCoupe būti Automobilis ir mySedan būti Transporto priemonė. Tada mes imitavome myCoupe kaip naujas Transporto priemonė ir mySedan kaip naujas Tesla. Jei tu apsilankykite „TypeScript“ smėlio dėžėje ir paleiskite kodą, pamatysite, kad jis veikia be klaidų. Ir elgiasi taip, kaip tikitės, remiantis sutartimi.

Kitaip tariant, visos transporto priemonės gali pasukti į kairę, nes jos paveldėjo iš Transporto priemonė klasė. Kompiliatorius žino, kad kiekvienas vaikas Transporto priemonė sutiko su sutartimi. Taigi daroma prielaida, kad viskas gerai, nesvarbu, kokiomis klasėmis objektai buvo įvesti ar įterpti.

Tai kartais vadinama „ančių spausdinimu“. Kompiliatorius daro prielaidą, kad jei jis vaikšto kaip antis ir kalba kaip antis, tai gali būti ir antis. Taigi kompiliatorius nesijaudina dėl smulkmenų ir tiesiog elgiasi su objektu kaip antis.

Polimorfizmas daro jūsų kodą neperšaunamą

Kitas polimorfizmo sutarties pranašumas yra garantija, kad jūsų kodas veiks. Jei griežtai įvedėte visus savo kintamuosius ir ką kiekviena funkcija pateikia, žinote, kad kiekvienas vaikas visada atitiks kintamuosius, funkcijas ir tipus.

Tai reiškia, kad galite pridėti ir pakeisti kodą savo klasėse, nepažeisdami programos. Kiekvienas objektas, nurodantis a Transporto priemonė objektas visada gaus duomenis ir funkcionalumą, atitinkantį lūkesčius, nesvarbu, kiek Automobilis pakeitimus.

Funkcijos viduje esantis kodas gali nepateikti teisingų rezultatų. Bet tai yra kitokia problema. Kol funkcija vykdys sutartį ir grąžins laukiamą kintamojo tipą, ji nesukels kodo laužymo klaidos.

Polimorfizmas yra didžiulis, ir čia yra dar 10 programavimo principų, kuriuos turėtumėte žinoti.

Praktikuokite polimorfizmą

  • Naudokite aukščiau esančią smėlio dėžės nuorodą, kad sukurtumėte Valtis klasė.
  • Įveskite naują valties objektą taip, kad jis būtų Transporto priemonė tipo, bet vis tiek atrodo kaip valtis.
  • Įsitikinkite, kad valtis vis dar elgiasi kaip transporto priemonė.

Paskutinis polimorfizmo pavyzdys

Polimorfizmas iš pradžių gali būti sudėtinga suvokti. Bet kai tai suprasite, jūs padarėte didžiulį žingsnį, kad suprastumėte, kas iš tikrųjų yra objektinis programavimas. Vis dėlto ši sąvoka gali atrodyti teorinė. Taigi čia yra tvirtas realaus pasaulio pavyzdys, padedantis suprasti, koks jis naudingas.

Įsivaizduokite, kad kuriate žiniatinklio programą, kuri jungiasi prie „MySQL“ duomenų bazės. Tada viršininkas nusprendžia pereiti prie „PostgreSQL“ duomenų bazės. Ar tai reiškia, kad turite perrašyti visus savo duomenų bazės skambučius?

Ne, ne. Jei jūsų programoje naudojamas a „DataAccess“ klasę su pogrupiais, kurie iš tikrųjų suklaidina duomenis, jums pasisekė. The „DataAccess“ klasė apibrėžia, kaip jūsų programa sąveikauja su duomenimis, o ne kaip ji sąveikauja su duomenų baze.

Jūs turite tokius pogrupius kaip „MySQLAccess“ ir PostgresQLAccess kurie atlieka visus nešvarius darbus. Bet jei jūsų programa turi tik „DataAccess“ objektus, galite pakeisti duomenų bazes neperrašydami vienos programos kodo eilutės.

Dalintis„Tweet“Paštu
Kaip sutvarkyti į objektą orientuotą kodą paveldint

Tinkamas į objektą orientuotas programavimas reiškia, kad turite žinoti apie paveldėjimą ir tai, kaip jis gali supaprastinti kodavimą ir sumažinti klaidų skaičių.

Skaityti toliau

Susijusios temos
  • Programavimas
  • Programavimas
  • Objektinis programavimas
Apie autorių
Lee Nathanas (Paskelbta 19 straipsnių)

Lee yra nuolatinis klajoklis ir polimatas, turintis daug aistrų ir pomėgių. Kai kurios iš šių aistrų sukasi apie produktyvumą, asmeninį tobulėjimą ir rašymą.

Daugiau iš Lee Nathan

Prenumeruokite mūsų naujienlaiškį

Prisijunkite prie mūsų naujienlaiškio, kad gautumėte techninių patarimų, apžvalgų, nemokamų el. Knygų ir išskirtinių pasiūlymų!

Norėdami užsiprenumeruoti, spustelėkite čia