Програмирање система

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

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

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

Категорије и каталози софтверских образаца и антиобразаца. Одвајање спецификације од имплементације. Поштовање SOLID принципа и примена дизајн образаца у развоју заснованом на компонентама. Стандарди за развој модуларних система за Java платформу – OSGi и Jigsaw. Софтверске лиценце и верзије. Сервисно оријентисана архитектура и веб сервиси. Технологије и стандарди за имплементацију веб сервиса – SOAP и REST. Концептуални дизајн сервиса: дефинисање домена сервиса, одређивање атомичких сервиса, креирање композитних сервиса. Развој логичких сервиса. Конверзија дизајна у спецификацију: спецификација операција, спецификација сервисног уговора, спецификација порука. Употреба микросервиса. Развој апликација заснованих на методологији 12-factor app. Поређење микросервиса, сервисно-оријентисаних архитектура и архитектура монолитних апликација. Различите имплементације микросервиса – доменски оријентисане архитектуре (Data-driven), програмирање вођено догађајима (Event-driven). Управљање дистрибуираним базама података. Агрегација логова микросервиса и њихово разумевање. Безбедност апликација заснованих на микросервисима. Употреба микросервиса код IoT апликација.

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

Обрасци и антиобрасци у програмирању система велике скале. Пример софтверске компоненте која користи друге компоненте и њено проширење додатним функционалностима. Коришћење build алата за Јаву – Apache Ant, Apache Maven и Gradle. Вежба креирања компоненте са одвојеном спецификацијом. HTTP протокол и REST архитектура. Имплементација микросервисне апликaције коришћењем Spring Boot технологије. Рад са релациoним и нерелационим базама података у микросервисној архитектури. Употреба Hiberante ORM алата за перзистенцију података у релациону базу. Комуникација између микросервиса и коришћење система за размену порука. Изолoвање апликација у Docker контејнере (писање Dockerfile-а, регистар Docker image-a), оркестрација контејнера, скалирање микросервисне апликацијe.