Don’t Repeat Yourself
Klassen zijn een goede manier om het DRY principe te respecteren. Met een klasse moeten de fields en methods van die klasse maar 1x worden geschreven, terwijl elk object van die klasse er toegang tot heeft.
Het gebeurt echter vaak dat verschillende klassen een aantal fields en methods delen. In het voorbeeld hieronder bevatten Leerling
en Leraar
beide een field id
en een field naam
. Nog belangrijker is dat deze fields in beide klasse semantisch hetzelfde zijn: in beide klassen heeft bijvoorbeeld de field naam
hetzelfde doel. In dit geval is het doel om “de naam van een persoon” op te slaan.
In een klasse klas
is het field naam
semantisch verschillend: hier wordt niet de naam van een persoon bijgehouden, maar wel de “naam van een klasgroep”.
Wanneer verschillende klassen een aantal fields of methods delen die semantisch hetzelfde zijn, wordt het DRY principe weer geschonden. Op verschillende plaatsen in de code kunnen methods en fields die hetzelfde doen teruggevonden worden. Met behulp van inheritance kan dit voorkomen worden.
Inheritance
Inheritance (‘overerving’) is een manier om fields en methods die semantisch hetzelfde zijn in een aparte, gedeelde klasse te zetten. Deze klasse wordt dan de superklasse genoemd.
De klassen waaruit deze fields en methods werden weggehaald, worden dan aangeduid als subklassen. De subklassen ‘erven’ de eigenschappen van de superklasse (de fields en methods) en kunnen daar dus gebruik van maken.
In het voorbeeld hieronder zijn er 2 klassen Leraar
en Leerling
gedefinieerd:
Javascript
class Leerling {
#naam = "";
#leeftijd = 0;
#hoed = null;
}
class Leraar {
#naam = "";
#leeftijd = 0;
#diplomas = [];
}
class Leerling {
private $_naam = "";
private $_leeftijd = 0;
private $_hoed = null;
}
class Leraar {
private $_naam = "";
private $_leeftijd = 0;
private $_diplomas = array();
}
class Leerling {
string _naam = "";
int _leeftijd = 0;
int _hoed = null;
}
class Leraar {
string _naam = "";
int _leeftijd = 0;
int _diplomas = [];
}
Beide klassen hebben een field naam
en een field leeftijd
die semantisch hetzelfde zijn. Het DRY principe wordt dus geschonden.
Daarom wordt er nu een derde klasse gemaakt: Persoon
. Persoon wordt de superklasse van Leerling
en Leraar
. Leerling
en Leraar
worden vervolgens aangeduid dat ze overerven van de klasse Persoon. Dit zijn de subklassen van de klasse Persoon.
class Persoon {
#naam = "";
#leeftijd = 0;
}
class Leerling extends Persoon { // extends duid aan dat er wordt overgeërfd
#hoed = null;
}
class Leraar extends Persoon { // extends duid aan dat er wordt overgeërfd
#diplomas = [];
}
class Persoon {
private $_naam = "";
private $_leeftijd = 0;
}
class Leerling extends Persoon { // extends duid aan dat er wordt overgeërfd
private $_hoed = null;
}
class Leraar extends Persoon { // extends duid aan dat er wordt overgeërfd
private $_diplomas = array();
}
class Persoon {
string _naam = "";
int _leeftijd = 0;
}
class Leerling : Persoon { // : duid aan dat er wordt overgeërfd
int _hoed = null;
}
class Leraar : Persoon { // : duid aan dat er wordt overgeërfd
int _diplomas = [];
}
Er wordt terug helemaal voldaan aan het DRY principe.