Java - prístupové metódy

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání

Pri tvorbe novej triedy je vhodné, aby sme jej vnútorné premenné špecifikovali ako súkromné (private). Dôvod je prostý - bezpečnosť kódu. V prípade ak by boli tieto vnútorné premenné triedy verejné, mohli by sme ich hodnoty ľubovoľne meniť z ľubovolného miesta. Nie vždy ale chceme, aby mohli mať tieto premenné triedy ľubovoľnú hodnotu. V predchádzajúcom príklade, kde bola definovaná trieda Castica by sme chceli zabezpečiť aby maximálna hodnota prírastku rýchlosti (vx, vy, vz) vo všetkých troch osiach bol max 100. Vytvoríme teda metódu, pomocou ktorej budeme nastavovať hodnoty vnútorných premenných triedy. Zároveň tu môžeme skontrolovať rozsah ich hodnôt. Javovský slang hovorí o 2 typoch metód: gettery a settery.

Budeme pracovať s triedou Castica:

class Castica {
  private double x, y, z, vx, vy, vz;
  
  //dalsi kod je vynechaný
}

Settery

Setter je označenie metódy, ktorá nastavuje hodnoty privátnych premenných triedy. Setter je vždy verejná metóda, bez návratového typu a minimálne s jedným paramerom.

Názov konkrétneho settera pozostáva zo slova "set" a názvu premennej, ktorú ideme nastavovať. Je zvykom prvé písmeno tejto premennej v názve metódy settera písať veľkým písmenom. V našom príklade to budú settery: setX, seY, ..., setVx, .... setVz. Vytvorme všetky settery pre triedu Castica. Pre polohu častice neexistujú žiadne obmedzenia, pre zmenu rýchlosti platí, že jej maximálna hodnota v jednotlivých osiach nemôže byť väčšia ako 100. Vytvoríme nasledujúce settery:

  • settery, tkré budú nastovavať práve jednu hondotu: x, y, z, vx, vy, vz.
  • setter, ktorý nastaví novú polohu [x,y,z] a setter, ktorý nastaví novú rýchlosť [vx, vy, vz]
  • setter, ktorý nastaví novú polohu [x,y,z] rýchlosť [vx, vy, vz]
class Castica {
  private double x, y, z, vx, vy, vz;
   
  // tu sú všetky potrebné konštruktory

  public void setX(double X)
  {
    this.x=X;
  }

  public void setY(double Y)
  {
    this.y=Y;
  }

  public void setZ(double Z)
  {
    this.z=Z;
  }

  public void setVx(double Vx)
  {
    if(Vx<100)
      this.vx=Vx;
  }

  public void setVy(double Vy)
  {
    if(Vy<100)
      this.vy=Vy;
  }

  public void setVz(double Vz)
  {
    if(Vz<100)
      this.vz=Vz;
  }

  //setter, ktorý nastaví novú polohu [x,y,z] 
  public void setPoloha(double X, double Y, double Z)
  {
    this.x=X;
    this.y=Y;
    this.z=Z;
  }

  //setter, ktorý nastaví novú rýchlosť [vx, vy, vz]
   public void setRychlost(double Vx, double Vy, double Vz)
   {
    if(Vx<100)
      this.vx=Vx;
    if(Vy<100)
      this.vy=Vy;
    if(Vz<100)
      this.vz=Vz;
   }

  //setter, ktorý nastaví novú polohu [x,y,z] rýchlosť [vx, vy, vz]
   public void set(double X, double Y, double Z,double Vx, double Vy, double Vz)
   {
    this.x=X;
    this.y=Y;
    this.z=Z;

    if(Vx<100)
      this.vx=Vx;
    if(Vy<100)
      this.vy=Vy;
    if(Vz<100)
      this.vz=Vz;
   }
}

Pri posledom setteri nemôžeme použiť skrátený zápis this(X,Y,Z,Vx,Vy,Vz) ako pri prekrýchjúcich sa konštruktoroch, pretože v metóde set sa jedná o nastavenie novej hodnoty, nie o vytvorenie nového objektu Castica.

Použitie setterov

V nasledujúcom zdrojovom kóde je demonštrované použitie setterov.

class Test{
  public static void main(String[] args) {
   Castica c1 = new Castica();
   System.out.println(c1);
  
   c1.setX(1);
   System.out.println(c1);

   c1.setY(2.2);
   System.out.println(c1);

   c1.setZ(3.1);
   System.out.println(c1);

   c1.setVx(0.2);
   System.out.println(c1);

   c1.setVy(2);
   System.out.println(c1);

   c1.setVz(-3.2);
   System.out.println(c1);

   c1.setPoloha(2,3,4);
   System.out.println(c1);

   c1.setRychlost(23,21,53);
   System.out.println(c1);

   c1.set(3,4,1,23,121,23);
   System.out.println(c1);
  }
}

Gettery

Setter je označenie metódy, ktorá zi5uje hodnoty privátnych premenných triedy. Getter je vždy verejná metóda, s návratovým typom podľa toho aký dátový typ je definovaný pre vnútornú premennú triedy. Getter je zvyčajne bez parametrov.

Názov konkrétneho gettera pozostáva zo slova "get" a názvu premennej, ktorej hodnotu ideme zisťovať. Je zvykom prvé písmeno tejto premennej v názve metódy gettera písať veľkým písmenom. V našom príklade to budú gettery: getX, geY, ..., getVx, .... getVz. Vytvorme všetky gettery pre triedu Castica.

class Castica {
  private double x, y, z, vx, vy, vz;
   
  // tu sú všetky potrebné konštruktory

  // tu sú všetky settery

  public double getX()
  {
    return this.x;
  }

  public double getY()
  {
    return this.y;
  }

  public double getZ()
  {
    return this.z;
  }

  public double getVx()
  {
    return this.vx;
  }

  public double getVy()
  {
    return this.vy;
  }

  public double getVz()
  {
    return this.vz;
  }
}

Použitie getterov

class Test{
  public static void main(String[] args) {
   Castica c1 = new Castica(4, 5, 3, 4.3, 2, 0.1);

   double polohaX,polohaY,polohaZ;   
   polohaX=c1.getX();
   polohaY=c1.getY();
   polohaZ=c1.getZ();

   double rychlostX,rychlostY,rychlostZ;
   rychlostX=c1.getVx();
   rychlostY=c1.getVy();
   rychlostZ=c1.getVy();

   // Vypis premennych 
  }
}