Konstruktor

A Programozás Wiki wikiből

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.

Elnevezés[szerkeszté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.

Paraméterek[szerkesztés]

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.

Használat[szerkesztés]

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.

Példa[szerkesztés]

   // ő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;
      }
   }