Universitatea Babeş-Bolyai Cluj-Napoca
Facultatea de Matematică şi Informatică
Ciclul de studii: Licenţă
Domeniul: Matematică
Programul de studii: Matematică - linia de studiu română
Limba de predare: Română

SYLLABUS

I. Date generale
Codul	Disciplina	
MID0002	Programare orientată obiect	

Semestrul	Ore: C+S+L	Categoria	Statutul	
2	2+1+1	fundamentala	obligatorie	

II. Cadre didactice cu norma de bază în Universitate
Numele şi	Titlul	Gradul	Catedra	Tipul activităţii	
prenumele	ştiinţific	didactic		C	S	L	
DIOŞAN Laura Silvia	Dr.	Lector	Limbaje şi Metode de Programare	*	*	*	

Cadre didactice asociate
Numele şi	Titlul	Instituţia	Tipul	Tipul activităţii	
prenumele	ştiinţific		postului	C	S	L	

III. Obiectivele disciplinei
După însuşirea materialului prezentat la această disciplină studenţii ar trebui:
•	să poată rezolva probleme de dimensiuni mici şi medii într-o manieră orientată pe obiecte
•	să poată evidenţia diferenţa între proiectarea funcţională tradiţională şi proiectarea orientată pe obiecte
•	să înţeleagă rolul moştenirii, polimorfismului, legării dinamice şi a structurilor generice în dezvoltarea unor programe reutilizabile
•	să explice şi să folosească diferite strategii de programare referitor la tratarea excepţiilor şi aserţiuni formale
•	să poată scrie programe C++ de dimensiuni mici/medii 
•	în timpul rezolvării unei probleme să folosească clase scrise de alţi programatori 
•	să înţeleagă şi să folosească structurile de date fundamentale	

IV. Conţinutul disciplinei
Elemente fundamentale ale limbajului C++
Programarea orientată pe obiecte: necesitate, caracteristici, concepte de bază, avantaje, limbaje de programare
Proiectare orientată-obiect şi proiectare bazată pe interfeţe. Şabloane de proiectare elementare.	

V. Bibliografie
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 modernă in C++. Programare generică 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. Bruce Eckel, Thinking in C++, 2003, www.bruceeckel.com	

VI. Tematica activităţilor didactice pe săptămâni
În prima parte a cursului sunt introduse gradat conceptele programarii orientate pe obiecte. Pentru exemplificări este folosit limbajul C++. Sunt supuse dezbaterilor diferite structuri de date care au fost prezentate in cursul Fundamentele Programarii. În partea a doua sunt prezentate subiecte mai avansate de programare C++: ierarhii de clase standard, programarea dirijata de evenimente, componente C++ pentru interfaţa cu utilizatorul, tratarea excepţiilor, şabloane de proiectare.

