Gyakorlati alapok III.

Az osztály további tulajdonságai

 

Az előző, Az absztrakció mélységei: az osztály fogalma című fejezetben már alapszinten részleteztük az osztály legfontosabb, modellező tulajdonságát. Természetesen nem minden osztály feladata a valóság adott szintű leképezése, sok-sok osztály más, szintén elvont, de nem modellező feladatot lát el. Ilyen például a Javán belül az Integer osztály (java.lang.Integer), amely egy egyszerű adattípushoz (Numerikus egész című fejezet) biztosít sokféle, magasabb szintű, legtöbbször nagyon praktikus műveletet.

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

Tapasztaltabbak a fentiek alapján már rájöhettek arra is, hogy az osztály a legkisebb önállóan működő egység.

 

Nem véletlen tehát, hogy a main() főprogram, amelyet a JVM programfuttatáskor legelőször keres, egy, ebben az esetben szintén Main néven illetett osztályon belül helyezkedik el (Egy üres Java-projekt létrehozása című fejezet):

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {

    }
}

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

A pontosság kedvéért itt kell megjegyeznünk, hogy a Main osztálynevet voltaképpen mi adtuk meg a projekt önálló létrehozásakor. Természetesen bármely konvencionális osztálynév megfelelő ide. Az egyszerű átnevezés azonban nem fog működni, mert a Java-tárolófájlok egyikének neve továbbra is Main lesz. A megoldás a refaktorálás.

 

Az osztályok deklarációi azonban csak tervrajzok. A tervrajz nyilvánvalóan nem azonos a felépült házzal, annak pusztán pontos modellje (ha ugyan a kőműves el nem rontja a házépítést). Ahhoz, hogy "élő, lélegző", a műveleti memóriában azonnal futtatható kódokká váljanak, szakszóval illetve példányosítani kell őket. Ez legtöbbször a new parancs kiadásával történik. Például:

 

Munkavallalo mv = new Munkavallalo();

 

A példányosítás után az osztályokat már objektumoknak hívjuk. Tehát a Munkavallalo() tervrajza alapján keletkezett objektum az mv lesz. A new parancs lefoglalta a szükséges mennyiségű memória-tárterületet, az mv pedig -mint egyfajta referencia-, a memóriában közvetlenül rámutat magára az objektumra. Ezután hozzáférhetünk az objektummá lett osztályok változóihoz, műveleteihez, ha ez a hozzáférés valamilyen módon nincsen korlátozva (A hozzáférés-módosítók című fejezet). Nézzünk a példányosításra egy egyszerű, de nem futtatható Java-példát!

 

public class Munkavallalo{

    String keresztNev;

    String vezetekNev;

    String anyaNev;

 

    ellenorzoMetodus1(){

    }

 

    ellenorzoMetodus2(){

    }

}

 

public class Main {
    public static void main(String[] args) {
        Munkavallalo mv = new Munkavallalo();

        mv.keresztNev = "Janos";

        mv.vezetekNev = "Kovacs";

        mv.fizetes = 120000;

 

        mv.ellenorzoMetodus1();

        mv.ellenorzoMetodus2();

        ...
    }
}

 

Az osztály tehát zárt szerkezetével egybekapcsolja a valamilyen szempont alapján összefüggő adatokat és a rajta elvégezhető műveleteket, sőt a hozzáférés korlátozásával egységbe is zárja, ezáltal pedig elrejtheti a többi kód (a külvilág) elől. Ezen lehetőségek képviselik leginkább az objektumorientált programozás alapelveit (amelyeket most azt hiszem meg is értettünk):

Azonban az osztálynak van egy további, szintén nagyon fontos sajátossága. Az osztályok csupán tervrajzok, amelyekből elméletileg bármennyi objektum felépíthető.

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

Hasonló ez az épületek tervrajzaihoz: egyetlen épülettípus tervrajzából aztán egész városok felépíthetők.

 

Ám az osztályok újrahasznosíthatósága ezzel még nem ér véget. Az öröklődés bevezetésével arra is van lehetőségünk, hogy szülőosztályokból gyermekosztályokat hozzunk létre, amelyek a szülő tulajdonságait egy az egyben öröklik vagy képesek azokat kiegészíteni, sőt módosítani. E módszer segítségével rengeteg összetett vagy egyedi tulajdonsággal rendelkező objektumot, sőt objektumcsaládot lehet létrehozni, amelyek egyetlen alaposztályra épülnek, ám közben egyéni tulajdonságokkal is rendelkeznek. Az öröklődéssel a későbbiekben fogunk foglalkozni.