Universitatea Babeş-Bolyai Cluj-Napoca
Facultatea de Matematică şi Informatică
Ciclul de studii: Licenţă
Domeniul: Informatică
Programul de studii: Informatică - în limba engleză
Limba de predare: Engleză

SYLLABUS

I. General data
Code	Subject	
MID0002	Object-Oriented Programming	

Semester	Hours: C+S+L+P	Category	Status	
2	2+1+2+0	fundamental	compulsory	

II. Full status faculty members
Name and	Scientific	Didactic	Chair	Type of activity	
surname	title	title		C	S	L	
CZIBULA Istvan	Ph.D.	Lect.	Computer Science	*		*	

Associated faculty members
Name and	Scientific	Institution	Type of	Type of activity	
surname	title		position	C	S	L	
PETRASCU Vladiela	Ph.D.	Babes-Bolyai University	Assist.		*	*	
GACEANU Radu	Ph.D. student	    Babes-Bolyai University	 Assist.		    * 	   *	
MARIAN Zsuzsanna Edit	Ph.D. student	    Babes-Bolyai University				   *	

III. Course objectives
On completion of the class, a student should be able:
to prepare an object-oriented design of small/medium scale problems
to demonstrate the differences between traditional imperative design and object-oriented design
to explain class structures as fundamental, modular building blocks
to understand the role of inheritance, polymorphism, dynamic binding and generic structures in building reusable code
to explain and to use defensive programming strategies, employing formal assertions and exception handling
to write small/medium scale C++ programs
to use classes written by other programmers when constructing their systems
to understand and to use fundamental data structures: collections, sets, dictionaries, lists, stacks, queues, trees, graphs.	

IV. Course contents
Basic elements of C++ language. 
Object oriented programming: motivation, characteristics, basic concepts, advantages, programming languages. 
Object-oriented design and interface-based design. Basic design patterns.	

V. Bibliography
1. A.V. Aho, J.E. Hopcroft, J.D. Ullman, Data Structures and Algorithms, Addisson-Wessley Publ., Massachusetts, 1983.
2. R. Andonie, I. Garbacea, Algoritmi fundamentali. O perspectiva C++, Editura Libris, 
3. Alexandrescu, Programarea moderna in C++. Programare generica si modele de proiectare aplicate, Editura Teora, 2002
4. M. Frentiu, B. Parv, Elaborarea programelor. Metode si tehnici moderne, Ed. Promedia, Cluj-Napoca, 1994.
5. E. Horowitz, S. Sahni, D. Mehta, Fundamentals of Data Structures in C++, Computer Science Press, Oxford, 1995.
6. K.A. Lambert, D.W. Nance, T.L. Naps, Introduction to Computer Science with C++, West Publishing Co., New-York, 1996.
7. L. Negrescu, Limbajul C++, Ed. Albastra,Cluj-Napoca 1996.
Cluj_Napoca, 1995.
8. Dan Roman, Ingineria programarii obiectuale, Editura Albastra, Cluj_Napoca, 1996.
9. B. Stroustup, The C++ Programming Language, Addison Wesley, 1998.
10.Bruce Eckel, Thinking in C++, www.bruceeckel.com	

VI. Thematic of didactic activities per weeks
Week 1
Lecture
Basic elements of C++ language. 
-	Lexical elements. Operators. Conversions.
-	Data types. Variables. Constants. 
-	Visibility scope and lifetime of the variables. Namespaces.
-	C++ Statements.
-	Function declaration and definition. Function overloading. Inline function.
Seminar (week 1 and week 2)
Simple problems in C++. Functions. Function parameters. Variables (local and global) and their visibility. Vectors (uni and multi dimensional) and structures. 
Laboratory
Specification, design and implementation of simple problems in C/C++. General aspects of C/C++ language. Structured vs. modular versions of a C/C++ application.

Week 2
Lecture
Derived data types and user data types, dynamic allocation in C++. 
-	Data types: array and struct.
-	Data types: pointer and reference. 
-	Memory allocation and deallocation.
-	Pointers to functions and pointers void.
Modular programming in C++.
-	Header files. Libraries.
-	Modular implementations of ADTS.
-	Using the void  pointer to achieve genericity.
Laboratory
Specification, design and implementation of an ADT in C/C++. Representation of an ADT. Operations of an ADT. Usage of an ADT.

Week 3
Lecture
Object oriented in C++. 
-	Classes and objects.
-	Members of a class. Access modifiers.
-	Constructors / destructors
-	UML diagrams for classes (members, accessibility).
Seminar (week3 and week 4)
ADT Container with generic elements (void*): visible representation and hidden representation. Reading and writing from/in files.
Laboratory
Specification, design and implementation of an ADT container in C/C++. Using generic elements in order to populate the container. Representation of an ADT vector with generic elements. Operations of an ADT vector with generic elements. Usage of an ADT vector with generic elements.

