Cztery filary programowania zorientowanego obiektowo
On 27 września, 2021 by adminW tym blogu wyjaśnię 4 filary OOP i dostarczę małe przykłady. Wystarczająco małe przykłady, które ty i ja możemy łatwo zrozumieć.
Abstrakcja jest zasadniczo „trzeba wiedzieć”. Ukrywamy główne szczegóły implementacji, jednocześnie utrzymując oczywiste użycie na pierwszym planie. Więc zapamiętaj to „ukryj szczegóły, pokaż istotność”.
Przykład abstrakcji…
To jest formularz zapisu aplikacji, nad którą pracuję (istotność).
To jest logika implementacji składania formularza. (potrzeba wiedzy).
Polimorfizm
Polimorfizm jest wtedy, gdy używasz jednego bloku kodu, zmieniasz wersję używanego kodu w oparciu o dane wejściowe, które do niego podajesz. Tak więc, aby to trochę wyjaśnić, różne klasy mogą być używane z tym samym interfejsem, ale mogą zapewnić własną implementację tego interfejsu.
Przykład polimorfizmu…
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
Klasy Kot, Pies i Krowa dziedziczą po klasie Zwierzę. Dzięki temu klasy Cat, Dog i Cow mogą korzystać z interfejsu klasy Animal. Mają one jednak do dyspozycji tylko metodę speak. Gdybyśmy pominęli metodę speak w klasach Cat, Dog i Cow, a następnie utworzyli instancje klas Cat, Dog i Cow, nadal moglibyśmy wywoływać metodę speak na tych instancjach. Jedynym problemem jest to, że wydrukowałoby to Animals 'makes sound’ zamiast odpowiednich dźwięków, które wydają Kot, Pies i Krowa (’meow’, 'woof’, 'moo’).
To jest miejsce, gdzie nadpisywanie metod wchodzi w grę. Jeśli przedefiniujemy metodę speak w klasach Cat, Dog i Cow, możemy dostosować ją do drukowania dźwięków, które wydają koty i psy.
Enkapsulacja
Enkapsulacja wiąże razem dane i funkcje, które manipulują danymi, a to utrzymuje oba bezpieczne od zewnętrznej ingerencji i niewłaściwego użycia. Dobrym przykładem enkapsulacji jest klasa. Możemy właściwie odnieść się do przykładu powyżej, gdzie mówimy o psach, kotach i krowach z niewielkimi modyfikacjami.
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
Zauważ, że kiedy tworzymy instancje dla każdego zwierzęcia, przypisujemy również nazwę do każdego z nich. Wniosek z tego jest taki, że ’.name’ po każdej utworzonej instancji (np. dog1.name) są różne. Te ’.name’ są zamknięte w odpowiednich klasach. Przypisanie nazwy do instancji nie modyfikuje wartości nazwy żadnej innej instancji.
Dziedziczenie
Dziedziczenie jest prawdopodobnie najłatwiejsze do uchwycenia. Dziedziczenie jest koncepcją jednej klasy używającej (dziedziczącej) interfejsu innej klasy. Staje się ona wtedy dzieckiem lub podklasą, podczas gdy klasa, po której dziedziczy jest rodzicem lub nadklasą. W naszym drugim przykładzie powyżej faktycznie dokonaliśmy dziedziczenia. Klasy Cat, Dog i Cow dziedziczą po klasie Animal, aby mieć dostęp do metody speak. Po prostu upewnij się, że dodałeś słowo kluczowe extends.
Dodaj komentarz