fişa disciplinei
1. Date despre program
1.1 Instituţia de învăţământ superior	Universitatea Babeş-Bolyai din Cluj-Napoca	
1.2 Facultatea	Facultatea de Matematică şi Infrormatică	
1.3 Departamentul	Departamentul de Informatică	
1.4 Domeniul de studii	Informatică	
1.5 Ciclul de studii	Informatică 3 ani	
1.6 Programul de studiu / Calificarea	Informatică	

2. Date despre disciplină
2.1 Denumirea disciplinei	Fundamentele programării	
2.2 Titularul activităţilor de curs	Lect. dr. Ioan Lazăr	
2.3 Titularul activităţilor de seminar	Lect. Dr. Laura Dioşan
Asist. Dr. Camelia Şerban
Asist. dr. Radu Găceanu
Drd. Adela Sârbu
Drd. Gabriel Glodean	
2.4 Anul de studiu	1	2.5 Semestrul	1	2.6. Tipul de evaluare	E	2.7 Regimul disciplinei	Obligatorie	

3. Timpul total estimat (ore pe semestru al activităţilor didactice)
3.1 Număr de ore pe săptămână	6	Din care: 3.2 curs	2	3.3 seminar/laborator	2 sem
2 lab	
3.4 Total ore din planul de învăţământ		Din care: 3.5 curs		3.6 seminar/laborator		
Distribuţia fondului de timp:	ore	
Studiul după manual, suport de curs, bibliografie şi notiţe	14	
Documentare suplimentară în bibliotecă, pe platformele electronice de specialitate şi pe teren	12	
Pregătire seminarii/laboratoare, teme, referate, portofolii şi eseuri	14	
Tutoriat	8	
Examinări 	18	
Alte activităţi: ..................	-	
3.7 Total ore studiu individual	66	
3.8 Total ore pe semestru	150	
3.9 Numărul de credite	6	

4. Precondiţii (acolo unde este cazul)
4.1 de curriculum	-	
4.2 de competenţe	-	

5. Condiţii (acolo unde este cazul)
5.1 De desfăşurare a cursului	•	Sală, plus proiector	
5.2  De desfăşurare a seminarului/laboratorului	•	Laboratoare echipate cu Python	

6. Competenţele specifice acumulate
Competenţe profesionale	•	Înţelegerea conceptelor de bază privind programarea şi ingineria software.
•	Invatarea limbajului Python. 
•	Însuşirea celor mai bune recomandări privind dezvoltarea aplicaţiilor cu o arhitectură stratificată minimală.
•	Înţelegrerea testării şi verificării în scrierea unor programe de calitate.	
Competenţe transversale	•	Abilitatea de a aplica conceptele, principiilor şi tehnicilor însuşite în rezolvarea unor probleme reale.
•	Executarea responsabila a sarcinilor de laborator.
•	Manifestarea unei atitudini responsabile in activitatile didactice si stiintifice..
•	Respectarea principiilor profesionale si etice.	

7. Obiectivele disciplinei (reieşind din grila competenţelor acumulate)
7.1 Obiectivul general al disciplinei	•	Sa cunoasca concepele de baza ale ingineriei software (proiectare, implementare si intretinere) si sa invete limbajul de programare Python.	
7.2 Obiectivele specifice

	•	Sa cunoasca conceptele de baza ale programarii
•	Sa cunoasca conceptele de baza ale ingineriei software
•	Sa foloseasca instrumente de baza pentru construirea programelor
•	Sa invete limbajul Python si instrumente de dezvoltare pentru programarea, executia si depanarea programelor Python.
•	Sa-si insuseasca un stil de programare conform celor mai bune recomandari practice.	

