Babes-Bolyai University of Cluj-Napoca
Faculty of Mathematics and Computer Science
Study Cycle: Graduate
SUBJECT

Code	Subject	
MID0016	Design Patterns	

Section	Semester	Hours: C+S+L	Category	Type	
Computer Science - in Romanian	6	2+0+2	speciality	optional	
Mathematics-Computer Science - in Romanian	6	2+0+2	speciality	optional	
Information engineering - in Romanian	6	2+0+2		optional	

Teaching Staff in Charge	Prof. PÂRV Bazil, Ph.D., bparv@cs.ubbcluj.ro
Lect. DARVAY Zsolt, Ph.D., darvay@cs.ubbcluj.ro	
Aims	At the completion of this course, the students will be able to:
a) know and understand the core design patterns
b) identify the potential patterns in the design
c) use appropriate design patterns in solving real-world problems
d) build reusable designs and components	
Content	1. Introduction
1.1. What is a design pattern
1.2. A template for describing design patterns 
1.3. The catalog of design patterns
1.4. Design problems solved by using design patterns
1.5. Design pattern: how to choose the right one
1.6. Design patterns: how to use
2. Case study
2.1. Problem statement
2.2. Design problems
2.3. Document structure
2.4. Formatting
2.5. User interface
2.6. Many look-and-feel standards
2.7. Many windowing systems
2.8. User operations
2.9. Analytical processing
3. Creational patterns
3. Creational design patterns
3.1. Introduction
3.2. Factory Method
3.3. Abstract Factory
3.4. Builder
3.5. Prototype
3.6. Singleton
4. Structural design patterns
4.1. Introduction
4.2. Adapter
4.3. Bridge
4.4. Composite
4.5. Decorator
4.6. Facade
4.7. Flyweight
4.8. Proxy
5. Behavioral design patterns
5.1. Introduction
5.2. Chain of Responsibility
5.3. Command
5.4. Interpreter
5.5. Iterator
5.6. Mediator
5.7. Memento
5.8. Observer
5.9. State
5.10. Strategy
5.11. Template Method
5.12. Visitor

Each design pattern description follows the following template: intent, the problem to be solved, the structure (including OMT/UML diagrams), examples (a structural and at least one real-life example). 

Lab activities
Three mini-projects, dealing with creational, structural, and behavioral design patterns respectively. Each problem solution will be implemented in two different programming languages (Java, C#, Visual Basic 6.0, Visual Basic .NET, Python, etc).

Course notes and lab material are available on the Win server, in the folder \winPatterns
	
Bibliography	1. COOPER, J.W.: The Design Patterns Java Companion, Addison-Wesley, 1998. 
2. COPLIEN, J.: Multi-Paradigm Design, PhD Thesis, Vrije Universiteit Brussel, 2000 [http://www.netobjectives.com/download/CoplienThesis.pdf].
3. ECKEL, B.: Thinking in Patterns with Java [http://www.bruceeckel.com].
4. GAMMA, E., R. HELM, R. JOHNSON, J.  VLISSIDES: Design Patterns - Elements of Reusable Object-Oriented Software, Addison-Wesley, 1995.
5. MARTIN, R.C.: Agile Software Development: Principles, Patterns, and Practices, Prentice-Hall, 2002.
6. STELTING, S., O. MAASSEN: Applied Java Patterns, Prentice Hall, 2001. 
7. Data and Object Factory Patterns, [http://www.dofactory.com/patterns/Patterns.aspx]
	
Assessment	The final mark will cover lab work (i.e. mini-projects) and the written exam results (last week, in the classroom). It is computed as follows, on a 10-point scale:
1pt by default
1pt seminar/lab attendance
4pts the mini-projects
4pts the written exam