JAVA predavanje 6

Primer: Razred Delavec, ki opisuje zgradbo objektov, ki predstavljajo posamezne delavce v nekem podjetju.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
public class Delavec{

//Deklaracija atributov
//Atribute deklariramo, kot spremenljivke
//zaradi skrivanja detajlov uporabimo določilo private

private int matSt; //matična številka
private String priimek;
private String ime;
private int stUr; //število ur


//Deklaracija metod
//uporabimo določilo public, tako, da so metode dostopne tudi
//iz ostalih razredov

//metode, ki so vezane na objekte nimajo določila static
//v razredih, ki opisujejo zgradbo objektov imamo 3 vrste metod:
//ta pristop uporabljamo zaradi varnosti, saj lahko uporabniki dostopajo do
//podatkov kontrolirano, preko metod.



//metode, ki se jim angleško reče setter, metode, ki nastavljajo vrednosti
// atributom.


public void vpisiMatST(int ms){
matSt = ms;
}

public void vpisiPriimek(String p){
priimek = p;
}

public void vpisiIme(String ime){
this.ime = ime;
//Referenca this. predstavlja naslov objekta, ki mu pripada ta metoda
}

public void vpisiStUr(int stUr){
this.stUr = stUr;
}


//metode getter, ki vračajo vrednosti atributov

public int vrniMatSt(){
return matSt;
}

public String vrniPriimek(){
return priimek;
}

public String vrniIme(){
return ime;
}

public int vrniStUr(){
return stUr;
}


//metode utility: uporabne metode, ki izvajajo različne koristne operacije

//metoda za izračun osebnega dohodka
public double izracunajBrutoOD(double cenaUre){
return cenaUre * stUr;
}

//metoda za izpis vseh atributov
public void izpisiVse(){
System.out.println("Maticna stevilka: " + matSt);
System.out.println("Priimek in ime: " + priimek + " " + ime);
System.out.println("Stevilo ur: " + stUr);
}

//na koncu spišite metodo, ki izpiše vse atribute
public String toString(){
return matSt + " " + priimek + " " + ime + " " + stUr;
}
}
 

 




Kreiranje objektov


Razred Delavec samo opisuje zgradbo objektov, ne kreira pa nobenega objekta.

Kreiranje objekta poteka v dveh korakih:

1. korak: objekt deklariramo, kot spremenljivko

Delavec d; //tip objekta je določen z imenom razreda, v katerem je opisana zgradba tega objekta.

2. korak: Dodelimo prostor za objekt in vzpostavimo začetne vrednosti atributov.

d = new Delavec();

new je rezervirana beseda, operator, ki dodeli prostor za objekt.
Delavec je konstruktor, ki nastavi začetne vrednosti atributov.

Oba koraka lahko združimo:

Delavec d = new Delavec();

Konstruktor :

  • posebna metoda, ki se kliče skupaj z operatorjem new
  • ime konstruktorja mora biti enako imenu razreda
  • če mi ne napišemo lastnega konstruktorja se uporabi standarden (default) konstruktor, ki je v Javi na razpolago avtomatsko.
  • glavna naloga konstruktorja je, da nastavi začetne vrednosti atributov, lahko pa izvaja kakšne druge operacije
  • konstruktor ne vrača vrednosti



Standardni konstruktor dodeli atributom naslednje vrednosti:

  • numerični atributi dobijo vrednost 0
  • atributi tipa char dobijo vrednost '/u0000' (znak za numerično kodo 0 v šestnajstiškem sistemu).
  • atributi tipa boolean dobijo vrednost false
  • atributi tipa String dobijo vrednost null (null pomeni, da ta objekt še ne obstaja in to velja za vse atribute, ki predstavljajo objekte in tabele)

 

Predstavitev objekta v pomnilniku

 

1. korak: Delavec d;

pomnilnik1

2. korak: d = new Delavec();

pomnilnik2

Spremenljivka d vsebuje naslov objekta (na začetku je null).

2. vrsti podatkovnih tipov:

  • vrednostni tipi (spremenljivka hrani vrednost nekega podatka)
  • sklicni tipi (spremenljivka vsebuje naslov podatka)


tipi:

vrednostni:

  • vsi osnovni podatkovni tipi
  • byte, short, int, long
  • float, double
  • char
  • boolean