8. Conţinuturi
8.1 Curs	Metode de predare	Observaţii	
1. Introducere in procese de dezvoltare software
•	Ce este programarea: algoritm, program, elemente de baza Python, interpretor Python, roluri in ingineria software
•	Cum scriem programe: enunt problema, cerinte, proces de dezvoltare dirijat de functionalitati (FDD)
•	Exemple: calculator	•	Expunere interactiva
•	Explicatie
•	Conversatie
•	Exemple
•	Demonstratie didactica		
2. Programare procedurala
•	Tipuri structurate: liste, tuple, dictionare
•	Functii: cazuri de testare, definire, cariabile, apel
•	Transmiterea parametrilor
•	Functii anonime
•	Cum scriem functii:programare dirijata de teste, refactorizari	•	Expunere interactiva
•	Explicatie
•	Conversatie
•	Exemple
•	Demonstratie didactica		
3. Programare modulara
•	Ce este un modul: modul Python, domeniul variabilelor, pachete, module standard, distribuire module
•	Cum organizam codul sursa: responsabilitati, single responsibility principle, separation of concerns, dependency, coupling, cohesion
•	Arhitecturi software stratificate
•	Eclipse+PyDev	•	Expunere interactiva
•	Explicatie
•	Conversatie
•	Exemple
•	Demonstratie didactica		
4.	Tipuri definite de utilizator
•	Cum definim tipuri noi
•	Incapsulare, ascunderea informatiei, tipuri abstracte de date	•	Expunere interactiva
•	Explicatie
•	Conversatie
•	Exemple
•	Demonstratie didactica		
5. Principii de proiectare si programare
•	Problema: program cu operatii CRUD pe entitati de un tip dat
•	Arhitectura stratificata: UI, Domeniu, Infrastructura 
•	Sabloane GRASP
•	Sabloane DDD: entity, validator, repository, controller
•	Principii: Information Expert, Low Coupling, High Cohesion, Protected Variation, Single responsibility, Dependency Injection
	•	Expunere interactiva
•	Explicatie
•	Conversatie
•	Exemple
•	Demonstratie didactica		
6. Programare orientata pe obiecte
•	Obiecte si clase
•	Diagrame UML
•	Mostenire
•	Exceptii
	•	Expunere interactiva
•	Explicatie
•	Conversatie
•	Exemple
•	Demonstratie didactica		
7. Proiectarea programelor
•	Top down and bottom up strategies: 
•	Organizarea elementelor UI si relatia cu alte straturi	•	Expunere interactiva
•	Explicatie
•	Conversatie
•	Exemple
•	Demonstratie didactica		
8. Testarea si inspectarea programelor
•	Black box testing, white box testing
•	Unit testing, integration testing
•	Program inspection: coding style, refactoring	•	Expunere interactiva
•	Explicatie
•	Conversatie
•	Exemple
•	Demonstratie didactica		
9. Recursivitate
•	Recursivitate directa si indirecta
•	Exemple	•	Expunere interactiva
•	Explicatie
•	Conversatie
•	Exemple
•	Demonstratie didactica		
10. Complexitatea algoritmilor
•	Notatia asimptotica: big-o, little-o, big-omega, little-omega, theta
•	Comparatii algoritmi
	•	Expunere interactiva
