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?
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; } } |
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.