Šta je novo?

Za Silvera ( design patterns)

Preeky

Čuven
Učlanjen(a)
14.09.2000
Poruke
401
Poena
645
Dosta dobro poznajem c++ i c# itd. , solidno objektno orijentisan dizajn i dosta puta cujem od kolega stranih programera
o design patternama , i njihovoj primeni u dizajniranju programa i konstruisanju objektnih resenja.
Ljudi koji ih dobro znaju kazu da zlata vrede u reshavanju problema i dizajnu koji omogucava dobar rijuzabiliti kasnije.
E sad posto ja nemam nikakvo iskutsvo u ovoj oblasti zanima me kakvo je tvoje iskustvo, saveti u vezi njih posto sad imam malo slobodnog vremena
pa me zanima da li da krenem da ih proucavam sada i dali ce mi koristiti
u daljem usavrshavanju?
Uopshte kakvu ulogu igraju danas u programiranju i recimo da li ih ti na poslu mozda koristish itd.
 
Hm, oblast je malo sira za nesto "na brzaka", ali hajde da pokusam da predstavim svoje gledanje na to.

Design patterns (ima i drugih naziva za istu stvar) su vrlo vazni u developmentu srednjih i vecih projekata, kada postoji vise ljudi koji na tom projektu rade.

Kod nas, na zalost, o takvim stvarima se mnogo ne razmislja, niti uci nesto na skolama i fakultetima - jer prave skole za IT i nemamo. Mozda mogu da te nauce da razmisljas sistemski, da se koristis nekim alatima i jezicima, ali se malo poklanja paznje timskom radu, pogotovo u domenima projektovanja i dokumentacije.

U principu, cim projekat odmakne malo dalje od "express knjigovodstvenih programa za 7 dana" i vodjenja video-kluba, potrebno je neko sistemsko planiranje, jer treba usaglasiti rad vise ljudi. Takodje, treba razraditi model do u detalje, da se proba da li sve stima i "na papiru", pre nego sto se krene na implementaciju, jer posle nema nazad i svako ispravljanje i prekrajanje kosta previse para i previse vremena.

Kod tog planiranja i projektovanja se razmatraju razlicite osobine projekta u njegovim razlicitim zivotnim dobima. Pazi, ne pricam ovde samo o prostijim OOD modeling alatima; ne, ide to i sire. Najveci deo logickog planiranja ide potpuno nezavisno od jezika - koriste se Use Cases analize, odredjuje data flow, cesto i tajming i najkrace rute, pa se tek onda prilazi OOD-u. Za neke jednostavne projekte, naravno, ne treba komplikovati sebi zivot, ali kada analiziras recimo rad jednog Warehouse preduzeca, koji vrsi i usluge spedicije po celom svetu, onda nema zezanja - ne mozes odmah prvi dan poceti sa "int main(int argc, char* argv[])" ili napraviti samo nekoliko skica kako bi to "otprilike" trebalo da izgleda. Elem, i nakon sto se odredi logicka struktura, hijerarhija i relacije delova projekta, implementacija se dodeljuje konkretnim ucesnicima projekta. I u toku rada, oni (ili nadlezni vodja tima) obelezava napredak - da li je nesto uopste zapoceto, koliko je odmaklo (procena u % najcesce), itd. - tako da se i u toku rada uvek ima aktuelni presek stanja glede vremenske provere; uvek se postave tzv mile-stone datumi, pa se proverava prolazno vreme. I na kraju, kada se sve i zavrsi, to ostaje kao dokumentacija za developere koji nastavljaju projekat da odrzavaju i/ili dalje razvijaju; neretno ljudi dolaze u firmu *nakon* sto je projekat uradjen, samo da bi ga odrzavali, nesto dodali i slicno.

Daklem, licno mislim da je to obavezna oblast za svakog programera koji hoce da odmakne od nivoa "ono sto sam naucio u skoli" i pomeri se od cistog fizikalisanja implementacije. OOD, dodatni alati, UML standardi, naglasak na "in team" mogu da te kotiraju mnogo, mnogo vise nego inace.
 
Da se ubacim, nece skoditi !

Pitanje je ipak bilo adresirano, ali da dodam i ja nesto !
Najpre, design patterns se uce na ETF-u iz predmeta Objektno orijentisani softver (doduse to je izborni predmet u 5. godini RTI smera, konkretna primena u domacem zadatku).
Meni se licno mnogo dopadaju, jer otvaraju oci i inspirisu na nove ideje, lake prepravke, mnogo vece mogucnosti !
Kod nas je objavljena knjiga o Design Pattern-ima, od tzv. Gang of Four (GoF se cesto oznacava), Gamma, Helm, Johnson, Vlissides, a izdao ju je CET pod naslovom, Gotova resenja, elementi objektno orijentisanog softvera.
Takodje, imaju neki od njih objasnjeni u knjizi D.Miliceva, Objektno orijentisano modelovanje na jeziku UML.
Java je bas orijentisana kroz design patterne(ima dosta primera), a pogotovu J2EE ( J2EE core Patterns, pa EJB patterns).
Pozdrav
 
ni mene nije niko nista pitao, ali..

Uz duzno postovanje SIlverglideru, odgovor je meni vise licio na objasnjenje zasto je uopste vazna pazljiva OOAD (obj. orijentisana analiza i dizajn) sa posebnim naglaskom na prednosti UML-a.
Sve receno potpuno stoji na mestu, ali nije bas direktan odgovor na pitanje.

Licno bih dizajn paterne u obj. dizajnu uporedio sa algoritmima u strukturnom programiranju. To su vec razradjeni, provereni sabloni za odredjene probleme. I itekako im ima mesta i u manjim projektima, i nije vezano toliko usko za dokumentaciju.

Prva prednost je u pocetku, kada se "crta" buduci program. Tu se uocavaju odredjeni zadaci i problemi za koje paterni vec nude gotova resenja.
Npr. 3D engine koji sada radim ce pored OpenGL-a morati da radi i sa D3D-om u buducnosti - i Bridge Pattern se sam namece.
Takodje se znaju i odnosi medju paternima, problemi, mane i sl.

Druga prednost je kada je nesto vec uradjeno, onda kad jedan programer kaze drugom (ili napise u sorsu) da je negde koriscen npr. Vizitor patern, onda drugi programer zna odmah sta se desava i mnogo je lakse gledati tudji sors i uopste razgovarati o razvoju. Veoma slicno kao kada neko kaze da je neka f-ja zapravo implementacija heap sorta ili interpolacije metodom najmanjih kvadrata i sl. To je kategorizacija grupe problema.

Licno mislim da paterne treba uciti paralelno sa obj. programiranjem, slicno kao sto se osnovni algoritmi uce sa sruktuiranim prog.

Literature ima iznenadjujuce malo, a stvar se daleko najbolje uci postepeno, i kroz rad.
Od literature preporucujem i besplatno elektronsko izdanje "Thinking in Patterns" od sjajnog Bruce Eckel-a. Online citanje na:

http://jamesthornton.com/eckel/TIPatterns/html/Index.html

Takodje se na http://jamesthornton.com/eckel/ mogu naci i ostale knjige iz "Thinking in.." serije (C++, C#, Java, Python), neke online, ostale za DL u HTML i Word formatu.

Topla preporuka.
 
Vrh Dno