Universitatea Babeş-Bolyai Cluj-Napoca
Facultatea de Matematică şi Informatică
Ciclul de studii: Licenţă
Domeniul: Calculatoare şi tehnologia informaţiei
Programul de studii: Ingineria informatiei - in limba romana
Limba de predare: Română

SYLLABUS

I. Date generale
Codul	Disciplina	
MID0011	Fundamentele limbajelor de programare	

Semestrul	Ore: C+S+L+P	Categoria	Statutul	
4	2+0+1+1	complementara	opţională	

II. Cadre didactice cu norma de bază în Universitate
Numele şi	Titlul	Gradul	Catedra	Tipul activităţii	
prenumele	ştiinţific	didactic		C	S	L	
VANCEA Alexandru Ioan	Dr. 	Lect.	Sisteme Informatice	*			

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

III. Obiectivele disciplinei
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;	

IV. Conţinutul disciplinei
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.

V. Bibliografie
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.	
VI. Tematica activităţilor didactice pe săptămâni
Curs (saptamanile S1-S14):

S1+S2. Evolutia si proiectarea limbajelor de programare. Paradigme de programare.
S3+S4. Traducerea si executia programelor . 
S5+S6. Variabile, expresii, instructiuni. Declaratii. Structuri de control. 
S7+S8  Tipuri de date si structuri de date. Echivalenta si compatibilitate de tip. Probleme de inconsistenta ale utilizarii tipurilor de data. 
S9  Vizibilitate si durata de viata. Determinarea statica si determinarea dinamica a domeniului de vizibilitate. Durata de viata a unei variabile. 
S10. Proceduri. Transmiterea parametrilor. 
S11. Genericitate. Efect secundar. Corutine. 
S12. Implementarea subprogramelor in limbaje fara structura de bloc si respectiv in limbaje cu structura de bloc. 
S13. Facilitati de tratare a exceptiilor in cadrul limbajelor de programare. 
S14. Paradigma programarii vizuale. Studii de caz: Visual Basic, Visual C++, Borland Delphi.

Laborator:

1.	Analiza unui limbaj de programare experimental: proiect de semestru pe echipe formate din 3-4 studenţi (L1+L2+L3);
2.	Facilităţi de compilare separată şi programarea multimodul. Elemente de nivel scăzut în cadrul limbajelor de programare de nivel înalt (L4+L5);
3.	Domeniu de vizibilitate, durată de viaţă, alocare (L6+L7); 
4.	Implementarea tipurilor de dată (studiu de caz: record cu variante şi analiza mecanismului de aliere)  (L8+L9); 
5.	Proceduri şi implementarea metodelor de transmitere a parametrilor (L10+L11);
6.	Paradigma programării vizuale şi tratarea excepţiilor (L12); 
7.	Predarea proiectului şi a temelor de laborator şi evaluarea activităţii de semestru (L13+14); 

Proiect:

ANALIZA CRITICA SI COMPARATIVA A UNUI LIMBAJ DE PROGRAMARE EXPERIMENTAL

1.	alegerea unui limbaj de programare experimental de pe Internet ce dispune de o implementare free ; transferul pachetului ales de pe Internet si instalarea pe una dintre platformele disponibile nivelul retelei universitatii (Linux, Windows, DOS) (saptamanile S1 si S2) ;
2.	familiarizarea cu modul de operare si elaborarea unei documentatii in acest sens care sa contina si exemple edificatoare de programme ; prezentarea sintaxei insotita de scurte exemple commentate ; (saptamanile S3 si S4) ;
3.	elaborarea unui studiu asupra limbajului si a unei analize critice comparative (in raport cu alte limbaje de programare cu care studentul este familiarizat) care sa contina in esenta :
- paradigma de programare in care se incadreaza cu justificare comparativa prin exemple de programe comentate si cu analiza oportunitatii dezvoltarii limbajului in cadrul paradigmei (saptamanile S5 si S6);
   - tipuri de date, declaratii, domenii de vizibilitate, clase de memorie, tipuri de alocari, operatori specifici si modul lor de actiune, subrutine si modalitati de transmitere a parametrilor, facilitati low-level, modalitati de tratare a exceptiilor, etc; in eventualitatea acceptarii paradigmei obiectuale, cum se defineste mostenirea, ce caracteristici au metodele, cum se implementeaza etc. (saptamanile S7 si S8)
   - ce elemente noi pretind autorii lui ca au introdus si cum functioneaza ele la nivelul implementarii pe care ati instalat-o ?  (saptamanile S9 si S10) ;
-	pareri personale asupra oportunitatii dezvoltarii limbajului, asupra punctelor forte si a slabiciunilor acestuia, asupra utilitatii lui potentiale in raport cu necesitatile actuale din programare. (saptamanile S11 si S12) ;
   4. predarea proiectului, discutia sa in echipa de laborator si evaluarea finala (saptamanile S13 si S14);	

VII. Metode didactice folosite
Expunerea: descrierea, explicaţia, prelegerea magistrală, prelegerea dialog, prelegerea cu demonstraţii, prelegeri introductive, prelegeri curente, prelegeri de sinteză. 
Conversaţia: dezbaterea, dialogul, conversaţii introductive, conversaţii de fixare şi consolidare a cunoştinţelor, conversaţii de sistematizare şi sinteză, conversaţii de aplicare.
Problematizarea: utilizarea întrebărilor-problemă, problemelor şi situaţiilor-problemă. 
Descoperirea: redescoperirea dirijată şi independentă, descoperirea creativă, descoperirea inductivă, descoperirea deductivă, descoprirea analogică, descoperirea prin documentare, descoperirea experimentală.
  Alte metode: studiul de caz; cooperarea, simularea, brainstorming-ul, studiul individual, exerciţiul.	

VIII. 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.
Colocviu (proba scrisa combinata cu evaluarea activitatii de la laborator din timpul semestrului). Nota finala se obtine ca medie dintre:
- nota de la lucrarea scrisă – 60%;
- nota pe activitatea la laborator – 20%;
- nota pe evaluarea proiectului de semestru (corectitudinea si consistenta analizei si evaluarilor, completitudinea documentarilor) – 20%;.
Detalii cerinte pentru promovarea cursului se gasesc la http://www.cs.ubbcluj.ro/~vancea/FLP/Cerinte_promovare_FLP.htm	

IX. Bibliografie suplimentară
1.	http://www.programmingtutorials.com/cplusplus.aspx
2.	http://chortle.ccsu.edu/CS151/cs151java.html
3.	http://home.cfl.rr.com/eaa/Languages.htm
4.	http://www.cs.wustl.edu/~schmidt/C++/

	Decan,							Sef de catedra,

	Data,							Titular curs,
	12  aprilie  2010					Lect. Dr.  VANCEA Alexandru Ioan