Architecture and Design Patterns
- Petr Špaček (guarantor)
- Petr Špaček (guarantor)
- Department of Software Engineering
The objective of this course is to provide students with both work knowledge about the underlying foundations of object-oriented design and analysis as well as with understanding of the challenges, issues, and tradeoffs of advanced software design.
In the first part of the course, the students will refresh and deepen their knowledge of object-oriented programming and get familiar with the commonly used object-oriented design patterns that represent the best practices for solving common software design problems. In the second part the students will be introduced to the principles of software architecture design and analysis. This includes the classical architectural styles, component based systems, and some advanced software architectures used in large-scale distributed systems.
Prerequisites: Knowledge of working with Unix / Linux and MS Windows operating systems on a common user level, active knowledge of some programming language, ability of algorithmic description of problem solving and basic knowledge of UML. # Materials for teaching the course during the semester are on the website https://courses.fit.cvut.cz/MI-ADP/en
- Syllabus of lectures:
1. Fundamentals of object-oriented paradigm.
2. Characteristics of good and bad designs; Basic principles of object-oriented design (Single responsibility, Open-closed, Liskov substitution, Interface segregation and Dependency inversion).
3. Classification of object-oriented design patterns; Creational patterns (Factory, Builder, Prototype, Singleton).
4. Structural patterns (Adapter, Bridge, Composite, Decorator, Facade, Proxy).
5. Behavioral patterns (Chain of Responsibility, Command, Iterator, Mediator, Memento, Observer, State, Strategy, Template method, Visitor).
6. Principles of software architectures and component systems; Architecture description languages; Architecture design patterns for distributed applications.
7. Basic architecture styles (Monolithic, Client-Server, Multi-tiers, Component-based, Event-driven, Pipes and filters, Peer-to-peer, Plug-ins).
8. Advanced architectural styles (Service-oriented, Blackboard, Data-centric, Representational state transfer - REST, share nothing, space-based).
9. Specialized patterns (Map-Reduce).
10. Reactive architectures.
11. Autonomic architectures.
- Syllabus of tutorials:
Work on a MVC game
- Study Objective:
The aim of this course is to provide students with practical knowledge of the basic principles of object-oriented design and its analysis, together with an understanding of the challenges, questions and compromises associated with advanced software design. In the first part of the course, students will review and deepen their knowledge of object-oriented programming and learn the most commonly used design patterns, which represent the best practices for solving typical software design problems. In the second part of the course, students will be introduced to the principles of design and analysis of software architecture including classical architectural designs, component systems and some advanced software architectures of large distributed systems.
- Study materials:
1. Gamma, E. - Helm, R. - Johnson, R. - Vlissides, J. M.: Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley, 1994, ISBN 0201633612
2. Buschmann, F. - Meunier, R. - Rohnert, H. - Sommerlad, P. - Stal, M.: Pattern-Oriented Software Architecture: A System of Patterns, Wiley, 1996, ISBN 978-0321815736
3. Bass, L. - Clements, P. - Kazman, R.: Software Architecture in Practice (3rd Edition), Addison-Wesley, 2012, ISBN 978-03218157364.
4. Martin, R. C.: Agile Software Development, Principles, Patterns, and Practices, Prentice Hall, 2002, ISBN 0135974445
- Further information:
- No time-table has been prepared for this course
- The course is a part of the following study plans:
- Knowledge Engineering, in Czech, Presented in Czech, Version 2016 and and 2017 (elective course)
- Computer Security, Presented in Czech, Version 2016 to 2019 (elective course)
- Computer Systems and Networks, Presented in Czech, Version 2016 to 2019 (elective course)
- Design and Programming of Embedded Systems, in Czech, Version 2016 to 2019 (elective course)
- Specialization Web and Software Engineering, in Czech, Version 2016 to 2019 (elective course)
- Specialization Software Engineering, in Czech, Version 2016 to 2019 (compulsory course of the branch)
- Specialization Web Engineering, Presented in Czech, Version 2016 to 2019 (elective course)
- Master Informatics, Presented in Czech, Version 2016 to 2019 (VO)
- Specialization System Programming, Presented in Czech, Version 2016 to 2019 (elective course)
- Specialization Computer Science, Presented in Czech, Version 2016-2017 (elective course)
- Knowledge Engineering, in Czech, Presented in Czech, Version 2018 to 2019 (elective course)