Objektno oblikovanje – što je sad pak to ?
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 | No Comments »