Access modifier¶
Een access modifier helpt je om het principe van “encapsulation” te implementeren. Dit betekent dat je de toegang tot de variabelen en methoden van een class kunt beperken. Dit is een belangrijk concept in OOP, omdat het je helpt om je code te structureren en te beveiligen.
In de meeste talen zijn er vier access modifiers: public
, private
, protected
en internal
.
public
betekent dat de variabele of methode vanuit elke class toegankelijk is.
Voorbeeld van de ‘public’ access modifier
Definieer de class Aardappel:
Als je nu een object van de class Aardappel aanmaakt, kun je de variabelen kleur
en datumGeplant
vanuit elke class benaderen:
Definieer de class Aardappel:
Als je nu een object van de class Aardappel aanmaakt, kun je de variabelen kleur
en datumGeplant
vanuit elke class benaderen:
Definieer de class Aardappel:
Als je nu een object van de class Aardappel aanmaakt, kun je de variabelen kleur
en datumGeplant
vanuit elke class benaderen:
Talen die geen public
access modifier hebben, zoals Python en JavaScript, gebruiken public
als standaard access modifier. Dit betekent dat je de variabelen en methoden van een class vanuit elke class kunt benaderen.
protected
betekent dat de variabele of methode alleen vanuit de class zelf of vanuit een sub-class benaderd kan worden.
Voorbeeld van de ‘protected’ access modifier
Definieer de class Aardappel:
Als je nu een object van de class Aardappel aanmaakt, kun je de variabelen kleur
en datumGeplant
alleen vanuit de class zelf of vanuit een sub-class benaderen:
class KleiBint extends Aardappel {
constructor() {
super();
this._kleur = "rood"; // Dit mag wel
this._datumGeplant = new Date(); // en dit ook
}
}
Als je de variabelen kleur
en datumGeplant
vanuit een andere class probeert te benaderen, krijg je een foutmelding:
Definieer de class Aardappel:
Als je nu een object van de class Aardappel aanmaakt, kun je de variabelen kleur
en datumGeplant
alleen vanuit de class zelf of vanuit een sub-class benaderen:
public class KleiBint : Aardappel {
public KleiBint() {
this._kleur = "rood"; // Dit mag wel
this._datumGeplant = DateTime.Now; // en dit ook
}
}
Als je de variabelen kleur
en datumGeplant
vanuit een andere class probeert te benaderen, krijg je een foutmelding:
Definieer de class Aardappel:
Als je nu een object van de class Aardappel aanmaakt, kun je de variabelen kleur
en datumGeplant
alleen vanuit de class zelf of vanuit een sub-class benaderen:
public class KleiBint extends Aardappel {
public KleiBint() {
this._kleur = "rood"; // Dit mag wel
this._datumGeplant = new Date(); // en dit ook
}
}
kleur
en datumGeplant
vanuit een andere class probeert te benaderen, krijg je een foutmelding:
private
betekent dat de variabele of methode alleen vanuit de class zelf benaderd kan worden. Dus niet vanuit een sub-class.
Voorbeeld van ‘private’ access modifier
Definieer de class Aardappel:
Als je nu een object van de class Aardappel aanmaakt, kun je de variabelen kleur
en datumGeplant
alleen vanuit de class zelf benaderen. Dit mag dus niet:
const kleiBint = new Aardappel();
aardappel._kleur = "rood"; // compileerfout
aardappel._datumGeplant = new Date(); // compileerfout
Je mag de variabelen zelfs niet vanuit een sub-class benaderen. Dit mag dus ook niet:
Definieer de class Aardappel:
Als je nu een object van de class Aardappel aanmaakt, kun je de variabelen kleur
en datumGeplant
alleen vanuit de class zelf benaderen. Dit mag dus niet:
var kleiBint = new Aardappel();
aardappel._kleur = "rood"; // compileerfout
aardappel._datumGeplant = DateTime.Now; // compileerfout
Je mag de variabelen zelfs niet vanuit een sub-class benaderen. Dit mag dus ook niet:
Definieer de class Aardappel:
Als je nu een object van de class Aardappel aanmaakt, kun je de variabelen kleur
en datumGeplant
alleen vanuit de class zelf benaderen. Dit mag dus niet:
Aardappel kleiBint = new Aardappel();
aardappel.kleur = "rood"; // compileerfout
aardappel.datumGeplant = new Date(); // compileerfout
Je mag de variabelen zelfs niet vanuit een sub-class benaderen. Dit mag dus ook niet:
Waarom access modifiers?¶
Access modifiers helpen je om het principe van “encapsulation” te implementeren. Dit betekent dat je de toegang tot de variabelen en methoden van een class kunt beperken. Dit is een belangrijk concept in OOP, omdat het je helpt om je code te structureren en te beveiligen.
Structuur¶
Access modifiers helpen je om de structuur van je code te verbeteren. Als je de toegang tot de variabelen en methoden van een class beperkt, kun je de class als een “black box” beschouwen. Je hoeft je dan niet druk te maken over de interne werking van de class. Je hoeft alleen maar te weten welke input je aan de class moet geven en welke output je van de class kunt verwachten.
Beveiliging¶
Access modifiers helpen je om je code te beveiligen. Als je de toegang tot de variabelen en methoden van een class beperkt, kun je voorkomen dat andere classes de variabelen en methoden van de class kunnen aanpassen. Dit is belangrijk, omdat je niet wilt dat andere classes de interne werking van je class kunnen verstoren.
Voorbeeld
In het voorbeeld hieronder wordt aangenomen dat de kleur van een aardappel veranderd als deze een bepaalde grootte heeft bereikt. Je mag dus grootte en kleur niet zomaar onafhankelijk van elkaar aanpassen. Je moet de methode groei()
aanroepen om de kleur van de aardappel te veranderen.
class Aardappel {
private _kleur: string;
private _grootte: number;
public groei(): void {
if (this._grootte > 10) {
this._kleur = "rood";
}
else {
this._kleur = "bruin";
}
}
}
kleur
en grootte
private te maken, kun je afdwingen dat de methode groei()
wordt aangeroepen om de kleur en de grootte van de aardappel te veranderen. Dit is belangrijk, omdat je niet wilt dat de kleur van de aardappel verandert als de grootte niet is veranderd en andersom.