Принципи програмирања

Циљ и исход предмета

Усвајање знања из напредних техника и вештина у анализи, синтези, дизајну и имплемнтацији напредних алгоритама и структура података коишћењем различитих парадигми програмирања. Студент уме да осмисли и употреби сложеније алгоритме и структуре података. Студент разуме разлику између основних парадигми програмирања и уме да изабере и употреби одговарајућу у решавању конкретног сложенијег проблема програмирања.

Теоријска настава

Парадигме програмирања: императивно - процедурално и објектно-оријентисано, декларативно - функционално и логичко програмирање. Рефлексија. Преглед програмских језика за сваку парадигму програмирања. Програмски језици који подржавају више парадигми програмирања. Сложене структуре података и алгоритми у императивном програмирању. Сложене структуре података и алгоритми у декларативном програмирању. Математички модели израчунљивости и веза са парадигмама програмирања - Тјурингова машина и Ламбда рачун. Модуларизација програмског кода.

Практична настава

Преглед елемената функционалног програмирања у нефункционалним програмским језицима. Рефлексија у различитим програмским језицима. Имплементација сложених структура података коришћењем објектно- оријентисане парадигме програмирања - балансирана бинарна стабла, октална стабла, квадратна стабла, хеш табеле, хеш стабла, трие. Имплементација сложених структура података у функционалном програмирању - различите врста стабала, структуре засноване на хешу, графови. Имплементација алгоритама у императивном и функционалном програмирању и њихово поређење. Модули у различитим програмским језицима.