
Основни теми: Същност и източници на сложността в софтуера; стратегически и тактически подход към проектирането. Модулност, абстракция и скриване на информация (принципи на Parnas). Свързаност (coupling) и кохезия. Обектно-ориентирано проектиране – композиция срещу наследяване, принципи SOLID. UML като средство за мислене и комуникация – диаграми на класове, последователност и компоненти. Документиране на архитектурни решения – ADR, C4 модел, изгледи „4+1“. Шаблони за проектиране на Gang of Four: създаващи (Factory Method, Abstract Factory, Builder, Prototype, Singleton), структурни (Adapter, Bridge, Composite, Decorator, Facade, Proxy, Flyweight) и поведенчески (Strategy, Observer, Command, State, Template Method, Iterator, Chain of Responsibility, Mediator, Memento, Visitor). Критичен поглед към шаблоните – кога не са подходящи и кога една функция или замикане е достатъчно. Архитектурни стилове и шаблони – слоиста архитектура, „тръби и филтри“, MVC, MVP, MVVM, събитийно-управлявани архитектури, plugin/microkernel. Хексагонална архитектура (Ports and Adapters) и Clean Architecture – принцип на инверсия на зависимостите на ниво архитектура. Тактически Domain-Driven Design – обекти-същности (entities), обекти-стойности (value objects), агрегати, репозитории, домейн услуги, единен език (ubiquitous language). Качествени характеристики – поддръжливост, тестваемост, разширимост, производителност, сигурност; анализ на компромиси (ATAM). Рефакторинг и проектиране за промяна – „лоши практики“ (code smells), каталог на техники за рефакторинг, работа със заварен код, характеризиращи тестове. Тестово-задвижвано разработване (TDD) като инструмент за проектиране.
- Teacher: Mitko Shopov
- Teacher: Мария Бабанова
- Teacher: Радослав Фурнаджиев