Kui saate sõita 4-ukselise pendelrändautoga, võite sõita ka pikapiga. Kui olete sõitnud sisepõlemismootoriga autoga, võite sõita ka elektriautoga.
Reisisõidukite kuju ja suurus võivad olla erinevad. Mootor, mis neid sõidukeid juhib, võib olla ka täiesti erinev. Kuid see ei ole juhile oluline.
Lihtsalt istuge sisse, pange kinni, käivitage sõiduk, lülitage see käiku ja sõitke. Seda seetõttu, et autod, veoautod ja kaubikud on polümorfne.
Polümorfism: selle purustamine
Vaatame sõna polümorfism. Saate selle lagundada polü, morfja ism.
Polü tähendab palju, näiteks kuidas hulknurk tähendab paljusid nurki. Kui seda kasutatakse nimisõnana, a morf on liigi variant. Ja ism võib tähendada süsteemi.
Nii et polümorfism tähendab lihtsalt paljude variatsioonide süsteemi. Kuid see ei ütle teile veel palju selle kohta, kuidas seda programmeerimisel kasutatakse. See on järgmine.
Kui see kõnnib nagu part... Miks polümorfsed objektid on suurepärased?
Kui loote oma koodis klassi, mis pärib teiselt klassilt, sidute uue klassi lepinguga. Lepingus on kirjas, et iga muutuja ja funktsioon vanemas on ka lapses.
Igal sõidukil on rool, gaasi- ja piduripedaalid ning suunatuli. Autoga sõitmiseks ei pea te kapotti avama. Tähtis on vaid see, et see on auto.
Sama kehtib ka klasside kohta, mis pärivad teistest klassidest. Siin on näide TypeScriptis:
klassi sõiduk {
privaatne _mootor: string;
privaatsed _rehvid: number;
konstruktor (mootor: string = "põlemine", rehvid: number = 4) {
this._engine = mootor;
this._rehvid = rehvid;
}
kiirendama (kiirus: arv) {
console.log ("kiirendamine kiirusega" + kiirus);
}
pidur (rõhk: arv) {
console.log ("rakendamine" + rõhk + "rõhk");
}
pööra vasakule() {
console.log ("vasakule pööramine");
}
pööra paremale() {
console.log ("paremale pööramine");
}
}
klassi auto pikendab sõidukit {
}
klassi Tesla laiendab autot {
konstruktor () {
super ("elektriline");
}
}
Selles näites on a Sõiduk klassi. The Auto klass pärib Sõiduk klassi. Ja Tesla pärib Auto. Nüüd loome paar objekti ja vaatame neid.
las myCoupe: Auto = uus sõiduk ();
console.log (myCoupe);
console.log (myCoupe.constructor.name);
las mySedan: Sõiduk = uus Tesla ();
console.log (mySedan);
console.log (mySedan.constructor.name);
myCoupe.turnLeft ();
mySedan.turnLeft ();
Näete, et me kuulutasime myCoupe olla Auto ja mySedan olla Sõiduk. Siis tegime näiteid myCoupe kui uus Sõiduk ja mySedan kui uus Tesla. Kui sa külastage TypeScripti liivakasti ja käivitage kood, näete, et see töötab veatult. Ja see käitub nii, nagu te lepingu alusel oodata võiksite.
Teisisõnu, kõik sõidukid võivad vasakule pöörata, kuna nad on selle pärinud Sõiduk klassi. Koostaja teab, et iga laps Sõiduk leppega nõus. Seega eeldatakse, et kõik on hästi, olenemata sellest, millistesse klassidesse objektid trükiti või vahetati.
Seda nimetatakse mõnikord "pardi kirjutamiseks". Koostaja eeldab, et kui ta kõnnib nagu part ja räägib nagu part, võib see sama hästi olla part. Nii et koostaja ei muretse detailide pärast ja kohtleb objekti lihtsalt nagu part.
Polümorfism muudab teie koodi kuulikindlaks
Polümorfismi lepingu teine eelis on garantii, et teie kood töötab. Kui olete kõik muutujad tugevalt sisestanud ja selle, mida iga funktsioon tagastab, teate, et iga laps vastab alati muutujatele, funktsioonidele ja tüüpidele.
See tähendab, et saate oma klassides koodi lisada ja seda ilma programmi rikkumata muuta. Iga objekt, mis viitab a Sõiduk objekt saab alati andmeid ja funktsioone, mis vastavad ootustele, olenemata sellest, kui palju Auto muudatusi.
Funktsiooni sees olev kood ei pruugi anda õigeid tulemusi. Kuid see on teistsugune probleem. Kuni funktsioon järgib lepingut ja tagastab oodatava muutuja tüübi, ei põhjusta see koodimurdmisviga.
Polümorfism on tohutu ja siin on veel 10 programmeerimispõhimõtet, mida peaksite teadma.
Harjuta polümorfismi
- Kasutage ülaltoodud liivakasti linki, et luua a Paat klassi.
- Instateeri uus paadiobjekt selliselt, et see oleks a Sõiduk tüüpi, kuid näeb siiski välja nagu paat.
- Veenduge, et paat käituks endiselt nagu sõiduk.
Viimane näide polümorfismist
Polümorfism võib esialgu olla keeruline mõiste. Kuid kui olete selle kätte saanud, olete astunud tohutu sammu, et mõista, mis objektorienteeritud programmeerimine tegelikult on. Mõiste võib siiski tunduda teoreetiline. Nii et siin on kindel näide reaalsest maailmast, mis aitab teil näha, kui kasulik see on.
Kujutage ette, et loote veebirakendust, mis ühendub MySQL -i andmebaasiga. Seejärel otsustab ülemus üle minna PostgreSQL andmebaasile. Kas see tähendab, et peate kõik oma andmebaasikõned ümber kirjutama?
Ei, seda ei tehta. Kui teie rakendus kasutab a DataAccess klassi alamklassidega, mis tegelikult andmetega ringi käivad, on teil õnne. The DataAccess klass määratleb, kuidas teie rakendus andmetega suhtleb, mitte kuidas andmebaasiga suhtleb.
Teil on alamklassid nagu MySQLAccess ja PostgresQLAccess mis teevad kogu musta töö. Aga kui teie rakendusel on ainult DataAccess objekte, saate andmebaasid välja vahetada ilma rakenduse koodirida ümber kirjutamata.
Objektile orienteeritud programmeerimise õigeks saamine tähendab, et peate teadma pärimist ja seda, kuidas see võib kodeerimist lihtsustada ja vigu vähendada.
Loe edasi
- Programmeerimine
- Programmeerimine
- Objektile orienteeritud programmeerimine
Lee on täiskohaga nomaad ja paljude kirgede ja huvidega polümaatik. Mõned neist kirgedest keerlevad tootlikkuse, isikliku arengu ja kirjutamise ümber.
Telli meie uudiskiri
Liituge meie uudiskirjaga, et saada tehnilisi näpunäiteid, ülevaateid, tasuta e -raamatuid ja eksklusiivseid pakkumisi!
Tellimiseks klõpsake siin