Cilj i ishod predmeta
Usvajanje znanja iz naprednih tehnika i veština u analizi, sintezi, dizajnu i implementaciji naprednih algoritama i struktura podataka koišćenjem različitih paradigmi programiranja. Student ume da osmisli i upotrebi složenije algoritme i strukture podataka. Student razume razliku između osnovnih paradigmi programiranja i ume da izabere i upotrebi odgovarajuću u rešavanju konkretnog složenijeg problema programiranja.
Teorijska nastava
Paradigme programiranja: imperativno – proceduralno i objektno-orijentisano, deklarativno – funkcionalno i logičko programiranje. Refleksija. Pregled programskih jezika za svaku paradigmu programiranja. Programski jezici koji podržavaju više paradigmi programiranja. Složene strukture podataka i algoritmi u imperativnom programiranju. Složene strukture podataka i algoritmi u deklarativnom programiranju. Matematički modeli izračunljivosti i veza sa paradigmama programiranja – Tjuringova mašina i Lambda račun. Modularizacija programskog koda.
Praktična nastava
Pregled elemenata funkcionalnog programiranja u nefunkcionalnim programskim jezicima. Refleksija u različitim programskim jezicima. Implementacija složenih struktura podataka korišćenjem objektno- orijentisane paradigme programiranja – balansirana binarna stabla, oktalna stabla, kvadratna stabla, heš tabele, heš stabla, trie. Implementacija složenih struktura podataka u funkcionalnom programiranju – različite vrsta stabala, strukture zasnovane na hešu, grafovi. Implementacija algoritama u imperativnom i funkcionalnom programiranju i njihovo poređenje. Moduli u različitim programskim jezicima.