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	Category	Status	
2	2+2+2	fundamental	compulsory	

II. Full status faculty members
Name and	Scientific	Didactic	Chair	Type of activity	
surname	title	title		C	S	L	
NICULESCU Virginia	Ph.D.	Assoc.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
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
1.	Basic elements of  C++ language. 
-	Lexical elements. Operators. Conversions.
-	Data types. Variables. Constants. 
-	Visibility scope and lifetime of the variables.
-	Namespaces.
2.	Statements and functions in C++.
-	C++ Statements.
-	Function declaration and definition.
-	Function overloading.
-	Inline function.
3.	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.
4.	Modular programming in C++.
-	Header files. Libraries.
-	Modular implementations of ADTS.
-	Using the void  pointer to achieve genericity.
5.	Object oriented in C++. 
-	Classes and objects.
-	Members of a class. Access modifiers.
-	Constructors / destructors
-	UML diagrams for classes (members, accessibility).
-	Association and aggregation relations  between  
                 classes -UML representation;
6.	Operators' overloading. Static members. Friends. 
-	Class Linked_List. Iterator on list. 
7.	Inheritance  
-	Simple inheritance. Derived classes.
-	Substitution principle.
-	Method overriding.
-	Multiple inheritance. 
-	Specialization/generalization relation - UML representation.
8.	Polymorphism.  
-	Virtual methods.
-	Dynamic binding. 
-	Virtual inheritance.
-	Code reusing (inheritance/composition).
-	Conversions (upcast/downcast).
9.	Object oriented design and interface based design. 
-	Abstract classes, interfaces.
-	UML representation for interfaces.
-	Object oriented design of a library of the basic data structures 
10.	Input/output operation.  (C10+S10)
-	I/O streams. I/O Hierarchies of classes.
-	Format. Manipulators.
-	Files.
11.	Templates. 
-	Template functions. Template classes. 
-	Source-code reusing.
12.	STL  library
-	Container classes and iterators.
-	 STL algorithms.
13.	Exception handling. 
-	Notion of exception in programming.
-	Exception handling. in C++.
14.	Visual C++ environment.  

	

