objektno orijentisano programiranje - · pdf filestatiČki i dinamiČki tip objektnih...

17
OBJEKTNO ORIJENTISANO PROGRAMIRANJE PREDAVANJE 12: NASLEĐIVANJE Miloš Kovačević Đorđe Nedeljković 1 /17

Upload: phamdang

Post on 05-Feb-2018

230 views

Category:

Documents


8 download

TRANSCRIPT

Page 1: OBJEKTNO ORIJENTISANO PROGRAMIRANJE -  · PDF fileSTATIČKI I DINAMIČKI TIP OBJEKTNIH PROMENLJIVIH - Statički tip promenljive je deklarisan tip promenljive (levo do

OBJEKTNO ORIJENTISANO PROGRAMIRANJE

PREDAVANJE 12: NASLEĐIVANJE

Miloš Kovačević

Đorđe Nedeljković

1 /17

Page 2: OBJEKTNO ORIJENTISANO PROGRAMIRANJE -  · PDF fileSTATIČKI I DINAMIČKI TIP OBJEKTNIH PROMENLJIVIH - Statički tip promenljive je deklarisan tip promenljive (levo do

OSNOVNI KONCEPTI- Statički i dinamički tipovi podataka

- Prepisivanje metoda superklase

- Polimorfizam na nivou metode

- Modifikator vidljivosti protected

- toString() metoda klase Object

2 /17

Page 3: OBJEKTNO ORIJENTISANO PROGRAMIRANJE -  · PDF fileSTATIČKI I DINAMIČKI TIP OBJEKTNIH PROMENLJIVIH - Statički tip promenljive je deklarisan tip promenljive (levo do

DoME PROJEKAT - NASTAVAK

3 /17

Page 4: OBJEKTNO ORIJENTISANO PROGRAMIRANJE -  · PDF fileSTATIČKI I DINAMIČKI TIP OBJEKTNIH PROMENLJIVIH - Statički tip promenljive je deklarisan tip promenljive (levo do

DoME V2 – PROBLEM SA PRINT METODOM

4 /17

public class Database{

private ArrayList<Item> items;

public Database(){

items = new ArrayList<Item>();

}

public void addItem(Item theItem){

items.add(theItem);

}

public void list(){

for(Item item : items) {

item.print();

System.out.println();

}

}

}metoda print() ne razlikuje CD i Video objekte, štampa samo zajednička polja iz klase Item

- Napraviti jedan CD i jedan Video i staviti ih u bazu. Izlistati sadržaj baze u obe verzije (dome-v1 i dome-v2)

Page 5: OBJEKTNO ORIJENTISANO PROGRAMIRANJE -  · PDF fileSTATIČKI I DINAMIČKI TIP OBJEKTNIH PROMENLJIVIH - Statički tip promenljive je deklarisan tip promenljive (levo do

STATIČKI I DINAMIČKI TIP OBJEKTNIH PROMENLJIVIH

- Statički tip promenljive je deklarisan tip promenljive (levo do promenljive u prvom pojavljivanju)

- Dinamički tip promenljive je tip objekta na koji promenljiva ukazuje

- U gornjem primeru c1 ima isti statički i dinamički tip (Car), dok v1 ima statički tip Vehicle, a dinamički Car

- Polimorfna promenljiva može imati različit statički i dinamički tip

5 /17

Car c1 = new Car(); // tip c1 je Car

Vehicle v1 = new Car(); // v1 – polimorfna

// sta je tip v1?

Page 6: OBJEKTNO ORIJENTISANO PROGRAMIRANJE -  · PDF fileSTATIČKI I DINAMIČKI TIP OBJEKTNIH PROMENLJIVIH - Statički tip promenljive je deklarisan tip promenljive (levo do

DoME V2 – PROBLEM SA PRINT METODOM

6 /17

- Šta se dešava ako print() metod iz klase Itemprebacimo u klase CD i Video?

- Prodiskutovati dva tipa grešaka koje prijavljuje prevodilac: 1. privatna polja superklase nisu dostupna potklasi (prilikom prevođenja CD) 2. Item klasa ne sadrži print() metod (prilikom prevođenja Database)

public void print(){

System.out.print("title: " + title + " ("

+ playingTime + " mins)");

if(gotIt) { System.out.println("*"); }

else { System.out.println(); }

System.out.println(" " + comment);

System.out.println("artist: " + artist);

System.out.println("num. tracks: " + numberOfTracks);

}

dodato za CD polja

Page 7: OBJEKTNO ORIJENTISANO PROGRAMIRANJE -  · PDF fileSTATIČKI I DINAMIČKI TIP OBJEKTNIH PROMENLJIVIH - Statički tip promenljive je deklarisan tip promenljive (levo do

DoME V2 – PROBLEM SA PRINT METODOM

7 /17

- Šta se dešava ako print() metod iz klase Itemprebacimo u klase CD i Video?

- privatna polja superklase nisu dostupna potklasi (prilikom prevođenja CD)- Rešava se uvođenjem javnih metoda za pristup privatnim poljima u superklasi

- Item klasa ne sadrži print() metod (prilikom prevođenja Database)- Prevodilac proverava statički tip za promenljivu item

- Prilikom provere tipova prevodilac proverava statički, a ne dinamički tip (jer u vreme prevođenja se ne zna tip objekta na koji promenljiva pokazuje)

public void list(){

for(Item item : items) {

item.print();

System.out.println();

}

}

Page 8: OBJEKTNO ORIJENTISANO PROGRAMIRANJE -  · PDF fileSTATIČKI I DINAMIČKI TIP OBJEKTNIH PROMENLJIVIH - Statički tip promenljive je deklarisan tip promenljive (levo do

PREPISIVANJE METODA SUPERKLASE

8 /17

public class CD extends Item{

...

public void print(){

System.out.println(" " + artist);

System.out.println(" tracks: " + numberOfTracks);

}

}public class Video extends Item{

...

public void print(){

System.out.println(" director: " + director);

}

}

public class Item{

...

public void print(){

System.out.print(title + " (" +

playingTime + " mins)");

if(gotIt){ System.out.println("*"); }

else { System.out.println(); }

System.out.println(" " + comment);

}

}

Page 9: OBJEKTNO ORIJENTISANO PROGRAMIRANJE -  · PDF fileSTATIČKI I DINAMIČKI TIP OBJEKTNIH PROMENLJIVIH - Statički tip promenljive je deklarisan tip promenljive (levo do

PREPISIVANJE METODA SUPERKLASE

- Potklasa može da definiše metod koji ima isti potpis kao i metod superklase

- Tada se razlikuje implementacija metoda u odnosu na metod superklase (metod potklase radi nešto drugo)

- Metoda iz potklase koja je prepisana ima prednost pri pozivu nad objektima te klase

9 /17

Item i = new Item(...);

i.print(); // poziva se print() metoda iz Item klase

CD cd = new CD(...);

cd.print(); // poziva se print() metoda iz CD klase

Page 10: OBJEKTNO ORIJENTISANO PROGRAMIRANJE -  · PDF fileSTATIČKI I DINAMIČKI TIP OBJEKTNIH PROMENLJIVIH - Statički tip promenljive je deklarisan tip promenljive (levo do

DINAMIČKO PRONALAŽENJE ADEKVATNOG METODA

- Otvoriti projekat dome-v3 iz chapter09

- Analizirati kod, kreirati jedan CD i jedan Video, ubaciti ih u bazu i potom izlistati njen sadržaj (diskutovati)

- U vreme prevođenja proverava se statički tip, a u vreme izvršavanja proverava se dinamički tip

10/17

Page 11: OBJEKTNO ORIJENTISANO PROGRAMIRANJE -  · PDF fileSTATIČKI I DINAMIČKI TIP OBJEKTNIH PROMENLJIVIH - Statički tip promenljive je deklarisan tip promenljive (levo do

POLIMORFIZAM NA NIVOU METODE

- Isti poziv metode može aktivirati različite metode u zavisnosti od dinamičkog tipa promenljive nad kojom je metod pozvan

11/17

public void list(){

for(Item item : items){

item.print();

}

}

polimorfna metoda

Page 12: OBJEKTNO ORIJENTISANO PROGRAMIRANJE -  · PDF fileSTATIČKI I DINAMIČKI TIP OBJEKTNIH PROMENLJIVIH - Statički tip promenljive je deklarisan tip promenljive (levo do

POLIMORFIZAM - REKAPITULACIJA

- Polimorfizam – mogućnost poprimanja više oblika

- Objektne promenljive u Javi su polimorfne – pokazuju na objekte deklarisane klase ili na izvedene klase

- Isti poziv metode može aktivirati različite metode u zavisnosti od dinamičkog tipa promenljive nad kojom je metod pozvan

12/17

public void list(){

for(Item item : items){

item.print();

}

}

polimorfna metoda

polimorfna promenljiva

Page 13: OBJEKTNO ORIJENTISANO PROGRAMIRANJE -  · PDF fileSTATIČKI I DINAMIČKI TIP OBJEKTNIH PROMENLJIVIH - Statički tip promenljive je deklarisan tip promenljive (levo do

POZIV PREPISANE METODE PREKO SUPER

- Primećujemo da u verziji 3 opet imamo problem sa štampom (štampaju se samo polja klasa CD i Video)

- Problem se prevazilazi upotrebnom službene reči super za poziv prepisane metode superklase:

- Za razliku od poziva konstruktora superklase, poziv metode preko super može biti bilo gde unutar metode

- Iako se preko super mogu pozivati i neprepisane javne metode iz superklase, takve metode su vidljive u potklasi i direktno (bez super)

13/17

public class CD extends Item{

...

public void print(){

super.print();

System.out.println(" " + artist);

System.out.println(" tracks: " + numberOfTracks);

}

}

poziv prepisanog metoda superklase

Page 14: OBJEKTNO ORIJENTISANO PROGRAMIRANJE -  · PDF fileSTATIČKI I DINAMIČKI TIP OBJEKTNIH PROMENLJIVIH - Statički tip promenljive je deklarisan tip promenljive (levo do

UTVRĐIVANJE DINAMIČKOG TIPA POLIMORFNE PROMENLJIVE

- Ukoliko želimo da utvrdimo dinamički tip polimorfne promenljive, koristimo službenu reč instanceof:

14/17

for( Item item : items ){

if(item instanceof CD){

...

}

}

Page 15: OBJEKTNO ORIJENTISANO PROGRAMIRANJE -  · PDF fileSTATIČKI I DINAMIČKI TIP OBJEKTNIH PROMENLJIVIH - Statički tip promenljive je deklarisan tip promenljive (levo do

MODIFIKATOR VIDLJIVOSTI PROTECTED

- Ukoliko polje ili metod ima deklarisanu vidljivost protected, može mu se pristupiti (pozvati) iz objekata iste klase, kao i svih potklasa

- Modifikator protected omogućava prisniju vezu između objekata potklasa i superklase, što je i prirodno s obzirom da objekti potklasa imaju i svojstva superklase

15/17

protected String getTitle(){ return title; }

Page 16: OBJEKTNO ORIJENTISANO PROGRAMIRANJE -  · PDF fileSTATIČKI I DINAMIČKI TIP OBJEKTNIH PROMENLJIVIH - Statički tip promenljive je deklarisan tip promenljive (levo do

ENKAPSULACIJA - REZIME

- Enkapsulacija je osnovni princip objektnog orijentisanog programiranja koji podrazumeva sakrivanje detalja implementacije od spoljnog sveta

- Realizuje se primenom modifikatora vidljivosti na nivou polja i metoda

16/17

Modifikator Klasa Potklasa Svet

public + + +

protected + + –

private + – –

Page 17: OBJEKTNO ORIJENTISANO PROGRAMIRANJE -  · PDF fileSTATIČKI I DINAMIČKI TIP OBJEKTNIH PROMENLJIVIH - Statički tip promenljive je deklarisan tip promenljive (levo do

METOD toString() KLASE Object- Javna metoda toString() vraća tekstualnu reprezentaciju objekta

- Kako su sve klase nasleđene iz klase Object, sve nasleđuju ovaj metod

- Ukoliko neka klasa ne prepiše implementaciju toString() metode, onda podrazumevana metoda (iz klase Object) vraća tekst oblika ImeKlase@memorijskaAdresaObjektaUMemoriji, npr: CD@6acdd1

- Obično se ova metoda prepisuje, npr:

- Kada klasa prepiše toString(), njeni objekti mogu biti direktni argumenti zaSystem.out.println():

17/17

public class Osoba{

...

// moguca tekst reprezentacija objekata klase Osoba

public String toString(){

return "ime: " + ime + "\n prezime: " + prezime;

}

}

Osoba pera = new Osoba(...);

...

System.out.println(pera);