Konstruktor
Konstruktornak hívjuk az objektumorientált programozási nyelvekben egy osztály azon metódusát, amely az objektum példányosításakor hívódik meg. A konstruktor általában azért felelős, hogy az objektum adattagjait az osztály szempontjából értelmes, érvényes állapotba hozza, bizonyos nyelvekben pedig az objektum által használt memóriaterületet lefoglalása is feladata.
A már nem használt objektum által lefoglalt memória és egyéb erőforrások felszabadításáért a destruktor felelős.
Tartalomjegyzék |
[szerkesztés] Elnevezés
A konstruktor neve általában az osztály nevével egyezik meg. Bizonyos nyelvekben (pl. PHP, Python) viszont egy osztálynévtől független szimbólummal jelölik, míg más rendszereknél (pl. Object Pascal) a programozó dönthet a metódus nevéről.
[szerkesztés] Paraméterek
A konstruktorok általában rendelkezhetnek paraméterekkel, amik az objektum kezdeti állapotát határozzák meg. A programnyelvek rendszerint megengedik, hogy azonos néven több, eltérő paraméterlistájú változat is szereplejen. Ilyenkor az objektum létrehozásakor használt argumentumok döntenek arról, melyik metódus fut le ezek közül. Néhány változatot külön névvel szokás illetni. Ilyenek a paraméter nélküli "alapértelmezett" (default), vagy az egyező osztályú "másoló" (copy) konstruktor.
[szerkesztés] Használat
Az adattagok beállításán túl gyakran a konstruktor egyéb feladatokat is ellát. Komolyabb memóriaigényű osztályoknál itt szerepelhet a szükséges memória lefoglalása, vagy sor kerülhet egy fájl megnyitására, vagy akár egy hálózati erőforráshoz történő kapcsolódásra is.
Leszármazott osztályoknál gyakori, hogy a konstruktor tartalmazza ill. meghívja az ősosztály konstruktorát is. Egyes nyelvekben (pl. Java) ezt jelölni sem muszáj, hanem az ős-konstruktor(ok) kódjának befoglalása ill. hívása automatikusan megtörténik.
[szerkesztés] Példa
// ős osztály class Item { // példány neve String name; // alap konstruktor public Item() { name = ""; // adattag beállítása } // konstruktor név megadásával public Item( String name ) { this.name = name; } } // leszármazott osztály class LongItem extends Item { // példány hossza int length; public LongItem() { // jelöletlen ős-konstruktor hívás length = 0; } public LongItem( String name, int length ) { super( name ); // jelölt ős-konstruktor hívás this.length = length; } }