Funkcionalno programiranje

Course categoryRačunarske nauke
Циљ и исход предмета

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

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

Функционални програмски језици. Разлика између функционалног и императивног програмирања. Основе ламбда рачуна: апстракција, ламбда функција, ламбда апликација, слободне и везане променљиве. Редукције у ламбда рачуну. Нормална форма. Израчунавање вредности ламбда израза и валидни ламбда изрази. аритметика целих бројева, логички и условни изрази у ламбда рачуну. Рекурзија у ламбда рачуну и ипсилон комбинатор. Апликативни и нормални поредак израчунавања ламбда израза. Лења евалуација. Бесконачне структуре. Ламбда изрази у програмским језицима. Решавање проблема на "функционалан" начин. Функтори, апликативни функтори и моноиди. Монаде. Парсер комбинатори.

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

Структуре података и синтакса изабраног функционалног програмског језика. Функције вишег реда и каријеве функције. Решавање задатака у изабраном функционалном програмском језику. Преглед уграђених функција и оператора у изабраном функционалном програмском језику. Задаци са функторима, апликативним функторима, моноидима и монадама. Коришћење библиотеке парсер комбинатора на илустративним примерима парсирања текста.

Objektno-orijentisano programiranje

Course categoryRačunarske nauke
Циљ и исход предмета

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

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

Процедурално наспрам објектно-оријентисаног програмирања. Појам класе и објекта, атрибута и операција. Уграђене класе у програмском језику Java. Основни елементи UML дијаграма класа - класе и везе асоцијације. Појам конструктора. Пакети. Видљивост атрибута, операција и класа. Јавабин и енкапсулација. Статик елементи. Листе и низови у Javi. Везе између класа. Синглтон дизајн патерн. Наслеђивање класа и полиморфизам. Надјачавање метода и класа Object. Кључна реч финал. Апстрактне класе и интерфејси. Апстрактне класе и интерфејси на UML дијаграму класа. Представљање везе наслеђивања и имплементације интерфејса на дијаграму класа. Преглед познатих дизајн патерна који користе апстракцију и наслеђивање. Приказ једноставнијих дизајн патерна на UML дијаграму класа. Сложеније колекције објеката. Угњеждене класе. Изузеци - хватање, обрада и испаљивање изузетка. Преглед библиотеке за развој графичког корисничког интерфејса коришћењем принципа објектно-оријентисаног програмирања - преглед компоненти, везивање модела података за компоненту, обрада догађаја, дизајн патерни за апликације са графичким корисничким интерфејсом.

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

Коришћење основних програмских конструкција у програмском језику Java на практичним примерима - гранање, петље, основни и сложени типови података. Рад са стринговима. Илустративни примери и задаци за илустрацију свих основних концепата објектно-оријентисаног програмирања-класе, објекти, атрибути и операције, конструктори, видљивост, статик елементи. Илустративни примери за приказ апстракције, писање апстрактних класа и интерфејса и њихово наслеђивање односно имплементација. Имплементација модела датог UML дијаграмом класа, укључујући имплементацију класа, интерфејса, веза између класа. Пакет за рад са колекцијама, сортирање колекција. Рад са изузецима. Имплементација компоненти графичког корисничког интерфејса. Имплементација обраде догађаја на корисничком интерфејсу. Рад са фајловима - читање и упис у фајл. Имплементација комплетне апликације са графичким корисничким интерфејсом коришћењем MVC (Model View Controller) дизајн патерна.

Kreatori kursa: Milan Tomić

Дискретне структуре

Course categoryRačunarske nauke

Циљ предмета:

Стицање основних знања из дискретне математике.

Исход предмета:

Студент је оспособљен да у даљем образовању решава проблеме базиране на стеченом знању из дискретне математике.

Садржај предмета:

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

