objektno orijentisano programiranje - · pdf fileobjektno orijentisano programiranje...

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

Upload: phungxuyen

Post on 05-Feb-2018

227 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: OBJEKTNO ORIJENTISANO PROGRAMIRANJE - · PDF fileOBJEKTNO ORIJENTISANO PROGRAMIRANJE PREDAVANJE 11: NASLEĐIVANJE Miloš Kovačevi ... -Java kompajler automatski dodaje extendsObject

OBJEKTNO ORIJENTISANO PROGRAMIRANJE

PREDAVANJE 11: NASLEĐIVANJE

Miloš Kovačević

Đorđe Nedeljković

1 /17

Page 2: OBJEKTNO ORIJENTISANO PROGRAMIRANJE - · PDF fileOBJEKTNO ORIJENTISANO PROGRAMIRANJE PREDAVANJE 11: NASLEĐIVANJE Miloš Kovačevi ... -Java kompajler automatski dodaje extendsObject

OSNOVNI KONCEPTI

- Nasleđivanje

- Podtipovi i substitucija

- Polimorfne varijable

- Klasna hijerarhija i klasa Object

2 /17

Page 3: OBJEKTNO ORIJENTISANO PROGRAMIRANJE - · PDF fileOBJEKTNO ORIJENTISANO PROGRAMIRANJE PREDAVANJE 11: NASLEĐIVANJE Miloš Kovačevi ... -Java kompajler automatski dodaje extendsObject

DEMO – DoME PRIMER- Treba napraviti bazu multimedijalnih sadržaja za iznajmljivanje

(muzički cd, video dvd, ...)

3 /17

polja

metode

Page 4: OBJEKTNO ORIJENTISANO PROGRAMIRANJE - · PDF fileOBJEKTNO ORIJENTISANO PROGRAMIRANJE PREDAVANJE 11: NASLEĐIVANJE Miloš Kovačevi ... -Java kompajler automatski dodaje extendsObject

DEMO – DoME PRIMER

4 /17

Page 5: OBJEKTNO ORIJENTISANO PROGRAMIRANJE - · PDF fileOBJEKTNO ORIJENTISANO PROGRAMIRANJE PREDAVANJE 11: NASLEĐIVANJE Miloš Kovačevi ... -Java kompajler automatski dodaje extendsObject

DoME – ANALIZA IZVORNOG KODA- Otvoriti projekat dome-v1 iz chapter08

- Klase CD i Video su veoma slične (imaju slično ponašanje i osobine)

- U rešenju v1 postoji značajno ponavljanje koda u CD i Video klasama

- Prilikom održavanja koda promene se moraju dvaput sprovesti - potencijalni izvor grešaka

- Ponavljanje koda u Database klasi – odvojena polja za CD i Video diskove, ponavljanje logike za ubacivanje multimedijalnog sadržaja, ponavljanje funkcionalnosti štampe u metodi list()

- Šta bi se desilo kada bi u sistem ubacili audio knjigu?

- Problemi koji nastaju prilikom rada sa klasama čiji se značajan deo osobina i ponašanja preklapa rešavaju se primenom koncepta nasleđivanja

5 /17

Page 6: OBJEKTNO ORIJENTISANO PROGRAMIRANJE - · PDF fileOBJEKTNO ORIJENTISANO PROGRAMIRANJE PREDAVANJE 11: NASLEĐIVANJE Miloš Kovačevi ... -Java kompajler automatski dodaje extendsObject

- Nasleđivanje omogućava definisanje klase iz već postojeće srodne klase

- Klasa Item je superklasa za CD i Video klase

- Klase CD i Video su potklase klase Item

- Kaže se da su CD i Video izvedene iz klase Item

- Potklasa pored svojih, nasleđuje sve osobine i ponašanja superklase

- Izvođenjem se definiše „JE“ relacija CD JE Item, Video JE Item

NASLEĐIVANJE

6 /17

Page 7: OBJEKTNO ORIJENTISANO PROGRAMIRANJE - · PDF fileOBJEKTNO ORIJENTISANO PROGRAMIRANJE PREDAVANJE 11: NASLEĐIVANJE Miloš Kovačevi ... -Java kompajler automatski dodaje extendsObject

