Professional Documents
Culture Documents
UNIVERZITET U BEOGRADU
Seminarski rad
iz predmeta
Softverski paterni
Tema:
Primena softverskih paterna na primeru
salona automobila
Profesor:
Dr Sinia Vlaji
Asistenti:
Ilija Antovi
Duan Savi
Vojislav Stanojevi
Milo Mili
Student:
Filip Radulovi 9/05
Beograd, 2009.
FON, seminarski rad iz Softverskih paterna
Sadraj
Sadraj................................................................................................................................. 1
Uvod.................................................................................................................................... 2
AbstractFactory................................................................................................................... 3
Definicija: ....................................................................................................................... 3
Primer salona automobila: .............................................................................................. 4
Builder................................................................................................................................. 8
Definicija......................................................................................................................... 8
Analogija sa ivotnim situacijama: ................................................................................. 8
Primer salona automobila: .............................................................................................. 9
Proxy................................................................................................................................. 14
Definicija....................................................................................................................... 14
Analogija sa ivotnim situacijama: ............................................................................... 14
Primer salona automobila: ............................................................................................ 15
Adapter patern................................................................................................................... 16
Analogija sa ivotnim situacijama ................................................................................ 16
Primer salona automobila: ............................................................................................ 17
Proxy and Adapter ............................................................................................................ 18
Chain of responsibility...................................................................................................... 22
Definicija....................................................................................................................... 22
Analogija sa ivotnim situacijama ................................................................................ 22
Primer salona automobila ............................................................................................. 23
Memento ........................................................................................................................... 24
Definicija....................................................................................................................... 24
Analogija sa ivotnim situacijama ................................................................................ 24
Primer salona automobila: ............................................................................................ 25
Command.......................................................................................................................... 26
Definicija....................................................................................................................... 26
Analogija sa ivotnim situacijama ................................................................................ 26
Primer salona automobila ............................................................................................. 27
Chain of responsibility, Memento i Command................................................................. 28
Rezultat programa ............................................................................................................. 37
Literatura........................................................................................................................... 38
Uvod
Paterni su svuda oko nas, mogu se nai u prirodi, graevinama, ljubavnim
romanima, ali i u softveru. Kristofer Aleksandar kae: Svaki patern opisuje problem koji
se stalno ponavlja u naem okruenju i zatim opisuje sutinu reenja problema tako to se
to reenje moe upotrebiti milion puta, a da se dva puta ne ponovi na isti nain. Mada
se ovo odnosilo na peterne u arhitekturi, sigurno je da se moe primeniti i u objektno
orjentisanom projektovanju softvera kao i u projektovanju softvera uopte.
Najbolji nain da koristimo softverske paterne jeste da se to bolje upoznamo sa
njima, toliko dobro da ponemo da prepoznajemo mesta u naim aplikacijama gde
moemo da ih upotrebimo. Umesto da kopiramo kod , uz pomo paterna kopirajmo tua
iskustva jel neko je pre nas verovatno ve reio na problem.
U ovom radu e se na 7 razliitih paterna, iz razliitih kategorija, predstaviti
njihov veliki znaaj . Svaki od njih e biti detaljno predstavljen, a kroz primar salona
automobila i klijenta koji vri kupovinu pokazae se i konkretan kod, napisan u
programskom jeziku Java.
AbstractFactory
Lepa stvar koju nam apstrakcija prua jeste da se brinemo o celini, a da brigu o
detaljima ostavimo za kasnije. Abstract Factory nam upravo omoguava klase koje e se
pobrinuti o kreiranju delova eljenog objekta umesto nas.
Abstrakt Factory uzor treba koristiti kada se upravlja stvaranjem grupe
meusobno zavisnih objekata. Treba ga koristiti kada sistem ne sme da zavisi od toga
kako se njegovi objekti prave, sastavljaju i predstavljaju. Uz pomo ovog uzora sistem
uvek dobija prave objekte u odgovarajuem trenutku.
Definicija:
Obezbeuje interfejs (AbstractFactory) za kreiranje (CreateProductA(),
CreateProductB()) familije povezanih ili zavisnih objekata (AbstractProductA,
AbstractProductB) bez navoenja (specificiranja) njihovih konkretnih klaca
(ProductA1, ProductA2,ProductB1,ProductB2).
Sa slike se vidi da klijent ne zna, odnosno ne vodi brigu o tome koji proizvod je
iz koje od ovih fabrika, posto radi sa njihovim apstraktnim predstavama. Koristei ovaj
uzor, postaje mogue promeniti konkretnu klasu bez menjanja koda koji je koristi, ak i u
rantajmu. Meutim primena ovog uzora, kao i uzora poput njega, moe izazvati
nepotrebnu sloenost i dodatni rad u poetku pisanja koda.
package PrimerZaAbstractFactory;
/**
*
* @author Filip Radulovic 9/05
*/
ApstraktniAutomobil autoBilder;
String Kreiraj()
{
Gume gu=autoBilder.kreirajGume();
Boja bo=autoBilder.kreirajBoju();
BrojVrata brv=autoBilder.kreirajBrojVrata();
return "guma : "+gu.vratiGume()+" boja: "+bo.VratiBoju()+" broj vrata:
"+brv.VratiBrojVrata();
}
}
Builder
Definicija
Razdvaja izgradnju sloenog objekta od njegove reprezentacije da bi isti proces
pravljenja mogao da proizvede razliite reprezentacije.
Karakteristike Buildera
package primerzabuilderpatern;
/**
*
* @author Filip Radulovic 9/05
*/
public class KupacAutomobila //DIREKTOR
{
private ApstraktniAutomobil autoBilder;
opstina.setApstraktniAutomobil(BMW);
opstina.Konstruisi();
System.out.println(BMW.vratiPonudu());
opstina.setApstraktniAutomobil(audi);
opstina.Konstruisi();
System.out.println(audi.vratiPonudu());
}
}
Proxy
Jedan od razloga za kontrolisanje pristupa objektu jeste da se odloe puni trokovi
njegovog pravljenja i inicijalizovanja do trenutka kada zaista treba da ga upotrebimo.
Definicija
Obezbeuje posrednika za pristupanje drugom objektu kako bi se omoguio
kontrolisani pristup do njega.
Adapter patern
Ponekad postoji potreba da se postojea klasa upotrebi poto nam prua neke ili
sve mogunosti koje su nam potrebne, ali njen interfejs nije usklaen sa interfejsom koji
nam je potreban. Tada je prilika da se upotrebi Adapter patern koji konvertuje interfejs
postojee klase u drugi interfejs koji klijenti oekuju. Dakle, Adapter omoguava
saradnju klasa koje inae ne bi mogle da sarauju zbog nekompatibilnosti njihovih
interfejsa. Njegovom primenom moemo napraviti viestruko upotrebljivu klasu, koja je
u mogunosti da sarauje sa nepovezanim i nepredvienim klasama, tj. sa klasama koje
mogu da imaju nekompatibilne interfejse.
Kod adapter paterna imamo dakle postojeu klasu koja klijentu sa jedne strane
moe da poslui, jer poseduje odreene funkcionalnosti koje su mu potrebne, ali nije u
mogunosti da je iskoristi, poto ne zna kako da radi sa njom. Postojea klasa ima svoj
interfejs (Adaptee) koji ne moe da proita. Adapter nasleuje neitljiv interfejs
(Adaptee) i prilagoava ga itljivom interfejsu (Target), koji predstavlja novi interfejs sa
kojim klijent moe da ostvari interakciju, koji je specifian za domen koji on koristi.
Dobili smo pojaalo za gitaru (Clijent), od tetke iz Amerike, koje radi na 120V
(Target), a dobro je poznato da je napon kod nas (Adaptee) 220V. Ukoliko elimo da ga
upotrebimo i na svirkama koje se odrzavaju u Srbiji, sve sto treba da uradimo je da
(primenimo adapter patern) kupimo transformator (Adapter) koji ce nam konvertovati
200V u 120V, i uiniti nase pojaalo upotrebljivim.
}
}
BMWDrugiServis()
{
auto=new Auto();
}
public void BojaAutomobila()
{
auto.boja=new CrvenaBoja();
}
public void BrojVrataAutomobila()
{
auto.brojvrata = new PetoroVrata();
}
public void GumeAutomobila()
{
auto.gume= new LetnjaGuma();
}
}
public interface Boja
{
String VratiBoju();
}
Auto vratiAutomobil();
}
KatalogBMWAutomobila katalogBMWAutomobila;
Chain of responsibility
Definicija
Chain of responsibility treba upotrebiti kada vie objekata moe da obradi zahtev,
ali se unapred ne zna koji e ga obraditi. Zahtev se kree u hijerarhiji objekata sve dok
neki objekat ne uzme odgovornost da ga obradi. Na ovaj nain se uproava meusobno
povezivanje objekata jer oni imaju reference samo na svog sledbenika. Poto on nema
eksplicitnog primaoca, ne postoji garancija da e on biti obraen, moe se desiti da doe
do kraja lanca, a da ga niko ne obradi.
Klijent se interesuje za mesta gde i po kojoj ceni moze da obavi servis automobila
ukoliko kupi BMW. Posto je klijent iz Stare Pazove, poziva BMW servis koji se tamo
nalazi, i oni mu nabavljaju adrese svih ostalih BMW servisa na teritoriji Srbije.
Sekretarica uzima tefter i zove najblii BMW servis iz Beograda, sa kojim imaju najbolju
saradnju i trai od njih eljene podatke o njima i o ostalim servisima. Nadleni u servisu
iz Beograda ponavljaju ovaj postupak na isti nain.
Memento
Definicija
Bez naruavanja enkapsulacije, preuzima i ispoljava unutranje stanje objekta da
bi se objekat kasnije mogao vratiti u to stanje.
Ovaj patern treba koristiti kada elimo da sauvamo snimak stanja nekog objekta, da bi
se on kasnije mogao vratiti u to stanje. Informacije o stanju moraju biti negde sauvane i
za to je zaduen Memento. On uva stanje objekta i predstavlja neku vrstu podsetnika, a
jedini ko moe da ga proita jeste Originator koji je podsetnik ujedno i kreirao.
Na samom kraju ostaje jo samo da se izabere vrsta osiguranja. Sto se toga tice,
klijent je vrlo neodluan. On se u zavisnosti od karakteristika automobila premilja da li
da plati veliku sumu novca za osiguranje, za sta mu kau da je za nju predvidjeno kasko
osiguranje, ili malu za sta je predvidjeno AMS osiguranje. Posle dueg razmiljanja,
odluuje se da uzme Kasko, poto je u njemu predviena kompletna zatita. Nakon
potpisivanja ugovora, na momenat mu se uinilo da je preskupo, i klijent ipak odluuje da
uzme AMS zbog osetne razlike u ceni. Nakon potpisa ovog novog ugovora, klijent pod
pritiskom ostatka porodice, ipak poputa i pristaje da uzme Kasko osiguranje, nakon ega
dobija ugovor koji je potpisao pre toga. (Ovaj problem je resen pomou Memento uzora).
Klijent odlazi zadovoljan iz salona u svom novom BMW dipu, X5.
Command
Definicija
Nakon godinu dana uspene vonje, klijent odluuje da obavi servis. Klijent nema
vremena, niti eli sam da pronae BMW servis koji mu to moe odraditi. Odlazi u salon
automobila, poto mu u katalogu pie da ukoliko eli da obavi servis svog automobila
pod odreenim novanim olakicama, prvo mora da ode do salona u kome je kupio
automobil, tamo da plati servis i ostavi auto na par dana. U servisu postavlja pitanje
prodavcu o ceni servisa BMW automobila, a on poziva kancelariju BMW servisa koja se
nalazi u Beogradu i koja je zaduzena za sve BMW servise na teritoriji Srbije, i oni ga
obavestavaju da je cena 3000 eura. (Ovaj problem se resio primenom Command uzora).
Nakon par dana klijent dolazi po svoj auto, ne znajui u kom od servisa je on servisiran.
package MementoChainOfResponsibilityCommand;
/**
*
* @author Filip Radulovic 9/05
*/
}
}
BMW()
{ auto=new Auto(); }
public void BojaAutomobila() { auto.boja=new CrvenaBoja(); }
KarakteristikePonudeAutomobila(Ugovor automobil)
{
this.automobil=automobil;
}
public Kupac() { }
public Kupac(Katalog katalog)
{ this.katalog=katalog; }
String DajAdreseServisa()
{ return katalog.prikaziAdresuServisa(); }
String DajCenuServisa ()
{ return katalog.CenaServisa(); }
//Chain of responsiibility
BMWServisBeograd BG=new BMWServisBeograd(null, true);//Chain of
responsiibility
BMWServisNoviSad NS=new BMWServisNoviSad(BG, true);//Chain of
responsiibility
BMWServisStaraPazova SP=new BMWServisStaraPazova(NS, true);
BMW X5=new BMW();
X5.postaviServis(SP);
Filip.UzmiKatalog(X5);
System.out.println("Adrese "+Filip.DajAdreseServisa());
//Memento
//Prva Ponuda
KarakteristikePonudeAutomobila karakteristike=new
KarakteristikePonudeAutomobila(X5);
karakteristike.Upisi(Cena.velika);
ugovor =karakteristike.kreirajUgovor ();
System.out.println("Automobil
BMW\n"+X5.vratiAutomobil().PrikaziAuto());
//DrugaPonuda
X5=new BMW();
karakteristike=new KarakteristikePonudeAutomobila(X5);
karakteristike.Upisi(Cena.mala);
System.out.println("Automobil
BMW\n"+X5.vratiAutomobil().PrikaziAuto());
public Prodavac() {
bk=new BmwKancelarija();
katalog=new BMW(bk);
}
public Katalog VratiKatalog()
{
return katalog;
}
public Servis() {
}
String prikaziAdresuServisa()
{
String adrese="";
if(BMWServis==true)
{
adrese="\nAdresa:"+vratiAdresu()+" ";
}
if(servis!=null)
{
adrese=adrese+servis.prikaziAdresuServisa();
}
return adrese;
}
Katalog PredajUgovor ()
{ return automobil; }
}
Rezultat programa
Literatura