Glava 9 Polimorfizam Polimorfizam Polimorfizam je objektnoorijentisan koncept
Glava 9 Polimorfizam
Polimorfizam • Polimorfizam je objektno-orijentisan koncept koji nam dozvoljava kreiranje fleksibilnog dizajna softvera • Glava 9 se fokusira na: § Definisanje polimorfizma i njegovih prednosti § Koristenje nasljedjivanja za kreiranje polimorfnih referenci § Koristenje interfejsa za kreiranje polimorfnih referenci § Koristenje polimorfizma za implementaciju algoritama sortiranja i pretrazivanja § Dodatne komponente GUI © 2004 Pearson Addison-Wesley. All rights reserved 2
Pregled Polimorfne reference Polimorfizam preko nasljedjivanja Polimorfizam preko interfejsa Sortiranje Pretrazivanje Ponovo o obradi dogadjaja Izbor fajla i izbor boje Slajderi © 2004 Pearson Addison-Wesley. All rights reserved 3
Vezivanje (Binding) • Razmotrimo poziv slijedece metode: obj. do. It(); • U nekom momentu, ovaj poziv se povezuje sa definicijom metode koju poziva • Ako se ovo povezivanje desava u vrijeme kompajliranja, tada ova linija koda zove istu metodu svaki put • Ipak, Java odlaze povezivanje metode do vremena izvodjenja (run time) – ovo se naziva dinamicko povezivanje ili kasno povezivanje • Kasno povezivanje daje fleksibilnost u dizajniranju programa © 2004 Pearson Addison-Wesley. All rights reserved 4
Polimorfizam • Termin polimorfizam bukvalno znaci “imati vise formi" • Polimorfna referenca je varijabla koja moze referisati na vise raznih tipova objekata u raznim trenucima • Metoda koja se poziva preko polimorfne reference moze se mijenjati od jednog do drugog poziva • Sve reference objekata u Javi su potencijalno polimorfne © 2004 Pearson Addison-Wesley. All rights reserved 5
Polimorfizam • Pretpostavimo da kreiramo slijedecu referentnu varijablu: Occupation job; • Java dozvoljava ovoj referenci da pokazuje na objekat tipa Occupation, ili na bilo koji objekat bilo kog kompatibilnog tipa • Ova kompatibilnost moze biti ustanovljena koristenjem nasljedjivanja ili koristenjem interfejsa • Pazljivo koristenje polimorfnih referenci moze rezultirati elegantnim, cvrstim dizajnima softvera © 2004 Pearson Addison-Wesley. All rights reserved 6
Pregled Polimorfne reference Polimorfizam preko nasljedjivanja Polimorfizam preko interfejsa Sortiranje Pretrazivanje Ponovo o obradi dogadjaja Izbor fajla i izbor boje Slajderi © 2004 Pearson Addison-Wesley. All rights reserved 7
Reference i nasljedjivanje • Referenca na objekt moze referisati na neki objekat njene klase, ili na neki objekat klase sa kojom je povezana preko nasljedjivanja • Na primjer, ako se klasa Holiday koristi za izvodjenje klase zvane Christmas, tada bi neka referenca na Holiday mogla biti koristena za pokazivanje na objekat tipa Christmas Holiday day; day = new Christmas(); Christmas 8
Reference i interfejs • Dodjeljivanje objekta tipa dijete referenci na roditelja smatra se konverzijom prosirenja i moze biti ostvareno preko proste dodjele • Dodjeljivanje objekta tipa roditelj referenci na dijete takodje moze biti dato, ali se ovo smatra konverzijom suzenja i mora biti izvedeno sa ukalupljenjem (cast) • Konverzija prosirenja je najkorisnija 9
Polimorfizam preko nasljedjivanja • Tip referenciranog objekta, a ne tip reference, odredjuju koja metoda ce biti pozvana • Pretpostavimo da klasa Holiday ima metodu zvanu celebrate, a da je klasa Christmas nadjacava • Posmatrajmo slijedeci poziv: day. celebrate(); • Ako day referise na objekat Holiday, on poziva Holiday verziju celebrate; ako on referise na objekat tipa Christmas, on poziva Christmas version © 2004 Pearson Addison-Wesley. All rights reserved 10
Polimorfizam preko nasljedjivanja • Razmotrimo slijedecu hijerarhiju klasa: Staff. Member Volunteer Employee Executive © 2004 Pearson Addison-Wesley. All rights reserved Hourly 11
Polimorfizam preko nasljedjivanja • Pogledajmo sada primjer u kojem placamo skup raznih zaposlenih koristeci polimorfne metode • • Vidi Firm. java (strana 486) Vidi Staff. java (strana 487) Vidi Staff. Member. java (strana 489) Vidi Volunteer. java (strana 491) Vidi Employee. java (strana 492) Vidi Executive. java (strana 493) Vidi Hourly. java (strana 494) © 2004 Pearson Addison-Wesley. All rights reserved 12
Pregled Polimorfne reference Polimorpfisam preko nasljedjivanja Polimorfizam preko interfejsa Sortiranje Pretrazivanje Ponovo o obradi dogadjaja Izbor fajla i izbor boje Slajderi © 2004 Pearson Addison-Wesley. All rights reserved 13
Polimorfizam preko interfejsa • Ime interfejsa moze se koristiti kao tip objekta referentne varijable Speaker current; • Referenca current moze se koristiti za pokazivanje na bilo koji objekat bilo koje klase koji implementira interfejs Speaker • Verzija speak koju poziva slijedeca linija zavisi od tipa objekta koji je referisan preko current. speak(); © 2004 Pearson Addison-Wesley. All rights reserved 14
Polimorfizam preko interfejsa • Pretpostavimo da dvije klase, Philosopher i Dog, obje implementiraju inteerfejs Speaker, uvodeci razlicite verzije metode speak • U slijedecem kodu, prvi poziv speak zove jednu verziju, a drugi zove drugu: Speaker guest = new Philospher(); guest. speak(); guest = new Dog(); guest. speak(); © 2004 Pearson Addison-Wesley. All rights reserved 15
Pregled Polimorfne reference Polimorfizam preko nasljedjivanja Polimorfizam preko interfejsa Sortiranje Pretrazivanje Ponovo o obradi dogadjaja Izbor fajla i izbor boje Slajderi © 2004 Pearson Addison-Wesley. All rights reserved 16
Sortiranje • Sortiranje je proces aranziranja liste podataka u posebnom poretku • Proces sortiranja zasniva se na posebnim vrijednostima § Sortiranje liste uspjeha u rastucem poretku § Sortiranj liste ljudi alfabetski prema prezimenu • Postoji vise algoritama, koji se razlikuju po efikasnosti, za sortiranje liste podataka • Mi razmatramo dva specificna algoritma: § Sort izborom § Sort umetanjem © 2004 Pearson Addison-Wesley. All rights reserved 17
Sort izborom • Postupak pri sortiranju izborom: § Izaberi vrijednost i stavi je na njeno konacno mjesto u listi § Ponovi za sve preostale vrijednosti • Detaljnije: § Nadji najmanju vrijednost u listi § Razmijeni tu vrijednost sa vrijednoscu na prvoj poziciji § Nadji slijedecu najmanju vrijednost u listi § Razmijeni tu vrijednost sa vrijednoscu na drugoj poziciji § Ponavljati dok sve vrijednosti ne budu na pravim mjestima © 2004 Pearson Addison-Wesley. All rights reserved 18
Sort izborom • Jedan primjer: original: najmanji je 1: 2: 3: 6: 3 1 1 9 9 2 2 2 6 6 6 3 3 1 3 3 6 6 2 2 9 9 9 • Svaki put, nadje se najmanja vrijednost i razmijeni sa elementom u “slijedecoj” poziciji koju treba popuniti © 2004 Pearson Addison-Wesley. All rights reserved 19
Swapping • Obrada sortiranja algoritmom izbora ukljucuje swapping dvije vrijednosti • Swapping zahtijeva tri komande dodjele i jednu privremenu memorijsku lokaciju: temp = prvi; prvi = drugi; drugi = temp; © 2004 Pearson Addison-Wesley. All rights reserved 20
Polimorfizam u sortiranju • Napomenimo da neka klasa koja implementira interfejs Comparable definise metodu compare. To za odredjivanje relativnog poretka njenih objekata • Mi mozemo koristiti polimorfizam za razvoj generickog sorta za svaki skup objekata tipa Comparable • Metod sortiranja prihvata kao parametar niz objekata tipa Comparable • Na taj nacin, jedna metoda moze biti koristena za sortiranje grupe People, ili Books, ili sta hocemo © 2004 Pearson Addison-Wesley. All rights reserved 21
Sort izborom • Za metodu sortiranja nije vazno sta se sortira, ona samo treba mogucnost da zove metodu compare. To • To je garantovano koristeci Comparable kao tip parametra • Takodje, na ovaj nacin svaka klasa odlucuje za sebe sta znaci a jedan objekat da je manji od drugog • Vidi Phone. List. java (strana 500) • Vidi Sorting. java (strana 501), posebno selection. Sort metodu • Vidi Contact. java (strana 503) © 2004 Pearson Addison-Wesley. All rights reserved 22
Sort umetanjem • Postupak kod sortiranja umetanjem: § Uzmimo neki elemenat i stavimo ga na pravo mjesto u sortiranoj podlisti § Ponovimo dok svi elementi ne budu uneseni • Detaljnije: § Posmatrajmo prvi clan koji treba sortirati (podlista od jednog clana) § Umetnimo slijedeci clan u sortiranu podlistu, shiftujuci prvi clan kako je potrebno za pravljenje mjesta za nova umetanja § Umetnimo treci clan u sortiranu podlistu (od dva clana), shiftujuci clanove ako je potrebno § Ponavljamo dok svi clanovi budu umetnuti na pravo mjesto © 2004 Pearson Addison-Wesley. All rights reserved 23
Sort umetanjem • Primjer: original: umetni 9: umetni 6: umetni 1: umetni 2: 3 3 3 1 1 9 9 6 3 2 6 6 9 6 3 1 1 1 9 6 2 2 9 • Vidi Sorting. java (strana 501), posebno insertion. Sort metodu © 2004 Pearson Addison-Wesley. All rights reserved 24
Poredjenje stringova • Algoritmi sortiranja izborom i umetanjem su slicni po efektivnosti • Oba imaju spoljasnje petlje koje skeniraju sve elemente, a i unutrasnje petlje koje porede vrijednost iz spoljasnje petlje sa gotovo svim vrijednostima u listi • Aproksimativno se pravi n 2 poredjenja da bi se sortirala lista duzine n • Kaze se da je slozenost ovih sortova reda n 2 • Neki drugi sortovi su efikasniji: reda n log 2 n © 2004 Pearson Addison-Wesley. All rights reserved 25
Pregled Polimorfne reference Polimorfizam preko nasljedjivanja Polimorfizam preko interfejsa Sortiranje Pretrazivanje Opet o obradi dogadjaja Izbor fajla i izbor boje Slajderi © 2004 Pearson Addison-Wesley. All rights reserved 26
Pretrazivanje • Pretrazivanje je proces nalazenja tarzenog elementa u grupi clanova koju zovemo oblast pretrazivanja • Trazeni elemenat moze i ne mora biti u listi • Mmi zelimo efektivno izvestipretrazivanje, minimizirajuci broj poredjenja • Pogledajmo dva klasicna pristupa pretrazivanju: linearno pretrazivanje i binarno pretrazivanje • Kao sto smo uradili sa sortiranjem, mi cemo implementirati pretrazivanje sa polimorfnim Comparable parametrima © 2004 Pearson Addison-Wesley. All rights reserved 27
Linearno pretrazivanje • Linearno pretrazivanje pocinje na jednoj strani liste i ispituje elemenat po elemenat • Eventualno, trazeni elemenat je nadjen ili se dodje do kraja liste • Vidi Phone. List 2. java (strana 508) • Vidi Searching. java (strana 509), posebno linear. Search metodu © 2004 Pearson Addison-Wesley. All rights reserved 28
Binarno pretrazivanje • Binarno pretrazivanje podrazumijeva sortiranu listu clanova u oblasti pretrazivanja • Ono eliminise veliki dio oblasti pretrazivanja u svakom poredjenju • Binarno pretrazivanje prvo ispituje srednji elemanat liste – ako on odgovara trazenom, pretrazivaje se zavrsava • Ako ne, samo polovinu preostalih elemenata treba pretraziti • Posto su oni sortirani, trazeni elemenat moze biti samo u jednoj ili drugoj polovini © 2004 Pearson Addison-Wesley. All rights reserved 29
Binarno pretrazivanje • Proces se nastavlja poredjenjem sa srednjim elementom preostalih kandidata • Svako poredjenje eliminise odprilike polovinu preostalih kandidata • Eventualno, trazeni elemenat je nadjen ili je lista kandidata iscrpljena • Vidi Phone. List 2. java (strana 508) • Vidi Searching. java (strana 509), posebno binary. Search metodu © 2004 Pearson Addison-Wesley. All rights reserved 30
Pregled Polimorfne reference Polimorfizam preko nasljedjivanja Polimorfizam preko interfejsa Sortiranje Pretrazivanje Ponovo o obradi dogadjaja Izbor fajla i izbor boje Slajderi © 2004 Pearson Addison-Wesley. All rights reserved 31
Obrada dogadjaja • Polimorfizam igra vaznu ulogu u razvoju grafickog korisnickog interfejsa Jave • Kao sto smo vidjeli, mi uspostavljamo vezu izmedju komponente i slusaoca: JButton button = new JButton(); button. add. Action. Listener(new My. Listener()); • Primijetimo da metoda add. Action. Listener prihvata objekat My. Listener kao parametar • U stvari, mi mozemo proslijediti metodi add. Action. Listener bilo koji objekat koji implementira Action. Listener interfejs © 2004 Pearson Addison-Wesley. All rights reserved 32
Obrada dogadjaja • Izvorni kod za metodu add. Action. Listener prihvata parametar tipa Action. Listener (interfejs) • Zbog polimorfizma, svaki objekt koji implementira taj interfejs je kompatibilan sa referentnom varijablom parametra • Komponenta moze zvati metodu action. Performed zbog odnosa izmedju klase slusaoca i interejsa • Prosirivanje adapter klase za kreiranje slusaoca predstavlja istu situaciju; adapter klasa vec implementira odgovarajuci interfejs © 2004 Pearson Addison-Wesley. All rights reserved 33
Pregled Polimorfne reference Polimorfizam preko nasljedjivanja Polimorfizam preko interfejsa Sortiranje Pretrazivaje Ponovo o obradi dogadjaja Izbor fajla i izbor boje Slajderi © 2004 Pearson Addison-Wesley. All rights reserved 34
Okviri za dijalog • Podsjetimo da je dijalog boks mali prozor koji "pops up" da bi reagovao sa korisnikom za kratku, odredjenu potrebu • Klasa JOption. Pane omogucuje jednostavno kreiranje dijalog prozora za predstavljanje informacije, potvrdu akcija, ili prihvatanje ulaznih vrijednosti • Pogledajmo sada druge dvije klase koje nam omogucuju kreiranje specijalizovanih okvira zza dijalog © 2004 Pearson Addison-Wesley. All rights reserved 35
Izbor fajla • Cesto nailaze situacije u kojima zelimo da korisnik izabere fajl sa disk drajva, obicno da bi njegov sadrzaj mogao biti procitan i obradjen • file chooser, predstavljen preko JFile. Chooser klase, uproscava ovaj proces • Korisnik moze pregledati disk i filtrirati tipove pokazanih fajlova • Vidi Display. File. java (strana 516) © 2004 Pearson Addison-Wesley. All rights reserved 36
Izbor boje • U mnogim situacijama mi zelimo omoguciti korisniku izbor boje • color chooser , predstavljen preko Color. Chooser klase, uproscava ovaj proces • Korisnik moze izabrati boju iz palete ili odrediti boju navodeci RGB vrijednosti • Vidi Display. Color. java (strana 519) © 2004 Pearson Addison-Wesley. All rights reserved 37
Pregled Polimorfne reference Polimorfizam preko nasljedjivanja Polimorfizam preko interfejsa Sortiranje Pretrazivaje Ponovo o obradi dogadjaja Izbor fajla i izbor boje Slajderi © 2004 Pearson Addison-Wesley. All rights reserved 38
Slajderi • Slajder je komponenta GUI koja omogucava korisniku da specificira vrijednost u nekom brojnom razmaku • Slajder moze biti orijentisan vertikalno ili horizontalno i moze opcionalno imati tik oznake i labele • Minimalne i maksimalne vrijednosti slajdera su postavljene koristeci konstruktor JSlider • Slajder proizvodi change event kada se slajder pomjera, pokazujuci da su slajder i vrijednost promijenjeni © 2004 Pearson Addison-Wesley. All rights reserved 39
Slajderi • Slijedeci primjer koristi tri slajdera da promijeni vrijednosti koje predstavljaju komponente boje njihovim RGB vrijednostima • Vidi Slide. Color. java (strana 522) • Vidi Slide. Color. Panel. java (strana 523) © 2004 Pearson Addison-Wesley. All rights reserved 40
Zakljucak • Glava 9 ima fokus na: § Definisanje polimorfizma i njegovih prednosti § Koristenje nasljedjivanja za kreiranje polimorfnih referenci § Koristenje interfejsa za kreiranje polimorfnih referenci § Koristenje polimorfizma za implementaciju algoritama pretrazivanja i sortiranja § Dodatne GUI komponente © 2004 Pearson Addison-Wesley. All rights reserved 41
- Slides: 41