Ako ste zbunjeni sintagmom „objektno oblikovanje“ te ste pomislili da se radi o nekoj novoj formi apstraktne umjetnost – relax
. Nema tu nikakve „umjetnosti“ već se radi o hrvatskoj inačici svakom developeru dobro poznatog termina object design.
O objektnom dizajnu će se na ovom blogu još puno pričati, a za ovaj post je bitno da je to (i) naziv predmeta koji ću predavati u prvom semestru diplomskog (M.Sc.) dijela studija koji na FERu starta u mjesecu rujnu. Kako su mi se počeli javljati studenti s upitima „o čemu se tu radi“, a službena verzija opisa predmeta koja je nastala prije jedno tri godine kad se slagao curriculum za FER-2 studij (po Bolonji) je pomalo outdated (preciznije, u međuvremeno je značajno dorađena), mislim da nije zgorega malo detaljnije opisati teme koje će se obrađivati na predavanjima, kako će organizacijski sve to izgledati, a i što će se očekivati od studenata koji upišu predmet
.
Pa, za početak o organizaciji.
Predmet nosi za izborne predmete standardnih 5 ECTS bodova, ima opterećenje od 45 sati predavanja (ie. 3 sata predavanja tjedno) i „klasičnu bolonjsku“ organizaciju, što se najbolje vidi i po načinu, odnosno kompoziciji bodovanja za završnu ocjenu:
- blicevi 10 %
- domaće zadaće 15% bodova
- međuispit 20%
- završni ispit: 35%
- izrada seminarskog rada: 20%.
Ili, kako se to službeno po FERu kaže: „Kontinuirana provjera znanja“
. Naravno, to će i dalje nažalost/vjerojatno značiti pet šest (7-8!?) „kampanjskih sprinteva“ za studente, gdje će neki trajati dan-dva, a neki i cijeli tjedan, ali to valjda tako mora biti
.
A što će se na predmetu raditi/učiti ?
U jednu rečenicu – kako primjeniti/iskoristiti tehnike objektno (orijentiranog) dizajna s ciljem što efikasnijeg razvoja informacijskih sustava!
Naravno, ovakav opis je vrlo širok i potrebno ga je malo suziti i preciznije definirati jerbo na FERu već ima predmeta, čak bih rekao i podosta
, koji su posvećeni „tehnikama za efikasniji razvoj informacijskih sustava“.
A specifičnost ovog predmeta, odnosno ono po čemu ga planiram napraviti ponešto različitim od postojećih, je sadržana u samom nazivu – OBJEKTNO oblikovanje. Ukratko bi se moglo reći – objects to the core.
Jer, ako ćemo pričati o načinima za savladavanje sve veće složenosti modernih softverskih sustava, što je u stvari vječiti izazov software developmenta, iz mog, sad već 20-godišnjeg iskustva s programiranjem proizlazi jedan nedvosmisleni zaključak – objektno-orijentirana paradigma is your best friend!
Apstrakcija i enkapsulacija u borbi sa složenošću softvera predstavljaju najjače (a često i jedine!) vojnike, i iako su u računarskoj znanosti oba principa otkrivena/identificirana poprilično davno (Parnasov princip „Information hidinga“ još tamo iz 70-tih!), tek je objektno-orijentirana paradigma apstrakciju i enkapsulaciju postavila kao „kamen temeljac“ razvoja softverskih sustava!
„Ma sve je to lipo Zvone, ali čuj, danas ti SVI programiraju po OOPu!?“
Da, ali ipak ne
.
Jer, prepakiravanje proceduralnog programskog kôda u nekoliko klasa sa članskim varijablama i funkcijama NIJE OOP! Ili, da budem precizniji, takvim pristupom OOPu se neće dohvatiti puni potencijal koji objektno-orijentirani način razvoja softvera pruža!
Kako identificirati objekte (u stvari klase iz kojih se instanciraju), kako ih softverski modelirati i prilagodili „virtualnom svijetu“ objektnog modela, kako i na koji način ustanoviti kolaboraciju među tim objektim, kako ih uklopiti u arhitekturu cjelokupnog sustava … sve su to vrlo važna (da ne kažem krucijalna) pitanja koja daleko nadilaze „tehničke aspekte“ OOP-a (što je članska funkcija, što je članska varijabla, što je private/public, što je nasljeđivanje i slično …).
I to je područje objektnog dizajna kojim ćemo se baviti na ovom predmetu.
S obzirom da sâm objektni dizajn nije zatvorena (self-contained) tehnička disciplina, odnosno da egizstira primarno kao dio procesa razvoja softvera, na predavanjima će se određeno vrijeme posvetiti i stavljanju OO dizajna u kontekst tog procesa, s posebnim naglaskom na moderne tehnike agilnog razvoja softvera.
Početi ćemo s uvodnim predavanjem, s (radnim) nazivom „Software development is hard“, na kojem ćemo„urakljiti“ problem, odnosno identificirati faktore koji razvoj softvera čine teškim te raspraviti razloge koje OO paradigmu čine privlačnom.
Nakon toga ćemo u „pripremnom“ dijelu odraditi kratki (i ubrzani!) tehnički uvod u osnove OO programiranja, te vidjeti kako organizirati proces prikupljanja i analize zahtjeva (requirementsa) a da se taj proces prirodno uklopi u tehnike OO dizajna (use case is the keyword here!)
A po odrađivanju tog pripremnog dijela, ulećemo u bît predmeta – primjenu Domain-driven design tehnika za razvoj softvera. Da li je to tehnika, ili možda metodologija, ili „samo“ vještina je tema za detaljnu razradu, ali ono što je ključno je da je pri primjeni DDD-a fokus na što vjernijem preslikavanju domene problema (= ono što bi softver trebao riješiti) u objektni model koji će biti osnova za softversku realizaciju.
Ukoliko ćete primjetiti da tehnika „find the nouns“ za identificiranje objekata uz pripadno vjerno preslikavanje objekata (entiteta) iz realnog svijeta u svijet virtualnih objekata i nije baš pripametna
, ja ću se potpuno složiti s vama i reći da su stvari ipak značajno kompliciranije.
Kako definirati i u softveru realizirati model domene koji će što vjernije reprezentirati problem space (s primarnim ciljem olakšavanja komunikacije stakeholder – developer), a da taj model bude u skladu sa zahtjevima postavljenim na softver (odnosno da je u svojoj realizaciji primarno posvećen zadovoljavanju zahtjeva korisnika, a ne „vjernosti preslikavanja“ realni->virtualni svijet) je THE problem kojem ćemo se posvetiti na ovom predmetu.
Da ne bi sve bilo ovako apstraktno, kroz cijeli semestar ćemo u skladu s naučenim konceptima razvijati jedan case study (a sličnog formata će biti i seminarski rad koji će studenti trebati odraditi), a kao dodati bonus (iako to nije nikakav „bonus“ već conditio sine qua non –o čemu imam već DVA parcijalna posta
) ćemo se pozabaviti i tehnikama Test Driven Developmenta koje se prirodno slažu s DDD-om.
U tu priču će se lijepo uklopiti i Model-View-Controller (MVC) pattern koji je prirodni (čak i nužni!) suputnik i DDD-a i TDD-a, a reći ćemo ponešto i o Objektno-Relacijskom Mapiranju (triba negdje i spremit te podatke, jel’ tako
) – ukratko: forget ADO.NET, (N)Hibernate rulez
!
„Lipo, Zvone, lipo, a reci ti nama ima li kakvih preduvjeta za uspješno savladavanje svih tih tema?“ – sad će se sigurno kogod javiti.
Ima, jasno da ima – i osnovni preduvjet je određeno iskustvo programiranja! Ako niste do sada odradili projekt s bar par tisuća linija programskog kôda (u bilo kojem programskom jeziku) i ako niste „na svojoj koži“ osjetili ubode složenosti softvera, onda će ova priča biti uvelika apstraktna. Ako ćeš se penjati na Mount Everest, onda je logično bar malo vježbati na onoj penjačkoj stijeni, prije nego se uputiš u Nepal
.
Dakle, nije sve izgubljeno, ali ukoliko ste u takvoj situaciji, morate biti spremni na „dodatni angažman“
Pa vi vidite ima li tu za vas što zanimljivo, a naravno, svi komentari i pitanja su dobrodošli.
Filed under: FER | Tagged: FER, M.Sc. studij, Objektni dizajn, Objektno oblikovanje
“– ukratko: forget ADO.NET, (N)Hibernate rulez
!”
vezano na ovu izjavu, hoce li se neki programski jezik preferirati ili ce zadaci, ispiti, blitzevi biti koncepirani tako da je svejedno u kojem jeziku radili (naravno objektno orijentiranom – java, c#…)
Za sada je ta stvar još “u razmatranju”
. Ali nekako naginjem tome da omogućim izbor C++/C#/Java, pa ko što voli nek izvoli …
Ponosno mogu da se pohvalim da sam dosta stvari navedenih u postu učio na prvoj godini FER-a i to na tečaju osnove programskog jezika java!
Hehe, upravo tako. Ja sam isto imao tu sreću da sam već na prvoj godini silom prilika od Čupića naučio što je to objekt, test, design pattern, i čak osobno isprogramirao dosta programa u objektnoj paradigmi, u MVC obrascu, s junit testovima i konkretnim javadoc komentarima i slično…
Također sam o sličnome čuo i od Zvone. I ne, ne mislim na ASP. Doduše, ASP pokriva ove teme na neki kvazi spomenuli_smo_to_i_sad_kao_to_znate način, ali tko je htio mogao se malo pozabaviti tim pojmovima u “dodatnoj” OOP grupi.
Naravno, i za Čupića i za Zvonu i za Gledeca (i za ostale za koje ne znam a rade dodatno sa studentima) treba se dodatno angažirati, i pritom se ne dobiva ništa osim znanja, što očito nije u skladu sa završi_što_prije mentalitetom velikog broja naših kolega. Ali sad več prelazim u raspravu o drugom postu, i o vjećnim pitanjima samoukih i onih drugih…
Uglavnom, da napišem nešto konkretno osim ovih gluposti… Pratio sam malo i bivši fer1 oop predmet, i sad gledam ovaj prototip, i moram priznati da sam itekako zainteresiran. Štoviše, mislim da mi je upravo takav predmet potreban, i mislim da mi je dugo čekati diplomski. Ali hej, ajde, barem nešto.
No, u praksi se jako često pokaže da ono što u teoriji bude lijepo zamišljeno u praksi (pogotovo u početku) bude dosta lošije. Nadam se da će u ovom slučaju ipak biti kvalitetno. 
Jedan od elemenata kvalitetnog predmeta je i manji broj studenata. Čisto iz razloga što u praksi ispada da se onda profesor može bolje posvetiti pojedincu te su nekako i studenti zainteresiraniji. Nitko ne voli biti broj u sustavu, jedan od 835 pristupnika, statistika.
Falilo je ovakvih predmeta. Ljudi su zavrsavali FER bez da su se igdje dotaknuli OOPa kako treba. O Javi necu niti pricati. Ta se tehnologija na FERu toliko uporno ignorira da me to naprosto cudi…
@Klaric:
Ja recimo ne želim da me se forsira niti da radim u C# niti u Javi. Ako želim, učit ću te jezike sam. Ali ne vidim razloge zašto bih morao učiti C# umjesto Jave ili Javu umjesto Pythona. C/++ su osnove osnova i to shvaćam i podržavam. Ove ostale tehnologije/jezike? Pa ne želim niti da se preferira jedan niti da se uči 5 različitih jezika.
Dagi anonymouse, u necem moras naucit objektno kodirat. A ako zelis uciti kodirati objektno u C++ (to su kao osnove), ondak ti zelim svu srecu. Slazem se da se moze i u Pythonu to sve. Ali po meni to nije put kojim treba ici prilikom ucenja objektnog gledanja svemira jerbo Python ipak malo previse toga dopusta. A suho teoretiziranje o nasljedjivanju i polimorfizmu bez stvarnog dodira sa kodom je glupost i mirisi na old-school nacin predavanja koji se godinama njegovao na FERu, a proizvodio je inzenjere racunarstva koji nisu u zivotu napisali samostalno vise od 500 linija koda u komadu. Sto je sramota.