Saptamana 1.	
Curs
Elemente de baza ale limbajului C++ (1) 
-	Elemente lexicale. Operatori. Conversii.
-	Tipuri de date. Variabile. Constante. 
-	Domeniu de vizibilitate si durata de viata a variabilelor.
-	Spatii de nume.
-	Instructiuni  C++.
-	Declararea si definitia functiilor in C++.
-	Supraincarcarea functiilor.
-	Functii inline.
Seminar (săptămâna 1 şi săptămâna 2)
Probleme simple în C++. Funcţii. Parametrii funcţiilor. Variabile (globale şi locale) şi vizibilitatea lor. Vectori (uni şi multi dimensionali) şi structuri. 
Laborator (săptămâna 1 şi săptămâna 2)
Specificarea, proiectarea şi implementarea unor probleme simple în C/C++. Aspecte generale ale limbajului C++. Versiunile structurată şi modulară ale unei aplicaţii în C++.
Saptamana 2.	
Curs
Tipuri de date derivate si utilizator si alocare dinamica in C++. 
-	Tipurile tablou si structura.
-	Tipurile pointer si referinta. 
-	Alocarea si dealocarea memoriei.
-	Pointeri la functii si pointeri void.
Programare modulara in C++.
-	Fisiere header. Biblioteci.
-	Implementari modulare de tipuri abstracte de date.
-	Folosirea tipului pointer void pentru obtinerea genericitatii.
Saptamana 3.	
Curs
Metoda programarii orientate-obiect in C++. 
-	Clase si obiecte.
-	Membrii unei clase. Specificatori de acces.
-	Constructori / destructori
-	Diagrame UML pentru clase (membrii, acces).
Seminar (săptămâna 3 şi săptămâna 4)
TAD container cu elemente simple şi structurate: reprezentare vizibilă şi ascunsă. Citiri şi scrieri din/în fişiere.
Laborator (săptămâna 3 şi săptămâna 4)
Specificarea, proiectarea şi implementarea unui TAD în C/C++. Reprezentarea, operaţiile şi utilizarea unui TAD.
Saptamana 4.	
Curs
Supraincarcarea operatorilor. 
Elemente (date membre si functii) statice. 
Elemente friends. 
Saptamana 5.	
Curs
Exemple de containere si iteratori asociati lor
-	Liste (simplu si dublu) inlantuite
-	Stive
-	Cozi
-	Tabele de dispersie 
Relatia de asociere/agregare intre clase - reprezentare UML
Seminar (săptămâna 5 şi săptămâna 6)
Clase. Clase simple. Supraîncărcarea operatorilor. Clase cu date membre de tip obiect.
Laborator (săptămâna 5 şi săptămâna 6)
Clase şi obiecte: Specificarea, proiectarea şi implementarea unei clase  în C/C++. Constructori, destructor, accesori şi mutatori. Supraîncărcarea operatorilor. Obiecte statice şi dinamice. 
Saptamana 6.
Curs
Relatia de mostenire  
-	Mostenire simpla. Clase derivate.
-	Principiul substitutiei.
-	Suprascrierea metodelor.
-	Mostenire multipla. 
-	Relatia de specializare/generalizare intre clase - reprezentare UML.
Saptamana 7.	
Curs
Clase abstracte si polimorfism.  
-	Metode virtuale.
-	Legare dinamica. 
-	Mostenire virtuala.
-	Reutilizare cod (mostenire/compozitie).
-	Conversii (upcast/downcast).
Seminar (săptămâna 7 şi săptămâna 8)
Clase. Clase cu date membre de tip obiect. Clase de tip listă dinamică şi iteratori.
Laborator (săptămâna 7 şi săptămâna 8)
Clase şi obiecte: Clase cu date membre de tip obiect. Clase de tip listă dinamică şi iteratori Specificarea, proiectarea şi implementarea unei clase  în C/C++. Constructori, destructor, accesori şi mutatori. Supraîncărcarea operatorilor. Obiecte statice şi dinamice. 
Saptamana 8.	
Curs
Proiectare orientata-obiect si proiectare bazata pe interfete. 
-	Interfete.
-	Reprezentare UML pentru interfete.
-	Proiectarea orientata-obiect a unei biblioteci de structuri de date.
Saptamana 9.
Curs
Sabloane (Template). 
-	Functii template. Clase template. 
-	Reutilizarea codului sursa.
Seminar (săptămâna 9 şi săptămâna 10)
Mosteniri. Clase abstracte şi interfeţe. 
Laborator (săptămâna 9 şi săptămâna 10)
Clase şi obiecte: moşteniri, clase abstracte şi interfeţe. Specificarea, proiectarea şi implementarea unei clase  în C/C++. Constructori, destructor, accesori şi mutatori. Supraîncărcarea operatorilor. Obiecte statice şi dinamice. 
Saptamana 10.
Curs
Operatii de intrare/iesire.  
-	Fluxuri de intrare/ iesire. Ierarhii de clase pentru I/O.
-	Formatare. Manipulatori.
-	Lucrul cu fisiere.
Saptamana 11.
Curs
Tratarea exceptiilor. 
-	Notiunea de exceptie in programare
-	Tratarea exceptiilor in C++.
Seminar (săptămâna 11 şi săptămâna 12)
Polimorfism. Clase template şi excepţii. 
Laborator (săptămâna 11 şi săptămâna 12)
Clase şi obiecte: polimorfism, template, excepţii. Specificarea, proiectarea şi implementarea unei clase  în C/C++. Constructori, destructor, accesori şi mutatori. Supraîncărcarea operatorilor. Obiecte statice şi dinamice. 
Saptamana 12.
Curs
Biblioteca STL 
-	Clase container si iterator.
-	 Folosirea algoritmilor din STL.
Saptamana 13.
Curs
Sabloane de proiectare
-	Test Driven Development.
-	folosirea instrumentelor specializate de testare.
Seminar (săptămâna 13 şi săptămâna 14)
Implementarea unei probleme respectând o diagramă UML.
Saptamana 14.
Curs
Sabloane de proiectare
-	Singleton.
-	Model-View-Controller.
-	Depozite de date.	

VII. Metode didactice folosite
Prelegeri, expuneri, conversaţii, exerciţii, studiu individual.	

VIII. Evaluare
Studenţii vor primi câte o notă pentru:
A. Activitatea de laborator N1
B. Activitatea de seminar N2
C. Lucrarea scrisă N3
D. Proba practică N4

Nota finală se calculează ca o medie ponderată astfel: 
N1 * 20% + N2 * 10% * N3 * 50% + N4 * 20%

Lucrarea scrisă este susţinuta în timpul sesiunii ca şi examen final. Proba practică va fi susţinută în ultima săptămână a semestrului.
Lucrarea scrisă constă din întrebări teoretice şi exerciţii, iar proba practică din rezolvarea unei probleme pe calculator.
Informaţii suplimentare relative la cerinţele pentru participarea la examinare şi modul de evaluare se găsesc la adresa:  http://www.cs.ubbcluj.ro/~lauras sau în reţeaua locală urmând calea \\Win\labor\Romana\An1\MateInfo\POO_2009-2010.	

IX. Bibliografie suplimentară
1. L. Negrescu, Limbajul C++, Ed. Albastra,Cluj-Napoca 1996.
2. Dan Roman, Ingineria programarii obiectuale, Editura Albastra, Cluj_Napoca, 1996.
3. B. Stroustup, The C++ Programming Language, Addison Wesley, 1998.	

Decan,
Prof. dr. Leon Tambulea	Sef de catedra,
Prof. Dr. Bazil Pârv

Data,
1.11.2009	Titular curs,
	Lect. Dr. DIOŞAN Laura Silvia