Presentation is loading. Please wait.

Presentation is loading. Please wait.

Glava 8 Nasljedjivanje.

Similar presentations


Presentation on theme: "Glava 8 Nasljedjivanje."— Presentation transcript:

1 Glava 8 Nasljedjivanje

2 Nasljedjivanje Nasljedjivanje je fundamentalna objektno- orientisana tehnika dizajniranja koristena za kreiranje i organizaciju reiskoristivih klasa Glava 8 razmatra: Izvodjenje novih klasa iz postojecih Modifikator protected Kreiranje hijerarhije klasa Abstraktne klase Indirektnu vidljivost naslijedjenih clanova Dizajniranje za nasljedjivanje Hijerarhiju klasa GUI komponenti Prosirenje adapter klasa slusalaca Klasu Timer © 2004 Pearson Addison-Wesley. All rights reserved

3 Pregled Kreiranje podklasa Nadjacavanje (Overriding) Metoda
Hijerarhija klasa Nasljedjivanje i vidljivost Dizajn i nasljedjivanje Nasljedjivanje i GUI Klasa Timer © 2004 Pearson Addison-Wesley. All rights reserved

4 Nasljedjivanje Nasljedjivanje dozvoljava programeru da izvede novu klasu iz postojece Postojeca klsasa naziva se roditeljska klasa, ili superklasa, ili osnovna klasa Izvedena klasa naziva se dijete klasa ili podklasa Kao sto ime kaze, dijete klasa nasljedjuje karakteristike roditelja To jest, dijete klasa nasljedjuje metode i podatke definisane u roditeljskoj klasi © 2004 Pearson Addison-Wesley. All rights reserved

5 Nasljedjivanje Odnosi nasljedjivanja su pokazani u UML diagramu klas koristeci punu strelu sa nepopunjenom trouglastom glavom koja pokazuje na roditeljsku klasu Vozilo Auto Pravo nasljedjivanje kreira je-jedan odnos, sa znacenjem da je dijete jedan specijalan slucaj roditelja © 2004 Pearson Addison-Wesley. All rights reserved

6 Nasljedjivanje Programer moze napraviti izvedenu klasu prema potrebi dodavanjem novih varijabli, ili modifikujuci naslijedjene varijable Reiskoristenje softvera je glavna prednost nasljedjivanja Koristenjem postojecih komponenti softvera za kreiranje novih, mi olaksavamo napor koji ide na dizajniranje, implementaciju i testiranje postojeceg softvera © 2004 Pearson Addison-Wesley. All rights reserved

