De fire søjler i objektorienteret programmering
On september 27, 2021 by adminI denne blog vil jeg forklare de fire søjler i OOP og give små eksempler. Små nok eksempler til at du og jeg let kan forstå dem.
Abstraktion er i bund og grund “need to know”. Vi skjuler de store implementeringsdetaljer, mens vi holder den indlysende brug i forgrunden. Så husk dette “skjul detaljerne, vis relevansen”.
Abstraktionseksempel….
Dette er en tilmeldingsformular i en app, jeg arbejder på (relevansen).
Dette er formularens indsendelsesimplementeringslogik. (behovet for at vide).
Polymorfi
Polymorfi er, når du bruger én blok kode, du ændrer den version af koden, der bruges, baseret på de input, der gives til den. Så for at gøre det lidt klarere, kan forskellige klasser bruges med den samme grænseflade, men kan levere sin egen implementering af denne grænseflade.
Polymorfisme eksempel…
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
Kat, hund og ko arver fra klassen Animal. Dette gør det muligt for klassen Kat, Hund og Ko at bruge dyrets grænseflade. De har dog kun speak-metoden til rådighed for dem. Hvis vi udelader speak-metoden fra klassen Cat, Dog og Cow og derefter opretter instanser af klassen Cat, Dog og Cow, vil vi stadig være i stand til at kalde speak-metoden på disse instanser. Det eneste problem er, at den ville udskrive dyrene “makes sound” i stedet for de relevante lyde, som en kat, hund og ko laver (“meow”, “woof”, “moo”).
Det er her, at method overriding kommer ind i billedet. Hvis vi omdefinerer speak-metoden i kattens, hundens og koens klasser, kan vi tilpasse den til at udskrive de lyde, som katte og hunde laver.
Indkapsling
Indkapsling binder dataene og de funktioner, der manipulerer dataene, sammen, og det holder begge dele sikre mod indblanding og misbrug udefra. Et godt eksempel på indkapsling er en klasse. Vi kan faktisk henvise tilbage til eksemplet ovenfor, hvor vi taler om hunde, katte og køer med nogle små ændringer.
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
Bemærk, at når vi opretter instanser for hvert dyr, tildeler vi også et navn til hvert dyr. Det er vigtigt at bemærke, at ‘.name’ efter hver oprettet instans (f.eks. dog1.name) er alle forskellige. Disse ‘.name’ er indkapslet i deres respektive klasser. Tildeling af et navn til en instans ændrer ikke nogen andre instansers navneværdi.
Arv
Arv er nok det letteste at forstå. Arv er det begreb, at en klasse bruger (arver) en anden klasses grænseflade. Den bliver så et barn eller en underklasse, mens den klasse, som den arver fra, er forældre- eller overklassen. Vi har rent faktisk arvet noget i vores andet eksempel ovenfor. Klassen Cat, Dog og Cow arver fra Animal-klassen for at få adgang til speak-metoden. Du skal blot sørge for at tilføje nøgleordet extends.
Skriv et svar