Disciplina: Fundamentele limbajelor de programare	Cod: MI034	

Semestrul	Ore: C+S+L	Tipul	Specializarea	
6	2+0+1	optionala	Matematică-Informatică	

Cadre didactice indrumatoare	Lect. Dr. VANCEA Alexandru Ioan, vancea@cs.ubbcluj.ro
Lect. KOVACS Lehel, klehel@cs.ubbcluj.ro	
Obiective	Dobandirea de cunostinte asupra conceptelor generale si fundamentale relative la proiectarea si implementarea limbajelor de programare, in contrast cu invatarea detaliata a unuia sau doua limbaje fara a intelege pe deplin semnificatia conceptelor vehiculate; 
Analiza critica a elementelor de limbaj dezvoltate pana in prezent cu accent pe o comparatie a avantajelor si dezavantajelor prezentate de fiecare; Dezvoltarea capabilitatilor decizionale si analitice ale studentilor, trasaturi care ii vor evidentia si defini intr-un mod avansat in raport cu un simplu programator; 
Ca obiectiv imediat se asteapta ca studentul sa fie capabil de a aprofunda mult mai repede orice limbaj de programare in fata caruia va fi pus, deoarece acest proces se va face intotdeauna de acum inainte prin prisma conceptelor si mecanismelor general valabile la nivelul proiectarii si implementarii limbajelor de programare, intelese si retinute de-a lungul semestrului	
Continut	1. Evolutia limbajelor de programare. 
2. Proiectarea limbajelor de programare. 
2.1. Etapele realizarii unui produs program. 
2.2. Criterii de proiectare a unui limbaj de programare. 
2.3. Criterii de calitate ale unui produs program. 
3. Lexic, sintaxa, semantica. 
3.1. Specificarea sintaxei unui limbaj de programare: BNF. Diagrame de sintaxa. Gramatici si automate. 
3.2. Traducerea programelor. Clasificari ale programelor traducatoare. Structura unui program traducator. Analiza: lexicala, sintactica, semantica. Sinteza: generarea codului intermediar si obiect. 
4. Variabile, expresii, instructiuni. 
4.1. Notiunea de variabila. Limbaje imperative si declarative. Instructiunea de atribuire. 
4.2. Expresii. Componente, tipuri, modalitati de evaluare. 
4.3. Structuri esentiale de control. Instructiuni conditionale. Instructiuni repetitive. Instructiuni de transfer. 
5. Tipuri de date si structuri de date. 
5.1. Notiunea de tip de data. Definitie si componente. 
5.2. Clasificari ale tipurilor de date. 
5.3. Tipuri de date predefinite. Tipuri numerice. Tipul Boolean. Tipul caracter si sir de caractere. 
5.4. Tipuri de date utilizator. Tipul multime. Tipul tablou. Tipul inregistrare. Tipul pointer. 
5.5. Echivalenta tipurilor de date. 
5.6. Probleme de inconsistenta ale utilizarii tipurilor de data. 
6. Vizibilitate si durata de viata. 
6.1. Domeniul de vizibilitate al unui nume. Determinarea statica a domeniului de vizibilitate. Determinarea dinamica a domeniului de vizibilitate. 
6.2. Durata de viata a unei variabile. 
6.3. Mecanisme de alocare a memoriei. Alocarea statica. Alocarea dinamica cu stiva de inregistrari. Alocarea dinamica cu fragmentare. 
7. Proceduri. Transmiterea parametrilor. 
7.1. Conceptul de procedura (subprogram). 
7.2. Metode de transmitere a parametrilor. 
7.3. Supraincarcarea operatorilor si a procedurilor. 
7.4. Recursivitate. Proceduri mutual recursive. 
7.5. Genericitate. 
7.6. Efect secundar. 
7.7. Corutine. 
7.8. Implementarea subprogramelor in limbaje fara structura de bloc si respectiv in limbaje cu structura de bloc. 
8. Facilitati de tratare a exceptiilor in cadrul limbajelor de programare. 
9. Paradigma programarii vizuale. Studii de caz: Visual Basic, Borland Delphi.	
Bibliografie selectiva	1. FRENTIU, M., PARV, B.: Elaborarea programelor: metode si tehnici moderne, ProMedia, Cluj-Napoca, 1994. 
2. GHEZZI, C., JAZAYERI, M.: Programming Language Concepts, John Wiley, 1972. 
3. HOROWITZ, E.: Fundamentals of Programming Languages, Springer, 1973. 
4. MACLENNAN, B.J.: Principles of Programming Languages: Design, Evaluation and Implementation, Holt, Rinehart and Winston, 1973. 
5. PARV, B., VANCEA, A.: Fundamentele limbajelor de programare, Fascicolele 1-2, Lito Univ. "Babes-Bolyai", 1992. 
6. PRATT, T.W.: Programming Languages: Design and Implementation, Prentice Hall, 1975 
7. SHAMMAS, N.: Object Oriented Programming with Turbo Pascal, Prentice-Hall, 1990 
7. VOSS, G.: Object-Oriented Programming: An Introduction, Osborne McGraw-Hill, 1991. 
9. PARV, B., VANCEA, A.: Fundamentele limbajelor de programare, Ed.Microinformatica, 1996. 
10. * * * - Reteaua Internet.	
Evaluare	- lucrarile de laborator trebuie insotite de analize asupra elementelor de limbaj implicate precum si de comparatii intre acestea; 
- se pune accent nu pe reproducerea unor aspecte sintactice din cadrul limbajelor de programare, ci pe semantica lor, deci pe intelegerea intregii functionalitati si a implicatiilor ce le comporta prezenta unor constructii de limbaj; 
- se evalueaza capacitatea de a prezenta in scris, coerent si complet, o scurta documentatie de produs program precum si a subiectelor primite ca examen scris.