The course addresses general principles and specific methods for designing flexible and modular software subsystems. A notion of a design pattern is introduced as a well known and tested solution to a recurring problem in a particular problem domain. The classifications of design patterns are considered, according to purpose, scope, and the level of abstraction, together with the corresponding representatives. It is assumed that the basic pieces of knowledge from the domain of object oriented programming have been acquired on the introductory courses.
- 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
- 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 does not include lectures in English.Laboratory
The course includes four laboratory exercises. http://www.zemris.fer.hr/~ssegvic/ooup/index_en.shtml
|Type||Threshold||Percent of Grade||Threshold||Percent of Grade|
|Laboratory Exercises||50 %||20 %||50 %||0 %|
|Mid Term Exam: Written||0 %||40 %||0 %|
|Final Exam: Written||0 %||40 %|
|Exam: Written||50 %||80 %|
|Exam: Oral||20 %|
Week by Week Schedule
- Static and dynamic properties of software. Significance of inter-component interaction and software organization. Basics of development process.
- Symptops of inadequate organization. Relation between requirements and organizational entropy. OMT class diagrams. Diagrams of physical organization.
- Techniques for expressing flexible programs. Dybamic polymorphism in C++, C and Python. Static polymorphism in C++. Object oriented design. Design by contract. Resource acquisition is initialization.
- Logical design principles: open-closed principle, Liskov substitution principle, dependency-inversion principle, single responsibility principle, interface segregation principle. Physical design principles: test-driven design, incremental testing, levelization, cyclic dependencies.
- Design patterns. Strategy. Template method. Observer.
- Decorator. Command
- Midterm exam
- Generic factories. Singleton. Iterator.
- Adapter. Composite. State.
- Proxy. Bridge.
- Prototype. Visitor.
- Factory method. Model - view - controller.
- Final exam
[FER3-EN] Computing - studyElective Courses (6. semester)
[FER3-EN] Electrical Engineering and Information Technology - studyElective Courses (6. semester)
Erich Gamma, Richard Helm (Computer scientist), Ralph E. Johnson, John Vlissides (1995.), Design Patterns,
Robert C. Martin, Jan M. Rabaey, Anantha P. Chandrakasan, Borivoje Nikolić (2003.), Agile Software Development, Pearson
L1 English Level
8 Laboratory exercises
0 Project laboratory
76 Very Good