V. Bibliography
1.	R. Andonie, I. Garbacea, Algoritmi fundamentali. O perspectiva C++, Editura Libris, Cluj_Napoca, 1995 (Biblioteca). 
2.	Dan Roman, Ingineria programarii obiectuale, Editura Albastra, Cluj_Napoca, 1996.
3.	B. Eckel, Thinking in C++, (second edition), vol. 1 & 2, [www.bruceeckel.com]
4.	E. Horowitz, S. Sahni, D. Mehta, Fundamentals of Data Structures in C++, Computer Science Press, Oxford, 1995.
5.	K.A. Lambert, D.W. Nance, T.L. Naps, Introduction to Computer Science with C++, West Publishing Co., New-York, 1996.
6.	B. Milewski, C++ in Action, [http://www.relisoft.com/book/], 1997.
7.	L. Negrescu, Limbajul C++, Ed. Albastra,Cluj-Napoca 1996(Biblioteca).
8.	Vasile Cioban, Zsolt Darvay, Metode evoluate de programare, UBB-Mate_Info, 1999 (Biblioteca).
9.	M. Frenţiu, B. Pârv, Elaborarea programelor. Metode şi tehnici moderne, Ed. Promedia, Cluj-Napoca, 1994. (Biblioteca).

VI. Thematic of didactic activities per weeks
I.	(C1-C14 lectures, S1-S14 seminars, L1-L14 laboratories) 

1.	Basic elements of  C++ language. (C1 + S1)
-	Lexical elements. Operators. Conversions.
-	Data types. Variables. Constants. 
-	Visibility scope and lifetime of the variables.
-	Namespaces.
(L1- simple C++ programs)

2.	Statements and functions in C++.(C2+ S2)
-	C++ Statements.
-	Function declaration and definition.
-	Function overloading.
-	Inline function.
(L2 – structured C++ programs)

3.	Derived data types and user data types, dynamic allocation in C++. (C3+ S3)
-	Data types: array and struct.
-	Data types: pointer and reference. 
-	Memory allocation and deallocation.
-	Pointers to functions and pointers void.
(L3 – data structures dynamic allocated in C++)

4.	Modular programming in C++.(C4 + S4)
-	Header files. Libraries.
-	Modular implementations of ADTS.
-	Using the void  pointer to achieve genericity.
(L4- modular implementation of ADTs Set and Collection)

5.	Object oriented in C++. (C5+ S5)
-	Classes and objects.
-	Members of a class. Access modifiers.
-	Constructors / destructors
-	UML diagrams for classes (members, accessibility).
-	Association and aggregation relations  between  
                 classes -UML representation;
(L5- object oriented implementation of ADT Rational_Number, Polynomial)

6.	Operators’ overloading. Static members. Friends. (C6)
-	Class Linked_List. Iterator on list. (S6)
(L6- object oriented implementation ADT List)
 
7.	Inheritance  (C7+S7)
-	Simple inheritance. Derived classes.
-	Substitution principle.
-	Method overriding.
-	Multiple inheritance. 
-	Specialization/generalization relation - UML representation.
 (L7- Linked lists implementation)

8.	Polymorphism.  (C8+S8)
-	Virtual methods.
-	Dynamic binding. 
-	Virtual inheritance.
-	Code reusing (inheritance/composition).
-	Conversions (upcast/downcast).

9.	Object oriented design and interface based design. (C9+S9)
-	Abstract classes, interfaces.
-	UML representation for interfaces.
-	Object oriented design of a library of the basic data structures 
(L8, L9- implementation of a library of the basic data structures:  collections, sets, maps, lists, trees)

10.	Input/output operation.  (C10+S10)
-	I/O streams. I/O Hierarchies of classes.
-	Format. Manipulators.
-	Files.
(L10 –I/O operations – different tests)

11.	Templates. (C11+S11)
-	Template functions. Template classes. 
-	Source-code reusing.
(L11-ADT List implementation using Templates)

12.	STL  libraries(C12+S12)
-	Container classes and iterators.
-	 STL algorithms.
(L12 – programs that use STL sorting algorithms)

13.	Exception handling. (C13+S13)
-	Notion of exception in programming.
-	Exception handling. in C++.
(L13- robust implementations of ADT Stack and Queue using exception handling)

14.	Visual C++ environment. (C14+S14) 
  (L14- simple program in Visual C++)

VII. Didactic methods used

VIII. Assessment
Final grade is obtained based on: 
A.	Laboratory activity N1: 25% 
B.	Seminar activity N2: 15%
C.	Written exam N3: 40%
D.	Practical exam N4: 20%
The written exam and the practical exam are sustained during the exams’ session. 
Final grade NF = (N1*25+N2*15+N3*40+N4*20)/100

IX. Additional references
1.	Vasile Prejmerean, Programare orientate obiect (Note de curs), http://cs.ubbcluj.ro/~per/oop.html
2.	A. Alexandrescu, Programarea modernă in C++. Programare generică si modele de proiectare aplicate, Editura Teora, 2002.(Biblioteca).
3.	B. Parv, A. Vancea, Fundamentele limbajelor de programare, Microinformatica, Cluj-Napoca, 1996 (Biblioteca).
4.	B. Stroustrup, The C++ Programming Language, Addison Wesley, 1997 http://public.research.att.com/~bs/3rd.html. 
5.	Peter Müller, Introduction to Object-Oriented Programming Using C++, (pmueller@uu-gna.mit.edu), Globewide Network Academy (GNA), www.gnacademy.org/ August 31, 1997 http://www.zib.de/visual/people/mueller/Course/Tutorial/tutorial.html
6.	Mark J. Sebern, STL Iterator Classes, Version 1.2 (1/4/1998), http://www.msoe.edu/eecs/ce/courseinfo/stl/iterator.htm
7.	John Copp, C++ Programming Tutorial, http://cplus.about.com/od/beginnerctutorial/l/blcplustut.htm
8.	C++ Standard Template Library, http://www.cppreference.com/cppstl.html

	Date,							Course responsible,
								Assoc.Prof. NICULESCU Virginia, Ph.D.