Objektorienteret programmering
Objektorienteret programmering
Objektorienteret programmering er at samle data og de funktioner, der hører til dem, i objekter i stedet for at holde dem adskilt. En klasse er tegningen, og objekterne er de konkrete eksemplarer, du laver ud fra den. Formålet er kode, der kan ændres uden at alt andet går i stykker.
Forudsætter, at du har set objekter , funktioner i javascript .
Problemet, det løser
I første semester skrev du funktioner, der tog data ind og gav data ud. Det fungerer fint, indtil programmet bliver stort. Så opstår to problemer:
- Dataene og de funktioner, der hører til dem, ligger langt fra hinanden. Ændrer du formen på dataene, skal du finde alle de steder, der rører ved dem.
- Alle kan ændre alt. Der er ingen, der siger, at en saldo ikke må blive negativ.
Objektorienteret programmering løser begge dele med den samme idé: læg dataene og de funktioner, der må røre dem, sammen i én ting.
class Konto {
constructor(ejer, saldo) {
this.ejer = ejer;
this.saldo = saldo;
}
indsaet(beloeb) {
this.saldo = this.saldo + beloeb;
return this.saldo;
}
}
const min = new Konto("Ida", 1000);
console.log(min.indsaet(500));
console.log(min.ejer); Output
Tryk på “Kør koden”.
Klasse og objekt er ikke det samme
Det er den skelnen, der skal sidde:
- Klassen er tegningen. Den beskriver, hvilke felter og metoder der findes. Der er kun én af den, og den optager ingen data.
- Objektet er et konkret eksemplar lavet ud fra tegningen med
new. Der kan være tusind af dem, og de har hver deres værdier.
Et hus mod en byggetegning. En form mod en kage. Klassen Konto er ikke en
konto; min er en konto.
De fire begreber
Til eksamen bliver du bedt om at forklare dem. Her er de kort, hver med sin egen side:
Indkapsling: objektet holder sine data for sig selv og udleverer kun adgang gennem metoder. Det er sådan, du kan garantere, at saldoen aldrig bliver negativ. Se indkapsling.
Arv: en klasse kan bygge videre på en anden og få alle dens felter og metoder med. Se arv.
Polymorfi: to klasser, der arver fra den samme, kan svare forskelligt på det
samme kald. Kalder du beskriv() på en liste af forskellige objekter, gør hvert
af dem sit.
Abstraktion: du udstiller det, andre skal bruge, og skjuler hvordan det
virker. Den, der bruger din Konto, behøver ikke vide, hvordan saldoen gemmes.
class Dyr {
constructor(navn) {
this.navn = navn;
}
lyd() {
return "...";
}
beskriv() {
return this.navn + " siger " + this.lyd();
}
}
class Hund extends Dyr {
lyd() {
return "vov";
}
}
class Ko extends Dyr {
lyd() {
return "muh";
}
}
const dyr = [new Hund("Fido"), new Ko("Rosa")];
for (const d of dyr) {
console.log(d.beskriv());
} Output
Tryk på “Kør koden”.
Det er polymorfi i praksis: beskriv() er skrevet ét sted, men svarer forskelligt
afhængigt af, hvilken slags dyr det er.
Hvad du bliver spurgt om
- Forskellen på en klasse og et objekt.
- Hvad
thispeger på (det objekt, metoden blev kaldt på). - Et eksempel på arv fra dit eget projekt.
- Hvorfor indkapsling er en fordel. Svar med et konkret eksempel på en regel, der ellers kunne brydes.
Kort opsamling
- Data og de funktioner, der hører til dem, samles i objekter.
- Klassen er tegningen, objektet er eksemplaret.
- Indkapsling, arv, polymorfi, abstraktion.
- Vælg det, når der er flere ting af samme slags med hver deres tilstand.
Læs videre
- Klasser og objekter Klasser i JavaScript forklaret på dansk: constructor, metoder, this og new. Med kørbare eksempler og de fejl, der giver undefined inde i en metode.
- Arv Arv i objektorienteret programmering forklaret på dansk: extends, super og overskrivning af metoder. Med eksempler og en advarsel om for dybe hierarkier.
- Indkapsling Indkapsling i objektorienteret programmering forklaret på dansk, med private felter, gettere og settere i JavaScript og et konkret eksempel på hvorfor.
Senest gennemgået .