Čtyři pilíře objektově orientovaného programování
On 27 září, 2021 by adminV tomto blogu vysvětlím 4 pilíře OOP a uvedu malé příklady. Dostatečně malé příklady, které vy i já snadno pochopíme.
Abstrakce je v podstatě „potřeba vědět“. Skrýváme hlavní implementační detaily, zatímco zřejmé použití ponecháváme v popředí. Takže si pamatujte toto „skrýt detaily, ukázat význam“.
Příklad abstrakce…
Toto je registrační formulář aplikace, na které pracuji (význam).
Toto je implementační logika odeslání formuláře. (potřebnost).
Polymorfismus
Polymorfismus je, když používáte jeden blok kódu, měníte verzi použitého kódu na základě vstupů, které mu dáváte. Takže aby to bylo trochu jasnější, různé třídy mohou používat stejné rozhraní, ale mohou poskytovat vlastní implementaci tohoto rozhraní.
Příklad polymorfismu…
class Animal { speak = () => console.log('makes sound')}class Dog extends Animal { speak = () => console.log('woof')}class Cat extends Animal { speak = () => console.log('meowww')}class Cow extends Animal { speak = () => console.log('moooooo')}let dog1 = new Dog()let cat1 = new Cat()let cow1 = new Cow()dog1.speak() // => woofcat1.speak() // => meowwwcow1.speak() // => moooooo
Třídy Kočka, Pes a Kráva dědí od třídy Zvíře. Díky tomu mohou třídy Kočka, Pes a Kráva používat rozhraní třídy Zvíře. Mají však k dispozici pouze metodu speak. Pokud bychom vynechali metodu speak ze třídy Cat, Dog a Cow a poté vytvořili instance třídy Cat, Dog a Cow, stále bychom mohli volat metodu speak na těchto instancích. Jediným problémem je, že by se místo příslušných zvuků, které vydávají Kočka, Pes a Kráva („mňau“, „haf“, „mňau“), vypsalo Animals „makes sound“.
Tady přichází na řadu přepisování metod. Pokud předefinujeme metodu speak ve třídách Cat, Dog a Cow, můžeme ji přizpůsobit tak, aby vypisovala zvuky, které vydávají kočky a psi.
Zapouzdření
Zapouzdření svazuje dohromady data a funkce, které s daty manipulují, a to obojí chrání před vnějšími zásahy a zneužitím. Dobrým příkladem zapouzdření je třída. Můžeme se vlastně vrátit k výše uvedenému příkladu, kde hovoříme o Psech, Kočkách a Krávách s drobnými úpravami.
class Dog { constructor(name) { this.name = name } printName = () => console.log(this.name)}class Cat { constructor(name) { this.name = name } printName = () => console.log(this.name)}class Cow { constructor(name) { this.name = name } printName = () => console.log(this.name)}let dog1 = new Dog()dog1.name = "Max"dog1.printName() // => Maxlet cat1 = new Cat()cat1.name = "Mark"cat1.printName() // => Marklet cow1 = new Cow()cow1.name = "Tom"cow1.printName() // => Tom
Všimněte si, že když vytváříme instance pro jednotlivá zvířata, přiřazujeme jim také jména. Z toho plyne, že ‚.name‘ za každou vytvořenou instancí (tj. dog1.name) je u všech jiné. Tato ‚.name‘ jsou zapouzdřena v rámci příslušných tříd. Přiřazení jména instanci nemění hodnotu jména žádné jiné instance.
Dědičnost
Dědičnost je asi nejjednodušší na pochopení. Dědičnost je koncept jedné třídy, která používá(dědí) rozhraní jiné třídy. Stává se pak potomkem nebo podtřídou, zatímco třída, od které dědí, je rodičem nebo nadtřídou. V našem druhém příkladu výše jsme skutečně nějaké dědění provedli. Třídy Kočka, Pes a Kráva dědí od třídy Zvíře, aby měly přístup k metodě speak. Jen se ujistěte, že jste přidali klíčové slovo extends.
Napsat komentář