- Otvoriti dome-v2 iz chapter08

DoME V2 – VERZIJA SA NASLEĐIVANJEM

7 /17

public class Item{

private String title;

private int playingTime;

private boolean gotIt;

private String comment;

// ...

}

public class CD extends Item{

private String artist;

private int numberOfTracks;

// ...

}

public class Video extends Item{

private String director;

// ...

}

Page 8: OBJEKTNO ORIJENTISANO PROGRAMIRANJE - · PDF fileOBJEKTNO ORIJENTISANO PROGRAMIRANJE PREDAVANJE 11: NASLEĐIVANJE Miloš Kovačevi ... -Java kompajler automatski dodaje extendsObject

NASLEĐIVANJE I INICIJALIZACIJA

8 /17

public class Item{

private String title;

private int playingTime;

private boolean gotIt;

private String comment;

public Item(String theTitle, int time){

title = theTitle;

playingTime = time;

gotIt = false;

comment = "";

} //...

public class CD extends Item{

private String artist;

private int numberOfTracks;

public CD(String theTitle, String theArtist, int tracks, int time){

super(theTitle, time);

artist = theArtist;

numberOfTracks = tracks;

} //...

super – poziv konstruktora super klase

Page 9: OBJEKTNO ORIJENTISANO PROGRAMIRANJE - · PDF fileOBJEKTNO ORIJENTISANO PROGRAMIRANJE PREDAVANJE 11: NASLEĐIVANJE Miloš Kovačevi ... -Java kompajler automatski dodaje extendsObject

- Ključna reč super poziva konstruktor superklase

- Mora biti na početku konstruktora izvedene klase

- Ako se izostavi, Java kompajler automatski ubacuje poziv super(), u ovom slučaju superklasa mora da ima definisan konstruktor bez parametara

INICIJALIZACIJA - SUPER

9 /17

Page 10: OBJEKTNO ORIJENTISANO PROGRAMIRANJE - · PDF fileOBJEKTNO ORIJENTISANO PROGRAMIRANJE PREDAVANJE 11: NASLEĐIVANJE Miloš Kovačevi ... -Java kompajler automatski dodaje extendsObject

- Objekat potklase vidi sva javna polja i metode superklase kao svoja (ne koristi se notacija sa tačkom)

- Privatna polja i metode iz superklase ostaju nevidljiva za potklasu

PRISTUPANJE METODAMA I POLJIMA SUPERKLASE IZ OBJEKTA POTKLASE

10/17

public class GeometrijskaSlika{

private String ime;

public Tacka teziste;

public GeometrijskaSlika(Tacka t, String i){

teziste = t; ime = i;

}

public GeometrijskaSlika(){ teziste = new Tacka(0,0); ime = ""; }

public String dajIme(){ return ime; }

}

public class Krug extends GeometrijskaSlika{

private double r;

public Krug(){ r = 1; } // pravi jedinicni krug u 0,0

// implicitni poziv GeometrijskaSlika()

public Krug(Tacka c, double r){ super(c, ""); this.r = r; }

public Tacka dajCentar(){ return teziste; }

public void info(){

System.out.println("Krug " + dajIme() + " r=" + r);

}

}

Page 11: OBJEKTNO ORIJENTISANO PROGRAMIRANJE - · PDF fileOBJEKTNO ORIJENTISANO PROGRAMIRANJE PREDAVANJE 11: NASLEĐIVANJE Miloš Kovačevi ... -Java kompajler automatski dodaje extendsObject

- Nad objektom potklase može se pristupiti svim javnim poljima i metodama superklase (u notaciji sa tačkom )

- Privatna polja i metode superklase ostaju nevidljiva

PRISTUPANJE METODAMA I POLJIMA SUPERKLASENAD OBJEKTOM POTKLASE

11/17

public class GeometrijskaSlika{

private String ime;

public Tacka teziste;

// ...

public String dajIme(){ return ime; }

}

public class Krug extends GeometrijskaSlika{

//...

}

Krug k = new Krug();

String ime = k.dajIme();

Tacka t = k.teziste;

Page 12: OBJEKTNO ORIJENTISANO PROGRAMIRANJE - · PDF fileOBJEKTNO ORIJENTISANO PROGRAMIRANJE PREDAVANJE 11: NASLEĐIVANJE Miloš Kovačevi ... -Java kompajler automatski dodaje extendsObject

- Od ranije poznato: klase predstavljaju složene (objektne) tipove podataka

- Za potklasu se kaže da je podtip od tipa superklase

- Objektna promenljiva može da ukazuje na objekte svoje klase (poznato od ranije) ili na objekte izvedenih klasa

- Primer:

PODTIPOVI I DODELA VREDNOSTI

12/17

Item prvi = new Item(...);

Item drugi = new CD(...);

Item treci = new Video(...);

// CD – podtip tipa Item

// Video – podtip tipa Item

// sledece ne moze!

CD cetvrti = new Item(...);

Page 13: OBJEKTNO ORIJENTISANO PROGRAMIRANJE - · PDF fileOBJEKTNO ORIJENTISANO PROGRAMIRANJE PREDAVANJE 11: NASLEĐIVANJE Miloš Kovačevi ... -Java kompajler automatski dodaje extendsObject

- Promenljiva podtipa može biti na svim mestima gde se očekuje promenljiva tipa

SUBSTITUCIJA TIPA PODTIPOM

13/17

public class Database{

private ArrayList<Item> items;

public Database(){

items = new ArrayList<Item>();

}

public void addItem(Item theItem){

items.add(theItem);

}

//...

} Database db = new Database();

CD c = new CD(...);

Video v = new Video(...);

db.addItem(c);

db.addItem(v);substitucija Item sa CD i Video

Page 14: OBJEKTNO ORIJENTISANO PROGRAMIRANJE - · PDF fileOBJEKTNO ORIJENTISANO PROGRAMIRANJE PREDAVANJE 11: NASLEĐIVANJE Miloš Kovačevi ... -Java kompajler automatski dodaje extendsObject

- Polimorfizam – mogućnost poprimanja više oblika

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

- Primer:

POLIMORFNE VARIJABLE

14/17

public class Database{

private ArrayList<Item> items;

//...

public void list(){

for(Item item : items) {

item.print();

System.out.println();

}

}

} polimorfna varijabla

Page 15: OBJEKTNO ORIJENTISANO PROGRAMIRANJE - · PDF fileOBJEKTNO ORIJENTISANO PROGRAMIRANJE PREDAVANJE 11: NASLEĐIVANJE Miloš Kovačevi ... -Java kompajler automatski dodaje extendsObject

- Klasa u isto vreme može biti i izvedena i superklasa

- Klasa može da ima samo jednu superklasu (ograničenje u Javi)

- Primer: proširenje DoME na druge tipove multimedije

- Klasa nasleđuje svojstva i ponašanja od svih klasa iznad sebe u klasnoj hijerarhiji

KLASNE HIJERARHIJE

15/17

Page 16: OBJEKTNO ORIJENTISANO PROGRAMIRANJE - · PDF fileOBJEKTNO ORIJENTISANO PROGRAMIRANJE PREDAVANJE 11: NASLEĐIVANJE Miloš Kovačevi ... -Java kompajler automatski dodaje extendsObject

- Izbegavanje ponavljanja koda

- Ponovno iskorišćenje koda

- Jednostavnije održavanje

- Jednostavnije proširivanje postojećih sistema

PREDNOSTI NASLEĐIVANJA

16/17

Page 17: OBJEKTNO ORIJENTISANO PROGRAMIRANJE - · PDF fileOBJEKTNO ORIJENTISANO PROGRAMIRANJE PREDAVANJE 11: NASLEĐIVANJE Miloš Kovačevi ... -Java kompajler automatski dodaje extendsObject

- Sve do sada korišćene klase (do ovog predavanja) u svojoj definiciji nisu sadržavale ključnu reč extends – kao da nije bilo nasleđivanja

- Međutim, sve klase u Javi za koje je izostavljen extendsizvedene su iz klase Object

- Java kompajler automatski dodaje extends Object ukoliko extends fali

- Klase koje su izvedene iz neke druge klase na vrhu klasne hijerarhije imaju klasu Object

- Najčešće korišćene metode nasleđene iz klase Objectsu toString(), equals(), i hashcode() (sledeće predavanje)

KLASA OBJECT

17/17