Uvod u dizajn paterne

Za pravljenje ozbiljnog softvera, dobro poznavanje nekog programskog jezika i opštih principa programiranja je neophodno. Ali ne i dovoljno.

Aleksa Vidović
14/11/2016

Grupa od 4 programera napisala je 1990. godine knjigu pod nazivom — Design Patterns: Elements of Reusable Object-Oriented Software. Knjiga je postala kultna, a autori su postali poznati u zajednici kao “Gang of Four”.

Vodili su se jednostavnom filozofijom: ako se neki problem u dizajnu softvera često ponavlja, verovatno postoji optimalno, generalizovano rešenje koje bi svako mogao da prilagodi za svoj specifičan slučaj.

Ako bismo dobili zadatak da izgradimo kuću, ona bi verovatno imala temelj, 4 zida i krov. Iako se sve kuće međusobno razlikuju, izgrađene su prema sličnom šablonu.

Slično, ako bismo pokušali da napravimo android aplikaciju, ona bi verovatno imala Model, View-ove i Controller — to jest, zasnivala bi se na nekom ustaljenom šablonu pravljenja mobilnih aplikacija.

Šta su, dakle, dizajn paterni?

Dizajn patern je ponovo iskoristivo rešenje koje se može primeniti na problem koji se često ponavlja u razvoju softvera.

Dizajn paterni se kod nas nazivaju i “projektni uzorci”, a u praksi ćete čuti oba naziva.

Kako Adi Osmani kaže u svojoj knjizi “Learning JavaScript Design Patterns”, postoje tri glavna benefita korišćenja dizajn paterna:

  1. Oni su dokazana rešenja — koriste isproban pristup rešavanju čestih problema u razvoju softvera, baziran na iskustvu i radu developera koji su doprineli razvoju paterna
  2. Lako ih je ponovo iskoristiti — patern je uglavnom “out of the box” rešenje čestog problema, a činjenica da možemo da ih prilagodimo svojim potrebama čini ovaj koncept moćnim.
  3. Paterni su ekspresivni — za svaki od njih se uglavnom vezuje i određena struktura i specifičan rečnik, što čini saradnju i komunikaciju među developerima lakšom i efikasnijom.

Postoji još mnogo toga u vezi sa definisanjem projektnog uzorka, ali to nije preterano bitno za ovaj kratak uvod.

Ono što je mnogo bitnije da programeri početnici imaju u vidu jeste činjenica da su dizajn paterni obavezan preduslov za pisanje velikih softverskih projekata, a opet su često zapostavljeni na većini obrazovnih ustanova, pa mnogi moraju da ih nauče “na teži način”.

“Teži način” uglavnom uključuje izmišljanje tople vode, mnogo frustracije i nerviranja. Onda se ispostavi da je taj problem već rešen, i da većina iskusnih programera koristi idejno slično rešenje za njega. To rešenje je uglavnom neki dizajn patern.

code_monkey
Al’ to nema na Codecademy

Ne morate da ih znate napamet — naprotiv. Mnogi misle da će vas samo praćenje dobrih programerskih praksi (DRY, YAGNI, KISS, separation of concerns) navesti na projektne uzorke, tj. da će vaši programi sami po sebi početi da liče na ustaljena arhitekturalna rešenja.

Objektno orijentisano programiranje i dalje je industrijski standard, a dizajn paterni se najviše tiču upravo ove paradigme. To rezultira time da, ukoliko želite da radite na ozbiljnim projektima, morate dobro da poznajete paterne.

Gorepomenuti “rečnik” vezan za paterne takođe je važan — on doprinosi standardizaciji i efikasnosti komunikacije među developerima.

Zaista jeste bitno da kada kažemo, na primer, da je neka klasa “Singleton”, svi u timu znaju šta to znači. Ili, da prilikom pravljenja mobilne aplikacije svi znaju šta je MVC, kako bi bolje mogli da shvate svoj deo zadatka, ako im je, recimo, dodeljeno da razvijaju view-ove.

Takođe, postoje i takozvani arhitekturalni paterni, ali mnogi ne prave značajnu razliku između ove dve grupe. Arhitekturalnima se smatraju oni paterni koji se tiču višeg nivoa apstrakcije i vezani su za, očigledno, arhitekturu.

Vrste dizajn paterna

Već pomenuta knjiga grupe autora Gang of Four postala je referentni materijal u ovoj oblasti. Ona objašnjava 23 osnovna paterna, i svrstava ih u tri kategorije.

Kreacioni paterni

Ovi paterni bave se kreacijom objekata, na način prilagođen određenoj primeni. Posebno su važni u situacijama u kojima bi uobičajen pristup kreiranju objekata doveo do povećanja kompleksnosti projekta.

Neki od paterna koji spadaju u ovu grupu su: Constructor, Factory, Abstract, Prototype, Singleton and Builder.

Strukturalni paterni

Strukturalni paterni bave se kompozicijom i obično predstavljaju različite načine za definisanje odnosa među objektima. Oni obezbeđuju da kada je neophodna promena u jednom delu sistema, ostatak sistema ne mora da se menja. Takođe pomažu da svaki deo sistema radi ono čemu je najbolje prilagođen.

