objektno orijentisano programiranjeobjektno orijentisano programiranje predavanje 5–objekti u...

25
OBJEKTNO ORIJENTISANO PROGRAMIRANJE PREDAVANJE 5 – OBJEKTI U INTERAKCIJI Miloš Kovačević Đorđe Nedeljković 1 /25

Upload: others

Post on 07-Jan-2020

31 views

Category:

Documents


4 download

TRANSCRIPT

OBJEKTNO ORIJENTISANO PROGRAMIRANJE

PREDAVANJE 5 – OBJEKTI U INTERAKCIJI

Miloš Kovačević

Đorđe Nedeljković

1 /25

OSNOVNI KONCEPTI- Abstrakcija

- Modularizacija

- Objektne reference

- Klasni dijagram

- Objektni dijagram

- Kreiranje objekata

- Interakcija između objekata (eksterni pozivi metoda)

- Interni pozivi metoda

2 /25

DEMO – DIGITALNI SAT

3 /25

Otvoriti projekat clock-display u folderu chapter03

- Na displeju sati i minuti

- Sati idu od 0 do 11

KAKO NAPRAVITI PRIKAZ DIGITALNOG SATA

4 /25

jedan četvorocifreni displej?

...ili dva dvocifrena displeja?

:povezani sa

ABSTRAKCIJA I MODULARIZACIJA- Abstrakcija je pojednostavljena predstava modela koja zanemaruje

detalje a fokusira se na suštinska svojstva i ponašanja

- Primer: abstrakcija solitera je poliedar sa širinom, visinom, dužinom, brojem stanara i adresom

- Modularizacija je proces podele celine u dobro definisane delove, koji se mogu posmatrati nezavisno i koji interaguju po unapred definisanim pravilima

- Primer1: zgrada može da se podeli na spratove, a spratovi na stanove, spratovi i stanovi definišu se detaljnije, kao i veze između njih

- Primer2: lego kocke određenih profila (svaki profil definisan kao nezavisna celina) kombinacija različitih kocki daje različite modele (zgrada)

5 /25

MODULARIZACIJA

6 /25

Prikaz se realizuje korišćenjem dve nezavisne komponente (modula) istog tipa: dvocifreni displej

Svaki displej broji od 00 do XY, gde se XY može podesiti (npr. do 24 ili 60)

Zašto prikaz nije realizovan kao četvorocifreni displej?

Kako bi se realizovao sat koji pokazuje i sekunde u oba slučaja?

:povezani sa

Korišćenjem dvocifrenog displeja jednostavno se dograđuje funkcionalnost sata (na sate i minute se dodaju sekunde)

U slučaju da je sat monolitan ne bi mogli da iskoristimo nijedan njegov deo za novi prikaz

IMPLEMENTACIJA DVOCIFRENOG DISPLEJA

7 /25

public class NumberDisplay

{

private int limit;

private int value;

// konstruktori izostavljeni

// metode izostavljene

}

IMPLEMENTACIJA SATA

8 /25

public class ClockDisplay

{

private NumberDisplay hours;

private NumberDisplay minutes;

// konstruktori izostavljeni

// metode izostavljene

}

Primer abstrakcije – model prikaza sata pojednostavljen, uočeni suštinski deloviSvaki objekat klase ClockDisplay sastoji se od dva objekta klase NumberDisplayPolja hours i minutes su objektnog tipa (nisu primitivni tipovi)

PRIMITIVNI I OBJEKTNI TIPOVI

9 /25

primitivni tip(čuva vrednost promenljive)

21

int i;

NekaKlasa objekat; objektni tip(čuva referencu na objekat)

referenca = adresa u memoriji gde počinje struktura koja čuva podatke o stanju objektu

OBJEKTNI DIJAGRAM SISTEMA

10/25

24, 11

60, 3

Objektni dijagram pokazuje veze između objekata i njihova stanja u nekom trenutku rada programa

KLASNI DIJAGRAM SISTEMA

11/25

Klasni dijagram opisuje statičku strukturu programa (koje klase čine sistem i kakav je odnos između njih, koji su delovi u sistemu i kakav je odnos između delova)

IMPLEMENTACIJA DVOCIFRENOG DISPLEJA

12/25

public class NumberDisplay{

private int limit;

private int value;

public NumberDisplay (int rollOver){

limit = rollOver;

value = 0; // start at 0

}

// metode izostavljene

}

IMPLEMENTACIJA DVOCIFRENOG DISPLEJA

13/25

public class NumberDisplay{

private int limit;

private int value;

//...

public void increment(){

value = (value + 1) % limit;

}

// videti dalje u BlueJ-u

}

% - operator računa celobrojni ostatak, npr. 5 % 2 je 1/ - celobrojno deljenje kada su leva i desna strana celobrojni tipovi,

