Architecture and Design patterns
Code | Completion | Credits | Range | Language |
---|---|---|---|---|
NI-ADP | Z,ZK | 5 | 2P+1C | Czech |
- Course guarantor:
- Filip Křikava
- Lecturer:
- Jiří Borský, Tomáš Chvosta, Filip Křikava, Jan Kurš, Jan Zimolka
- Tutor:
- Jiří Borský, Tomáš Chvosta
- Supervisor:
- Department of Software Engineering
- Synopsis:
-
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.
- Requirements:
-
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.
- Syllabus of lectures:
-
1. Problems complexity in context of object-oriented paradigm, OOP review, UML review.
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
4. Creational patterns (Factory, Builder, Prototype, Singleton).
5. Structural patterns (Adapter, Bridge, Composite, Decorator, Facade, Proxy).
6. Behavioral patterns (Chain of Responsibility, Command, Iterator, Mediator, Memento, Observer, State, Strategy, Template method, Visitor).
7. Functional patterns
8. Concurrency patterns
9. Principles of software architectures and component systems; Architecture description languages; Basic architecture styles (Monolithic, Client-Server, Multi-tiers, Component-based, Event-driven, Pipes and filters, Peer-to-peer, Plug-ins).
10. Advanced architectural styles (Service-oriented, Blackboard, Data-centric, Representational state transfer - REST, share nothing, space-based).
11. Map-Reduce and autonomous systems
12. Reactive programming and actor model.
- Syllabus of tutorials:
-
Work on a MVC game
1. Analysis of the MVC game domain
2. MVC implementation, Game entities
3. Observer, Abstract-Factory, Visitor
4. Strategy, State, Proxy, Memento
5. Command, Bridge, Test
6. Final code review and submission
- Study Objective:
-
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.
- 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
- Note:
- Further information:
- https://courses.fit.cvut.cz/NI-ADP/
- Time-table for winter semester 2024/2025:
-
06:00–08:0008:00–10:0010:00–12:0012:00–14:0014:00–16:0016:00–18:0018:00–20:0020:00–22:0022:00–24:00
Mon Tue Wed Thu Fri - Time-table for summer semester 2024/2025:
- Time-table is not available yet
- The course is a part of the following study plans:
-
- Master specialization Computer Science, in Czech, 2018-2019 (elective course)
- Master specialization Computer Security, in Czech, 2020 (elective course)
- Master specialization Design and Programming of Embedded Systems, in Czech, 2020 (elective course)
- Master specialization Computer Systems and Networks, in Czech, 202 (elective course)
- Master specialization Management Informatics, in Czech, 2020 (elective course)
- Master specialization Software Engineering, in Czech, 2020 (PS)
- Master specialization System Programming, in Czech, version from 2020 (elective course)
- Master specialization Web Engineering, in Czech, 2020 (elective course)
- Master specialization Knowledge Engineering, in Czech, 2020 (elective course)
- Master specialization Computer Science, in Czech, 2020 (elective course)
- Mgr. programme, for the phase of study without specialisation, ver. for 2020 and higher (VO)
- Master Specialization Digital Business Engineering, 2023 (VO)
- Master specialization System Programming, in Czech, version from 2023 (elective course)
- Master specialization Computer Science, in Czech, 2023 (elective course)