7 Izvodjenje podklasa U Javi, mi koristimo rezervisanu rijec extends za uspostavljanje odnosa nasljedjivanja class Auto extends Vozilo { // sadrzaj klase } Vidi Words.java (strana 440) Vidi Book.java (strana 441) Vidi Dictionary.java (strana 442) © 2004 Pearson Addison-Wesley. All rights reserved

8 Modifikator protected
Vidljivost modifikatora utice na nacin na koji clanovi klase mogu biti koristeni u klasi djetetu Varijable i metode deklarisane sa privatnom vidljivoscu ne mogu biti pozivane po imenu u klasi djetetu One mogu biti pozivane u klasi djetetu ako su deklarisane sa javnom (public) vidljivoscu – ali javno deklarisanje narusava princip inkapsulacije Postoji treci modifikator vidljivosti koji pomaze pri nasljedjivanju: protected © 2004 Pearson Addison-Wesley. All rights reserved

9 Modifikator protected
Modifikator protected dozvoljava klasi djetetu referisanje varijable ili metode direktno u klasi djetetu On uvodi vise inkapsulacije nego javna vidljivost, ali nije tako tijesno inkapsuliran kao privatna vidljivost Protected varijabla je vidljiva u svakoj klasi paketa roditelj klase Detalji svih modifikatora Jave diskutovani su Apendiksu E Protected varijable i metode mogu biti prikazani u UML dijagramima sa prefiksom # © 2004 Pearson Addison-Wesley. All rights reserved

10 Dijagram klasa za Words
Book # pages : int + pageMessage() : void Dictionary - definitions : int + definitionMessage() : void Words + main (args : String[]) : void © 2004 Pearson Addison-Wesley. All rights reserved

11 Super reference Konstruktori se ne nasljedjuju, cak i kada imaju javnu vidljivost Ipak mi zelimo koristiti konstruktor roditelja da postavimo “roditeljski dio" objekta Referenca super moze se koristiti za referisanje na roditeljsku klasu, a cesto se koristi za poziv roditeljskog konstuktora Vidi Words2.java (strana 445) Vidi Book2.java (strana 446) Vidi Dictionary2.java (strana 447) © 2004 Pearson Addison-Wesley. All rights reserved

12 Super reference Konstruktor djeteta je odgovoran za poziv konstruktora roditelja Prva linija konstruktora djeteta trebala bi koristiti referencu super za poziv konstruktora roditelja Referenca super moze takodje biti koristena az referisanje drugih varijabli i metoda iz roditeljske klase © 2004 Pearson Addison-Wesley. All rights reserved

13 Visestruko nasljedjivanje
Java podrzava singl nasljedjivanje, sto znaci da izvedena klasa moze imati samo jednu roditeljsku klasu Visestruko inheritance dozvoljava da jedna klasa moze biti izvedena iz dvije ili vise klasa, nasljedjujuci clanove svih klasa Kolizije, kao sto je isto ime varijable u vise klasa, moraju biti razrijesene Java ne podrzava visestuko nasljedjivanje U vecini slucajeva, koristenje interfejsa daje nam aspekte visestrukog nasljedjivanja bez dodatnih troskova © 2004 Pearson Addison-Wesley. All rights reserved

14 Pregled Kreiranje podklasa Nadjacavanje metoda Hijerarhija klasa
Nasljedjivanje i vidljivost Diajn i nasljedjivanje Nasljedjivanje i GUI Klasa Timer © 2004 Pearson Addison-Wesley. All rights reserved

15 Nadjacavnje metoda Dijete klasa moze nadjacati (override) definiciju naslijedjene metode u korist svoje metode Nova metoda mora imati istu signaturu kao i roditeljska metoda, ali moze imati razlicito tijelo Tip objekta koji izvodi metodu odredjuje koja verzija metode ce biti pozvana Vidi Messages.java (strana 450) Vidi Thought.java (strana 451) Vidi Advice.java (strana 452) © 2004 Pearson Addison-Wesley. All rights reserved

16 Nadjacavnaje Metoda iz roditeljske klase moze biti eksplicitno pozvana koristenjem reference super Ako je metoda deklarisana sa modifikatorom final, ona ne moze biti nadjacana Koncept nadjacavnja moze biti primijenjen i na podatke i naziva se sjencenje (shadowing) varijabli Sjencenje varijabli treba izbjegavati, jer ono tezi napraviti program konfuznim © 2004 Pearson Addison-Wesley. All rights reserved

17 Odnos preopterecenja i nadjacavanja
Preopterecenje se odnosi na vise metoda istog imena u istoj klasi, ali sa razlicitim signaturama Nadjacavanje se odnosi na dvije metode, jednu u klasi roditelj, a jednu u klasi dijete, koje imaju istu signaturu Preopterecenje daje mogucnost definisanja slicnih operacija na razne nacine, sa raznim parametrima Nadjacavanje daje mogucnost definisanja slicnih operacija na razne nacine za razne tipove objekata © 2004 Pearson Addison-Wesley. All rights reserved

18 Pregled Kreiranje podklasa Nadjacavanje metoda Hijerarhija klasa
Nasljedjivanje i vidljivost Dizajniranje za nasljedjivanje Nasljedjivanje i GUI Klasa Timer © 2004 Pearson Addison-Wesley. All rights reserved

19 Hijerarhija klasa Jedna dijete klasa moze biti roditelj klasa za drugo dijete, formirajuci hijerarhiju klasa Biznis KMart Macys Servis Biznis Kinkos Maloprodaja © 2004 Pearson Addison-Wesley. All rights reserved

20 Hijerarhija klasa Dva djeteta istog roditelja nazivaju se braca i sestre (siblings) Zajednicke osobone treba saviti toliko visoko u hijerarhiji koliko je to razumno Jedan naslijedjen clan se prosljedjuje neprekidno na doli Dakle, klasa dijete nasljedjuje od svih svojih klasa predaka Ne postoji jedinstvena hijerarhija klasa koja je pogodna za sve situacije © 2004 Pearson Addison-Wesley. All rights reserved

21 Klasa Object Klasa zvana Object je definisana u paketu java.lang standardne biblioteke Java klasa Sve klase su izvedene iz klase Object Ako klasa nije eksplicitno definisana kao dijete postojece klase, tada se podrazumijeva da je ona djete klase Object Dakle, klasa Object je ultimativno korijen svih hijerarhija klasa © 2004 Pearson Addison-Wesley. All rights reserved

22 Klasa Object Klasa Object sadrzi nekoliko korisnih metoda, koje se nasljedjuju u svim klasama Na primjer, metoda toString je definisana u klasi Object Svaki put kada definisemo metodu toString, mi ustvari nadjacavamo jednu naslijedjenu definiciju Metoda toString u klasi Object je definisana da vrati neki string koji sadrzi ime klase objekta zajedno sa nekom drugom informacijom © 2004 Pearson Addison-Wesley. All rights reserved

23 Klasa Object Metoda equals klase Object vraca true ako su dvije reference aliasi Mi mozemo nadjacati equals u svakoj klasi i definisati jednakost na odgovarajuci nacin Kao sto smo vidjeli, klasa String definise metodu equals tako da vrati true ako dva objekta tipa String sadrze iste znakove Dizajneri klase String imaju nadjacan metod equals naslijedjen iz Object u korist primjenljivije i korisnije verzije © 2004 Pearson Addison-Wesley. All rights reserved

24 Abstraktne klase Neka abstract class obiljezava mjesto u hijerarhiji klasa koje predstavlja genericki koncept Abstraktna klasa ne moze biti instancirana Koristimo modifikator abstract u hederu klase da deklarisemo abstraktnu klasu: public abstract class Product { // sadrzaj } © 2004 Pearson Addison-Wesley. All rights reserved

25 Abstraktne klase Abstraktne klase cesto sadrze abstraktne metode bez definicije (slicno interfejsu) Za razliku od interfejsa, modifikator abstract mora biti primijenjen na svaku abstraktnu metodu Takodje, abstraktna klasa tipicno sadrzi ne- abstraktne metode sa punom definicijom Klasa deklarisana kao abstraktna ne mora sadrzati abstraktne metode – to je automatski ucinjeno jednostavnim deklarisanjem klase kao abstraktne © 2004 Pearson Addison-Wesley. All rights reserved

26 Abstraktne klase Dijete abstraktne klase mora nadjacati abstraktne metode roditelja, ili ce takodje biti smatrana abstraktnom Abstraktna metoda ne moze biti definisana kao final ili static Koristenje abstraktnih klasa je vazan elemenat dizajniranja softvera – ono nam dozvoljava da postavimo zajednicke elemente hijerarhije koji su suvise genericki da bi mogli biti instancirani © 2004 Pearson Addison-Wesley. All rights reserved

27 Hijerarhije interfejsa
Nasljedjivanje moze biti primijenjeno na interfejse isto kao i na klase To znaci, neki interfejs moze biti izveden iz drugog interfejsa Dijete interfejs nasljedjuje sve abstraktne metode roditelja Klasa koja implementira dijete interfejs mora definisati sve metode iz oba predka i djeteta interfejsa Primijetimo da su hijerarhije klasa i interfejsa razlicite (one se ne preklapaju) © 2004 Pearson Addison-Wesley. All rights reserved

28 Pregled Kreiranje podklasa Nadjacavanje metoda Hijerarhije klasa
Nasljedjivanje i vidljivost Dizajniranje za nasljedjivanje Nasljedjivanje i GUI Klasa Timer © 2004 Pearson Addison-Wesley. All rights reserved

29 Ponovo o vidljivosti Vazno je razumjeti suptilnu stvar u odnosu na nasljedjivanje i vidljivost Sve varijable i metode klase roditelja, cak i privatni clanovi, nasljedjuju se u njihovoj djeci Kao sto je receno, privatni clanovi ne mogu biti referencirani po imenu u klasi djetetu Ipak, privatni clanovi naslijedjeni preko klase dijete postoje i mogu biti referencirani indirektno © 2004 Pearson Addison-Wesley. All rights reserved

30 Ponovo o vidljivosti Posto roditelji mogu referisati privatne clanove, dijete ih moze referisati indirektno, koristeci metode roditelja Referenca super moze se koristiti za referisanje roditelj klase, cak iako objekt tipa klase roditelja ne postoji Vidi FoodAnalyzer.java (strana 459) Vidi FoodItem.java (strana 460) Vidi Pizza.java (strana 461) © 2004 Pearson Addison-Wesley. All rights reserved

31 Pregled Kreiranje podklasa Nadjacavanje metoda Hijerarhija klasa
Nasljedjivanje i vidljivost Dizajn za nasljedjivanje Nasljedjivanje i GUI Klasa Timer © 2004 Pearson Addison-Wesley. All rights reserved

32 Dizajn za nasljedjivanje
Kao sto smo vec rekli, posvecivanje dovoljno vremena dizajnu dobrog softvera donosi prednosti na duge staze Pitanja nasljedjivanja su vazan dio objektno- orijentisanog dizajna Pravilno dizajnirani odnosi nasljedjivanja moze veoma doprinijeti eleganciji, upravljivosti i reupotrebljivosti softvera Sumirajmo neka pitanja u vezi sa nasljedjivanjem koja se odnose na dobar dizajn softvera © 2004 Pearson Addison-Wesley. All rights reserved

33 Pitanja dizajniranja nasljedjivanja
Svaka derivacija treba biti je-jedan relacija Treba misliti na potencijalnnu buducnost hijerarhije klasa, pa dizajnirati klase koje ce biti reiskoristive i fleksibilne Treba naci zajednicke karakteristike klasa i staviti ih toloko visoko u hijerarhiji klasa koliko treba Nadjacati metode kako treba da se postavi ili izmijeni funkcionalnost klase djeteta Dodati nove varijable djeci, ali ne redefinisati (shadow) naslijedjene varijable © 2004 Pearson Addison-Wesley. All rights reserved

34 Pitanja dizajna nasljedjivanja
Dozvoliti svakoj klasi da upravlja vlastitim podacima; koristiti referencu super za poziv konstruktora roditelja za postavljanje njegovih podataka Cak iako ne postoje njihove konkretne upotrebe, nadjacati opste metode kao sto su toString i equals sa odgovarajucim definicijama Koristiti abstraktne klase za predstavlljanje opsteg koncepta koji je zajednicki za nize klase Koristiti pazljivo modifikator vidljivosti da bi se dobio potreban pristup, a bez narusavanja inkapsulacije © 2004 Pearson Addison-Wesley. All rights reserved

35 Restrikcija nasljedjivanja
Modifikator final moze biti koristen modifier can be used to curtail inheritance If the final modifier is applied to a method, then that method cannot be overridden in any descendent classes If the final modifier is applied to an entire class, then that class cannot be used to derive any children at all Thus, an abstract class cannot be declared as final These are key design decisions, establishing that a method or class should be used as is © 2004 Pearson Addison-Wesley. All rights reserved

36 Pregled Kreiranje podklasa Nadjacavanje metoda Hijerarhija klasa
Nasljedjivanje i vidljivost Dizajniranje za nasljedjivanje Nasljedjivanje i GUI Klasa Timer © 2004 Pearson Addison-Wesley. All rights reserved

37 Hijerarhija klasa komponenti
Klase Jave koje definisu komponente GUI su dio hijerarhije klasa Swing komponente GUI tipicno su izvedene iz klase JComponent koja je izvedena od klase Conteiner, a koja je izvedena od klase Component Vise Swing komponenti mogu sluziti kao ograniceni (limited) kontejneri, jer su oni izvedeni iz klase Container Na primjer, jedan JLabel object moze sadrzati neku ImageIcon © 2004 Pearson Addison-Wesley. All rights reserved

38 Komponente hijerarhije klasa
Jedan aplet je dobar primjer nasljedjivanja Sjetimo se da kod definisanja nekog apleta, mi rasirujemo klasu Applet ili klasu JApplet Klase Applet i JApplet vec raspolazu upravljanjem detaljima oko kreacije i egzekucije apleta, ukljucujuci: Interakciju sa Web browser-om Prihvatanje parametara apleta preko HTML Postavljanja zastite © 2004 Pearson Addison-Wesley. All rights reserved

39 Hijerarhija komponenti
Nase klase apleta imaju posla samo sa stvarima koje su u odredjenom odnosu sa onim sto ce pojedinacni aplet raditi Kada definisemo metod paintComponent nekog apleta, mi zapravo nadjacavamo metod definisan originalno u klasi JComponent i naslijedjen od klase JApplet © 2004 Pearson Addison-Wesley. All rights reserved

40 Klasa Event Adapter Nasljedjivanje takodje daje jednu alternativnu tehniku za kreiranje klasa slusalaca Mi smo vidjeli da klase slusalaca mogu biti kreirane implementacijom pojedinacnog interfejsa, takvih kao MouseListener Mozemo takodje kreirati neku klasu slusalac preko prosirenja klase event adapter Svaki interfejs slusaoca koji ima vise nego jedan metod ima odgovarajucu adapter klasu, kao sto je klasa MouseAdapter © 2004 Pearson Addison-Wesley. All rights reserved

41 Klasa Event Adapter Svaka adapter klasa implementira odgovarajuceg slusaoca i daje prazne definicije metoda Kada se izvodi klasa slusalac iz adapter klase, treba samo nadjacati metode dogadjaja koji se odnose na program Prazne definicije za nekoristene metode ne trebaju biti definisane jer se one zadaju preko nasljedjivanja Vidi OffCenter.java (strana 466) Vidi OffCenterPanel.java (strana 467) © 2004 Pearson Addison-Wesley. All rights reserved

42 Pregled Kreiranje podklasa Nadjacavanje metoda Hijerarhija klasa
Nasljedjivanje i vidljivost Dizajniranje za nasljedjivanje Nasljedjivanje i GUI Klasa Timer © 2004 Pearson Addison-Wesley. All rights reserved

43 Klasa Timer Klasa Timer iz javax.swing paketa je komponenta GUI, ali nema vizuelnnnu reprezentaciju Neki objekat tipa Timer generise dogadjaj akcije u odredjenim intervalima Tajmeri mogu biti koristeni za upravljanje bilo kojim dogadjajima koji su bazirani na vremenskim intervalima, kao sto je animacija Za kreiranje iluzije kretanja, mi koristimo tajmer za zamjenu scene nakon odgovarajuceg kasnjenja © 2004 Pearson Addison-Wesley. All rights reserved

44 Klasa Timer Metode start i stop klase Timer startuju i zaustavljaju tajmer Kasnjenje moze biti postavljeno koristenjem konstruktora tajmera ili koristenjem metode setDelay Vidi Rebound.java (strana 471) Vidi ReboundPanel.java (strana 472) © 2004 Pearson Addison-Wesley. All rights reserved

45 Zakljucak U glavi 8 diskutovali smo:
Izvodjenje nove klase iz postojecih klasa Modifikator protected Kreiranje hijerarhije klasa Abstraktne klase Indirektnu vidljivost naslijedjenih clanova Dizajn za nasljedjivanje Hijerarhiju klasa GUI komponenti Prosirenje adapter klasa slusalaca Klasu Timer © 2004 Pearson Addison-Wesley. All rights reserved


Download ppt "Glava 8 Nasljedjivanje."

Similar presentations


Ads by Google