De fyra pelarna i objektorienterad programmering
On september 27, 2021 by adminI den här bloggen kommer jag att förklara de fyra pelarna i OOP och ge små exempel. Tillräckligt små exempel som du och jag lätt kan förstå.
Abstraktion är i huvudsak ”need to know”. Vi döljer de stora implementeringsdetaljerna, samtidigt som vi håller den uppenbara användningen i förgrunden. Så kom ihåg detta ”hide the details, show the relevance”.
Abstraktionsexempel….
Detta är ett anmälningsformulär i en app jag arbetar med (relevansen).
Detta är formulärets implementeringslogik för inlämning. (behovet av att veta).
Polymorfism
Polymorfism är när du använder ett kodblock, du ändrar versionen av koden som används baserat på de ingångar som ges till den. Så för att göra det lite tydligare kan olika klasser användas med samma gränssnitt men kan tillhandahålla sin egen implementering av det gränssnittet.
Polymorfism exempel…
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
Klasserna Cat, Dog och Cow ärver från klassen Animal. Detta gör att klasserna Cat, Dog och Cow kan använda djurets gränssnitt. De har dock bara speak-metoden tillgänglig för dem. Om vi skulle utelämna speak-metoden ur klasserna Cat, Dog och Cow och sedan skapa instanser av klasserna Cat, Dog och Cow skulle vi fortfarande kunna anropa speak-metoden på dessa instanser. Det enda problemet är att det skulle skriva ut Animals ”makes sound” i stället för de lämpliga ljud som en katt, hund och ko gör (”meow”, ”woof”, ”moo”).
Det är här som metodöverstyrning kommer in. Om vi omdefinierar speak-metoden i klasserna Cat, Dog och Cow kan vi anpassa den så att den skriver ut de ljud som katter och hundar ger ifrån sig.
Inkapsling
Inkapsling binder samman data och funktioner som manipulerar data, vilket gör att båda är skyddade från yttre inblandning och missbruk. Ett bra exempel på inkapsling är en klass. Vi kan faktiskt hänvisa tillbaka till exemplet ovan där vi pratar om hundar, katter och kor med några små ändringar.
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
Notera att när vi skapar instanser för varje djur så tilldelar vi också ett namn till varje. Det som är viktigt här är att ’.name’ efter varje skapad instans (t.ex. dog1.name) är olika. Dessa ’.name’ är inkapslade i sina respektive klasser. Att tilldela ett namn till en instans ändrar inte någon annan instans namnvärde.
Arv
Arv är förmodligen det enklaste att förstå. Arv är konceptet att en klass använder (ärver) gränssnittet för en annan klass. Den blir då ett barn eller en underklass medan klassen som den ärver från är föräldra- eller superklass. Vi gjorde faktiskt lite arv i vårt andra exempel ovan. Klasserna Cat, Dog och Cow ärver från klassen Animal för att få tillgång till speak-metoden. Se bara till att lägga till nyckelordet extends.
Lämna ett svar