Исказни рачун – (прост и сложен) исказ, истинитосна вредност, логички везници и њихов приоритет, таблице истинитости, логички еквивалентни искази. Аргументи и докази – ваљан аргумент, испитивање ваљаности аргумента уз помоћ таблица истинитости, доказ ваљаности аргумента свођењем на контрадикцију, доказивање ваљаности аргумента употребом правила извођења. Примери доказа. Комплетност у исказној логици и Карноове мапе. Скупови – скуповне операције, партитивни скуп, Декартов производ скупова, Венови дијаграми. Релације – домен и опсег релације, инверзна релација, композиција релација, особине релације на скупу, репрезентација релације, релација поретка и релација еквиваленције. Функције – инјективна, сурјективна и бијективна функција, композиција функција. Математичка индукција. Дељивост – најмањи заједнички садржалац и највећи заједнички делилац. Еуклидов алгоритам. Диофантске једначине са две непознате. Прости бројеви – теорема о јединствености факторизације на просте бројеве. Релација конгруенције. Конгруенцијске једначине. Системи конгруенцијских једначина и Кинеска теорема о остацима. Рекурзија – рекурзивне функције и хомогене и нехомогене линеарне рекурентне релације (једначине). Комбинаторика – основни принципи пребројавања (правило збира и правило производа), принцип укључења – искључења, принцип голубарника, пермутације, комбинације, уопштене пермутације и комбинације, пермутације и комбинације са понављањем

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

Решавање репрезентативних задатака на табли, из области са којима су студенти упознати на теоријској настави.

Литература:

Андерсон Џ. А., Дискретна математика са комбинаториком, Рачунарски факултет и ЦЕТ, Београд, 2005.

Profesor: Mladen Zekić

Комбинаторика и теорија графова

Course categoryRačunarske nauke

Циљ предмета:

Упознавање студената са теоријским и практичним аспектима комбинаторне теорије графова.

Исход предмета:

По завршетку курса студент поседује знања из комбинаторне теорије графова и упознат је са неким њеним применама.

Садржај предмета:

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

Графови и подграфови. Матрице инциденције и матрице суседства. Графовске инваријанте. Путеви и циклуси – детаљнији приступ. Цикломатички број графа. Чворна и гранска повезаност графа. Стабла и њихове примене. Хамилтонови и Ојлерови циклуси и њихове примене. Бојење графова – детаљнији приступ. Планарни графови и графови полиедара. Теорема Куратовски-Понтрјагина. Бојење планарних графова. Спаривања у графовима и примене. Независни скупови, покривачи и клике графа. Унутрашња и спољашња стабилност графа. Примена у линеарној алгебри. Степени квадратних матрица и Марковљеви ланци. Графови протока сигнала.

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

Решавање репрезентативних задатака на табли, из области са којима су студенти упознати на теоријској настави.

Литература

  1. Цветковић Д., Теорија графова и њене примене, Научна књига, Београд, 1986.
  2. Цветковић Д., Комбинаторика – класична и модерна, Научна књига, Београд, 1990.
  3. Вељан Д., Комбинаторика с теоријом графова, Школска књига Загреб, 1989.
  4. Петровић В., Теорија графова, Универзитет у Новом Саду, Природно-математички факултет, Нови Сад, 1998.

Kreatori kursa: Irena Jovanović

Računarska grafika

Course categoryRačunarske nauke
Kurs je namenjen studentima III godine Računarskog fakulteta u Beogradu.
Na kraju kursa svaki student će razumeti:
  • Osnovnu strukturu grafičkog sistema
  • 2D grafika: algoritmi za renderovanje i klipovanje osnovnih grafičkih primitiva (duž, krug, poligon)
  • 3D grafika: Modelovanje i renderovanje prostornih situacija (polygonal mesh, CSG, ray casting, ray tracing)

Kreatori kursa: Dragan Mašulović

Engleski 1

Course categoryRačunarske nauke
Kreatori kursa: Bojana Cuk

Duboko učenje

Course categoryRačunarske nauke
Kreatori kursa: Nemanja Ilic

Softverske komponente

Course categoryRačunarske nauke
Теоријска настава

