Main page | Study Branches/Specializations | Groups of Courses | All Courses | Roles                Instructions

A course is the basic teaching unit, it's design as a medium for a student to acquire comprehensive knowledge and skills indispensable in the given field. A course guarantor is responsible for the factual content of the course.
For each course, there is a department responsible for the course organisation. A person responsible for timetabling for a given department sets a time schedule of teaching and for each class, s/he assigns an instructor and/or an examiner.
Expected time consumption of the course is expressed by a course attribute extent of teaching. For example, extent = 2 +2 indicates two teaching hours of lectures and two teaching hours of seminar (lab) per week.
At the end of each semester, the course instructor has to evaluate the extent to which a student has acquired the expected knowledge and skills. The type of this evaluation is indicated by the attribute completion. So, a course can be completed by just an assessment ('pouze zápočet'), by a graded assessment ('klasifikovaný zápočet'), or by just an examination ('pouze zkouška') or by an assessment and examination ('zápočet a zkouška') .
The difficulty of a given course is evaluated by the amount of ECTS credits.
The course is in session (cf. teaching is going on) during a semester. Each course is offered either in the winter ('zimní') or summer ('letní') semester of an academic year. Exceptionally, a course might be offered in both semesters.
The subject matter of a course is described in various texts.

NI-ADP Architecture and Design patterns Extent of teaching: 2P+1C
Instructor: Borský J., Křikava F., Zimolka J. Completion: Z,ZK
Department: 18102 Credits: 5 Semester: Z

Annotation:
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.

Lecture syllabus:
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.

Seminar syllabus:
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

Literature:
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

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.

Information about the subject and teaching materials can be found at https://courses.fit.cvut.cz/MI-ADP

The course is also part of the following Study plans:
Study Plan Study Branch/Specialization Role Recommended semester
NI-TI.2023 Computer Science V 1
NI-TI.2020 Computer Science V 1
NI-PSS.2020 Computer Systems and Networks V 1
NI-ZI.2020 Knowledge Engineering V 1
NIE-DBE.2023 Digital Business Engineering VO 1
NI-WI.2020 Web Engineering V 1
NI-TI.2018 Computer Science V 1
NI-NPVS.2020 Design and Programming of Embedded Systems V 1
NI-SP.2020 System Programming V 1
NI-SP.2023 System Programming V 1
NI-MI.2020 Managerial Informatics V 1
NI-SPOL.2020 Unspecified Branch/Specialisation of Study VO 1
NI-PB.2020 Computer Security V 1
NI-SI.2020 Software Engineering (in Czech) PS 1
NI-SPOL.2020 Unspecified Branch/Specialisation of Study VO 1


Page updated 16. 4. 2024, semester: Z/2024-5, L/2021-2, Z,L/2022-3, Z/2019-20, L/2023-4, L/2019-20, L/2020-1, Z/2021-2, Z/2023-4, Z/2020-1, Send comments to the content presented here to Administrator of study plans Design and implementation: J. Novák, I. Halaška