npr. 5 / 2 je 2Može li increment() da se implementira drugačije?

IMPLEMENTACIJA DVOCIFRENOG DISPLEJA

14/25

public class NumberDisplay{

private int limit;

private int value;

//...

public void increment(){

value = value + 1;

if(value == limit){

value = 0;

}

}

}

SKRAĆENA NOTACIJA

15/25

public void increment(){

value++ ; // umesto value = value + 1

if(value == limit){

value = 0;

}

}

total = total + price;

balance = balance – price;

može i:

total += price; balance -= price;

SKRAĆENA NOTACIJA - OPERATORI

16/25

- Umesto A = A op B može A op= B

- Primeri:

- a = a +5 jednako je a += 5

- b = b / c jednako je b /= c

- d = d * (2 + e) jednako je d *= (2 + e)

- Umesto a = a + 1, može a += 1, ali je najbolje a ++

- Slično, za a = a – 1, može a –= 1, ali je nabjolje a – –

IMPLEMENTACIJA SATA – OBJEKAT SADRŽI DRUGE OBJEKTE

17/25

public class ClockDisplay{

private NumberDisplay hours;

private NumberDisplay minutes;

// ...

public ClockDisplay(){

hours = new NumberDisplay(24);

minutes = new NumberDisplay(60);

// ostala inicijalizacija

}

// ...

}

poziv konstruktora klase NumberDisplay

IMPLEMENTACIJA SATA – OBJEKAT KREIRA DRUGE OBJEKTE

18/25

hours = new NumberDisplay(24);

minutes = new NumberDisplay(60);

24, 0

60, 0

public NumberDisplay (int rollOver){

limit = rollOver;

value = 0; // start at 0

}

stvarni parametar

formalni parametar

Polja hours i minutes su objektnog tipa (nisu primitivni tipovi kao što je npr. int)

POZIVANJE METODA – EKSTERNO ZVANJE

19/25

public class ClockDisplay{

private NumberDisplay hours;

private NumberDisplay minutes;

private String displayString;

// ...

private void updateDisplay(){

displayString =

hours.getDisplayValue() + ":" +

minutes.getDisplayValue();

}

// ...

}

eksterni poziv metode nad objektomkoristi notaciju sa tačkom

POZIVANJE METODA – NOTACIJA SA TAČKOM

20/25

hours.getDisplayValue()

ime objekta ime javne metode iz klase objekta

poziv metode

public class NumberDisplay{

private int limit;

private int value;

// ...

public String getDisplayValue(){

if(value < 10) {

return "0" + value;

}

else {

return "" + value;

}

}

// ...

}

modifikator vidljivosti za javnu metodu

POZIVANJE METODA – NOTACIJA SA TAČKOM

21/25

private NumberDisplay hours;

private NumberDisplay minutes;

private String displayString;

//...

public void timeTick(){

minutes.increment();

if(minutes.getValue() == 0){

hours.increment();

}

updateDisplay();

}

metode moraju biti deklarisane kao javne (public) u klasi NumberDisplay

Objekti mogu da pozivaju metode nad objektima drugih klasa samo ako su u tim klasama deklarisane kao javne (public)

Interakcija između objekata obavlja se kroz međusobno pozivanje metoda

POZIVANJE METODA – INTERNI POZIV

22/25

private NumberDisplay hours;

private NumberDisplay minutes;

private String displayString;

//...

public ClockDisplay(){

hours = new NumberDisplay(24);

minutes = new NumberDisplay(60);

updateDisplay();

}

public void timeTick(){

minutes.increment();

if(minutes.getValue() == 0){

hours.increment();

}

updateDisplay();

}interni poziv metode iz iste klase

interni poziv metode iz iste klase

POZIVANJE METODA – INTERNI POZIV

23/25

- Ukoliko se metoda zove isključivo interno, onda se deklariše kao private(updateDisplay u klasi ClockDisplay)

- Ukoliko se metoda deklariše kao private, ne mogu je pozivati objekti drugih klasa u notaciji sa tačkom (od spolja)

- Privatne metode implementiraju funkcionalnosti koje su potrebne za rad drugih metoda, pa se na ovaj način skraćuje kod

- Javne metode, kao i privatne se mogu pozivati interno ako je to potrebno

TEST – ŠTA JE NA IZLAZU?

24/25

int a;int b;a = 42;b = a;a = a + 1;System.out.println(b);

• Student a;Student b;a = new Student("Pera");b = a;a.promeniIme("Mika"); System.out.println(b.dajIme());

TEST – ŠTA JE NA IZLAZU?

25/25

42

int a;

42

int b;

b = a;

Student a; Student b;