On successful completion of the module, students will be able to independently design, develop and critically evaluate the architecture of large-scale software systems. They will be able to decompose software into components and connectors, select and evaluate appropriate frameworks, and logically organise functionalities and workflows. Students will be able to plan and design parallel and concurrent processes and integrate them into architectures tailored to different application domains. In addition, they will have developed their technical, social and personal skills, as well as their communication and self-management skills, and will be able to apply them effectively in the context of large-scale software projects.
The "Parallel Programming Lab" provides practical knowledge of concurrent programming and its application across various modern technologies and systems.
In the first part of the course, students revisit and deepen their understanding of the fundamentals of concurrent programming. Through hands-on exercises using Java and the Java Development Kit (JDK), they learn how to efficiently design concurrent processes and address challenges such as race conditions and deadlocks.
In the second part, the course explores practical applications of concurrent programming through concise introductions to various technologies and platforms, including:
By combining theoretical insights with practical exercises, students gain the skills to understand, implement, and advance concurrent programming in diverse technical contexts.
The literature for the second part changes every semester.
Passing the lab will be assessed by completing the exercises independently. In the second part of the lab, various new methods and concepts will be presented and discussed.
The "Software Architectures" course provides advanced knowledge and skills in the development and analysis of modern software architectures.
In the first part of the lecture, relevant process models are reviewed, and approaches for agile architecture development are introduced. Students explore and compare various view models, deepen their understanding of modeling techniques for components and connectors, and expand their knowledge of design methods. The course emphasizes the use of scenarios for describing and evaluating non-functional requirements.
The second part focuses on fundamental architectural patterns, such as layered architecture, hexagonal architecture, onion architecture, blackboard, pipes-and-filters, and event-driven architecture. Students learn to identify, understand, and apply these patterns while exploring their role in typical middleware concepts. The lecture demonstrates how these architectural templates provide pathways to organizing flexible and evolutionary systems.
The third part addresses architecture at the module level. Using practical scenarios and examples, the application of patterns for the business layer is presented and analyzed in context. The course aims to equip students with a comprehensive understanding of designing and evaluating modular software architectures.
The lecture will take the form of seminars with exercises and presentations.