Циљеви и предности развоја софтвера заснованог на компонентама. Појам софтверске компоненте. Основне карактеристике софтверске компоненте. Појам физичке и логичке модуларности. Пракса одвајања спецификације од имплементације софтверске компоненте. Поштовање SOLID принципа и примена дизајн патерна у развоју заснованом на компонентама. Документовање софтверске компоненте. Појам билд алата и управљање повезаним компонентама. Преглед савремених билд алата за програмске језике Јава и Пајтон. Стандарди за развој модуларних система за Јава платформу - OSGi i Jigsaw. Софтверске лиценце и верзије. Сервисно оријентисана софтверска архитектура и веб сервиси. Технологије и стандарди за имплементацију веб сервиса - SOAP i REST. Појам микросервиса и поређење са другим архитектурама. Интеграција микросервиса и коминикација између микросервиса. Микросервиси и кориснички интерфејс, микросервиси и базе података. Кораци у провођењу монолитне у микросервисну архитектуру.

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

Приказ илустративног примера софтверске компоненте која користи друге компоненте и њено проширење додатним функционалностима. Илустрација особине рејузабилности компоненте. Рад са системима за управљање верзијама. Коришћење билд алата за Јаву - Apache Ant, Apache Maven и Gradle. Креативна вежба креирања компоненте са одвојеном спецификацијом. HTTP протокол и REST архитектура. Имплементација микросервисне апликације коришћењем Spring Boot технологије. Рад са базама података у микросервисној архитектури укључујући релацине и нерелационе базе. Коришћење Hiberante ORM алата за перзистенцију података у релациону базу. Комуникација између микросервиса и коришћење система за размену порука.

Prepoznavanje govora

Course categoryRačunarske nauke

Teorijska nastava

Modelovanje govora. Obrada akustičkog signala. Odabiranje, A/D konverzija i uokviravanje. Filtriranje i upotreba prozorske funkcije. Furijeova transformacija i spektar snage ulaznog signala. Promena frekventne ose i filtriranje po mel skali. Prelaz u logaritamski domen. Inverzna kosinusna transformacija, kepstralni koeficijenti i njihovi vremenski parametri. Vektori svojstava akustičkog signala. Markovljevi modeli. Skriveni Markovljevi modeli (HMM). Mešavine Gausovih raspodela. Akustički modeli. Fonetsko modelovanje. Robusnost u odnosu na okolinu (buka, šum, eho). Polukontinualni HMM, vezivanje stanja i klasterovanje. Treniranje HMM-a. Baum-Welch i Forward-Backward algoritmi. Normalizacija govora. Jezički modeli. N-gram usrednjavanje. Osnovna pretraživanja. Vremenski sinhrono Viterbi Beam pretraživanje. Stack i A* pretraživanje. Rad sa velikim rečnikom. Pretraživanje po stablu sa jezičkim modelima. Pretraživanje na osnovu gramatike. N-multipass pretraživačke strategije. Upotreba neuralnih mreža i dubokih neuralnih mreža. Hibridni sistemi dubokih neuralnih mreža i HMM.

Praktična nastava

Analiza spektrograma pomoću softvera za rad sa zvučnim signalom. Implemetacija softvera koji može da snima govor. Algoritmi kompresije zvučnog signala. Obrada dobijenog signala, odsecanje, filtriranje i sl. Implementacija i primena (brze) Furijeove transformacije. Implementacija sistema za prepoznavanje govora koji jeste / nije vezan za govornika i formiranje testova za pokazivanje korektnosti rada sistema. Implementacija i testiranje HMM sistema, kao i pretraživačkih algoritama. Rad sa dubokim neuralnim mrežama i njihovo kombinovanje sa klasičnim sistemima za prepoznavanje govora.

Kreatori kursa: Stevan Milinković

Sistemi u realnom vremenu (Računarske nauke)

Course categoryRačunarske nauke

Teorijska nastava

