Oblikovni obrasci u programiranju (OOUP)
neslužbene stranice predmeta

O predmetu

Predmet proučava programsko oblikovanje kao vještinu organiziranja interakcije komponenti s ciljem postizanja poželjnih svojstava programskog sustava. Obrazlaže se potreba za oblikovanjem programskih podsustava koji pored dobrih statičkih svojstava (korektnost, performansa, upotrebljivost) imaju i dobra dinamička svojstva (lako održavanje, otpornost na promjene).

Promatraju se simptomi koji ukazuju na neadekvatna dinamička svojstva programa, te uvode općenita načela oblikovanja kojima se uzroci simptoma mogu otkloniti. Detaljno se ponavljaju tehnike za ostvarivanje prilagodljivog koda: prikazivanje organizacije dijagramima, dinamički polimorfizam, predlošci, ugovorno oblikovanje. Proučava se izražavanje dinamičkog polimorfizma u C++-u, Javi i Pythonu, kao i odgovarajuća izvedba u C-u.

Uvodi se pojam oblikovnog obrasca kao isprobanog rješenja kojim se uvedena općenita načela mogu ostvariti u razredima čestih konkretnih problema. Detaljno se proučavaju važniji oblikovni obrasci kao konceptualna rješenja koja se mogu primijenjivati u svakodnevnoj praksi. Obrasci se prikazuju na način da se prvo uvede problem do kojeg možemo doći ako ne obraćamo pažnju na načela oblikovanja. Zatim se prezentira struktura rješenja te prikazuju sudionici i njihova suradnja. Na kraju se razmatraju efekti obrasca, diskutiraju implementacijski detalji, prikazuje izvorni kôd, navode primjeri upotrebe, te analiziraju međusobni odnosi sa srodnim obrascima.

Detalji izvedbe

Predmet se sastoji od dva sata predavanja tjedno, te laboratorijskih vježbi koje se kolokviraju jednom u svakom ciklusu. Pretpostavljena su osnovna znanja iz domene objektno orijentiranog programiranja stečena na uvodnim kolegijima.

Koncepte ćemo ilustrirati u različitim modernim programskim jezicima. Temeljne koncepte poput izvedbe dinamičkog polimorfizma i pozivanja funkcija u dinamičkim bibliotekama ćemo pokazati u C-u, materinjem jeziku računala. Detalje izvedbe dinamičkog polimorfizma dodatno ćemo ilustrirati u C++-u, gdje ćemo analizom generiranog strojnog koda proučavati prostornu i vremensku cijenu dinamičkih poziva. Mnoge oblikovne obrasce ćemo pokazati na primjerima popularnih biblioteka Jave i Pythona. Konačno, neke od naprednijih pristupa za izgradnju fleksibilnih programa ilustrirat ćemo u Pythonu, jednom od najavangardnijih jezika danas.

Ispit se sastoji od teorijskog (30%) i problemskog dijela (70%). Problemski dio obuhvaća razumijevanje dinamičkog polimorfizma, primjenu načela i obrazaca pri rješavanju konkretnih problema, te prepoznavanje obrazaca u nekomentiranom izvornom kôdu. Teorijski dio ispita obuhvaća važnije činjenice izložene na predavanjima.

Predavanja

Laboratorijske vježbe

Studentski seminari

Primjeri pismenih ispita

Korisne knjige

Načela i obrasci programskog oblikovanja

Razvojne metodologije

C, C++, generičko programiranje

Zanimljivi članci

Istraživanja o programskoj organizaciji i arhitekturi

Programsko oblikovanje, organiziranje interakcije komponenata

O C-u i C++-u

Općenito o programskom inženjerstvu

O patentima na programska rješenja

O programskom stilu

O komuniciranju na Internetu