Click here to load reader

Objektno orijentisano programiranje

  • View
    81

  • Download
    1

Embed Size (px)

DESCRIPTION

Java, nasleđivanje. Objektno orijentisano programiranje. Nasleđivanje. Veoma važan aspekt objektno orijentisanog programiranja je kreiranje nove klase na osnovu već postojeće klase ( standardne ili korisnički definisane klase ) - PowerPoint PPT Presentation

Text of Objektno orijentisano programiranje

  • Objektno orijentisano programiranjeJava, nasleivanje

  • NasleivanjeVeoma vaan aspekt objektno orijentisanog programiranja je kreiranje nove klase na osnovu ve postojee klase ( standardne ili korisniki definisane klase )Taj proces naziva se izvoenje. Nova klasa je izvedena klasa ili direktna potklasa klase iz koje je izvedena, dok se klasa iz koje se vri izvoenje naziva bazna klasa ili superklasa.Izvedena klasa moe posluiti kao bazna u daljem postupku izvoenja

  • Konkretan primerMoemo definisati klasu Pas koja predstavlja psa proizvoljne rase:class Pas{ // lanovi klase Pas }Ova klasa moe sadrati atribut ime, i atribut rasa.Iz klase Pas moemo izvesti klasu Sarplaninac koja predstavlja pse koji pripadaju rasi arplaninac

  • Konkretan primer nastavak class Sarplaninac extends Pas { // lanovi klase Sarplaninac }Kljuna re extends oznaava da je Pas bazna klasa za klasu Sarplaninac, pa e objekat klase Sarplaninac imati lanove nasleene od klase Pas, pored lanova klase Sarplaninac koji se pojavljuju u definiciji te klase.rasa e za sve instance klase Sarplaninac biti "Sarplaninac", dok e ime u optem sluaju biti razliito za svakog arplaninca.

  • PrimerObjekat klase Sarplaninac je specijalizovana instanca objekta klase Pas, to odraava odnose iz stvarnosti. arplaninac je oigledno pas i ima sve karakteristike psa, ali ima i neke jedinstvene karakteristike koje ga razlikuju od svih ostalih pasa koji nisu arplaninci. Mehanizam nasleivanja dodaje sve karakteristike bazne klase, u ovom sluaju klase Pas, karakteristikama izvedene klase. lanovi izvedene klase definiu karakteristike koje razlikuju izvedenu od bazne klase, tako da se izvedena klasa moe smatrati specifikacijom objekata koji su specijalizacije objekta bazne klase

  • Nasleivanje klasaObjekat izvedene klase uvek u sebi ima kompletan objekat bazne klase, sa svim atributima i metodima. Meutim, to ne znai da su svi lanovi definisani u baznoj klasi dostupni metodima specifinim za izvedenu klasu. Neki jesu, a neki nisu.Nasleeni lan bazne klase je onaj koji je dostupan unutar izvedene klaseAko lan bazne klase nije dostupan u izvedenoj klasi, on onda nije nasleeni lan, ali i dalje predstavlja deo objekta izvedene klase

  • Nasleeni lanNasleeni lan je pravi lan izvedene klase i dostupan je svim njenim metodima. Objekti izvedene klase sadrae sve nasleene lanove bazne klase i atribute i metode, kao i lanove specifine za izvedenu klasu. Upamtiti da objekat izvedene klase uvek u sebi sadri kompletan objekat bazne klase, ukljuujui sve atribute i metode koji nisu nasleeni.

  • ta se nasleuje?Koji atributi i koji metodi bazne klase se nasleuju u izvedenoj klasi?Odvojeno objanjenje za atribute i metode, jer postoje neke istanane razlike

  • Nasleivanje atributaSlika vredi 1000 rei:

  • Nasleivanje atributaSlika prikazuje koji pristupni atributi doputaju nasleivanje lanova klase u potklasiPrikazano je ta se deava kada je potklasa u istom paketu kao i bazna klasa, a ta kada su potklasa i bazna klasa u razliitim paketimaUpamtiti da nasleivanje utie na dostupnost lana u izvedenoj klasi, ne na samo prisustvo.Klasa sama po sebi moe biti public. To je ini dostupnom iz proizvoljnog paketa. Klasi koja nije deklarisana kao public moe se pristupati samo iz klasa unutar istog paketa.

  • Nasleivanje atributa - nastavakTo npr. znai da se ne mogu definisati objekti ne-public klase unutar klasa iz drugih paketaTo takoe znai da ako elimo da izvedemo klasu iz klase u drugom paketu, bazna klasa mora biti deklarisana kao public.VANO: ako izvedena klasa nije u paketu bazne klase, ne nasleuju se private i atributi definisani bez pristupnog atributa (nasleuju se public i protected) i bazna klasa mora biti deklarisana kao publicako su izvedena i bazna klasa u istom paketu, nasleuju se svi atributi osim private atributa (public, protected i atributi bez pristupnih atributa)

  • Meusobni odnos pristupnih atributa vano kod overriding-a i polimorfizmapo rastuoj restriktivnosti:public najmanje restriktivan, svuda dostupanprotected spreava pristup iz klasa izvan paketa, ali ne ograniava nasleivanje ako je klasa publicbez pristupnog atributa pristup se ograniava na klase iz istog paketa i spreava se nasleivanje u potklasama definisanim u drugim paketimaprivate pristup samo unutar klase

  • Statiki atributi klaseData pravila nasleivanja se odnose kako na nestatike, tako i na statike lanove klaseDakle, private i static atribut bazne klase nee biti nasleen u izvedenoj, dok e protected i static atribut biti nasleen i delie ga svi objekti izvedene, kao i bazne klase.

  • Skriveni atributiAtribut izvedene klase moe imati isto ime kao i atribut bazne klase. To generalno nije preporueno prilikom dizajniranja klase, ali mogue je da se desi sluajno. Kada se tako neto desi, atribut bazne klase i dalje moe biti nasleen, ali bie sakriven atributom izvedene klase koji ima isto ime.Mehanizam sakrivanja se primenjuje kad god postoje istoimeni atributi u baznoj i izvedenoj klasi, bez obzira na njihove tipove i pristupne atribute

  • Skrivanje atributaUpotreba imena lana izvedene klase uvek se odnosi na lan definisan kao deo te klase. Za referisanje nasleenog lana bazne klase, moramo ga kvalifikovati kljunom reju super, da ukaemo da je to to hoemo lan superklase.

    Nije doputena upotreba super.super.neto za referisanje skrivenog imena lana bazne klase bazne klase :)

  • Skrivanje atributaU veini situacija neemo imati potrebu da referiemo nasleene atribute na ovaj nain, poto neemo namerno duplirati imena.Takva situacija obino moe nastati ako koristimo klasu kao osnovu koja se uzastopno menja dodavanjem novih atributa npr. to moe biti standardna Java klasa ili klasa koju je neko drugi pisao, pa poto na kod ne pretpostavlja postojanje lana bazne klase sa istim imenom, skrivanje nasleenog lana je upravo ono to elimo. To doputa menjanje bazne klase bez uticaja na na kod.

  • Nasleeni metodi osim konstruktoraObini metodi ( metodi koji nisu konstruktori ) bazne klase, nasleuju se u izvedenoj klasi na isti nain kao atributi bazne klase.Metodi deklarisani kao private u baznoj klasi, ne nasleuju seMetodi deklarisani bez pristupnog atributa nasleuju se samo ako je izvedena klasa u istom paketu kao baznaOstali se svi nasleuju

  • Nasleeni metodi - konstruktoriKonstruktori se razlikuju od obinih metoda.

    Konstruktori bazne klase se nikada ne nasleuju, bez obzira na njihove pristupne atribute.

    Zamrenost konstruktora u hijerarhiji klasa moe se videti razmatranjem postupka kreiranja objekata izvedene klase

  • Objekti izvedene klaseIzvedena klasa je produetak (proirenje) bazne klase.Nasleivanje se odnosi na to koji lanovi bazne klase su dostupni u izvedenoj klasi, ne koji lanovi bazne klase postoje u objektu izvedene klase.Objekat potklase sadri sve lanove originalne bazne klase, plus sve nove lanove koje smo definisali u izvedenoj klasi. Slika!!!:

  • Slika

  • Objanjenje slikelanovi bazne klase postoje svi u objektu izvedene klase, samo ne moemo pristupati nekima od njih u metodima koje definiemo u izvedenoj klasiinjenica da ne moemo pristupati nekim lanovima bazne klase, ne znai da su oni suvini oni predstavljaju kljune lanove objekata nae izvedene klase.Objekat klase Sarplaninac treba sve atribute klase Pas koji ga ine objektom klase Pas, iako neki od njih moda nisu dostupni metodima klase SarplaninacNaravno, nasleeni metodi bazne klase mogu pristupati svim lanovima bazne klase, ukljuujui i onima koji nisu nasleeni.

  • Objekti izvedene klaseIako konstruktori bazne klase nisu nasleeni u izvedenoj klasi, oni se mogu pozivati da inicijalizuju lanove bazne klase. I vie od toga! Ako ne pozovemo konstruktor bazne klase iz konstruktora nae izvedene klase, kompajler e pokuati da uradi to za nas. (poto objekat izvedene klase u sebi sadri objekat bazne klase, dobar nain za inicijalizovanje tog baznog dela objekta izvedene klase je korienjem konstruktora bazne klase)

  • Izvoenje klasepublic class Zivotinja{ public Zivotinja(String sVrsta){ vrsta=sVrsta; }public String toString(){return Ovo je + vrsta;}private String vrsta;}

  • Izvoenje klaseIzvodimo klasu zasnovanu na klasi Zivotinja, da bismo definisali pse. To moemo uraditi neposredno, bez menjanja definicije klase Zivotinja public class Pas extends Zivotinja { // konstruktori za objekat klase Pas

    private String ime; // ime psa private String rasa; // rasa psa }

  • Izvoenje klaseKljuna re extends u definiciji potklase koristi se za identifikovanje imena direktne superklaseKlasa Pas e naslediti samo metod toString() klase Zivotinja, jer private atributi i konstruktori ne mogu da se naslede.Naravno, objekat klase Pas e imati atribut vrsta, koji treba da ima vrednost Pas, kome nee moi da se pristupa metodima definisanim u klasi Pas (poto je to private atribut bazne klase).

  • Izvoenje klaseDodali smo dve instancne promenljive u izvedenoj klasi ( ime za uvanje imena odreenog psa, i rasa )Potrebno je jo dodati sredstvo za kreiranje objekata klase Pas.

  • Konstruktori izvedene klaseZa proizvoljan objekat izvedene klase, treba osigurati da je private lan vrsta bazne klase, ispravno inicijalizovan. To se radi pozivanjem konstruktora bazne klase iz konstruktora izvedene klase:public class Pas extends Zivotinja { public Pas(String sIme){ super(Pas); // poziv baznog konstuktora ime=sIme; // dato ime rasa=Nepoznata; // podrazumevana vrednost rase } public Pas(String sIme, String sRasa){ super(Pas); // poziv baznog konstruktora ime = sIme; // dato ime rasa = sRasa; // data rasa } private String ime; // ime psa

Search related