sklicni:

  • vsi tipi, ki opisujejo zgradbo objektov
  • String
  • table


Nadaljevanje primera: Razred TestDelavec, ki uporablja razred delavec

Naša rešitev obsega dva razreda. Razred Delavec opisuje zgradbo objektov, razred TestDelavec pa predstavlja aplikacijo, v kateri uporabljamo objekte tipa Delavec (application class).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class TestDelavec{
public static void main(String[] args){
//kreiranje objekta
Delavec d = new Delavec();

//vpis vrednosti atributov
d.vpisiMatSt(234);
d.vpisiPriimek("Novak");
d.vpisiIme("Janez");
d.vpisiStUr(172);

//izpis vrednosti atributov s pomočjo metod getter
System.out.println("Maticna stevilka: " + d.vrniMatSt());
System.out.println("Priimek in ime: " + d.vrniIme() + d.vrniPriimek());
System.out.println("Stevilo ur: " + d.vrniStUr());

//Izpis vseh atributov naenkrat z metodo izpisiVse
d.izpisiVse;

//Izpis vsebine objekta s pomočjo metode toString
System.out.println(d.toString());

//Izpis brutoOD
System.out.println("Bruto OD: " + d.izracunajBrutoOD(10.5));
}
}



Če v CMDju vpišeš javap Delavec ti izpiše vse deklaracije, ki so public, ki jih lahko uporabnik tudi uporablja, za katerikoli razred.

Sklicevanje na metode in atribute razreda, ki opisuje zgradbo objektov.

Splošna pravila za klicanje metod, ki so vezana na objekte:

1
<ime objekta>.<ime metoda>(<seznam dejanskih parametrov>)

 



Če bi bili v razredu Delavec atributi matSt, priimek, ime in stUr deklarirani z določilom public, bi jih lahko uporabljali na naslednji način.

d.matSt d.vrniMatSt()
d.priimek d.vrniPriimek()
d.ime d.vrniIme()
d.stUr d.vrniStUr()

1
<ime objekta>.<ime atributa>

 



Pisanje lastnih konstruktorjev

  • omogoča, da nastavimo ustrezne začetne vrednosti atributov
  • ob kreiranju objekta lahko izvedemo še druge operacije
  • lahko deklariramo konstruktorje s parametri
  • standarden javanski konstruktor potem ni več na razpolago



Primer lastnega javanskega konstruktorja za razred Delavec:

Predpostavka: Ko se delavec zaposli, poznamo vrednosti atributov matSt, priimek in ime, ne poznamo pa še števila ur.

1
2
3
4
5
public Delavec(int matSt, String priimek, String ime){
this.matSt = matSt;
this.priimek = priimek;
this.ime = ime;
}

 



Uporaba tega konstrukta v razredu TestDelavec:

V TestDelavec vstavimo

 

1
Delavec d = new Delavec(234, »Novak«, »Janez«);

 

, potem lahko napišemo več lastnih konstruktorjev.

  • na ta način lahko objekt inicializiramo na več različnih načinov
  • podlaga za pisanje več različnih konstruktorjev je koncept, ki se angleško imenuje overloading (preobremenjevanje metod ali tudi večkratno definiranje metod).


Overloading pomeni, da imamo več metod z enakim imenom a različnim seznamom parametrov. Izvede se tista metoda, pri kateri se seznam formalnih parametrov ujema z dejanskimi.


Primer: za razred Delavec napišemo še dva konstruktorja.

Prvi konstruktor vzpostavi vrednost matične številke (zato ima le en parameter).
Drugi konstruktor vzpostavi vrednosti vseh atributov (štirje parametri).

1
2
3
4
5
6
7
8
9
10
public Delavec(int matSt){
this.matSt = matSt;
}

public Delavec(int matSt, String priimek, String ime, int stUt){
this.matSt = matSt;
this.priimek = priimek;
this.ime = ime;
this.stUr = stUr;
}

 

 



S pomočjo teh dveh dodatnih konstruktorjev lahko kreiramo objekte na sledeči način:
1
2
 Delavec d1=new Delavec(555);
Delavec d2=new Delavec(999, "Kralj", "Lev", 120);

 

Vsi vodiči so na voljo BREZPLAČNO!
Pišite mi

Želite mnenje ali pomoč pri vašem projektu?

Pišite mi in bom pomagal, kakor bom v tistem trenutku lahko.