Click here to load reader

OBJEKTNO ORIJENTISANO PROGRAMIRANJE

  • View
    22

  • Download
    7

Embed Size (px)

DESCRIPTION

OBJEKTNO ORIJENTISANO PROGRAMIRANJE

Text of OBJEKTNO ORIJENTISANO PROGRAMIRANJE

  • OBJEKTNO ORIJENTISANO

    PROGRAMIRANJE VEBE Staa Vujii Stankovi

  • ZADACI :

    Prilikom itanja slajdova OBAVEZNO uporedo itati zadatke sledeim redom:

    1. UniverzalniDaljinski

    2. Interfejs

    3. kloniranje

    2

  • INTERFEJSI

    Interfejs je kolekcija konstanti i/ili apstraktnih metoda i najee i sadri samo metode.

    Interfejs definie samo prototip metoda. U klasama koje implementiraju dati

    interfejs definie se telo metoda. Metode u interfejsu su uvek public i abstract,

    konstante uvek public, static i final i to se ne pie eksplicitno.

    Metode u interfejsu su po definiciji uvek instancne, tj. ne mogu biti statike.

    Interfejs se definie kao i klasa, jedino se umesto kljune rei class koristi kljuna re interface.

    3

  • INTERFEJSI

    Formalna korist interfejsa je da se definie eksterna forma skupa metoda koji imaju odreenu funkcionalnost.

    Svaki metod deklarisan unutar interfejsa mora da ima definiciju unutar klase koja implementira interfejs, ako elimo da kreiramo objekte te klase.

    Ukoliko se neki metod interfejsa ne definie u klasi koja ga implementira, klasa mora biti deklarisana kao apstraktna.

    Poto su metode u interfejsu po definiciji public, moramo koristiti kljunu re public kada ih definiemo u odgovarajuoj klasi (atribut pristupa ne sme biti manje restriktivan). 4

  • INTERFEJSI

    U Javi, klasa moe da nasledi samo jednu klasu, ali moe da implementira vie interfejsa.

    public class Klasa

    implements Klasa1, Klasa2, Klasa3 { } Moemo definisati interfejse bazirane jedne na

    drugima koristei kljunu re extends. public interface Konverzija extends KonverzioniFaktori { } 5

  • INTERFEJSI

    Za razliku od klasa koje mogu da naslede samo jednu klasu, interfejs moe da nasledi proizvoljan broj drugih interfejsa.

    public interface NoviInt extends Int1, Int2 { }

    // Interfejs NoviInt nasleuje sve metode i // konstante koje su lanice interfejsa Int1 i Int2 - // ovo je primer viestrukog nasleivanja.

    6

  • INTERFEJSI

    Napomena!

    Ako dva ili vie nad-interfejsa deklariu metod sa istim potpisom, metod mora da ima i isti povratni tip

    u svim interfejsima.

    U suprotnom, klasa koja implementira interfejse nee moi da implementira oba metoda, poto imaju isti potpis, jer svaki metod u klasi mora da ima jedinstveni potpis.

    7

  • INTERFEJSI I POLIMORFIZAM

    Nije mogue kreirati objekte tipa interfejsa, ali mogue je kreirati promenljivu tipa interfejsa.

    Npr.

    Konstante konst = null;

    // promenljiva tipa interfejsa Konstante

    8

  • INTERFEJSI I POLIMORFIZAM

    Ako ne moemo kreirati objekte tipa Konstante, kakva korist od toga?

    Koristimo tu promenljivu za smetanje reference na objekat proizvoljne klase

    koja implementira interfejs Konstante.

    To znai da ovu promenljivu moemo koristiti kako bismo polimorfno pozivali metode deklarisane u

    interfejsu Konstante.

    Videemo kako to izgleda na pogodnom primeru koji se odnosi na kunu audio/video opremu i daljinsko upravljanje. 9

  • POGODAN PRIMER INTERFEJSI I POLIMORFIZAM

    TV, hi-fi, VCR, DVD player i svaki od njih ima svoj daljinski upravlja.

    Svi daljinski upravljai verovatno imaju neki zajedniki podskup dugmadi power on/off, volume up, volume down, mute, itd.

    elimo univerzalni daljinski upravlja vrstu jedinstvene definicije daljinskog upravljaa koji e odgovarati svoj opremi.

    Univerzalni daljinski ima mnotvo slinosti sa interfejsom. Sam po sebi, univerzalni daljinski ne radi nita. On definie skup dugmadi za standardne operacije, ali operacija za svako dugme mora biti specifino programirana da odgovara svakoj vrsti ureaja kojim elimo da upravljamo. 10

  • PRIMER UNIVERZALNI DALJINSKI

    TV, VCR, DVD itd. moemo predstaviti klasama, a svaka od njih e koristiti isti interfejs daljinskog upravljanja tj. skup dugmadi ali svaka na drugaiji nain.

    RemoteControl.java

    public interface RemoteControl{...}

    U interfejsu ne postoji definicija nijednog metoda.

    Metodi deklarisani u interfejsu su uvek apstraktni po

    definiciji, a takodje su i public.

    Sada, proizvoljna klasa koja zahteva korienje funkcionalnosti obezbeene RemoteControl interfejsom samo ima da implementira RemoteControl interfejs i da

    ukljui definicije za svaki od metoda iz interfejsa. 11

  • PRIMER UNIVERZALNI DALJINSKI

    TV.java

    public class TV implements RemoteControl {...}

    Ova klasa implementira sve metode deklarisane u

    interfejsu RemoteControl, i svaki metod ispisuje

    poruku tako da znamo kada je pozvan.

    VCR.java

    Klasa VCR takoe implementira RemoteControl.

    Naravno, moemo nastaviti i definisati klase za druge vrste ureaja koje koriste daljinski, ali ove dve su dovoljne za demonstraciju principa.

    12

  • PRIMER UNIVERZALNI DALJINSKI

    TestRemoteControl.java

    public class TestRemoteControl{...}

    Ovo je klasa koja operie i TV i VCR objektima preko promenljive tipa RemoteControl.

    Promenljiva remote je tipa RemoteControl pa je

    moemo koristiti za smetanje reference na objekat proizvoljne klase koja implementira RemoteControl

    interfejs.

    Unutar for-petlje kreiramo na sluajan nain TV ili VCR objekat.

    Poto se tip objekta odreuje u vreme izvravanja i na sluajan nain, izlaz iz programa demonstrira polimorfizam u akciji kroz promenljivu tipa interfejsa.

    13

  • KORIENJE VIE INTERFEJSA

    RemoteControl objekat u prethodnom primeru moe se koristiti za poziv samo onih metoda koji su

    deklarisani u interfejsu.

    Ako klasa implementira neki drugi interfejs osim

    RemoteControl, onda bi za poziv metoda

    deklarisanih u tom interfejsu trebalo ili

    koristiti promenljivu tipa tog interfejsa za

    uvanje reference na objekat ili

    kastovati referencu na objekat u tip njegove

    stvarne klase. 14

  • KORIENJE VIE INTERFEJSA

    Neka je klasa definisana sa:

    public class MojaKlasa implements

    RemoteControl, AbsoluteControl{

    // Definicija klase koja ukljuuje metode iz oba interfejsa

    }

    15

  • KORIENJE VIE INTERFEJSA

    Poto klasa implementira RemoteControl i AbsoluteControl, moemo smestiti objekat tipa MojaKlasa u promenljivu bilo kog od tipova ova 2

    interfejsa, npr.

    AbsoluteControl ac = new MojaKlasa();

    Sada moemo koristiti promenljivu ac za pozivanje metoda deklarisanih u AbsoluteControl interfejsu.

    Meutim, ne moemo pozivati metode deklarisane u RemoteControl interfejsu koristei ac, ak i ako referenca na objekat koju uva ima ove metode.

    Jedna mogunost je kastovati referencu u njen originalni klasni tip:

    ((MojaKlasa)ac).powerOnOff(); 16

  • KORIENJE VIE INTERFEJSA

    Poto kastujemo referencu u tip MojaKlasa, moemo zvati proizvoljan metod definisan u toj klasi.

    Meutim, ovako ne moemo dobiti polimorfno ponaanje. Kompajler e odrediti koji metod se poziva u vreme kompajliranja.

    17

  • KORIENJE VIE INTERFEJSA

    Da bismo pozivali metode iz RemoteControl

    polimorfno, moraemo da imamo referencu sauvanu kao taj tip (RemoteControl). Znajui da je objekat tipa klase koja implementira RemoteControl interfejs,

    moemo od reference smetene u ac dobiti referencu tipa RemoteControl:

    if(ac instanceof RemoteControl)

    ((RemoteControl)ac).mute(); 18

  • KORIENJE VIE INTERFEJSA

    ak i ako interfejsi RemoteControl i AbsoluteControl nisu ni u kakvoj vezi, moemo kastovati referencu iz ac u tip RemoteControl.

    To je mogue jer je objekat referisan pomou ac zapravo tipa MojaKlasa,

    koji implementira oba interfejsa.

    19

  • UPOTREBA INTERFEJSA

    Dakle, interfejs koji deklarie metode, definie skup operacija, ime se postie da objekti razliitih klasa mogu da dele isti skup operacija.

    Ne moe se kreirati objekat interfejsnog tipa, ali se moe deklarisati promenljiva interfejsnog tipa koja moe da uva referencu na objekat svakog od tipova koji implementiraju taj

    interfejs. To znai da se promenljiva moe iskoristiti za polimorfan poziv metoda

    deklarisanih u interfejsu. 20

  • KOPIRANJE OBJEKATA

    (KLONIRANJE OBJEKATA)

    Protected metod clone() nasleen iz klase Object kreira novi objekat koji predstavlja kopiju postojeeg objekta.

    Da bi kloniranje bilo mogue, neophodno je da klasa nad ijim se objektom primenjuje metod clone() implementira interfejs Cloneable.

    public class Pas implements Cloneable { }

    Kada atributi originalnog objekta referiu na objekte klase, tada se samo kopiraju reference!

    21

  • KOPIRANJE OBJEKATA

    (KLONIRANJE OBJEKATA)

    Kada atributi tekueg objekta referiu na objekte klasa, objekti na koje oni referiu se NE DUPLIRAJU prilikom kreiranja klona samo se reference iskopiraju iz polja starog

    objekta u polja kloniranog objekta.

    To obino nije ono to elimo da se desi i novi i stari objekat onda mogu menjati taj

    deljeni objekat na koji se referie preko njihovih odgovarajuih atributa, bez registrovanja da se to deava.

    22

  • PRIMER - KLONIRANJE OBJEKATA

    Ako dodamo klasu Buva koja nasleuje klasu Zivotinja i definiemo je tako da implementira interfejs Cloneable, onda i bazna klasa Zivotinja mora da implementira ovaj interfejs.

    Metod clone() u klasi Buva kreira novi objekat ove klase, pri emu se vri kopiranje referenci ime i vrsta, tj. ne kreiraju se