Design Patterns in Software Design
Students are trained to apply key design principles in planned construction of high quality software subsystems. These information enable critical assessment of different solutions to the problem at hand in software design. The presented patterns offer an in-depth view onto common organizational challenges in software design, as well as a pragmatic insight into advantages of novel features of modern programming languages. By employing the acquired knowledge and practical experience, the students will be able to improve the organization of their software systems, as well as to clarify documentation through usage of established pattern terminology.
- recognize symptoms of inadequate software design
- discuss advantages of dynamic polymorphism, templates, and duck typing
- explain the major principles of software design and recognize cases of their violation
- evaluate the quality of multiple software designs based key design principles
- recognize different design patterns in uncommented code
- select and apply appropriate design patterns in the construction of a software product
- compare the adequateness of different design patterns in the context of a given design problem
- apply design principles for conceiving high-quality software components
Forms of Teaching
The course includes two hours of lectures per week.Exams
The knowledge tests include the midterm exam (40%), the final exam (40%) and tests in the laboratory (20%).Exercises
The course includes four auditory exercises.Laboratory Work
The course includes four laboratory exercises.Consultations
Regular consultations will be held after each lecture. Ad-hoc consultations should be arranged by e-mail.Seminars
Students can earn additional credits by presenting a technical seminar.
|Type||Threshold||Percent of Grade||Threshold||Percent of Grade|
|Laboratory Exercises||0 %||20 %||40 %||0 %|
|Mid Term Exam: Written||0 %||40 %||0 %|
|Final Exam: Written||0 %||40 %|
|Exam: Written||50 %||80 %|
|Exam: Oral||20 %|
Week by Week Schedule
- Introduction: importance of software organization, goals of software design, review of development process models. Symptoms of inadequate software organization.
- Example: the loss of integrity due to changed requirements and the adaptation of the design to new conditions. Review of diagrams and programming concepts. Techniques for achieving flexible code in C, C++ and Python: dynamic and static polymorphism, duck typing.
- Principles of logical design: the Open-closed principle, and the Liskov substitution principle.
- Principles of logical design: the Dependency inversion principle, the Single responsibility principle, and the Interface segregation principle.
- Principles of physical design: the desired form of the component dependency graph, adequate stability and abstractness of packages.
- The design pattern concept illustrated on the Strategy pattern example. The Observer pattern.
- The Decorator pattern. Parameterized factory. Factories which do not depend on concrete types.
- Midterm exam.
- The Factory Method pattern. The Abstract factory pattern. The Singleton pattern.
- The Command pattern. The Adapter pattern. The Template method pattern.
- The Iterator pattern. The Composite pattern. The State pattern.
- The Proxy pattern. The Bridge pattern. The Visitor pattern.
- The Prototype pattern, the Model-View-Controller pattern.
- Rješavanje problema za vježbu.
- Final exam