Дизајн софтвера

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

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

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

Напредни концепти UML дијаграма класа - веза композиције и агрегација, дијаграм пакета. Структурирани формати података - JSON и XML. Серијализација и десеријализација објеката у структурирани формат. Дизајн патерни за креирање објеката - Factory, Prototype, Builder. Композиција објеката и класа према структурним пројектним образцима - Adapter, Bridge, Composite, Decorator, Facade. Сваки дизајн патерн објашњава се на репрезентативном примеру који укључује UML дијаграм класа и имплементацију у програмском језику Java. Основни принципи тимског развоја софтвера. UML дијаграм случајева коришћења. Писање спецификације функционалних захтева софтвера. UML дијаграм секвенци. Дизајн патерни за дефинисање понашање софтвера - Iterator Pattern, Command Pattern, Mediator Pattern, Observer Pattern. Објашњења дизајн патерна који описују понашање садрже дијаграм класа, дијаграм секвенци и приказ имплементације у програмском језику Јава. Приказ различитих примера практичне примене дизајн патерна. Анализа студије случаја имплементације софтвера на основу спецификације. UML дијаграм компоненти. Модули у програмском језику Јава (од верзије 9). Приказ модуларне апликације преко UML дијаграма компоненти.

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

Илустрација коришћења савременог развојног окружења. Основни концепти система за управљање верзијама - git. Приказ основних функција git-а. Тимски рад коришћењем гит-а. Коришћење готових библиотека у пројектима. Вежба имплементација серијализације објеката у XML и JSON формат. Вежба учитавања података из XML и JSON формата у одговарајући објектни модел. Вежба имплементације одговарајућег дизајн патерна у програмском језику Јава за дати опис задатка. Вежба имплементације структурних пројектних образаца. Вежба имплементације веће десктоп апликације у тиму на основу спецификације функционалних захтева уз коришћење одговарајућих дизајн патерна. Имплементација дизајн патерна за дефинисање понашања софтвера. Имплементација модула у програмском језику Java.