Objektno Programiranje, Projekat - Dizajn Paterni

Embed Size (px)

Citation preview

  • 7/26/2019 Objektno Programiranje, Projekat - Dizajn Paterni

    1/32

    DRAVNI UNIVERZITET U NOVOM PAZARU

    DEPARTMAN ZA TEHNIKE NAUKERAUNARSKA TEHNIKA

    PROJEKAT IZ PREDMETAOBJEKTNO PROGRAMIRANJE

    Student: Mentor:Adel Zeo!"#$ %&'%(()(& Pro*+dr Br,t"-l,! M"r"#

    No!" P,.,r$ /ul &%(0+

  • 7/26/2019 Objektno Programiranje, Projekat - Dizajn Paterni

    2/32

    Sadraj1. Uvod............................................................................................2

    2. Osnove o paternima....................................................................2

    2.1 Svrha paterna?.......................................................................22.2 ta je patern?.........................................................................2

    2.3 Prednosti korienja dizajn paterna........................................3

    2.4 Opti obik paterna.................................................................!

    3. "ok#menta$ija projekta...............................................................!

    4. %asi&ka$ija i ista........................................................................'

    4.1 Uzor$i kreiranja....................................................................... (

    4.2 Uzor$i str#kt#re......................................................................(

    4.3 Uzor$i ponaanja....................................................................)

    !. Probem.......................................................................................*

    '. Unikat..........................................................................................*

    +eenje probema , kod..............................................................11

    (. "ekorater..................................................................................13

    +eenje probema - dijaram.......................................................1(

    +ez#tat izvravanja prorama.....................................................1(

    +eenje probema , kod...............................................................1)

    ). Strateija...................................................................................22

    +eenje probema - dijaram/......................................................24

    +ez#tat izvravanja prorama.....................................................2!

    +eenje probema , kod..............................................................2!

    *. 0akj#ak...................................................................................31

  • 7/26/2019 Objektno Programiranje, Projekat - Dizajn Paterni

    3/32

    (+U!od

    Dizajniranje objektno-orijentisanog softvara je kompleksan i naporan proces, dok jedizajniranje reupotrebljivog objektno-orijentisanog softvera, to jo i vie. Potrebno jeprepoznati odgovarajue objekte, grupisati ih u klase sa odgovarajuom granularnou,

    definisati interfejse klasa kao i klasnu hijararhiju i uspostaviti osnovne relacije medjuklasama. Dizajn budueg softvera bi trebalo da bude specifian za sam problem kojim sebavi, ali i dovoljno uopten kako bi se uklopio u budue probleme i zahteve. !ivotnomciklusu softvera, koliko god je to mogue, !elimo da izbegnemo potrebu za redizajniranjemtemelja arhitekture sistema, pogotovo u fazama odr!avanja softvera. koliko to nijemogue, potrebno je da intervencije nad osnovom arhitekture, barem svedemo naminimum, iz razloga to su takve intervencije skupe i nezahvalne. skladu sa ovimpostulatima, jako je bitno da od samog poetka sistem postavimo tako da bude lakoproiriv. Pravilan i efikasan nain za postizanje ovog cilja nalazi se u korienju objektno-orjentisanih dizajn paterna, kako pojedinano tako i u sekvencama.

    &+ O-no!e o 1,tern"2,

    &+( S!r3, 1,tern,4

    Paterni odnosno uzori imaju cilj da nam pomognu u odr!avanju i nadogradnji softverskihsistema.

    &+& 5t, /e 1,tern4

    "eenje nekog problema, u nekom kontekstu, koje se mo!e ponovi iskoristiti za reavanjenekih novih problema.

    #z toga sledi da u definisanju paterna uestvuju tri elementa$

    Problem

    Reenje

    Kontekst

    Paterni, odnosno uzori projektovanja su "-u-t!, u projektovanju objektno orijentisanihsoftvera.

    %edno od osnovnih svojstava paterna jeste njegova mogunost da se mo!e primeniti ureavanju razliitih problema.

  • 7/26/2019 Objektno Programiranje, Projekat - Dizajn Paterni

    4/32

    &o su gotova reenja koja se primenjuju u projektovanju softvera. 'ni predstavljaju opisekomunikacija izme(u objekata,klasa, koji su prilago(eni da ree generalni problem uposebnom kontekstu. )ada se desi neki problem i na(e nejgovo reenje, potrebno jeulo!iti jo dodatnog napora i vremena i od specifinog reenja napraviti generikoreenje koje se mo!e primeniti na razliite probleme koji se deavaju u !ivotu. Paternipoma!u u imenovanju i opisu generikih reenja koja se mogu primeniti u razliitim

    problemskim situacijama. Pored toga, paterni identifikuju klase i pojavljivanja, njihoveuloge i saradnju i raspodelu odgovornosti.

    *ajbolji nain da koristimo softverske paterne jeste da se to bolje upoznamo sa njima, daponemo da prepoznajemo mesta u naim aplikacijama gde mo!emo da ih upotrebimo.mesto da se muimo ili kopiramo kod , uz pomo paterna mi kopiramo tu(a iskustva.

    +a uspeno razmatranje i reavanje bilo kakvog problema, neophodno je prvo razumetinjegovu sutinu, pa tek onda prei na projektovanje i implementaciju reenja.ko se !elifleksibilnost i mogunost dinamike izmene funkcionalnosti programa, paterni su idealni,ali oni pak poveavaju slo!enost sistema.

    vaki patern ima: ime, problem, reenje i posledice.

    Ime paterna se koristi da bi se u nekoliko rei opisao problem, njegova reenja i njegoveposledice.

    Problem opisuje situaciju u kojoj koristimo patern. 'pisuje se problem i njegov kontekst.

    Reenje opisuje elemente koji ine dizajn, njihove odnose, raspodelu odgovornosti kao ipravila saradnje. 'no ne opisuje odre(en konkretan projekat ili implementaciju, poto jepatern ablon koji se mo!e primeniti u mnogim razliitim situacijama. Dakle, patern daje

    apstraktan opis problema projektovanja kao i smernice kako se on reava optimure(enjem elemenata.

    Posledice su rezultati i ocene primene uzorka koje su bitne za procenu alternativa i zarazumevanje gubitaka i dobitaka od primene uzorka.

    &+6 Predno-t" or"7#en/, d".,/n 1,tern,

    #deja za pisanje ovog teksta potekla je iz !elje da se programerima predoe prednostikorienja dizajn paterna, kao i da se motiviu da ponu da ue i koristite dizajn paterne,ukoliko to ve ne ine. *aveemo neke od ovih prednosti korienja dizajn paterna$

    )valitetnije postavljanje temelja buduem sistemu i predvi(anje u kojim delovima e sesoftver kojeg programiramo najverovatnije menjati kroz svoji zivotni cikljus poev odpreuzivanja zahteva, projektovanja, kodiranja i testiranja pa sve do procesa odr!avanja/.

  • 7/26/2019 Objektno Programiranje, Projekat - Dizajn Paterni

    5/32

    )valitetnije postavljanje temelja buduem sistemu i predvi(anje u kojim delovima e sesoftver kojeg programiramo najverovatnije menjati kroz svoji zivotni cikljus poev odpreuzivanja zahteva, projektovanja, kodiranja i testiranja pa sve do procesaodr!avanja/. 'vo je mo!da i najbitnija prednost korienja dizajn paterna. koprogramiramo na dovoljno apstraktnom nivou, ne mo!e nam se desiti hardkodiranje u

    ugao iz koga je, pri pojavi novih zahteva za promenom platforme, operativnog sistema islino, skoro nemogue izai. 'vakvi problemi su relativno esta pojava pa se treba navreme zatititi, a zatititi se mo!e kroz inicijalno postavljanje arhitekture sistema, takoda kada nastanu, svaku od navedinih promena u zahtevima mo!emo implementirati uroku od nekoliko nedelja.

    +ajedniki vokabular sa ostalim kolegama iz brane koji doprinosi lakem razumevanju ikomunikaciji u timu. )ada se komunicira na nivou paterna, ne komunicira se samo opaternu i njegovom imenu, ve o sutini koju to ime implicitno podrazumeva i nizukarakteristika i ogranienja koji odre(eni dizajn patern donosi. 'vo, sa svoje strane

    znai i mogunost da se vie vremena provode bavei se problemom i arhitekturomsistema na viem nivou paterna, nego na ni!em nivou objekata i klasa. Paterni namomoguavaju da ka!emo vie kada ustvari govorimo manje. Poznavanje ovogspecifinog, zajednikog vokabulara doprinosi ubrzanju rada i efikasnosti lanova tima,kao i boljem i preciznijem izra!avanju i razumevanju me(u softver developerima.

    0ake uklapanje u timove koji ve uveliko rade na nekom projektu, jer e se takvesituacije veoma esto deavati u radnom veku svakog developera. Paterni pru!ajumogunost da se prepozna arhitektura u ve postojeem sistemu. #sto takoomoguavaju i refaktorisanje bad small-ovakod koji je loe napisan, a koji treba

    proiriti/.

    Pouzdanost reenja 1 jo jedna dobra strana primene dizajn paterna je i to to su vemnogo puta testirani od strane drugih developera i svakako donose neku vrstusigurnosti da je reenje optimalno za odre(en domen primene. *e treba gubiti vremenai ponovo reavati ve reene probleme. *aravno, postoje i loe strane korienja dizajnpaterna, a va!no je i izbegavati preterivanja u njihovom korienju. Preterivanje ukorienju paterna mo!e u odre(enim situacijama dovesti do nepotrebnihuslo!njavanja. Postoje situacije u kojima paterni ine vie tete nego to doprinose ureavanju problema. 'vo su takozvani antipaterni, reenja koja na prvi pogled deluju

    zadovoljavajue ali to nisu. ntipaterni su najee, pored paterna obra(eni u knjigamakoje se bave ovom tematikom. em toga, paterni esto rezultiraju vieslojnimaplikacijama koje pored dodatnih klasa i kompleksnosti uvode i dodatnu neefikasnost upogledu performansi.

    2

  • 7/26/2019 Objektno Programiranje, Projekat - Dizajn Paterni

    6/32

    &+8O17t" o9l" 1,tern,

    truktura koja omoguava da softverski s3stem bude odr!iv, i koja postoji kod 45 od 467'87ang 'f 8our/ paterna projektovanja, je kljuni mehanizam ili svojstvo paterna

    projektovanja i ona omoguava lako odr!avanje programa, njegovu nadogradnju iprilago(avanje korisnikim zahtevima.

    )lijent nije vezan za konkretni server, ve se uvodi apstraktni server. *eodr!ivastruktura se prevodi u odr!ivu. )lijent je vezan za apstraktni server, iz koga sunasle(ivanjem, odnosno implementacijom, izvedeni konkretni server. pstraktni servermo!e biti apstraktna klasaabstract class/ ili interfejsinterface/. )lijent se u vremekompajliranja vezuje za apstraktni server, a tek u vreme izvravanja zna koji konkretniserver e da realizuje njegov zahtev. pravo ovo kasno povezivanje late binding/ uvreme izvravanja programa, a ne u vreme kompajliranja, daje samom programu

    fleksibilnost, da jedan klijentski zahtev mo!e biti realizovan na razliite naine, prekorazliitih konkretnih server. Dodavanje novog konkretnog server ne zahteva promenuklijenta, to je jo jedna velika prednost ove strukture.

    6+ Dou2ent,"/, 1ro/et,

    Dokumentacija projektnog uzorka opisuje kontekst u kome se uzorak koristi,problematiku koje uzorak treba da rei i predlo!eno reenje. *e postoji jedan standardni

    format za dokumentovanje projektnih uzoraka. 9tavie, postoji dosta razliitih formatakoje su koristili razliiti autori uzoraka. #pak, prema :artinu 8auleru, neke forme zaopisivanje projektnih uzoraka su postale poznatije od drugih, a samim tim i postaleosnova za opisivanje novih projektnih uzoraka. %edan od ee korienih formatadokumentacije je onaj koji su koristili ;rih 7ama i ostali

  • 7/26/2019 Objektno Programiranje, Projekat - Dizajn Paterni

    7/32

    #me uzorka i klasifikacija$ %edinstveno opisno ime uzorka koje slu!i da se on identifikuje.

    *amera$ 'pis cilja koji stoji iza uzorka i razlozi za njegovo korienje. Poznat i kao$'stala imena uzorka.

    :otivacija$ 'pis problema i kontekst gde je uzorak primenljiv.

    Primenljivost$ ituacije u kojima je uzorak primenljiv? kontekst uzorka.

    truktura$ 7rafika predstava uzorka. ovu svrhu se mogu koristiti dijagrami klasa i@iliostali dijagrami.

    esnici$ pisak klasa i objekata korienih u uzorku i njihovih uloga u dizajnu.

    )olaboracija$ 'pis kako klase i objekti korieni u uzorku komuniciraju me(usobno.

    )onsekvence$ 'pis rezultata i posledica primene uzorka, kao i razumevanje cene idobiti primene uzorka.

    #mplementacija$ 'pis implementacije uzorka.

    Primeri koda$ #lustrativni primer kako se uzorak mo!e upotrebiti u izvornom kodu.

    Primeri upotreba$ Primeri upotreba uzorka iz stvarnog !ivota.

    Povezani ili slini uzorci$ 'stali uzorci koji su na neki nain u vezi sa ovim uzorkom.Diskusija izme(u ovog i ostalih slinih uzoraka.

    8+ Kl,-"*","/, " l"-t,

    Paterni su podeljeni u tri grupe$

    U.or" ., re"r,n/e o9/e,t, apstrahuju proces instancijalizacije, tj. kreiranja objekata.Daju veliku prilagodljivost u tome ta e biti kreirano, ko e to kreirati, kako i kada e bitikreirano. 'ni poma!u da se izgradi sistem nezavisno od toga kako su objekti kreirani,komponovani ili reprezentovani.

    Struturn" u.or" opisuju slo!ene strukture me(usobno povezanih klasa i objekata.

    A

  • 7/26/2019 Objektno Programiranje, Projekat - Dizajn Paterni

    8/32

    U.or" 1on,7,n/, opisuju nain na koji klase ili objekti sara(uju i raspore(ujuodgovornosti.

    )onkretno, u ovom primeru, bie prikazano 6 paterna, a to su$ ingleton, Decorator itrateg3.

    (+Kre,"on" &+ Struturn" 6+U.or" 1on,7,n/,

    A9-tr,t;,tor< dapter =3,"n O* Re-1on-"9"l"t

  • 7/26/2019 Objektno Programiranje, Projekat - Dizajn Paterni

    27/32

    class udiport $ public uto:odel

    N

    public$

    void model/

    N

    cout LL T:odel$ udi P'"&T LL endl?

    Q

    Q?

    @@ D'DC#

    class utoDodatak

    N

    public$

    virtual void dodatak/ 5?

    Q?

    class :atBoja $ public utoDodatak

    N

    public$

    void dodatak/

    N

    cout LL TDodatak$ :at bojaT LL endl?

    Q

    Q?

    class portski $ public utoDodatak

    N

    public$

    4A

  • 7/26/2019 Objektno Programiranje, Projekat - Dizajn Paterni

    28/32

    void dodatak/

    N

    cout LL TDodatak$ portskiT LL endl?

    Q

    Q?

    class 'zvucenje $ public utoDodatak

    N

    public$

    void dodatak/

    N

    cout LL TDodatak$ 'zvucenjeT LL endl?

    Q

    Q?

    @@ C;*;

    class utoCena

    N

    public$

    virtual void cena/ 5?

    Q?

    class Cenaudi:at $ public utoCena

    N

    public$

    void cena/

    N

    cout LL TCena$ FFA55T LL endl?

    Q

    Q?

    4E

  • 7/26/2019 Objektno Programiranje, Projekat - Dizajn Paterni

    29/32

    class Cenaudiport $ public utoCena

    N

    public$

    void cena/

    N

    cout LL TCena$ F>655T LL endl?

    Q

    Q?

    @@ &'

    class uto

    N

    public$

    uto:odel Oauto:odel?

    utoDodatak OautoDodatak?

    utoCena OautoCena?

    void :odel/

    N

    auto:odel-Mmodel/?

    Q

    void Dodatak/

    N

    autoDodatak-Mdodatak/?

    Q

    void Cena/

    N

    4G

  • 7/26/2019 Objektno Programiranje, Projekat - Dizajn Paterni

    30/32

    autoCena-Mcena/?

    Q

    virtual void displa3/ 5?

    Q?

    @@ D#:&

    class udi: $ public uto

    N

    public$

    udi:/

    N

    auto:odel ne udi:at/?

    autoDodatak ne :atBoja/?

    autoCena ne Cenaudi:at/?

    Q

    void displa3/

    N

    cout LL TZn----------D#----------T LL endl?

    Q

    Q?

    @@ D#P'"&

    class udi $ public uto

    N

    public$

    udi/

    4I

  • 7/26/2019 Objektno Programiranje, Projekat - Dizajn Paterni

    31/32

    N

    auto:odel ne udiport/?

    autoDodatak ne portski/?

    autoCena ne Cenaudiport/?

    Q

    void displa3/

    N

    cout LL TZn----------D#----------T LL endl?

    Q

    Q?

    int main/

    N

    uto Oa ne udi:/?

    a-Mdispla3/?

    a-M:odel/?

    a-MDodatak/?

    a-MCena/?

    cout LL TT LL endl?

    uto Ob ne udi/?

    b-Mdispla3/?

    b-M:odel/?

    b-MDodatak/?

    b-MCena/?

    return 5?

    65

  • 7/26/2019 Objektno Programiranje, Projekat - Dizajn Paterni

    32/32

    Q

    +Zakljuak

    *ajbolji nain da koristimo softverske paterne jeste da se to bolje upoznamo sa njima,da ponemo da prepoznajemo mesta u naim aplikacijama gde mo!emo da ihupotrebimo. mesto da se muimo ili kopiramo kod , uz pomo paterna mi kopiramotu(a iskustva.

    ovom seminarskom radu objanjeno je 6 softverska paterna na primeruautomobilske kompanije. usreli smo se sa raznim problemima, korisnikim zahtevima,koje smo uspeno reili primenom nekog paterna. Patern je upravo reenje tog nekogproblema, koje se mo!e ponovo iskoristiti. koliko se ponovo susretnemo sa nekim

    slinim problemom znaemo kako da ga reimo. ovom seminarskom radu je za svakipatern naveden problem, a zatim i konkretno reenje tog problema.

    Pokazali smo kako dodavanje funkcionalnosti u postojei programski kod mo!e da sekontrolie, i sprei nastanak totalnog haosa usled postojanja pageti koda. #deja je danapravimo takav softverski s3stem koji e se lako prilagoditi svakom novom korisnikomzahtevu.