Glava 8 Nasljedjivanje.

Slides:



Advertisements
Similar presentations
Chapter 8 Inheritance. © 2004 Pearson Addison-Wesley. All rights reserved8-2 Inheritance Inheritance is a fundamental object-oriented design technique.
Advertisements

Chapter 8 Inheritance 5 TH EDITION Lewis & Loftus java Software Solutions Foundations of Program Design © 2007 Pearson Addison-Wesley. All rights reserved.
Inheritance Inheritance Reserved word protected Reserved word super
Aalborg Media Lab 23-Jun-15 Inheritance Lecture 10 Chapter 8.
Chapter Day 21. © 2007 Pearson Addison-Wesley. All rights reserved7-2 Agenda Day 20 Problem set 4 Posted  10 problems from chapters 7 & 8  Due Nov 21.
Chapter 8 Inheritance. © 2004 Pearson Addison-Wesley. All rights reserved8-2 Inheritance Inheritance is a fundamental object-oriented design technique.
Inheritance. © 2004 Pearson Addison-Wesley. All rights reserved 8-2 Inheritance Inheritance is a fundamental object-oriented design technique used to.
© 2004 Pearson Addison-Wesley. All rights reserved8-1 Chapter 8 : Inheritance Intermediate Java Programming Summer 2007.
Interno funkcioniranje modernog GUI-ja (korisničkog sučelja) na primjeru Unity 3D GUI frameworka Autor: Danko Kozar,
PiKKS. Ukratko Općenito Osnovni elementi OOP u Javi Overloading, overriding, virtual method invocation, modifikatori... Exceptions Java GUI Threads.
Outline Creating Subclasses Overriding Methods Class Hierarchies Visibility Designing for Inheritance Inheritance and GUIs The Timer Class Copyright ©
8. Inheritance “Is-a” Relationship. Topics Creating Subclasses Overriding Methods Class Hierarchies Abstract Class Inheritance and GUIs The Timer Class.
Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Java Software Solutions Foundations of Program Design Sixth Edition by Lewis.
Inheritance. Inheritance is a fundamental object-oriented design technique used to create and organize reusable classes Chapter 8 focuses on: deriving.
Chapter 8 Inheritance. 2  Review of class relationships  Uses – One class uses the services of another class, either by making objects of that class.
Prof: doc.dr. Samir Lemeš student: Samir Hrnjić. System restore je komponenta Microsoftovih operativnih sistema Windows Serveri ne podržavaju opciju System.
Chapter 8 Inheritance 5 TH EDITION Lewis & Loftus java Software Solutions Foundations of Program Design © 2007 Pearson Addison-Wesley. All rights reserved.
Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Java Software Solutions Foundations of Program Design Sixth Edition by Lewis.
Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Outline Creating Subclasses Overriding Methods Class Hierarchies Inheritance.
Chapter 7: Inheritance Java Software Solutions
ASPECT RATIO PAŠIĆ ANELA.
Glava 5 Uslovi i petlje.
Java Software Solutions Foundations of Program Design Seventh Edition
Mrezno racunarstvo Java, niti.
Objektno-Orientisani Dizajn
RP3/predavanje08 Ugniježdeni tipovi Iznimke 10/11/2018
Java Hello world !.
Chapter 7 Arrays (Nizovi).
Java Concurrency Overview
Nadgradnja klasa i nasljeđivanje – 3
Programiranje - Blokovi naredbi i logički tipovi –
Java Klase – 2.
CheckBox RadioButton RadioGroup
Programiranje 2 – C++ Klase i objekti
Mrezno racunarstvo glava 7 URLs and URIs.
Petlje FOR - NEXT.
Objektno orijentisano programiranje
KREIRANJE OBJEKATA.
Glava 11 Rekurzija.
Java Klase (Classes).
Uvod u programiranje - matematika – X predavanje
Arrays and strings -2 (nizovi i znakovni nizovi)
Reference ćelije i opsega
LABORATORIJSKA VEŽBA VEŽBA 4
14 UNUTRAŠNJE I ANONIMNE KLASE
Изведене класе Вишеструко извођење Полиморфизам
Elementi programskog jezika PASCAL
Podešavanje osobina stranica
Arrays and strings -1 (nizovi i znakovni nizovi)
Klasa grafik.
Objektno orijentisano programiranje
Programiranje II Obrada izuzetaka.
M-datoteke.
Glava 9 Polimorfizam.
Objektno orijentisano programiranje
Do While ... Loop struktura
Overriding Methods & Class Hierarchies
Skup instrukcija procesora
Fakultet elektrotehnike i računarstva
Programiranje - Naredbe za kontrolu toka programa – 3. dio
MODUL 5: PRIJENOS ZNANJA
LimeSurvey Uvjetni prikaz pitanja Internetska istraživanja
Present and future tenses
Dvostruka autentifikacija
Chapter 8 Inheritance Part 2.
Vježbenica 2: struktura grananja – 2.dio
Presentation transcript:

Glava 8 Nasljedjivanje

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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