Neki od strukturalnih paterna su: Decorator, Facade, Flyweight, Adapter i Proxy.

Bihevioralni paterni

Ova grupa paterna tiče se poboljšanja komunikacije između različitih objekata u sistemu.

Poznati primeri su: Iterator, Mediator, Observer i Visitor.

Pored toga postoje i pomenuti arhitekturalni paterni. Već smo spomenuli čime se oni bave, a neki od poznatih primera su: Client-server, REST, Peer to peer i sl.

Šta je sledeće?

Ovaj tekst je samo uvod u serijal u kojem ćemo pokriti najvažnije teme iz ove oblasti. Biće reči o pojedinačnim paternima, antipaternima, praktičnim primenama u izgradnji aplikacija, a razmotrićemo i šta se u funkcionalnom programiranju dešava po ovom pitanju.

Pored toga, spomenuta knjiga “Design Patterns: Elements of Reusable Object-Oriented Software” je lektira koju bi svi programeri trebalo da pročitaju u toku svoje karijere.

Takođe pomenuta knjiga “Learning JavaScript Design Patterns” dostupna je besplatno online, i daje vrlo dobar uvod u temu, kroz primere iz JavaScript aplikacija.

Do sledećeg teksta, srećno kodiranje!

Aleksa Vidović

Objavio/la članak.

ponedeljak, 14. Novembar, 2016.

IT Industrija

🔥 Najčitanije

Goran

ponedeljak, 20. Novembar, 2017.

"design patterns" je samo fancy ime za ono sto se u drugim industrijama obicno zove dobrom praksom i zdravim razumom

Goran

ponedeljak, 20. Novembar, 2017.

Dobar uvodni tekst patterne.

Aleksa Vidović

ponedeljak, 9. Oktobar, 2017.

@Константин Hej, hvala za komentar i preporuku za knjigu. Spomenuo sam u tekstu da se kod nas koristi i izraz "projektni uzorci", i da se oba izraza koriste u svakodnevnom govoru. Kao što si rekao, u stručnoj literaturi je dominantan izraz "projektni uzorci". Što se tiče naslova i teksta, odlučio sam se za "dizajn paterne" jer mi se činilo da je taj izraz rasprostranjeniji van akademskih ustanova i stručne literature — moguće da grešim. Namera mi je bila da približim materiju onima kojima bi mogla biti korisna i zato sam se odlučio za popularniji izraz. Hvala još jednom za komentar i povratne informacije!

Константин Ђорђевић

subota, 7. Oktobar, 2017.

Ја бих од корисне литературе додао: https://www.amazon.com/Design-Patterns-Explained-Perspective-Oriented/dp/0321247140. Књига није свеобухватна (не покрива све GoF обрасце, мада поред њих има и неке савременије примере), али одлично објашњава мотивацију иза пројектних образаца и даје читаоцу интуицију када сваки од њих треба применити. Поред тога, сваки приказује на систематичан начин, као што је урађено у GoF-у или на сајту који је @Stefan навео изнад. Кад смо код мотивације: у уводно поређење са архитектуром би се баш лепо уклопио помен Кристофера Алегзандера и његових књига о обрасцима у архитектури, одакле су GoF и добили идеју да напишу своју књигу.

Константин Ђорђевић

subota, 7. Oktobar, 2017.

̶d̶i̶z̶a̶j̶n̶ ̶p̶a̶t̶e̶r̶n̶i̶ пројектни обрасци (овако се зову у српском преводу GoF-а) или пројектни узорци. ̶b̶i̶h̶e̶v̶i̶o̶r̶a̶l̶n̶i̶ ̶p̶a̶t̶e̶r̶n̶i̶ обрасци/узорци понашања; исто важи за обрасце/узорке стварања и структуре. Ово су све термини присутни у домаћој литератури. Речи које су овде дате као замене се не користе ван жаргона. Чланак одаје утисак да се онај ко је писао није ни потрудио.

Stefan

petak, 6. Oktobar, 2017.

@Sinisa Da budemo politicki koretkni https://sourcemaking.com/design_patterns

Aleksa Vidović

četvrtak, 17. Novembar, 2016.

@Sinisa Ta pozajmljenica se dugo koristi u našem jeziku, pogotovo u nauci. Ali u pravu si, svaki dan je nova borba sa anglicizmima :)

Sinisa

četvrtak, 17. Novembar, 2016.

@Aleksa "Bihevioralni paterni", zar nije postojao bolji izraz? Po mom misljenju, ili treba koristiti nasu rec, ili ne prevoditi uopste. @Jovan Mislim da nije ok stavljati piratizovane stvari, svaki autor je ulozio ogroman trud, a verujem da petkom u gradu potrosis vise nego sto knjiga u PDF formatu zaista kosta

Jovan

ponedeljak, 14. Novembar, 2016.

Mislim da od ove knjige ne postoji bolja sto se tice Design Pattern-a. Slikoviti uvodi, lagani primeri itd. Link ka njoj https://www.u-cursos.cl/usuario/777719ab2ddbbdb16d99df29431d3036/mi_blog/r/head_first_design_patterns.pdf