Objektorienteret programmering
Indkapsling
Indkapsling er at holde et objekts data for sig selv og kun give adgang gennem metoder. Så kan objektet håndhæve sine egne regler. En saldo kan ikke blive negativ, hvis den kun kan ændres gennem en metode, der siger nej.
Forudsætter, at du har set klasser og objekter .
Problemet med åbne felter
class Konto {
constructor(saldo) {
this.saldo = saldo;
}
}
const konto = new Konto(1000);
konto.saldo = -50000;
console.log(konto.saldo); Output
Tryk på “Kør koden”.
Der er ingen, der stopper det. Enhver linje kode i hele programmet kan sætte saldoen til hvad som helst. Og når fejlen opdages tre uger senere, er der ingen måde at finde ud af, hvilken linje der gjorde det.
Luk feltet, åbn en dør
class Konto {
#saldo = 0;
constructor(start) {
this.#saldo = start;
}
get saldo() {
return this.#saldo;
}
haev(beloeb) {
if (beloeb <= 0) {
throw new Error("Beløbet skal være positivt");
}
if (beloeb > this.#saldo) {
throw new Error("Der er ikke dækning");
}
this.#saldo = this.#saldo - beloeb;
return this.#saldo;
}
}
const konto = new Konto(1000);
console.log(konto.haev(300));
console.log(konto.saldo);
try {
konto.haev(10000);
} catch (fejl) {
console.log("Afvist: " + fejl.message);
} Output
Tryk på “Kør koden”.
Nu findes der kun én vej ind til saldoen, og den vej indeholder reglerne. Feltet
#saldo kan slet ikke ses udefra. Prøver du, er det en syntaksfejl.
Det er hele idéen: objektet passer på sine egne data.
Gettere og settere
En get ser ud som et felt udefra, men er en metode:
class Rektangel {
#bredde;
#hoejde;
constructor(bredde, hoejde) {
this.#bredde = bredde;
this.#hoejde = hoejde;
}
get areal() {
return this.#bredde * this.#hoejde;
}
set bredde(vaerdi) {
if (vaerdi <= 0) {
throw new Error("Bredden skal være positiv");
}
this.#bredde = vaerdi;
}
}
const r = new Rektangel(4, 5);
console.log(r.areal);
r.bredde = 10;
console.log(r.areal); Output
Tryk på “Kør koden”.
Bemærk r.areal, uden parenteser. Det er en beregnet værdi, der altid er
opdateret, fordi den regnes ud, når man spørger.
Hvad det giver dig i projektet
- Reglerne står ét sted. Skal en ny regel ind, ændrer du én metode.
- Du kan skifte det indre ud. Gemmer du senere saldoen i ører i stedet for kroner, mærker resten af programmet det ikke.
- Fejl bliver lokale. Bliver saldoen forkert, er der kun én metode at mistænke.
Det sidste er også et rigtig godt svar til den mundtlige eksamen, fordi det kobler indkapsling til noget konkret i jeres eget projekt.
Kort opsamling
- Privat data, offentlige metoder.
#felter privat i JavaScript.getser ud som et felt, men er beregnet.- Kun sættemetoder, hvor der faktisk er en regel at håndhæve.
Øv dig
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.
- Objektorienteret programmering Objektorienteret programmering forklaret på dansk. Hvad klasser og objekter er, hvorfor man gør det, og de fire begreber du bliver spurgt om til eksamen.
- Scope - hvor en variabel findes Scope i JavaScript forklaret på dansk: hvorfor en variabel fra en funktion ikke findes udenfor, og hvordan du læser ReferenceError is not defined.
Senest gennemgået .