Software Design Techniques
A course taught at FILS, in the English-language section, in year IV, semester I. It continues Software Development Methods and shifts the emphasis from analysis and modelling toward the design and architecture of software systems.
Landmarks
- Institution: POLITEHNICA University of Bucharest
- Faculty: FILS
- Year / semester: year IV, semester I
- Profile: Information Engineering
Place of the course in the didactic sequence
This course represents the final stage of the software engineering sequence. If in Software Development Methods the emphasis was on requirements analysis, domain modelling, and the structuring of the development process, here the interest moves toward design decisions and the architecture of software systems.
Objective of the course
The course aims to form an engineering vision of software design: how one moves from conceptual models to implementable structures, how complex systems are organized, and how adequate architectural solutions are chosen.
Structure of the course
1. Introduction to software design
The relation between analysis and design, the role of UML, forward and reverse engineering, and the place of design in the life cycle.
2. Design patterns
GoF patterns and GRASP responsibility-assignment principles, as mechanisms for organizing collaboration between objects.
3. Software system architecture
Viewpoints, the 4+1 model, and the architectural description of complex systems.
4. Architectural patterns and styles
Microkernel, Client-Server, Broker, MVC, MVVM, CQRS, Event Sourcing, Hexagonal Architecture, and other fundamental models.
5. Classical architectures
Monolithic, layered, n-tier, component-based, and client-server architectures.
6. Technologies for software architectures
Enterprise platforms (Jakarta EE), components, and middleware infrastructures.
7. Service-Oriented Architecture (SOA)
Services, orchestration, interoperability, and distribution.
8. Systems integration
Enterprise Integration (EAI), messaging, publish-subscribe, and event-based architectures.
Significance of the course
This course reflects the transition from programming and modelling to architecture: from objects to systems. It introduces the concepts that make it possible to understand software at large scale and provides the conceptual framework for the design of modern distributed systems.





