Pokud můžete řídit 4-dveřový dojíždějící vůz, můžete také řídit pickup. Pokud jste řídili auto se spalovacím motorem, můžete také řídit elektromobil.

Tvar a velikost osobních vozidel se může u jednotlivých vozidel lišit. Motor, který tato vozidla provozuje, může být také úplně jiný. Na řidiči to ale nezáleží.

Prostě nasednete, připoutáte se, nastartujete vozidlo, zařadíte rychlost a jedete. Důvodem je, že auta, nákladní auta a dodávky jsou polymorfní.

Polymorfismus: Rozbíjení

Podívejme se na slovo polymorfismus. Můžete to rozebrat na poly, morf, a ism.

Poly znamená mnoho, podobně jako mnohoúhelník znamená mnoho úhlů. Pokud se používá jako podstatné jméno, a morf je variantou druhu. A ism může znamenat systém.

Polymorfismus tedy jednoduše znamená systém mnoha variací. To vám však stále moc neřekne, jak se používá v programování. To je další.

Pokud to chodí jako kachna... Proč jsou polymorfní objekty úžasné

Když v kódu vytvoříte třídu, která dědí z jiné třídy, zavazujete novou třídu ke smlouvě. Smlouva uvádí, že každá proměnná a funkce v rodiči bude také v dítěti.

Každé vozidlo má volant, plynový a brzdový pedál a ukazatel směru. K řízení auta nemusíte otevírat kapotu. Důležité je jen to, že je to auto.

Totéž platí pro třídy, které dědí z jiných tříd. Zde je příklad v jazyce TypeScript:


vozidlo třídy {
private _engine: string;
soukromé _tires: number;
konstruktor (motor: string = "spalování", pneumatiky: číslo = 4) {
this._engine = engine;
this._tires = pneumatiky;
}
zrychlit (rychlost: číslo) {
console.log ("zrychlování rychlostí" + rychlost);
}
brzda (tlak: číslo) {
console.log ("použití" + tlak + "tlak");
}
odbočit vlevo() {
console.log ("odbočení doleva");
}
odbočit vpravo() {
console.log ("odbočení doprava");
}
}
třída auto rozšiřuje vozidlo {
}
třída Tesla rozšiřuje vůz {
konstruktor () {
super („elektrický“);
}
}

V tomto příkladu existuje a Vozidlo třída. The Auto třída dědí z Vozidlo třída. A Tesla dědí z Auto. Nyní vytvoříme pár objektů a podíváme se na ně.

nechte myCoupe: Auto = nové vozidlo ();
console.log (myCoupe);
console.log (myCoupe.constructor.name);
nechme mySedan: Vehicle = new Tesla ();
console.log (mySedan);
console.log (mySedan.constructor.name);
myCoupe.turnLeft ();
mySedan.turnLeft ();

Vidíte, že jsme prohlásili myCoupe být a Auto a mySedan být a Vozidlo. Pak jsme vytvořili instanci myCoupe jako nový Vozidlo a mySedan jako nový Tesla. jestli ty navštivte sandbox typu TypeScript a spusťte kód, uvidíte, že funguje bez chyb. A na základě smlouvy se chová tak, jak byste očekávali.

Jinými slovy, všechna vozidla mohou odbočit doleva, protože to zdědili po Vozidlo třída. Kompilátor ví, že každé dítě Vozidlo souhlasil se smlouvou. Předpokládá tedy, že je vše v pořádku, bez ohledu na to, do jakých tříd byly objekty zadány nebo vytvořeny.

Někdy se tomu říká „psaní kachny“. Kompilátor předpokládá, že pokud chodí jako kachna a mluví jako kachna, může to být také kachna. Kompilátor si tedy nedělá starosti s detaily a pouze s objektem zachází jako s kachnou.

Polymorfismus činí váš kód neprůstřelným

Další výhodou smlouvy o polymorfismu je záruka, že váš kód bude fungovat. Pokud jste důkladně zadali všechny své proměnné a co každá funkce vrací, víte, že každé dítě bude vždy odpovídat proměnným, funkcím a typům.

To znamená, že můžete přidávat a měnit kód ve svých třídách, aniž byste porušili program. Každý objekt, který odkazuje na Vozidlo objekt vždy získá data a funkce, které splňují očekávání, bez ohledu na to, jak moc Auto Změny.

Kód uvnitř funkce nemusí dát správné výsledky. Ale to je jiný druh problému. Dokud se funkce řídí smlouvou a vrací očekávaný typ proměnné, nebude to mít za následek chybu prolomení kódu.

Polymorfismus je obrovský a Zde je 10 dalších programovacích principů, které byste měli vědět.

Procvičte si polymorfismus

  • Pomocí odkazu na sandboxu výše vytvořte soubor Loď třída.
  • Vytvořte instanci nového objektu lodi takovým způsobem, že je to Vozidlo typu, ale stále vypadá jako loď.
  • Ujistěte se, že se loď stále chová jako vozidlo.

Jeden poslední příklad polymorfismu

Polymorfismus může být na začátku choulostivý koncept. Ale jakmile to získáte, udělali jste obrovský krok k pochopení toho, o čem objektově orientované programování opravdu je. Tento koncept se však může zdát teoretický. Tady je solidní příklad z reálného světa, který vám pomůže zjistit, jak je to užitečné.

Představte si, že vytváříte webovou aplikaci, která se připojuje k databázi MySQL. Poté se šéf rozhodne přejít na databázi PostgreSQL. Znamená to, že musíte přepsat všechna databázová volání?

Ne, není. Pokud vaše aplikace používá a Přístup k datům třída s podtřídami, které se ve skutečnosti sklízejí s daty, máte štěstí. The Přístup k datům class definuje, jak vaše aplikace interaguje s daty, nikoli jak interaguje s databází.

Máte podtřídy jako MySQLAccess a PostgresQLAccess které dělají veškerou špinavou práci. Ale pokud má vaše aplikace pouze Přístup k datům objekty, můžete prohodit databáze bez přepsání jediného řádku kódu aplikace.

PodíltweetE-mailem
Jak uspořádat objektově orientovaný kód s dědičností

Správné objektově orientované programování znamená, že potřebujete vědět o dědičnosti a o tom, jak může zjednodušit kódování a omezit chyby.

Číst dále

Související témata
  • Programování
  • Programování
  • Objektově orientované programování
O autorovi
Lee Nathan (19 článků zveřejněno)

Lee je nomád na plný úvazek a polymath s mnoha vášněmi a zájmy. Některé z těchto vášní se točí kolem produktivity, osobního rozvoje a psaní.

Více od Lee Nathana

Přihlaste se k odběru našeho zpravodaje

Připojte se k našemu zpravodaji a získejte technické tipy, recenze, bezplatné elektronické knihy a exkluzivní nabídky!

Kliknutím sem se přihlásíte k odběru