Constructor
In objectgeoriënteerde programmeertalen is een constructor een bepaald soort methode van een klasse die uitgevoerd wordt wanneer een object van de klasse wordt aangemaakt.
- De term constructor kan ook verwijzen naar de namen die de data verpakken in een algebraïsch datatype.
Een constructor is vergelijkbaar met een methode maar het levert geen waarde op en het kan niet overgeërfd worden. De scope van een constructor kan ook anders zijn: in bepaalde talen, zoals Java, kan de constructor niet zelf aangeroepen worden. Constructors hebben vaak dezelfde naam als de klasse waartoe ze behoren. Het doel van een constructor is het initialiseren van de velden van een klasse en het vastleggen van een invariant voor de klasse (indien mogelijk, anders faalt het aanmaken van het object). Een correcte constructor levert een object in een 'geldige' toestand op.
In de meeste programmeertalen is overloading van de constructor mogelijk: een klasse kan meerdere constructors hebben met dezelfde naam maar met verschillende parameters.
De tegenhanger van de constructor is de destructor die uitgevoerd wordt wanneer het object wordt vernietigd.
Copy constructor
Een copy constructor is een constructor die gebruikt kan worden om een kopie van een bestaand object te maken. Deze constructor krijgt als argument dat object mee en de constructor neemt de waarden van de velden van dat object over.
Een voorbeeld van een copy constructor:
public class Vector {
public int x;
public int y;
public int z;
// copy constructor
public Vector(Vector vector) {
this.x = vector.x;
this.y = vector.y;
this.z = vector.z;
}
}
Deze constructor kan als volgt gebruikt worden:
Vector p = new Vector()
p.x = 1;
p.y = 1;
p.z = 1;
Vector q = new Vector(p)
q.x = 2;
Na het uitvoeren van de eerste vier regels bevat de vector p de waarde 1 voor elk van de velden x, y en z. Door het gebruiken van de copy constructor wordt een vector q aangemaakt die aanvankelijk de waarden van vector p heeft: 1 voor x, y en z. Daarna wordt de waarde van x gelijk aan 2. Na afloop heeft q de waarden x = 2, y = 1, z = 1 en p heeft de waarden x = 1, y = 1, z = 1. De velden van vector p zijn dus niet gewijzigd aangezien q, de kopie van p, wordt gewijzigd.
Voorbeeld
Java
Enkele verschillen in Java tussen constructoren en methoden zijn:
- Constructoren leveren geen waarde op
- Constructoren kunnen niet direct aangeroepen worden (met new wordt een constructor uitgevoerd)
- Constructoren kunnen niet synchronized, final, abstract of static zijn
- Constructuren worden altijd uitgevoerd door dezelfde thread
public class Voorbeeld
{
// declaratie van een veld
private int data;
// definitie van een constructor
public Voorbeeld()
{
this(1);
}
// constructor overloading
public Voorbeeld(int input)
{
data = input;
}
}
// instantiatie van een object van de bovenstaande klasse
Voorbeeld e = new Voorbeeld(42);