Universitatea Babeş-Bolyai Cluj-Napoca
Facultatea de Matematică şi Informatică
Ciclul de studii: Licenţă
Domeniul: Calculatoare şi tehnologia informaţiei
Programul de studii: Ingineria informatiei - in limba engleza
Limba de predare: Engleză

SYLLABUS

I. General data
Code	Subject	
MID0016	Design Patterns	

Semester	Hours: C+S+L+P	Category	Status	
5	2+0+1+1	speciality	optional	

II. Full status faculty members
Name and	Scientific	Didactic	Chair	Type of activity	
surname	title	title		C	S	L	
PÂRV Bazil	Ph.D.	Prof.	Programming  Languages and Methods	*			

Associated faculty members
Name and	Scientific	Institution	Type of	Type of activity	
surname	title		position	C	S	L	

III. Course objectives
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	

IV. Course contents
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

V. 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]

VI. Thematic of didactic activities per weeks

VII. Didactic methods used

VIII. 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	

IX. Additional references

	Dean,							Chair head,

	Date,							Course responsible,
								Prof. PÂRV Bazil, Ph.D.