Week 4
Lecture
Classes and objects
Operators' overloading. 
Static elements (members and methods). 
Friend elements.
Laboratory
Specification, design and implementation of an ADT dynamic container in C/C++. Using generic elements and iterators. Representation of an ADT dynamic container with generic elements. Operations of an ADT container with generic elements. Usage of an ADT container with generic elements. Usage of iterators.

Week 5
Lecture
Classes: Containers  and iterators
Simple and Double Linked_List. 
Stack, Queue
Hash Tables
Association relations  between classes – UML representation
Seminar (week 5 and week 6)
Classes. Simple classes. Operator overloading. Classes with objects as data members .
Laboratory
Classes and objects: Specification, design and implementation of a class in C++. Constructors, destructors, accessors, mutators. Operator overloading. Static and dynamic objects. 
Week 6
Lecture
Inheritance  
-	Simple inheritance. Derived classes.
-	Substitution principle.
-	Method overriding.
-	Multiple inheritance. 
-	Specialization/generalization relation - UML representation.
Laboratory
Classes and object: Classes with objects as data members. Specification, design and implementation of a class in C++. Constructors, destructors, accessors, mutators. Operator overloading. Static and dynamic objects.

Week 7
Lecture
Abstract classes  and Polymorphism.  
-	Virtual methods.
-	Dynamic binding. 
-	Virtual inheritance.
-	Code reusing (inheritance/composition).
-	Conversions (upcast/downcast).
Seminar (week 7 and week 8)
Classes of type dynamic list and iterators. Inheritance. 
Laboratory
Classes and objects: Dynamic containers of objects (linked lists, maps, hash tables). Iterators for these containers. . Objects as data members in other classes. Specification, design and implementation of a class in C++. Constructors, destructors, accessors, mutators. Operator overloading. Static and dynamic objects

Week 8
Lecture
Object oriented design and interface based design. 
-	Interfaces.
-	UML representation for interfaces.
-	Object oriented design of a library of the basic data structures 
Laboratory
Classes and objects: Inheritance. Specification, design and implementation of a class in C++. Constructors, destructors, accessors, mutators. Static and dynamic objects.

Week 9
Lecture
Templates. 
-	Template functions. Template classes. 
-	Source-code reusing.
Seminar (week 9 and week 10)
Abstract classes and interfaces. Polymorphism
Laboratory
Classes and objects: Inheritance. Polymorphism. Specification, design and implementation of a class in C++. Constructors, destructors, accessors, mutators. Static and dynamic objects.

Week 10
Lecture
Input/output operation.  (C10+S10)
-	I/O streams. I/O Hierarchies of classes.
-	Format. Manipulators.
-	Files.
Laboratory
Classes and objects: Inheritance. Abstract classes and interfaces. Polymorphism. Specification, design and implementation of a class in C++. Constructors, destructors, accessors, mutators. Static and dynamic objects.

Week 11
Lecture
Exception handling. 
-	Notion of exception in programming.
-	Exception handling. in C++.
Seminar (week 11 and week 12)
Classes: template and exceptions
Laboratory
Classes and objects: Tempale. Specification, design and implementation of a class in C++. Constructors, destructors, accessors, mutators. Static and dynamic objects.

Week 12
Lecture
STL  library
-	Container classes and iterators.
-	 STL algorithms.
Laboratory
Classes and objects: template and exceptions. Specification, design and implementation of a class in C++. Complex problems. Implementing a problem following the UML diagram.

Week 13
Lecture
Design patterns
-	Test Driven Development.
-	Testing tools.
Seminar (week 13 and week 14)
Complex problems implementing by following the UML diagram. Design patterns.

Week 14
Lecture
Design patterns
-	Singleton
-	Model View Controller 
-	Repository	

VII. Didactic methods used
Lectures, conversations, projects, exercises, individual study, homework assignments.	

VIII. Assessment
Final grade is obtained based on: 
A.	Laboratory activity (N1)
B.	Seminar activity (N2)
C.	Written exam (N3)
D.	Practical exam (N4)
Final grade is computed as:
N1 * 20% + N2 * 10% * N3 * 50% + N4 * 20%

The written exam takes place during the exams session. The practical exam will be organized on the last week of the semester, during the laboratory classes.
The written exam consists of theoretical questions and exercises, while the practical exam consists in solving a problem on computer.
More information regarding the exam rules and evaluation can be found at http://www.cs.ubbcluj.ro/~istvanc/oop 	

IX. Additional references

Dean,							Chair head,
Prof. Dr. Leon Ţâmbulea				Prof. Dr. Florian Boian

	Date,							Course responsible,
	1.10.2011						Lect. CZIBULA Istvan, Ph.D.