objektno orijentisano programiranjeobjektno orijentisano programiranje predavanje 5–objekti u...
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());