Razredi

Razredi

Javanski razred je nekaj, kar lahko spet uporabimo. Lahko ga smatramo kot predmet, kot je na primer kamen ali knjiga. V igrici z vesoljčki imamo lahko razred Vesoljcek, razred Branilec, razred Izstrelek, razred Bomba in razred Igra, ki nadzoruje vse skupaj.

Čer bi si na primer izmislili novo igro "Vojna svetov", bi morda spet uporabili razred Vesoljcek in raqzred Izstrelek. Razrede nalho smatramo za module. Med seboj jih povezujemo z metodami. Poglejmo primer:

 

public class Turist{
        private double denar;
        
        
        public void setDenar(double x){
               denar = x;
        } 
        public double getDenar(){
               return denar;
        }
}

Za navedbo razreda potrebujemo besedo "class" in neko enoumno ime. Naš razred Turist ima eno samo spremenljivko - denar (koliko denarja ima). Ta podatek je privaten (drugim neviden) in do njega lahko  pridemo le s pomočjo primerne metode. Metodam, ki omogočajo dostop do privatnih podatkov ali te podatke celo spreminjajo, pravimo v računalniškem žargonu "geterji" oziroma "seterji" in se tipično začenjajo z angleško besedo "get" oziroma "set" (to ni pravilo, pač pa dogovor).  Metoda "get"  (v našem primeru getDenar) omogoča drugim razredom, da ta podatek ugotovijo. Metoda "set" (v našem primeru setDenar" pa omogoča drugim razredom, da ta podatek spremenijo (to bi naredil na primer nek prodajalec ali taksist, morda turistična agencija ipd). 

Pa uvedimo razred turistične agencije. Morda bi izgledal tako:

public class Agencija{
        public static void main(String[] args){
               // tvorimo nov primerek turista z imenom janez ...
               Turist janez = new Turist();
               janez.setDenar(30000.5);  // bolj obicajno agencija vzame, ne pa da denar
               System.out.println("Janez ima :" + janez.getDenar());
        }
}

Kaj pomeni ta vrstica :

  Turist janez = new Turist();

Kaj je to? S to vrstico smon apravili nov primerek (računalniško rečemo temu "instanca") iz razreda Turist. Napravili smo "klona" in mu dali ime janez. 

Ključno besedo new smo potrebovali, ker smo v računalniškem pomnilnuiku potrebovali prostor za novi primerem iz tega razreda. t.
Turist( ) is the KONSTRUCTOR . Z njim delamo nove kopije.
Kasneje se bomo naučili pisati lastne konstruktorje. Za sedaj pa uporabljamo vgrajene, privzete konstruktorje.

Napišimo sedaj razred "Napadalec" za našo igrico. Kaj vse bo potreboval?
Položaj (x in y) in logično (boolean) zastavico, ki bo povedala, ali je bil zadet. Let us have a go at it:

public class Napadalec{
        // declare our variables
        private int xpos;
        private int ypos;
        private Boolean zadet;
        
        // deklaracija metod
        public void setXpos(x){
               xpos = x;
               }
        public void setYpos(int y){
               ypos =y;
        }
        public void setZadet(boolean zad){
               zadet = zad;
        }
        public int getXpos(){
               return xpos;
        }
        public int getYpos(){
               return ypos;
        }
        public boolean getZadet(){
               return zadet;
        }
}

Kako bi ta razred uporabili? Naredimo igrico, ki nadzira  napadalce. Poskusimo nekaj takega:

public class Igra{
        public static void main(String[] args){
               String zivAliMrtev;
               // ustvarimo primerek napadalca
               Napadalec pugwort = new Napadalec();
               pugwort.setXpos(50);
               pugwort.setYpos(100);
               pugwort.setZadet(true);
               if(pugwort.getZadet()==true){
                       zivAliMrtev = "Mrtev";
               }else{
                       zivAliMrtev = "Ziv";
               }
               System.out.println("pugwort je na polozaju "+
                                      pugwort.getXpos() + " : " 
                                      + pugwort.getYpos() + 
                                      " in je "+ zivAliMrtev);
        }
}

Kaj smo dobili ? Kje je bil napadalec ? Je bil živ ali mrtev ? Kaj smo naredili v razredu Igra?

Razredni konstruktorji

Konstruktor je tak kot metoda v tem, da ima oklepaje. Z njim tvorimo primerke (objekte) nekega razreda. Tudi sami lahko sestavljamo svoje lastne konstruktorje, vendar Java sama naredi en konstruktor avtomatično, privzeto. Vsak konstruktor, ki ga sestavimo, mora imeti enako ime, kot je ime razreda in nima navedenega , kaj vrača.

Splošna oblika konstruktorja je:

       Object drugObjekt = new Object();
        // ali
        Imerazreda imePrimerka = new ImeRazreda();
        // na primer 
        Branilec janko = new Branilec();

Pa naredimo javanski konstruktor za naš razred Turist. Dodajmo mu še eno spremenljivko, ki jo bodo imeli vsi turisti: starost::

public class Turist{
        private int starost;
        private double denar;
        
        // prekrijemo privzeti konstruktor (napisemo svojega)
        Turist(){
               znesek = 300.00;
        }
        
        // metode dostopa
        public void setStarost(int x){
               starost = x;
        } 
        public int getStarost(){
               return starost;
        }
}

Vsak na novo vzpostavljen turist bo imel začetni oziroma privzeti znesek 300.0


Vaja


Tvori razred Krog z lastnostmi (atributi) radij, ploscina in premer. Uporabi konstruktor, ki nastavi polmer na 1.
Naopiši metode, kot so  setPolmer , getPolmer , izracunPloscine and izracunPremera. Namigi:
premer = 2 * polmer
ploscina= PI * polmer * polmer
Tvori nov razred z imenom testKroga in vzpostavi 3 kroge. Z metodami get in set izračunaj premer in ploščino vsakega kroga in to statistiko izpiši.

Naslednja lekcija nas bo še bolj podučila o razredih.