Koncept vremena. Postizanje predvidivosti. Vremenska ograničenja. Ograničenje prethođenja. Ograničenja resursa. Problem raspoređivanja. Raspoređivanje aperiodičnih taskova. Džeksonov algoritam. Hornov algoritam. Raspoređivanje bez istiskivanja. Bratlijev algoritam. Spring algoritam. Raspoređivanje sa ograničenjem prethođenja. Raspoređivanje periodičnih taskova. Ciklično raspoređivanje. Raspoređivanje monotonim tempom (RM). Earliest Deadline First (EDF). Deadline Monotonic. EDF sa ograničenim rokovima. Serveri sa fiksnim prioritetom. Pozadinsko raspoređivanje. Server sa propitivanjem. Server sa odlaganjem. Razmena prioriteta. Sporadični server. Slack Stealing. Serveri sa dinamičkim prioritetom. Server sa razmenom dinamičkih prioriteta. Dinamički sporadični server. Server sa totalnim opsegom. Earliest Deadline Late server. Poboljšani server sa razmenom prioriteta. Server sa konstantnim opsegom. Protokoli za pristup resursima. Inverzija prioriteta. Protokol bez istiskivanja. Highest Locker Priority protokol. Protokol sa nasleđivanjem prioriteta. Protokol sa gornjom granicom prioriteta. Politika stek resursa. Raspoređivanje sa ograničenim istiskivanjem. Prag istiskivanja. Odloženo istiskivanje. Rastavljanje taskova. Izbor tačaka istiskivanja. Upravljanje preopterećenjem. Rukovanje aperiodičnim preopterećenjem. Prekoračenja. Permanentna preopterećenja.

 

Praktična nastava

Rad sa FreeRTOS operativnim sistemom u simuliranom okruženju i na mikrokontroleru. Poznavanje elemenata FreeRTOS operativnog sistema kao što su poslovi, redovi, brave, semafori i sl. Tipični problemi konkurentnosti kod sistema u realnom vremenu. Primena i modifikacija FreeRTOS raspoređivača. Implementacija podrške za aperiodične i periodične poslove. Implementacija podrške za ograničenja prethođenja. Zapis i analiza dobijenog rasporeda sistemskog raspoređivača u simuliranom i stvarnom okruženju. Implementacija poslova sa ograničenim resursima i njihovo raspoređivanje.

Kreatori kursa: Stevan Milinković

Upravljanje Informacijama 2023/24

Course categoryRačunarske nauke

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

Основни концепти науке о подацима, Data Science. Историјски преглед развоја метода за складиштење, управљање подацима и извештавање. Моделирање података, њихове семантике, знања и информација: скуп, бинарна релација (key-value, хешинг и индекс), н-арна релација (табела), стабло (XML) и граф. Апстракције и свођење н-арне релације на бинарну, сортирање бинарне релације, индекси, пролази кроз стабло и претраживање графова. Codd-ов релациoни модел. Релациона алгебра као апарат за генерисање извештаја, SQL. Пројектoвање информационог система. Анализа захтева. Логичко пројектовање структуре  и  динамике информационог система, SSA.  Објектно-оријентисани  приступ моделовању информационих система - UML. Aнализа  захтева у објектном приступу. Случајеви  коришћења.  Опис динамике информационог система. Дијаграми  секвенци. Концептуални модел система. Патерне у моделовању ИС. Имплементација у реалном окружењу. Пројектовање релационе базе података на основу објектног UML модела. Објектно релациони брокери, Hibernate. Системи за управљање базама података, Oracle, MSSQL, PostgreSQL. Пресликавање података објектног модела у key-value базе података, Redis. Објектне базе података, MongoDB.

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

Анализа  система  и  захтева  корисника на конкретном примеру. Пример пројектовања база података: Нормализација релација. Анализа и пројектовање ИС. Функционална декомпозиција, SSA. Речник  података.  PMOV.  IDEF1X,  IE. Примери пројектовања  објектим приступом коришћењем UML нотације.  Случајеви  коришћења.  Узори  у  фази  анализе система. Вишеслојна архитектура  апликација.  Дијаграми  секвенци. Примери трансформација  концептуалних  модела у реално имплементационо окружење. Коришћење key-value Redis базе података за кеширање података. Примена Hibernate брокера.  Израда комплексног пројекта слоја података за информациони систем.

Veliki Podaci 2023/24

Course categoryRačunarske nauke

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

На предавањима се предочава разноврсност могућих очекивања од великих података и приказује се шта је то што омогућава брз одговор на та очекивања. Студенти се упућују у основе инфраструктуре која се користи у раду са великим подацима. Приказује се покрет NoSQL, те основни концепти, технике и обрасци потребни за дистрибуирани рад база података. Кроз анализу решења попут Amazon Dynamo уводи се концепт база података кључ-вредност. Представљају се документ-оријентисане базе података, са фокусом на MongoDB. Кроз осврт на имплементацију Google BigTable и кратак преглед технологије GFS/HDFS објашњава се функсионисање колонских база података.

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