•	Explicatie
•	Conversatie
•	Exemple
•	Demonstratie didactica		
11. Metoda Backtracking 
•	Algoritmul Backtracking 
•	Extensii ale algoritmului
•	Exemple	•	Expunere interactiva
•	Explicatie
•	Conversatie
•	Exemple
•	Demonstratie didactica		
12. Metoda divizarii
•	Descriere Metoda
•	Exemple
Algoritmi de cautare 
•	catuatare secventiala
•	cautare binara
•	complexitatea algoritmilor	•	Expunere interactiva
•	Explicatie
•	Conversatie
•	Exemple
•	Demonstratie didactica		
13 Algoritmi de sortare
•	BubbleSort
•	SelectionSort 
•	InsertionSort
•	QuickSort
•	MergeSort
•	Cmplexitatea algoritmilor	•	Expunere interactiva
•	Explicatie
•	Conversatie
•	Exemple
•	Demonstratie didactica		
14. Recapitulare	•	Expunere interactiva
•	Conversatie		
Bibliografie
1.	Kent Beck.Test Driven Development: By Example. Addison-Wesley Longman, 2002. See also Test-driven development. http://en.wikipedia.org/wiki/Test-driven_development
2.	Martin Fowler. Refactoring. Improving the Design of Existing Code. Addison-Wesley, 1999. See also http://refactoring.com/catalog/index.html
3.	Frentiu, M., H.F. Pop, Serban G., Programming Fundamentals, Cluj University Press, 2006
4.	The Python language reference. http://docs.python.org/py3k/reference/index.html
5.	The Python standard library. http://docs.python.org/py3k/library/index.html
6.	The Python tutorial. http://docs.python.org/tutorial/index.html	
8.2 Seminar / laborator	Metode de predare	Observaţii	
1. Programe Python	•	Expunere interactiva
•	Explicatie
•	Conversatie
•	Exemple
•	Demonstratie didactica		
2. Programare procedurala	•	Expunere interactiva
•	Explicatie
•	Conversatie
•	Exemple
•	Demonstratie didactica		
3. Programare modulara	•	Expunere interactiva
•	Explicatie
•	Conversatie
•	Exemple
•	Demonstratie didactica		
4. Tipuri definite de utilizator	•	Expunere interactiva
•	Explicatie
•	Conversatie
•	Exemple
•	Demonstratie didactica		
5. Principii de proiectare	•	Expunere interactiva
•	Explicatie
•	Conversatie
•	Exemple
•	Demonstratie didactica		
6. POO	•	Expunere interactiva
•	Explicatie
•	Conversatie
•	Exemple
•	Demonstratie didactica		
7. Proiectare	•	Expunere interactiva
•	Explicatie
•	Conversatie
•	Exemple
•	Demonstratie didactica		
8. Testare si inspectare	•	Expunere interactiva
•	Explicatie
•	Conversatie
•	Exemple
•	Demonstratie didactica		
9. Recursivitate	•	Expunere interactiva
•	Explicatie
•	Conversatie
•	Exemple
•	Demonstratie didactica		
10. Complexitatea algoritmilor	•	Expunere interactiva
•	Explicatie
•	Conversatie
•	Exemple
•	Demonstratie didactica		
11. Backtracking	•	Expunere interactiva
•	Explicatie
•	Conversatie
•	Exemple
•	Demonstratie didactica		
12. Metoda injumatatirii. Algoritmi de cautare	•	Expunere interactiva
•	Explicatie
•	Conversatie
•	Exemple
•	Demonstratie didactica		
13. Pregatirea examenului practic	•	Expunere interactiva
•	Explicatie
•	Conversatie
•	Exemple
•	Demonstratie didactica		
14: Pregatirea examenului scris	•	Expunere interactiva
•	Explicatie
•	Conversatie
•	Exemple
•	Demonstratie didactica		
Bibliography

1.	Kent Beck.Test Driven Development: By Example. Addison-Wesley Longman, 2002. See also Test-driven development. http://en.wikipedia.org/wiki/Test-driven_development
2.	Martin Fowler. Refactoring. Improving the Design of Existing Code. Addison-Wesley, 1999. See also http://refactoring.com/catalog/index.html
3.	Frentiu, M., H.F. Pop, Serban G., Programming Fundamentals, Cluj University Press, 2006
4.	The Python language reference. http://docs.python.org/py3k/reference/index.html
5.	The Python standard library. http://docs.python.org/py3k/library/index.html
6.	The Python tutorial. http://docs.python.org/tutorial/index.html	

9. Coroborarea conţinuturilor disciplinei cu aşteptările reprezentanţilor comunităţii epistemice, asociaţiilor profesionale şi angajatori reprezentativi din domeniul aferent programului
•	 The course respects the IEEE and ACM Curricula Recommendations for Computer Science studies.
•	The course exists in the studying program of all major universities in Romania and abroad.
•	The content of the course is considered the software companies as important for average programming skills	

10. Evaluare
Tip activitate	10.1 Criterii de evaluare	10.2 metode de evaluare	10.3 Pondere din nota finală	
10.4 Curs	Cunostintele acumulate	Examen scris	40%	
				
10.5 Seminar/laborator	Scrierea unui program	Examen practic	30%	
	Programele scrise in timpul semestrului	Documentatie
	30%	
10.6 Standard minim de performanţă	
•	 Minimum 5 la fiecare proba.

	

Data completării		Semnătura titularului de curs		Semnătura titularului de seminar
	26.09.12			Lect. dr. Ioan Lazar			Lect. Dr. Laura Dioşan
										Asist. Dr. Camelia Şerban
										Asist. dr. Radu Găceanu
										Drd. Adela Sârbu
									Drd. Gabriel Glodean

Data avizării în departament			           		Semnătura directorului de departament
26.09.12							Prof. dr. Bazil Pârv