Click here to load reader
View
22
Download
7
Embed Size (px)
DESCRIPTION
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