На вежбама се доминантно користе технологије Dell EMC. Одговара се на питање када у обради великих података користити релационе, а када нерелационе базе података. Дефинише се шта подразумева решење на платформи Hadoop и разрађује се архитектура HDFS. Пореде се софтверски базирана решења и наменска решења. Студенти на примерима у брижљиво осмишљеној лабораторијској вежби уче како да концепт архитектуре Dell EMC Isilon OneFS искористе за обраду великих података. При томе се упућују како да поставе и скалирају решење, како да управљају сториџима, те како да обезбеде поузданост. На још једној лабораторијској вежби студенти уче како да изврше интеграцију Hadoop и решења у претходно уведеној архитектури, при чему се, поред осталог, ради конфигурисање решења за HDFS, припрема се сервер Ambari и примењује се платформа Hortonworks Data. 

Kreatori kursa: Miloš Radenković

Skript Jezici 2023/24

Course categoryRačunarske nauke

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

Основе веб програмирања. Проблеми и задаци презентационог, апликационог и слоја сесије референтог OSI и TCP/IP модела.  Основе развоја клијентске стране веб апликација. Улога клијентских технологија у савременим архитектурама веб система. Размена података са различитим слојевима веб апликације. XML технологије за меморисање, обраду и визуелизацију података презентационог слоја. JSON. JSON API. RESTful архитектуре. Oснове JavaScript-a. ES6. DOM. JS библиотеке. AJAX. Развојни оквири. MVC. VueJS. Примена развојних оквира у развоју апликација. Two-way data binding, управљање догађајима, рендеровање података, компоненте, диркетиве, рад са елементима DOM, Dependency Injection.  Основе развоја серверске стране веб апликација. Улога серверских технологија у савременим архитектурама веб система. Размена података са различитим слојевима веб апликације. RESTful архитектуре. Веб сервиси. Конектори  и адаптери. Развој API-ја. Платформе за управљање API-јем. Упоредни преглед технологија серверске стране. Ruby on rails. Python. Развојни оквири. Примена развојних оквира у развоју апликација. Управљање рутирањем, ОRМ. NodeJS. Управљање сесијом и кеширањем. Оптимизација серверске стране веб апликација.

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

HTML5, CSS3, CSS препроцесори. XML технологије, DOM и манипулација над XML документима. JSON формат за серијализацију података. Манипулација JSON документима. Фронтенд оквири и библиотеке Bootstrap. Foundation. Semantic. Увод у скриптне језике. DOM. Основе JavaScript програмског језика. Граматика и типови. Контрола тока. Петље и итерације. Функције, изрази и оператори. Текстуално форматирање. Регуларни изрази. IIFE и анонимне функције. Структуре. Колекције. Објекти. Прототипно наслеђивање. Модуларни патерн. JSON. JSON API. Визуелизација. ChartJS. DataTables. XML. JavaScript библиотеке. JQuery. JavaScript оквири. JavaScript компајлери и управљање пакетима. Фронт-енд оквир – VueJS. Верзионисање кода. Git. Увод у серверске веб технологије и скриптне језике. Python. Основна синтакса, променљиве, оператори, контрола тока и итерације, функције и уграђене функције. Nапредне функције за руковање колачићима (cookies), напредне функције за управљање сесијама. Коришћење сесија на примеру форме и веб продавнице. Објектно оријентисано програмирање у Python-u. Имплементација слоја података. Python  и рад са базама података. MySQL и CRUD операције у Python-у. Складиштење и пренос података у веб окружењу. Складиштење динамичких података. Асинхрони позиви ка серверу и ажурирање података у реалном времену. Python, AJAX и MySQL. Сигурност и безбедност у Python апликацијама. Сервисно оријентисана архитектура. SOAP. REST. Веб сервиси. Развој и документација сопственог REST сервиса. Јавни веб сервиси. Имплементација пословне логике. Развој веб апликација. Pазвој апликација са MVC архитектуром. Оквири за развој веб апликација Django/NodeJS.

Kreatori kursa: Miloš Radenković