Oblikovni obrasci u programiranju

Opis predmeta

Proučavaju se opća načela te konkretne metode oblikovanja prilagodljivih i modularnih programskih podsustava. Uvodi se pojam oblikovnog obrasca kao isprobanog rješenja za razred čestih problema u pojedinim problemskim domenama. Razmatraju se klasifikacije obrazaca prema razini apstrakcije, svrsi i području primjene, zajedno s odgovarajućim predstavnicima. Pretpostavljena su osnovna znanja iz domene objektno orijentiranog programiranja stečena na uvodnim kolegijima.

Opće kompetencije

Studenti se upoznaju s primjenom temeljnih načela oblikovanja pri planskoj izgradnji kvalitetnih programskih podsustava. Stečena saznanja omogućuju kritičko vrednovanje različitih oblikovnih rješenja konkretnih problema vezanih uz programsku organizaciju. Predstavljeni oblikovni obrasci pružaju potpuniji pogled na česte organizacijske izazove, kao i pragmatičan uvid u prednosti novih mogućnosti modernih programskih jezika. Korištenjem stečenog znanja studenti će moći poboljšati organizaciju postojećih i novih programskih sustava, kao i pojasniti dokumentaciju korištenjem uvriježene terminologije.

Ishodi učenja

  1. prepoznati simptome neprikladne programske organizacije
  2. objasniti prednosti dinamičkog polimorfizma, predložaka i implicitnog tipiziranja.
  3. objasniti glavna načela programskog oblikovanja i prepoznati slučajeve njihovog kršenja
  4. procijeniti kvalitetu različitih programskih organizacija na temelju ključnih načela oblikovanja
  5. prepoznati različite oblikovne obrasce u nekomentiranom izvornom kôdu
  6. odabrati i primijeniti prikladne oblikovne obrasce pri razvoju programskog proizvoda
  7. usporediti prikladnost različitih oblikovnih obrazaca u kontekstu konkretnog oblikovnog problema
  8. primijeniti oblikovna načela za koncipiranje kvalitetnih programskih komponenti

Oblici nastave

Predavanja

Predmet predviđa dva sata predavanja tjedno.

Provjere znanja

Provjere znanja sastoje se od prvog međuispita (40%), završnog ispita (40%), i provjera na laboratorijskim vježbama (20%).

Auditorne vježbe

Predmet predviđa četiri auditorne vježbe.

Laboratorijske vježbe

Predmet predviđa četiri laboratorijske vježbe.

Konzultacije

Redovne konzultacije održavat će se nakon svakog predavanja. Izvanredni termini konzultacija trebaju se dogovoriti e-mailom.

Seminari

Studenti mogu prezentiranjem tehničkog seminara ostvariti dodatne bodove.

Način ocjenjivanja

Kontinuirana nastava Ispitni rok
Vrsta provjere Prag Udio u ocjeni Napomena / komentar Udio u ocjeni
Laboratorijske vježbe 0 % 20 % 40 % 0 %
Međuispit: Pismeni 0 % 40 % 0 %
Završni ispit: Pismeni 0 % 40 %
Ispit: Pismeni 50 % 80 %
Ispit: Usmeni 20 %

Tjedni plan nastave

  1. Uvodno predavanje: važnost programske organizacije, ciljevi programskog oblikovanja, pregled modela razvojnog procesa. Simptomi neprikladne organizacije.
  2. Primjer: gubitak integriteta uslijed promijenjenih zahtjeva i prilagodba organizacije novim uvjetima. Pregled dijagrama i programskih koncepata. Tehnike za ostvarivanje fleksibilnosti u programskim jezicima C, C++ i Python: dinamički i statički polimorfizam, implicitno tipiziranje.
  3. Načela logičkog oblikovanja: nadogradnja bez promjene, Liskovino načelo supstitucije.
  4. Načela logičkog oblikovanja: načelo inverzije ovisnosti, načelo jedinstvene odgovornosti, načelo izdvajanja sučelja.
  5. Načela fizičkog oblikovanja: poželjan oblik grafa ovisnosti komponenata, primjerena apstraktnost odnosno stabilnost paketa.
  6. Ilustracija pojma oblikovnog obrasca na primjeru obrasca Strategije. Obrazac promatrač.
  7. Obrazac Dekorator. Parametrizirana tvornica. Tvornice koje ne ovise o konkretnim razredima.
  8. Međuispit - provjera znanja.
  9. Obrazac Metoda tvornica. Obrazac Apstraktna tvornica. Obrazac Jedinstveni objekt.
  10. Obrazac Naredba. Obrazac Prilagodnik. Obrazac Okvirna metoda.
  11. Obrazac Iterator. Obrazac Kompozit. Obrazac Stanje.
  12. Obrazac Proxy. Obrazac Most. Obrazac Posjetitelj.
  13. Obrazac Prototip. Obrazac Model-pogled-upravljač.
  14. Problem solving exercises.
  15. Završni ispit

Studijski programi

Programsko inženjerstvo i informacijski sustavi -> Računarstvo (Modul)

Računalno inženjerstvo -> Računarstvo (Modul)

Računarska znanost -> Računarstvo (Modul)

Za upis predmeta treba položiti predmete

Literatura

Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides (1995.), Design Patterns, Addison-Wesley Professional
Robert C. Martin (2002.), Agile Software Development: Principles, Patterns, and Practices, Prentice Hall
John Lakos (1996.), Large-Scale C++ Software Design, Addison-Wesley Professional
Andrei Alexandrescu (2001.), Modern C++ Design: Generic Programming and Design Patterns Applied, Addison-Wesley Professional

Bodovi i izvedba

4 ECTS
R1 Engleski jezik
R1 E-učenje
30 Predavanja
0 Auditorne vježbe
15 Laboratorijske vježbe

Ocjenjivanje

89 izvrstan
76 vrlo dobar
63 dobar
50 dovoljan