Neslužbene stranice predmeta Oblikovni obrasci u programiranju (OOUP)
O predmetu
Razmatra se programsko oblikovanje
kao vještina 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.
Iako se izloženi koncepti mogu primijeniti
u gotovo bilo kojem modernom programskom jeziku,
blagi naglasak predmeta je na jeziku C++.
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
-
Uvodno predavanje (tjedan 1)
pdf
-
Načela oblikovanja (tjedni 2-5)
pdf
-
Važniji oblikovni obrasci (tjedni 6-9)
pdf
-
Ostali oblikovni obrasci (tjedni 10-13)
pdf
Laboratorijske vježbe
-
Laboratorijska vježba 1 (dinamički polimorfizam, načela)
html
-
Laboratorijska vježba 2 (važniji obrasci)
html
-
Laboratorijska vježba 3 (ostali obrasci)
html
-
Često postavljana pitanja o C++-u
html
Korisne knjige
Načela i obrasci programskog oblikovanja
-
Design Patterns;
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides;
Addison-Wesley; 1995
-
Agile Software Development: Principles, Patterns, and Practices;
Robert C. Martin; Prentice Hall; 2002
-
Large-Scale C++ Software Design;
John Lakos; Addison-Wesley; 1996
-
Modern C++ Design: Generic Programming and Design Patterns Applied;
A. Alexandrescu; Addison-Wesley; 2001
-
Head First Design Patterns;
Elisabeth Freeman, Eric Freeman, Bert Bates, Kathy Sierra;
O'Reilly Media, Inc.; 2004
-
The Elements of Programming Style;
Brian W. Kernighan, P. J. Plauger;
Computing Mcgraw-Hill; 1978
Razvojne metodologije
-
The Mythical Man-Month; F. Brooks;
Addison Wesley; 1995
-
The Pragmatic Programmer;
A. Hunt, D. Thomas; Addison Wesley; 2000
-
Generative Programming: Methods, Tools, and Applications;
Krysztof Czarnecki, Ulrich Eisenecker;
Addison-Wesley Professional; 2000
-
Extreme Programming Adventures in C\#;
Ron Jeffries;
Microsoft Press; 2004
C++, generičko programiranje
-
[More] Effective {C++|STL}; S. Meyers;
Addison Wesley; 1996
-
C++ FAQs; Marshall P. Cline, Greg Lomow, Mike Girou;
Addison-Wesley Professional; 1998
-
Demistificirani C++;
Julijan Šribar i Boris Motik;
Element; 2006
-
Generic Programming and the STL:
Using and Extending the C++ Standard Template Library
Addison-Wesley Professional Computing Series;
Matthew H. Austern; 1998
-
C++ Templates: The Complete Guide;
by David Vandevoorde, Nicolai M. Josuttis
Addison-Wesley Professional; 2002
Zanimljivi članci
Istraživanja o programskoj organizaciji i arhitekturi
-
Brian Foote and Joseph Yoder, Big Ball of Mud, PLOP'97
(pdf)
-
Hayden Melton, Ewan Tempero:
An Empirical Study of Cycles among Classes in Java,
OOPSLA'06
(pdf)
-
Brian Foote:
Pattern labyrinth
(html)
-
Patterns at hillside.net
(html)
Programsko oblikovanje, organiziranje interakcije komponenata
-
R. Martin:
Principles and Patterns
(pdf)
-
Joel Spolsky:
Don't Let Architecture Astronauts Scare You
(html)
Općenito o programskom inženjerstvu
-
TIOBE Programming Community Index
(html)
-
Bug koji je uništio Arijanu
(1, 2)
-
Kako napisati dobar CV
(html)
-
Buba koja je u standarnoj biblioteci Jave
mirno proležala devet godina
(html)
-
B. Stroustrup o nastavnim programima u programskom inženjerstvu
(html)
-
Kako postati hacker, od Erica Raymonda
(html)
-
Hackers and painters, od Paula Grahama
(html)
-
Jack Reeves o oblikovanju programske podrške
(html)
-
P. Graham o pokretanju tvrtke
(html)
-
Standard jezika C, ISO/IEC 9899, draft 2007
(pdf)
O patentima na programska rješenja
-
P. Graham o patentima
(html)
-
Zašto patenti koče inovaciju
(html)
O programskom stilu
-
O programskom stilu (Wikipedia)
(html)
-
Googleov programski stil za C/C++
(html)
-
Vodič za pisanje programa koji se ne mogu održavati
(html)
O C++-u, sortirano prema lucidnosti
-
Biblioteka Boost
(html)
-
FAQ Bjarnea Stroustrupa
(html)
-
Najlakši način za naučiti C++ u 21 dan
(html)
-
FAQ Marshala Clinea
(html)
-
Scott Meyers i Andrei Alexandrescu:
"C++ and the Perils of Double-Checked Locking"
(pdf)
-
Curtis Krauskopf
"C++ Interview Questions"
(html)
O komuniciranju na Internetu
-
O stilistici e-mailiranja (Wikipedia)
(html)
-
RFC 1855, Nettiquette guidelines
(html)
-
P. Graham o izražavanju neslaganja
(html)