JAVA predavanje 10

Tabele objektov


Elementi tabele so objekti.


Primer: Tabela objektov tipa Delavec.

1
Delavec[] d = new Delavec[100];

 

 

 

pomnilnik456

 

Vsak element tabele hrani naslov objekta (, ki je tipa Delavec).

Objekte moramo kreirati posebej.

 

 

1
2
3
4
5
for(int i = 0; i<100; i++){
//klic konstruktorja, ki vzpostavi le matično številko,
//ostalih atributov pa ne
d[i] = new Delavec(i+100);
}

 

 

Stanje v pomnilniku po izvršitvi zgornjega stavka for.

pomnilnik324




Primer: Program, ki razvrsti delavce glede na osebne dohodke v 12ih mesecih preteklega leta.


Razred Delavec:

  • matSt
  • priimek
  • ime
  • tabela 12ih osebnih dohodkov (OD)
  • vrni vsoto OD (utility metoda)
  • izpiši vse (utility metoda)


Razred DelavecAplikacija:

  • vzpostavi tabelo delavcev
  • uredi tabelo glede na vsoto OD
  • izpiše urejeno tabelo po vrsti

 

pomnilnik837



d -> celotna tabela objektov tipa Delavec
d[i] -> en element tabele, ki predstavlja en objekt tipa Delavec
d[i].matSt -> matična številka i-tega delavca
d[i].od -> to predstavlja tabelo z osebnimi dohodki i-tega delavca
d[i].od[j] -> osebni dohodek i-tega delavca v mesecu j.

 

 

Delavec1.java
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
public class Delavec1{
private int matSt;
private String priimek;
private String ime;
private double[] od;
 
//konstruktor
public Delavec1(int matSt, String priimek, String ime, double[] od){
this.matSt = matSt;
this.priimek = priimek;
this.ime = ime;
//this.od = od; prekopira le naslov tabele
this.od = od.clone(); //naredi kopijo tabele, ki jo
//navedemo, kot dejanski parameter
//ob klicu konstruktorja
}
 
//metoda za izračun vsote osebnih dohodkov
public double vrniVsotoOd(){
double vsota = 0;
for(int i = 0; i<od.length; i++)
vsota += od[i];
return vsota;
}
 
public void izpisiVse(){
System.out.println(matSt + " " + priimek + " " + ime + " " + vrniVsotoOd());
}
}

 

 

DelavecAplikacija.java
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
public class DelavecAplikacija{
private static final int ST_DEL = 5; //število delavcev
 
public static void main(String[] args){
Delavec1[] d = new Delavec1[ST_DEL];
for(int i = 0; i<ST_DEL; i++){
System.out.print("Maticna stevilka: ");
int ms = BranjePodatkov.preberiInt();
System.out.print("Priimek: ");
String p = BranjePodatkov.preberiString();
System.out.print("Ime: ");
String ime = BranjePodatkov.preberiString();
 
double[] od = new double[12];
 
for(int j = 0; j<12; j++){
System.out.print("Osebni dohodek za " + (j+1) + ". mesec: ");
od[j] = BranjePodatkov.preberiDouble();
}
 
d[i] = new Delavec1(ms, p, ime, od);
}
 
// izpis pred urejanjem
System.out.println();
izpisi(d);
 
// urejanje tabele glede na vsoto osebnih dohodkov
sortiraj(d);
 
// izpis po urejanju
System.out.println();
izpisi(d);
}
 
public static void izpisi(Delavec1[] d){
for(int i = 0; i<ST_DEL; i++){
d[i].izpisiVse();
}
}
 
public static void sortiraj(Delavec1[] a){
for(int i = 0; i<=a.length-2; i++){ // iščemo največjega
Delavec1 vMax = a[i];
int iMax = i;
for(int j = i+1; j<=a.length-1; j++){
if(a[j].vrniVsotoOd() > vMax.vrniVsotoOd()){
vMax = a[j];
iMax = j;
}
a[iMax] = a[i];
a[i] = vMax;
}
}
}
}

 

 

 

Dedovanje

 

Koncept in osnovni pojmi


Dedovanje je mehanizem, ki omogoča, da iz nekega obstoječega razreda izpeljemo podrazred, ki podeduje vse atribute in vse metode.

Terminologija:


osnovni razred (base class) -> izpeljan razred (derived class)
nadrazred (superclass) -> podrazred (subclass)
starš (parent) -> otrok (child)


V glavi izpeljanega razreda je potrebno navesti rezervirano besedo extends in ime osnovnega razreda.

Primer

  • Osnovni razred: Student
  • Izpeljan razred: IzredniStudent


Razred Student:

  • atributi: vpisna številka, priimek, ime
  • 6 metod (3 metode setter in 3 metode getter)


Razred IzredniStudent:

  • podeduje vse tri atribute
  • podeduje vseh 6 metod
  • deklariramo dodatne atribute in metode, ki so specifične le za izredne študente
  • dodatni atribut šolnine
  • dodatni metodi (nastavljanje zneska, vračanje zneska)

 

 

DemoDedovanje.java
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
class Student{    
 
//brez public, ker hočemo v eno datoteko spraviti več razredov
 
private int vpisSt;
private String priimek;
private String ime;
 
// 3 metode setter
public void vpisiVpisSt(int vs){
vpisSt = vs;
}
 
public void vpisiPriimek(String p){
priimek = p;
}
 
public void vpisiIme(String i){
ime = i;
}
 
// 3 metode getter
public int vrniVpisSt(){
return vpisSt;
}
 
public String vrniPriimek(){
return priimek;
}
 
public String vrniIme(){
return ime;
}
}
 
class IzredniStudent extends Student{
private double znesekSolnine;
 
public void vpisiZnesekSolnine(double zs){
znesekSolnine = zs;
}
 
public double vrniZnesekSolnine(){
return znesekSolnine;
}
}
 
public class DemoDedovanje{
public static void main(String[] args){
Student s = new Student();
s.vpisiVpisSt(63090655);
s.vpisiPriimek("Novak");
s.vpisiIme("Janez");
System.out.print(s.vrniVpisSt() + " " + s.vrniPriimek() + " " + s.vrniIme());
 
IzredniStudent is = new IzredniStudent();
is.vpisiVpisSt(63090777);
is.vpisiPriimek("Kralj");
is.vpisiIme("Matjaz");
is.vpisiZnesekSolnine(1200);
System.out.print(is.vrniVpisSt() + " " + is.vrniPriimek() +
" " + is.vrniIme() + " " + is.vrniZnesekSolnine());

}
}

 

 

 

Dostopno določilo protected

public: dostop možen iz katerega koli razreda.

 

private: deklaracija je dostopna le v razredu, kjer smo jo napisali.

 

protected: vmesna stopnja zaščite med public in private. Deklaracija je dostopna v razredu, kjer smo jo napisali in v vseh podrazredih, ki so izpeljani iz tega razreda. (deklaracija je dostopna tudi vsem razredom iz istega paketa.)

 

brez: deklaracija je dostopna vsem razredom istega paketa.

 

{jgototop}{/jgototop}
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.