Gyakorlati alapok III.

A getter-setter függvények

 

Get it and set it!

 

A fejezet kis angol nyelvleckével kezdődik és aki ezt nem tudja lefordítani, az nagy bajban van programozás terén, mert ebben a szakmában a fordító-, és beszélőképes angol alapelvárás. (Ahogy egyik ismerősöm fogalmazott: az angol hiánya nem ciki, hanem a ciki alatt van.)

 

A fenti okoskodó nyelvlecke csak arra volt alkalmas, hogy megmutassa a getter-setter függvények szógyökeit, amelyek:

Ismételjük meg a bevezető fejezet legfontosabb gondolatát:

 

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

 

Az adatokat egy jól megtervezett osztályban csakis metódusokon keresztül érhetjük el!

 

Mit érünk ezzel? Az osztályadat saját privát hozzáférése miatt érintetlen marad, ám a metódusokon keresztül mégis elérhetővé válik, sőt ezt a hozzáférést a metódusokon keresztül sokféle módon szabályozni is tudjuk.

Pontosan a getter-setter metódusok lesznek az erre hivatott kódegységek. Gyorsan nézzünk is meg működésükre egy alappéldát:

 

private int szam;

public int getSzam()
{
    return this.szam;
}


public void setSzam(int szam)
{
    this.szam = szam;
}

 

Az int szam változó private hozzáférés-módosítása miatt kívülről, azaz külső osztályból nem elérhető és az is marad. Ennek ellenére:

Ezek miatt szoktak a getter függvényre accessor kifejezéssel (hozzáférő), a setter függvényre mutator kifejezéssel (megváltoztató) is hivatkozni.

 

Most illesszük a függvényeket egy Teszt osztályba, amely során deklarálunk 2 db különböző szignatúrájú konstruktor függvényt is.

Az int szam értéke legyen 2, de csak azért, hogy megváltoztatásának kísérletekor lássuk: ezt bizony nem tudjuk megtenni.

Ráadásként a setter függvényben (setSzam()) állítsunk be egy egyszerű szabályozást, legyen a számunkra megfelelő számtartomány 1 és 10 között, másként hibaüzenetet küldünk:

 

public class Teszt{
    private int szam = 2;

    public Teszt(){

    }

    public Teszt(int szam){
        this.szam = szam;
    }

    public int getSzam(){
        return this.szam;
    }


    public void setSzam(int szam){

        if(szam > 10 || szam < 1){

            System.out.println("Nem megfelelő számbevitel!");

        }
        this.szam = szam;
    }

}

 

Ezután alkossunk a File - New - Class paranccsal a Teszt osztály mellé egy külön Main nevű osztályt, amelyben példányosítjuk a Teszt osztályt és elérhetjük metódusait:

 

www.informatika-programozas.hu - Getter-setter függvények

www.informatika-programozas.hu - Getter-setter függvények

 

Az 1. kísérletben a teszt.getSzam() metódussal lekérdezzük int szam értékét (2), valamint kísérlet teszünk átállítására (teszt.setSzam(11)), de mivel ez nem megengedett, (szabályozott) hibaüzenetet kapunk. A felhasznált konstruktor függvény a paraméterlista nélküli (Teszt()):

 

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

 

 

 

 

 

 

 

 

public class Main {
public static void main(String[] args) {
    Teszt teszt = new Teszt();
    System.out.println(teszt.getSzam());
    teszt.setSzam(11);
    }
}

 

Végeredmény:

2

Nem megfelelő számbevitel!

 

A 2. kísérletben a felhasznált konstruktor függvény a paraméterlistás (Teszt(int szam)), amellyel 11-re állítottuk int szam értékét (Teszt(11)). Ezután a teszt2.getSzam() metódussal lekérdezzük int szam értékét (11), valamint kísérlet teszünk átállítására (teszt2.setSzam(11)), de mivel ez nem megengedett, (szabályozott) hibaüzenetet kapunk.

 

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

 

 

 

 

 

 

 

 

public class Main {
public static void main(String[] args) {
    Teszt teszt2 = new Teszt(11);
    System.out.println(teszt2.getSzam());
    teszt2.setSzam(11);
    }
}

 

Végeredmény:

11

Nem megfelelő számbevitel!

 

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

 

Bármilyen kísérlet azonban kudarcot fog vallani, amellyel külső osztályból közvetlenül próbáljuk elérni private int szam értékét. Ez csakis akkor lesz lehetséges, ha hozzáférését public szóra módosítjuk:

 

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

 

 

 

 

 

 

 

 

public class Teszt{
    public int szam = 2;

    public Teszt(){

    }

    public Teszt(int szam){
        this.szam = szam;
    }

    public int getSzam(){
        return this.szam;
    }


    public void setSzam(int szam){

        if(szam > 10 || szam < 1){

            System.out.println("Nem megfelelő számbevitel!");

        }
        this.szam = szam;
    }

}

 

public class Main {
public static void main(String[] args) {
    Teszt teszt3 = new Teszt();
    System.out.println(teszt3.szam);
    }
}

 

Végeredmény:

2

 

A getter-setter metódusok rendkívül fontosak az objektumorientált szemlélet érvényesítésében, főként az egységbezárás (encapsulation) implementálásakor. Ez olyannyira igaz, hogy egyszerű példakódok vagy oktatókódok kivételével nem fogunk olyan magasabb szintű Java-kóddal találkozni, amely ne tartalmazna getter-setter függvényeket.