Az objektumorientált programozás négy pillére
On szeptember 27, 2021 by adminEbben a blogban az OOP 4 pillérét fogom elmagyarázni, és kis példákat fogok mutatni. Elég kicsi példákat ahhoz, hogy te és én is könnyen megérthessük.
Az absztrakció lényegében a “kell tudni”. Elrejtjük a főbb implementációs részleteket, miközben a nyilvánvaló használatot tartjuk előtérben. Tehát emlékezz erre: “rejtsd el a részleteket, mutasd meg a relevanciát”.
Elvonatkoztatási példa…
Ez egy regisztrációs űrlap egy alkalmazáshoz, amin dolgozom (a relevancia).
Ez az űrlap benyújtási implementációs logikája. (a szükségesség).
Polimorfizmus
A polimorfizmus az, amikor egy kódblokkot használunk, és a neki adott bemenetek alapján megváltoztatjuk a használt kód változatát. Tehát, hogy egy kicsit érthetőbbé tegyük, különböző osztályok használhatják ugyanazt az interfészt, de az interfész saját implementációját biztosíthatják.
Polymorfizmus példa…
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
A Cat, Dog és Cow osztályok az Animal osztályból örökölnek. Ez lehetővé teszi, hogy a Macska, a Kutya és a Tehén osztály használhassa az Állat interfészt. Nekik azonban csak a speak metódus áll rendelkezésükre. Ha a Macska, Kutya és Tehén osztályból kihagynánk a speak metódust, majd létrehoznánk a Macska, Kutya és Tehén osztály példányait, akkor is meg tudnánk hívni a speak metódust ezeken a példányokon. Az egyetlen probléma az lenne, hogy a Cat, Dog és Cow megfelelő hangok (‘meow’, ‘woof’, ‘moo’, ‘moo’) helyett az Animals ‘makes sound’ hangot írná ki.
Itt jön a képbe a metódus felülbírálása. Ha a Macska, Kutya és Tehén osztályokban újra definiáljuk a speak metódust, akkor testre szabhatjuk, hogy kiírja a macskák és kutyák által kiadott hangokat.
Kapszulázás
A kapszulázás összeköti az adatokat és az adatokat manipuláló függvényeket, és ez mindkettőt biztonságban tartja a külső beavatkozástól és a visszaélésektől. A kapszulázásra jó példa egy osztály. Tulajdonképpen visszautalhatunk a fenti példára, ahol a kutyákról, macskákról és tehenekről beszélünk, némi módosítással.
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
Megjegyezzük, hogy amikor minden állathoz példányokat hozunk létre, mindegyikhez nevet is rendelünk. A lényeg itt az, hogy a ‘.name’ az egyes létrehozott példányok után (pl. dog1.name) mind különbözőek. Ezek a ‘.name’ a megfelelő osztályokba vannak zárva. A név hozzárendelése egy példányhoz nem módosítja a többi példány névértékét.
Öröklődés
Az öröklődés talán a legkönnyebben felfogható. Az öröklés az a koncepció, hogy egy osztály egy másik osztály interfészét használja(örökli). Ekkor gyermek vagy alosztály lesz, míg az osztály, amelytől örököl, a szülő vagy szuperosztály. A fenti második példánkban valóban végeztünk némi öröklést. A Macska, a Kutya és a Tehén osztály az Állat osztálytól örököl, hogy hozzáférjen a speak metódushoz. Csak győződjünk meg róla, hogy hozzáadjuk az extends kulcsszót.
Vélemény, hozzászólás?