Sunteți pe pagina 1din 144

Autori, n ordine alfabetic:

Adrian Ni
profesor, Colegiul Naional Emanuil Gojdu, Oradea
Maria Ni
profesor, Colegiul Naional Emanuil Gojdu, Oradea
Nicolae Olroiu
profesor, Colegiul Naional B.P. Hadeu, Buzu
Rodica Pintea
profesor, Liceul Grigore Moisil, Bucureti (capitolul 1)
Cristina Sichim
profesor, Colegiul Naional Ferdinand I, Bacu
Daniela Taras
Inspector Informatic, ISJ Bacu

Suport de curs pentru profesori

Coordonatori:
Mihai Ttran
cadru didactic asociat, Universitatea Politehnic Timioara
Nua Dumitriu-Lupan
inspector General MECT
Petru Jucovschi
Developer Community Lead, Microsoft Romnia

Introducere n

.Net Framework
Ediia 2008

Cerine de sistem
Arhitectura suportat:
x86
x64 (WOW)
Sistem de operare suportat:
Microsoft Windows XP
Microsoft Windows Server 2003
Windows Vista
Cerine Hardware:
Minimum: CPU 1.6 GHz, RAM 192 MB, Rezoluie Monitor 1024x768, Disc 5400 RPM
Recomandat: CPU 2.2 GHz sau mai puternic, RAM 384 MB sau mai mult, rezoluie monitor 1280x1024,
Disc 7200 RPM sau mai mult.
Windows Vista: CPU 2.4 GHz, RAM 768 MB, Spaiu liber disc 1.3 GB pentru instalare complet
Resurse i Instrumente:
www.microsoft.ro/ark - Academic Resource Kit,
educaionale.

colecie de instrumente software i resurse

Cuvnt nainte

Stimai profesori,
Introducere n .NET Framework este un curs dezvoltat n cadrul programului
Microsoft Parteneri pentru Educaie, n colaborare cu un grup de profesori de informatic din Romnia. Pn la sfritul anului colar 2007-2008 va fi disponibil n pe
situl Microsoft Romnia, n pagina Seciuni pentru educaie.
Cursul v propune s explorai tehnologia .NET, cea mai rspndit platform de
aplicaii software. Avei posibilitatea s studiai soluii software i s dezvoltai
aplicaii ce pot fi trimise la concursuri sau pot fi integrate n proiecte educaionale.
Suportul de curs este publicat n dou versiuni. Cea pentru elevi cuprinde doar
componenta de specialitate. Versiunea pentru profesori cuprinde pe lng componenta de specialitate i pe cea metodic de predare.
Suportul de curs poate fi descrcat gratuit i folosit exclusiv n procesul educaional.
Scopul acestei iniiative a programului Parteneri pentru Educaie este de a ncuraja
dezvoltarea profesional a profesorilor i de a da un suflu nou experienei
educaionale la materia Informatic.
mpreun cu partenerii, echipa Microsoft Romnia v mulumete pentru interesul
pentru studiul tehnologiei .Net.
Sperm doamnelor i domnilor profesori, ca aceste materiale s v ajute n predarea
materiei la clas!

Sanda Foamete
SNR Manager de Proiecte Educaionale
Microsoft Romnia

Autori, n ordine alfabetic:

Adrian Ni, profesor, Colegiul Naional Emanuil Gojdu, Oradea


Maria Ni, profesor, Colegiul Naional Emanuil Gojdu, Oradea
Nicolae Olroiu, profesor Colegiul Naional B.P. Hadeu, Buzu
Rodica Pintea, profesor, Liceul Grigore Moisil, Bucureti (capitolul 1)
Cristina Sichim, profesor, Colegiul Naional Ferdinand I, Bacu
Daniela Taras, Inspector Informatic, ISJ Bacu

Coordonatori:

Mihai Ttran, cadru didactic asociat, Universitatea Politehnica din Timioara


Nua Dumitriu-Lupan, Inspector General MECT
Petru Jucovschi, Developer Community Lead, Microsoft Romnia

Formatul electronic al textului digital: PDF


Editat de BYBLOS SRL sub coordonarea Agora Media SA, pentru Microsoft Romnia. Ediia 2008.
ISBN: 973-86699-6-0

Not:
Acest suport de curs este destinat profesorilor ce predau la clasele matematic-informatic i
matematic-informatic intensiv, care au optat n programa colar, pentru variantele: Programare
orientat obiect, Progamare vizual cu C# i Programare web cu Asp.Net. Suportul de curs poate fi
utilizat gratuit exclusiv n procesul de predare-nvare. Este interzis utilizarea suportului de curs
Introducere n .Net Framework pentru scopuri comerciale sau n alte scopuri n afara celui descris
mai sus.
Drepturile de autor asupra suportului de curs Introducere n .Net Framework aparin Microsoft.

Introducere n .Net Framework (Suport de curs)

CUPRINS
1

Programarea Orientat Obiect (POO) cu C# . . . . . . . . . . . . . . . . . . . . . . . . . . . .7


1.1. Evoluia tehnicilor de programare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7
1.2. Tipuri de date obiectuale. ncapsulare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8
1.3. Suprancrcare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9
1.4. Motenire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
1.5. Polimorfism. Metode virtuale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
1.6. Programare orientat obiect n C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11
1.7. Declararea unei clase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11
1.8. Constructori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12
1.9. Destructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14
1.10. Metode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14
1.11. Proprieti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16
1.12. Evenimente i delegri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17
1.13. Interfee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19

2.

Platforma .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .21


2.1. Prezentare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .21
2.2. Compilarea programelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22
2.3. De ce am alege .NET? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23

3.

Limbajul C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25
3.1. Caracterizare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25
3.2. Compilarea la linia de comand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25
3.3. Crearea aplicaiilor consol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26
3.4. Structura unui program C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27
3.5. Sintaxa limbajului . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28
3.6. Tipuri de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30
3.7. Conversii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34
3.7.1. Conversii numerice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34
3.7.2. Conversii ntre numere i iruri de caractere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .36
3.7.3. Conversii boxing i unboxing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38
3.8. Constante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39
3.9. Variabile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39
3.10. Expresii i operatori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39
3.11. Instruciuni condiionale, de iteraie i de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40
3.11.1. Instruciunea if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40

Introducere n .Net Framework (Suport de curs)

3.11.2. Instruciunea while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40


3.11.3. Instruciunea do while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41
3.11.4. Instruciunea for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42
3.11.5. Instruciunea switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42
3.11.6. Instruciunea foreach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43
3.11.7. Instruciunea break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43
3.11.8. Instruciunea continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43
3.11.9. Instruciunea goto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .44
3.12. Instruciunile try-catch-finally i throw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45

4.

Programarea web cu ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47


4.1. Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
4.2. Structura unei pagini ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48
4.3. Controale Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50
4.4. Pastrarea informatiilor in aplicatiile web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51
4.4.1. Pastrarea starii controalelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51
4.4.2. Pastrarea altor informatii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
4.4.2.1. Profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
4.4.2.2. Session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53
4.4.2.3. Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53
4.4.2.3. Membrii statici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54
4.4.3. Concluzii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54
4.5. Validarea datelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54
4.5.1. Proprietati comune . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54
4.5.2. Validatoare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55
4.6. Securitatea n ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55
4.6.1. Windows Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
4.6.2. Forms-Based Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
4.6.3. Securizarea unei aplicaii web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
4.7. Accesul la o baza de date intr-o pagina web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
4.8. Resurse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57

5.

Programare vizual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59


5.1. Concepte de baz ale programrii vizuale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59
5.2. Mediul de dezvoltare Visual C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61
5.3. Ferestre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .62
5.4. Controale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64
5.4.1. Controale form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65
5.4.2. Proprieti comune ale controalelor i formularelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65
5.4.3. Cteva dintre metodele i evenimentele Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66
5.5. System.Drawing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .86
5.6. Validarea informaiilor de la utilizator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87

Introducere n .Net Framework (Suport de curs)

6.

ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89
6.1. Arhitectura ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90
6.2. Furnizori de date (Data Providers) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90
6.3. Connection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90
6.3.1. Exemple de conectare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91
6.3.2. Proprieti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91
6.3.3. Metode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92
6.3.4. Evenimente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92
6.4. Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92
6.4.1. Proprieti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93
6.4.2. Metode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93
6.4.3. Interogarea datelor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95
6.4.4. Inserarea datelor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95
6.4.5. Actualizarea datelor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95
6.4.6. tergerea datelor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .96
6.5. DataReader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99
6.5.1. Proprieti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99
6.5.2. Metode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99
6.6. DataAdapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .101
6.6.1. Proprieti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .102
6.6.2. Metode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .102
6.7. DataSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .102
6.8. SqlParameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104
6.9. Proceduri Stocate (Stored Procedures) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .105
6.10. Proiectarea vizual a seturilor de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .106

7.

MiniGhid Metodologic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .109


I. Programa colar reper obligatoriu pentru un demers flexibil . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
II. Aplicarea programelor colare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
III. Proiectarea demersului didactic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
III.1. Lectura personalizat a programelor colare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113
III.2. Planificarea calendaristic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113
III.3. Proiectarea unei uniti de nvare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114
III.4. Proiectarea activitii de evaluare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .116
III.4.1. Tipuri de itemi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .118
III.4.2. Metode complementare de evaluare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .126
IV. Proiectul unitii de nvare - Proiectul de lecie? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
V. Curriculum la decizia colii - CDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
III. Anexe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
III.1. Anexa 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .133
III.2. Anexa 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .137
III.3. Anexa 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .140

CAPITOLUL

Programarea Orientat Obiect (POO) cu C#


1.1 Evolutia tehnicilor de programare
Programarea nestructurat (un program simplu, ce utilizeaz numai variabile
globale); complicaiile apar cnd prelucrarea devine mai ampl, iar datele se multiplic i se diversific.
Programarea procedural (program principal deservit de subprograme cu parametri formali, variabile locale i apeluri cu parametri efectivi); se obin avantaje
privind depanarea i reutilizarea codului i se aplic noi tehnici privind transferul
parametrilor i vizibilitatea variabilelor; complicaiile apar atunci cnd la program
sunt asignai doi sau mai muli programatori care nu pot lucra simultan pe un acelai
fiier ce conine codul surs.
Programarea modular (gruparea subprogramelor cu funcionaliti similare n
module, implementate i depanate separat); se obin avantaje privind independena i
ncapsularea (prin separarea zonei de implementare, pstrnd vizibilitatea numai asupra
zonei de interfa a modulului) i se aplic tehnici de asociere a procedurilor cu datele
pe care le manevreaz, stabilind i diferite reguli de acces la date i la subprograme.

Se observ c modulele sunt centrate pe proceduri, acestea gestionnd i setul


de date pe care le prelucreaz (date+date1 din figur). Daca, de exemplu, dorim s
avem mai multe seturi diferite de date, toate nzestrate comportamental cu procedurile din modulul module1, aceast arhitectur de aplicaie nu este avantajoas.
Programarea orientat obiect (programe cu noi tipuri ce integreaz att datele,
ct i metodele asociate crerii, prelucrrii i distrugerii acestor date); se obin avantaje prin abstractizarea programrii (programul nu mai este o succesiune de
prelucrri, ci un ansamblu de obiecte care prind via, au diverse proprieti, sunt

Introducere n .Net Framework (Suport de curs)

capabile de aciuni specifice i care interacioneaz n cadrul programului); intervin


tehnici noi privind instanierea, derivarea i polimorfismul tipurilor obiectuale.

1. 2 Tipuri de date obiectuale. ncapsulare


Un tip de date abstract (ADT) este o entitate caracterizat printr-o structur de date
i un ansamblu de operaii aplicabile acestor date. Considernd, n rezolvarea unei
probleme de gestiune a accesului utilizatorilor la un anumit site, tipul abstract USER,
vom obseva c sunt multe date ce caracterizeaz un utilizator Internet. Totui se va
ine cont doar de datele semnificative pentru problema dat. Astfel, culoarea
ochilor este irelevant n acest caz, n timp ce data naterii poate fi important. n
aceeai idee, operaii specifice ca se nregistreaz, comand on-line pot fi relevante, n timp ce operaia mannc nu este, n cazul nostru. Evident, nici nu se pun
n discuie date sau operaii nespecifice (numrul de laturi sau aciunea zboar).
Operaiile care sunt accesibile din afara entitii formeaz interfaa acesteia. Astfel,
operaii interne cum ar fi conversia datei de natere la un numr standard calculat de
la 01.01.1900 nu fac parte din interfaa tipului de date abstract, n timp ce operaia
plaseaz o comand on-line face parte, deoarece permite interaciunea cu alte
obiecte (SITE, STOC etc.)
O instan a unui tip de date abstract este o concretizare a tipului respectiv, format din valori efective ale datelor.
Un tip de date obiectual este un tip de date care implementeaz un tip de date
abstract. Vom numi operaiile implementate n cadrul tipului de date abstract metode.
Spunem c datele i metodele sunt membrii unui tip de date obiectual. Folosirea unui
astfel de tip presupune: existena definiiei acestuia, apelul metodelor i accesul la date.
Un exemplu de-acum clasic de tip de date abstract este STIVA. Ea poate avea ca date:
numerele naturale din stiv, capacitatea stivei, vrful etc. Iar operaiile specifice pot fi:
introducerea n stiv (push) i extragerea din stiv (pop). La implementarea tipului STIVA,
vom defini o structura de date care s rein valorile memorate n stiv i cmpuri de date
simple pentru: capacitate, numr de elemente etc. Vom mai defini metode (subprograme) capabile s creeze o stiv vid, care s introduc o valoare n stiv, s extrag valoarea din vrful stivei, s testeze dac stiva este vid sau dac stiva este plin etc.
Crearea unei instane noi a unui tip obiectual, presupune operaii specifice de
construire a noului obiect, metoda corespunztoare purtnd numele de
constructor. Analog, la desfiinarea unei instane i eliberarea spaiului de memorie

CAPITOLUL 1. Programarea orientat obiect (POO) cu C#

aferent datelor sale, se aplic o metod specific numit destructor1.


O aplicaie ce utilizeaz tipul obiectual STIVA, va putea construi dou sau mai
multe stive (de cri de joc, de exemplu), le va umple cu valori distincte, va muta valori dintr-o stiv n alta dup o anumit regul desfiinnd orice stiv golit, pn ce
rmne o singur stiv. De observat c toate aceste prelucrri recurg la datele, constructorul, destructorul i la metodele din interfaa tipului STIVA descris mai sus.
Principalul tip obiectual ntlnit n majoritatea mediilor de dezvoltare (Viisual
Basic, Delphi, C++, Java, C#) poart numele de clas (class). Exist i alte tipuri obiectuale (struct, object). O instan a unui tip obiectual poart numele de obiect.
La implementare, datele i metodele asociate trebuie s fie complet i corect definite, astfel nct utilizatorul s nu fie nevoit s in cont de detalii ale acestei implementri. El va accesa datele, prin intermediul proprietilor i va efectua operaiile,
prin intermediul metodelor puse la dispoziie de tipul obiectual definit. Spunem c
tipurile de date obiectuale respect principiul ncapsulrii. Astfel, programatorul ce
utilizeaz un tip obiectual CONT (n banc) nu trebuie s poarte grija modului cum
sunt reprezentate n memorie datele referitoare la un cont sau a algoritmului prin
care se realizeaz actualizarea soldului conform operaiilor de depunere, extragere i
aplicare a dobnzilor. EL va utiliza unul sau mai multe conturi (instane ale tipului
CONT), accesnd proprietile i metodele din interfa, realizatorul tipului obiectual
asumndu-i acele griji n momentul definirii tipului CONT.
Permind extensia tipurilor de date abstracte, clasele pot avea la implementare:
date i metode caracterisitice fiecrui obiect din clas (membri de tip instan),
date i metode specifice clasei (membri de tip clas).
Astfel, clasa STIVA poate beneficia, n plus, i de date ale clasei cum ar fi: numrul
de stive generate, numrul maxim sau numrul minim de componente ale stivelor
existente etc. Modificatorul static plasat la definirea unui membru al clasei face ca
acela s fie un membru de clas, nu unul de tip instan. Dac n cazul membrilor
nestatici, exist cte un exemplar al membrului respectiv pentru fiecare instan a clasei, membrii statici sunt unici, fiind accesai n comun de toate instanele clasei. Mai
mult, membrii statici pot fi referii chiar i fr a crea vreo instan a clasei respective.

1.3. Suprancrcare
Dei nu este o tehnic specific programrii orientat obiect, ea creeaz un anumit context pentru metodele ce formeaz o clas i modul n care acestea pot fi (ca
orice subprogram) apelate.
Prin suprancarcare se nelege posibilitatea de a defini n acelai domeniu de
vizibilitate2 mai multe funcii cu acelai nume, dar cu parametri diferiti ca tip i/sau ca
numr. Astfel ansamblul format din numele funciei i lista sa de parametri reprezint o modalitate unic de identificare numit semntur sau amprent. Supra-

1 Datorit tehnicii de suprancrcare C++, Java i C# permit existena mai multor constructori
2 Noiunile generale legate de vizibilitate se consider cunoscute din programarea procedural. Aspectele specifice

i modificatorii de acces/vizibilitate pot fi studiai din documentaiile de referin C#.

10

Introducere n .Net Framework (Suport de curs)

ncrcarea permite obinerea unor efecte diferite ale apelului n contexte diferite3.
Apelul unei funcii care beneficiaz, prin suprancrcare, de dou sau mai multe
semnturi se realizeaz prin selecia funciei a crei semntur se potrivete cel mai
bine cu lista de parametri efectivi (de la apel).
Astfel, poate fi definit metoda comand on-line cu trei semnturi diferite:
comanda_online(cod_prod) cu un parametru ntreg (desemnnd comanda unui singur
produs identificat prin cod_prod.
comanda_online(cod_prod,cantitate) cu primul parametru ntreg i celalalt real
comanda_online(cod_prod,calitate) cu primul parametru ntreg i al-II-lea caracter.

1.4. Motenire
Pentru tipurile de date obiectuale class este posibil o operaie de extindere sau
specializare a comportamentului unei clase existente prin definirea unei clase noi ce
motenete datele i metodele clasei de baz, cu aceast ocazie putnd fi redefinii
unii membri existeni sau adugai unii membri noi. Operaia mai poart numele de
derivare.
Clasa din care se motenetea se mai numete clas de baz sau superclas. Clasa
care motenete se numete subclas, clas derivat sau clas descendent.
Ca i n Java, n C# o subclas poate moteni de la o singur superclas, adic avem
de-a face cu motenire simpl; aceeai superclas ns poate fi derivat n mai multe
subclase distincte. O subclas, la randul ei, poate fi superclas pentru o alt clas
derivat. O clas de baz impreun cu toate clasele descendente (direct sau indirect)
formeaza o ierarhie de clase. n C#, toate clasele motenesc de la clasa de baz Object.
n contextul mecanismelor de motenire trebuie amintii modificatorii abstract i
sealed aplicai unei clase, modificatori ce oblig la i respectiv se opun procesului de
derivare. Astfel, o clas abstract trebuie obligatoriu derivat, deoarece direct din ea
nu se pot obine obiecte prin operaia de instaniere, n timp ce o clas sigilat
(sealed) nu mai poate fi derivat (e un fel de terminal n ierarhia claselor). O metod
abstract este o metod pentru care nu este definit o implementare, aceasta urmnd
a fi realizat n clasele derivate din clasa curent4. O metod sigilat nu mai poate fi
redefinit n clasele derivate din clasa curent.

1.5. Polimorfism. Metode virtuale


Folosind o extensie a sensului etimologic, un obiect polimorfic este cel capabil s
ia diferite forme, s se afle n diferite stri, s aib comportamente diferite.
Polimorfismul obiectual5 se manifest n lucrul cu obiecte din clase aparinnd unei
ierarhii de clase, unde, prin redefinirea unor date sau metode, se obin membri dife3 Capacitatea unor limbaje (este i cazul limbajului C#) de a folosi ca "nume" al unui subprogram un operator, repre-

zint suprancrcarea operatorilor. Aceasta este o facilitate care "reduce" diferenele dintre operarea la nivel abstract
(cu DTA) i apelul metodei ce realizeaz acest operaie la nivel de implementare obiectual. Dei ajut la sporirea
expresivitii codului, prin suprancrcarea operatorilor i metodelor se pot crea i confuzii.
4 care trebuie s fie i ea abstract (virtual pur, conform terminologiei din C++)
5 deoarece tot aspecte polimorfice mbrac i unele tehnici din programarea clasic sau tehnica suprancrcrcrii
funciilor i operatorilor.

CAPITOLUL 1. Programarea orientat obiect (POO) cu C#

11

rii avnd ns acelai nume. Astfel, n cazul unei referiri obiectuale, se pune problema
stabilirii datei sau metodei referite. Comportamentul polimorfic este un element de
flexibilitate care permite stabilirea contextual, n mod dinamic6, a membrului referit.
De exemplu, dac este definit clasa numit PIESA (de ah), cu metoda nestatic
muta(pozitie_initiala,pozitie_finala), atunci subclasele TURN i PION trebuie s
aib metoda muta definit n mod diferit (pentru a implementa maniera specific a
pionului de a captura o pies en passant7). Atunci, pentru un obiect T, aparinnd
claselor derivate din PIESA, referirea la metoda muta pare nedefinit. Totui mecanismele POO permit stabilirea, n momentul apelului, a clasei proxime creia i aparine
obiectul T i apelarea metodei corespunztore (mutare de pion sau tur sau alt
pies).
Pentru a permite acest mecanism, metodele care necesit o decizie contextual (n
momentul apelului), se declar ca metode virtuale (cu modificatorul virtual). n mod
curent, n C# modificatorului virtual al funciei din clasa de baz, i corespunde un
specificator override al funciei din clasa derivat ce redefinete funcia din clasa de
baz.
O metod ne-virtual nu este polimorfic i, indiferent de clasa creia i aparine
obiectul, va fi invocat metoda din clasa de baz.

1.6. Programare orientat obiect n C#


C# permite utilizarea OOP respectnd toate principiile enunate anterior.
Toate componentele limbajului sunt ntr-un fel sau altul, asociate noiunii de clas.
Programul nsui este o clas avnd metoda static Main() ca punct de intrare, clas
ce nu se instaniaz. Chiar i tipurile predefinite byte, int sau bool sunt clase sigilate
derivate din clasa ValueType din spaiul System. Pentru a evita unele tehnici de programare periculoase, limbajul ofer tipuri speciale cum ar fi: interfee i delegri.
Versiunii 2.0 a limbajului i s-a adugat un nou tip: clasele generice8,

1.7. Declararea unei clase


Sintaxa9: [atrib]o [modificatori]o class [nume_clas] [:clasa_de_baz]o [corp_clas]o
Atributele reprezint informaii declarative cu privire la entitatea definit.
Modificatorii reprezint o secven de cuvinte cheie dintre: public protected internal
private (modificatori de acces) new abstract sealed (modificatori de motenire)
Clasa de baz este clasa de la care motenete clasa curent i poate exista o singur astfel de clas de baz. Corpul clasei este un bloc de declarri ale membrilor
clasei: constante (valori asociate clasei), cmpuri (variabile), tipuri de date definite de

6 Este posibil doar n cazul limbajelor ce permit "legarea ntrziat". La limbajele cu "legare timpurie", adresa la care

se face un apel al unui subprogram se stabilete la compilare. La limbajele cu legare ntrziat, aceast adresa se stabileste doar in momentul rulrii, putndu-se calcula distinct, n funcie de contextul n care apare apelul.
7 ntr-o alt concepie, metoda muta poate fi implementat la nivelul clasei PIESA i redefinit la nivelul subclasei
PION, pentru a particulariza acest tip de deplasare care captureaz piesa peste care trece pionul n diagonal.
8 echivalentrul claselor template din C++
9 [] din definiia schematic semnific un neterminal, iar o semnific o component opional

12

Introducere n .Net Framework (Suport de curs)

utilizator, metode (subprograme), constructori, un destructor, proprieti (caracteristici ce pot fi consultate sau setate), evenimente (instrumente de semnalizare), indexatori (ce permit indexarea instanelor din cadrul clasei respective) i operatori.
constructorii i destructorul au ca nume numele clasei proxime din care fac
parte10
metodele au nume care nu coincid cu numele clasei sau al altor membri (cu
excepia metodelor, conform mecanismului de suprancrcare)
metodele sau constructorii care au acelai nume trebuie s difere prin semntur11
se pot defini date i metode statice (caracteristice clasei) i un constructor static
care se execut la iniializarea clasei propriu-zise; ele formeaz un fel de context al clasei
se pot defini date i metode nestatice (de instan) care se multiplic pentru
fiecare instan n parte n cadrul operaiei de instaniere; ele formeaz contextele tuturor instanelor clasei respective
Exemplul urmtor definete o ierarhie de clase (conform figurii alturate)
public abstract class Copil { }
public class Fetita: Copil { }
public sealed class Baiat: Copil { }

Modificatorul abstract este folosit pentru a desemna faptul c nu se pot obine


obiecte din clasa Copil, ci numai din derivatele acesteia (Fetita, Baiat), iar modificatorul sealed a fost folosit pentru a desemna faptul c nu se mai pot obtine clase
derivate din clasa Baiat (de exemplu, subclasele Baiat_cuminte i Baiat_rau)

1.8. Constructori
Sintaxa:
[atrib]o [modificatori]o [nume_clas]([list_param_formali]o)[:iniializator]o [corp_constr]o
Modificatori: public protected internal private extern
Iniializator: base([list_param]o), this([list_param]o) ce permite invocarea unui
constructor anume12 nainte de executarea instruciunilor ce formeaz corpul constructorului curent. Dac nu este precizat niciun iniializator, se asociaz implicit
iniializatorul base().
Corpul constructorului este format din instruciuni care se execut la crearea unui

10 avnd n vedere c ele pot s fac parte dintr-o clas interioar altei clase
11 din semntur nefcnd parte specificatorii ref i out asociai parametrilor
12 Din clasa de baz (base) sau din clasa insi (this)

CAPITOLUL 1. Programarea orientat obiect (POO) cu C#

13

nou obiect al clasei respective (sau la crearea clasei, n cazul constructorilor cu modificatorul static).
pot exista mai muli constructori care se pot diferenia prin lista lor de parametri
constructorii nu pot fi motenii
dac o clas nu are definit niciun constructor, se va asigna automat constructorul
fr parametri al clasei de baz (clasa object, dac nu este precizat clasa de baz)
Instanierea presupune declararea unei variabile de tipul clasei respective i
iniializarea acesteia prin apelul constructorului clasei (unul dintre ei, dac sunt
definii mai muli) precedat de operatorul new. Acestea se pot realiza i simultan ntr-o
instruciune de felul:
[Nume_clas] [nume_obiect]=new [Nume_clas] ([list_param]o)
J Utilizarea unui constructor fr parametri i a constructorului implicit n clas
derivat
public abstract class Copil
{ protected string nume;
public Copil() {nume = Console.ReadLine();} //la iniializarea obiectului se

citete
//de la tastatur un ir de caractere ce va reprezenta numele copilului
}
class Fetita:Copil {}
...
Fetita f=new Fetita();
Copil c= new Copil(); //Pentru clasa Copil abstract, s-ar fi obinut eroare aici

J Suprancrcarea constructorilor i definirea explicit a constructorilor n clase


derivate
public class Copil
{ protected string nume; //dat accesibil numai n interiorul clasei i

claselor derivate
public Copil() {nume = Console.ReadLine();}
public Copil(string s) {nume=s;}
}
class Fetita:Copil
{ public Fetita(string s):base(s) {nume=Fetita +nume}13
public Fetita(){} //preia constructorul fr parametri din clasa de baz14
//public Fetita(string s):base() {nume=s}
}
...
Copil c1= new Copil();
//se citeste numele de la tastatur
Copil c2= new Copil(Codrina);
Fetita f1=new Fetita();Fetita f2=new Fetita(Ioana);

13 Preia i specializeaz constructorul al doilea din clasa de baz


14 Este echivalent cu public Fetita():base(){}

14

Introducere n .Net Framework (Suport de curs)

Exist dou motive pentru care definiia constructorului al treilea din clasa Fetita
este greit i de aceea este comentat. Care sunt aceste motive?

1.9. Destructor
Sintaxa: [atrib]o [extern]o ~[nume_clas] () [corp_destructor]o
Corpul destructorului este format din instruciuni care se execut la distrugerea
unui obiect al clasei respective. Pentru orice clas poate fi definit un singur constructor. Destructorii nu pot fi motenii. n mod normal, destructorul nu este apelat n
mod explicit, deoarece procesul de distrugere a unui obiect este invocat i gestionat
automat de Garbagge Collector.

1.10. Metode
Sintaxa:[atrib]o[modificatori]o[tip_returnat][nume]([list_param_formali]o) [corp_metoda]o
Modificatori: new public protected internal private static virtual abstract sealed
override extern15
Tipul rezultat poate fi un tip definit sau void. Numele poate fi un simplu identificator sau, n cazul n care definete n mod explicit un membru al unei interfee, numele
este de forma [nume_interfata].[nume_metoda]
Lista de parametri formali este o succesiune de declarri desprite prin virgule,
declararea unui parametru avnd sintaxa: [atrib]o [modificator]o [tip] [nume]
Modificatorul unui parametru poate fi ref (parametru de intrare i ieire) sau out
(parametru care este numai de ieire). Parametrii care nu au niciun modificator sunt
parametri de intrare.
Un parametru formal special este parametrul tablou cu sintaxa:
[atrib]o params [tip][] [nume].
Pentru metodele abstracte i externe, corpul metodei se poate reduce la un semn ;
Semntura fiecrei metode este format din numele metodei, modificatorii acesteia, numrul i tipul parametrilor16
Numele metodei trebuie s difere de numele oricrui alt membru care nu este
metod.
La apelul metodei, orice parametru trebuie s aib acelai modificator ca la definire
Invocarea unei metode se realizeaz prin sintagma [nume_obiect].[nume_metoda]
(pentru metodele nestatice) i respectiv [nume_clas].[nume_metoda] (pentru
metodele statice).
Definirea datelor i metodelor statice corespunztoare unei clase

15 Poate fi folosit cel mult unul dintre modificatorii static, virtual I override ; nu pot aprea mpreun new i over-

ride, abstract nu poate s apar cu niciunul dintre static, virtual, sealed, extern; private nu poate s apar cu niciunul
dintre virtual, override i abstract; seald oblig i la override
16 Din semntur (amprent) nu fac parte tipul returnat, numele parametrilor formali i nici specificatorii ref i out.

CAPITOLUL 1. Programarea orientat obiect (POO) cu C#

15

public class Copil


{ public const int nr_max = 5;
//constant
public static int nr_copii=0;
//cmp simplu (variabil)
static Copil[] copii=new Copil[nr_max]; //cmp de tip tablou (variabil)
public static void adaug_copil(Copil c) //metod
{ copii[nr_copii++] = c;
if (nr_copii==nr_max) throw new Exception(Prea multi copii);
}
public static void afisare()
//metod
{
Console.WriteLine(Sunt {0} copii:, nr_copii);
for (int i = 0; i<nr_copii; i++)
Console.WriteLine(Nr.{0}. {1}, i+1, copii[i].nume);
} ...17
}
...
Fetita c = new Fetita();Copil.adaug_copil(c);

referina noului obiect se memoreaz n tabloul static copii (caracteristic clasei) i


se incrementeaz data static nr_copii
Baiat c = new Baiat(); Copil.adaug_copil(c);
Copil c = new Copil(); Copil.adaug_copil(c);
Copil.afisare(); //se afieaz o list cu numele celor 3 copii

Definirea datelor i metodelor nestatice corespunztoare clasei Copil i claselor


derivate
public class Copil
{ ...
public string nume;
public virtual void se_joaca()

//virtual se poate suprascrie la

derivare
{Console.WriteLine({0} se joaca., this.nume);}
public void se_joaca(string jucaria)
//nu permite redefinire18
{Console.WriteLine({0} se joaca cu {1}., this.nume, jucaria);}
}
//suprancrcarea metodei se_joaca
class Fetita:Copil
{
public override void se_joaca() //redefinire comportament polimorfic
{Console.WriteLine({0} leagana papusa.,this.nume);}
}
class Baiat:Copil
{
public override void se_joaca()
{Console.WriteLine({0} chinuie pisica.,this.nume);}
}
...
17 Se are n vedere i constructorul fr parametri definit i preluat implicit n subclasele din cadrul primului exem-

plu din subcapitolul 1.8: public Copil() {nume = Console.ReadLine();}


18 Dect cu ajutorul modificatorului new pentru metoda respectiv n clasa derivat

16

Introducere n .Net Framework (Suport de curs)

Fetita c = new Fetita();c.se_joaca(pisica);c.se_joaca();


//polimorfism
Baiat c = new Baiat();c.se_joaca(calculatorul);c.se_joaca();
//polimorfism
Copil c = new Copil();c.se_joaca();
//polimorfism

Pentru a evidenia mai bine comportamentul polimorfic, propunem secvena


urmtoare n care nu se tie exact ce este obiectul copii[i] (de tip Copil, Fetita sau
Baiat):
for (int i=0; i<nr_copii; i++) copii[i].se_joaca();

1.11. Proprieti
Proprietatea este un membru ce permite accesul controlat la datele-membru ale
clasei.
Sintaxa: [atrib]o [modificatori]o [tip] [nume_proprietate] {[metode_de_acces]o}
Observaiile privind modificatorii i numele metodelor sunt valabile i n cazul proprietilor.
Metodele de acces sunt dou: set i get. Dac proprietatea nu este abstract sau
extern, poate s apar una singur dintre cele dou metode de acces sau amndou, n orice ordine.
Este o manier de lucru recomandabil aceea de a proteja datele membru (cmpuri) ale clasei, definind instrumente de acces la acestea: pentru a obine valoarea
cmpului respectiv (get) sau de a memora o anumit valoare n cmpul respectiv
(set). Dac metoda de acces get este perfect asimilabil cu o metod ce retuneaz o
valoare (valoarea datei pe care vrem s-o obinem sau valoarea ei modificat conform
unei prelucrri suplimentare specifice problemei n cauz), metoda set este asimilabil cu o metod care un parametru de tip valoare (de intrare) i care atribuie (sau
nu, n funcie de context) valoarea respectiv cmpului. Cum parametrul corespunztor valorii transmise nu apare n structura sintactic a metodei, este de stiut c el este
implicit identificat prin cuvntul value. Dac se supune unor condiii specifice problemei, se face o atribuire de felul cmp=value.
Definirea n clasa Copil a proprietii Nume, corespunztoare cmpului protejat ce
reine, sub forma unui ir de caractere, numele copilului respctiv. Se va observ c
proprietatea este motenit i de clasele derivate Fetita i Biat19.
public class Copil
{...
string nume; // este implicit protected
public string Nume //proprietatea Nume
{ get
{ if(char.IsUpper(nume[0]))return nume; else return nume.ToUpper();}
set { nume = value; }
}
19 Desigur c proprietatea care controleaz accesul la cmpul identificat prin nume se poate numi cu totul altfel (proprietatea Nume fiind uor de confundat cu cmpul de date nume).

CAPITOLUL 1. Programarea orientat obiect (POO) cu C#

17

public Copil() {Nume = Console.ReadLine();}


//metoda set
}
class Fetita:Copil
{ public override void se_joaca()
{Console.WriteLine({0} leagana papusa.,this.Nume);} //metoda get
}20

1.12. Evenimente i delegri


Evenimentele sunt membri ai unei clase ce permit clasei sau obiectelor clasei s
fac notificri, adic s anune celelalte obiecte asupra unor schimbri petrecute la
nivelul strii lor. Clasa furnizoare a unui eveniment public (pune la dispoziia altor
clase) acest lucru printr-o declarare event care asociaz evenimentului un delegat,
adic o referin ctre o funcie necunoscut creia i se precizeaz doar antetul,
funcia urmnd a fi implementat la nivelul claselor interesate de evenimentul
respectiv. Este modul prin care se realizeaz comunicarea ntre obiecte. Tehnica prin
care clasele implementeaz metode (handler-e) ce rspund la evenimente generate
de alte clase poart numele de tratare a evenimentelor.
Sintaxa: [atrib]o [modificatori]o event [tip_delegat] [nume]
Modificatorii permii sunt aceiai ca i la metode.
Tipul delegat este un tip de date ca oricare altul, derivat din clasa sigilat Delegate,
din spaiul System. Definirea unui tip delegat se realizeaz prin declararea:
[atrib]o [modificatori]o delegate [tip_rezultat] [nume_delegat] ([list_param_formali]o)
Un delegat se poate defini i n afara clasei generatoare de evenimente i poate
servi i altor scopuri n afara tratrii evenimentelor. Prezentm n continuare un
exemplu.
De exemplu, dac dorim s definim o metod asociat unui vector de numere
ntregi, metod ce verific dac vectorul este o succesiune bine aranjat (orice
dou valori succesive respect o anumit regul), o implementare generic se
poate realiza folosind delegri:
public delegate bool pereche_ok(object t1, object t2);
public class Vector
{
public const int nmax = 4;
public int[] v=new int[nmax];
public Vector()
{ Random rand = new Random();
for (int i = 0; i < nmax; i++) v[i] = rand.Next(0,5);
}
public void scrie()
20 De observat c n exemplul anterior (subcapitolul 1.10), cmpul nume era declarat public, pentru a permite accesul "general" la cmpul respectiv de date. Iar metodele i constructorii foloseau identificatorul nume i nu proprietatea Nume.

18

Introducere n .Net Framework (Suport de curs)

for (int i = 0; i < nmax; i++) Console.Write({0}, , v[i]);


Console.WriteLine();

}
public bool aranj(pereche_ok ok)//ok e o delegare ctre o funcie necunoscut
{ for (int i = 0; i < nmax-1; i++)
if (!ok(v[i], v[i + 1])) return false;
return true;
}
}

Dac n clasa-program21 se adug funciile (exprimnd dou reguli de aranjare


posibile)
public static bool f1(object t1, object t2)
{if ((int)t1 >= (int)t2) return true;else return false;}
public static bool f2(object t1, object t2)
{if ((int)t1 <= (int)t2) return true;else return false;}

atunci o secven de prelucrare aplicativ ar putea fi:


static void Main(string[] args)
{ Vector x;
do {
x =new Vector();x.scrie();
if (x.aranj(f1))Console.WriteLine(Monoton descrescator);
if (x.aranj(f2))Console.WriteLine(Monoton crescator);
} while (Console.ReadKey(true).KeyCar!=\x001B); //Escape
}

Revenind la evenimente, descriem pe scurt un exemplu teoretic de declarare i


tratare a unui eveniment. n clasa Vector se consider c interschimbarea valorilor a
dou componente ale unui vector e un eveniment de interes pentru alte obiecte sau
clase ale aplicaiei. Se definete un tip delegat TD (s zicem) cu nite parametri de
interes22 i un eveniment care are ca asociat un delegat E (de tip TD)23. Orice obiect x
din clasa Vector are un membru E (iniial null). O clas C interesat s fie ntiinat
cnd se face vreo interschimbare ntr-un vector pentru a genera o animaie, de exemplu, va implementa o metod M ce realizeaz animaia i va aduga pe M (prin intermediul unui delegat) la x.E24. Cumulnd mai multe astfel de referine, x.E ajunge un
fel de list de metode (handlere). n clasa Vector, n metoda sort, la interschimbarea
valorilor a dou componente se invoc delegatul E. Invocarea lui E realizeaz de fapt
activarea tuturor metodelor adugate la E.
Care credei c sunt motivele pentru care apelm la evenimente n acest caz, cnd
pare mult mai simplu s apelm direct metoda M la orice interschimbare?
21
22
23
24

Independent de definiia clasei Vector


De exmplu indicii componentelor interschimbate
A se observa c evenimentul n sine este anonim, doar delegatul asociat are nume
ntr-o atribuire de felul x.E+=new [tip_delegat](M)

CAPITOLUL 1. Programarea orientat obiect (POO) cu C#

19

1.13. Interfee
Interfeele sunt foarte importante n programarea orientat pe obiecte, deoarece
permit utilizarea polimorfismului ntr-un sens mai extins.O interfa este o component a aplicaiei, asemntoare unei clase, ce declar prin membrii si (metode, proprieti, evenimente i indexatori) un comportament unitar aplicabil mai multor
clase, comportament care nu se poate defini prin ierarhia de clase a aplicaiei.
De exemplu, dac vom considera arborele din figura urmtoare, n care AVERE
este o clas abstract, iar derivarea claselor a fost conceput urmrind proprietile
comune ale componentelor unei averi, atunci o clas VENIT nu este posibil,
deoarece ea ar moteni de la toate clasele evideniate, iar motenirea multipl nu
este admis n C#.

Pentru metodele din cadrul unei interfee nu se d nici o implementare, ci sunt pur
i simplu specificate, implementarea lor fiind furnizat de unele dintre clasele aplicaiei25. Nu exist instaniere n cazul interfeelor, dar se admit derivri, inclusiv
moteniri multiple.
n exemplul nostru, se poate defini o interfa VENIT care s conin antetul unei
metode calc (s zicem) pentru calculul venitului obinut, fiecare dintre clasele care
implementeaz interfaa VENIT fiind obligat s furnizeze o implementare (dup o
formul de calcul specific) pentru metoda calc din interfa. Orice clas care dorete
s adere la interfa trebuie s implementeze toate metodele din interfa. Toate
clasele care motenesc dintr-o clas care implementeaz o interfa motenesc, evident, metodele respective, dar le pot i redefini (de exemplu, clasa Credit_acordat
redefinete metoda calc din clasa Investiie, deoarece formula de calcul implementat acolo nu i se potrivete i ei26).
De exemplu, dac presupunem c toate clasele subliniate implementeaz interfaa
VENIT, atunci pentru o avere cu aciuni la dou firme, un imobil nchiriat i o
25 Acele clase care "ader" la o interfa spunem c "implementeaz" interfaa respectiv
26 Dac n sens polimorfic spunem c Investiie este i de tip Bani i de tip Avere, tot aa putem spune c o clas care

implementeaz interfaa VENIT i clasele derivate din ea sunt i de tip VENIT

20

Introducere n .Net Framework (Suport de curs)

depunere la banc, putem determina venitul total:


Actiune act1 = new Actiune();Actiune act2 = new Actiune();
I_inchiriat casa = new I_inchiriat();Depunere dep=new Depunere();
Venit[] venituri = new Venit()[4];
venituri[0] = act1; venituri[1] = act2;
venituri[2] = casa; venituri[3] = dep;
...
int t=0;
for(i=0;i<4;i++) t+=v[i].calc();

Gsii dou motive pentru care interfaa VENIT i rezovarea de mai sus ofer o
soluie mai bun dect: t=act1.calc()+act2.calc()+casa.calc()+dep.calc().

21

CAPITOLUL

Platforma .NET
2.1 Prezentare
.NET este un cadru (Framework) de dezvoltare software unitar care permite
realizarea, distribuirea i rularea aplicaiilor-desktop Windows i aplicaiilor WEB.
Tehnologia .NET pune laolalt mai multe tehnologii (ASP, XML, OOP, SOAP,
WDSL, UDDI) i limbaje de programare (VB, C++, C#, J#) asigurnd totodat att
portabilitatea codului compilat ntre diferite calculatoare cu sistem Windows, ct i
reutilizarea codului n programe, indiferent de limbajul de programare utilizat.
.NET Framework este o component livrat mpreun cu sistemul de operare
Windows. De fapt, .NET 2.0 vine cu Windows Server 2003, se poate instala pe versiunile anterioare, pn la Windows 98 inclusiv; .NET 3.0 vine instalat pe Windows
Vista i poate fi instalat pe versiunile Windows XP cu SP2 i Windows Server 2003 cu
minimum SP1.
Pentru a dezvolta aplicaii pe platforma .NET este bine sa avem 3 componente
eseniale:
un set de limbaje (C#, Visual Basic .NET, J#, Managed C++, Smalltalk, Perl,
Fortran, Cobol, Lisp, Pascal etc),
un set de medii de dezvoltare (Visual Studio .NET, Visio),
i o bibliotec de clase pentru crearea serviciilor Web, aplicaiilor Web i aplicaiilor desktop Windows.
Cnd dezvoltm aplicaii .NET, putem utiliza:
Servere specializate - un set de servere Enterprise .NET (din familia SQL Server
2000, Exchange 2000 etc), care pun la dispoziie funcii de stocare a bazelor de
date, email, aplicaii B2B (Bussiness to Bussiness comer electronic ntre
partenerii unei afaceri).
Servicii Web (n special comerciale), utile n aplicaii care necesit identificarea
utilizatorilor (de exemplu, .NET Passport - un mod de autentificare folosind un
singur nume i o parol pentru toate ste-urile vizitate)
Servicii incluse pentru dispozitive non-PC (Pocket PC Phone Edition,
Smartphone, Tablet PC, Smart Display, XBox, set-top boxes, etc.)
.NET Framework
Componenta .NET Framework st la baza tehnologiei .NET, este ultima interfa

22

Introducere n .Net Framework (Suport de curs)

ntre aplicaiile .NET i sistemul de operare i actualmente conine:


Limbajele C#, VB.NET, C++ i J#. Pentru a fi integrate n platforma .NET toate aceste limbaje respect nite specificaii OOP numite Common Type System (CTS). Ele au
ca elemente de baz: clase, interfee, delegri, tipuri valoare i referin, iar ca
mecanisme: motenire, polimorfism i tratarea excepiilor.
Platforma comun de executare a programelor numit Common Language
Runtime (CLR), utilizat de toate cele 4 limbaje. CTS face parte din CLR.
Ansamblul de biblioteci necesare n realizarea aplicaiilor desktop sau Web numit
Framework Class Library (FCL).
Arhitectura .NET Framework

Componenta .NET Framework este format din compilatoare, biblioteci i alte executabile utile n rularea aplicaiilor .NET. Fiierele corespunztoare se afl, n general,
n directorul C:\WINDOWS\Microsoft. NET\Framework\V2.0. (corespunztor versiunii instalate)

2.2. Compilarea programelor


Un program scris ntr-unul dintre limbajele .NET conform Common Language
Specification (CLS) este compilat n Microsoft Intermediate Language (MSIL sau IL).
Codul astfel obinut are extensia exe, dar nu este direct executabil, ci respect formatul unic MSIL.
CLR include o main virtual asemntoare cu o main Java, ce execut
instruciunile IL rezultate n urma compilrii. Maina folosete un compilator special
JIT (Just In Time). Compilatorul JIT analizeaz codul IL corespunztor apelului unei
metode i produce codul main adecvat i eficient. El recunoate secvenele de cod
pentru care s-a obinut deja codul main adecvat permind reutilizarea acestuia
fr recompilare, ceea ce face ca, pe parcursul rulrii, aplicaiile .NET s fie din ce n
ce mai rapide.
Faptul c programul IL produs de diferitele limbaje este foarte asemntor are ca
rezultat interoperabilitatea ntre aceste limbaje. Astfel, clasele i obiectele create
ntr-un limbaj specific .NET pot fi utilizate cu succes n altul.

CAPITOLUL 2. Platforma .NET

23

n plus, CLR se ocup de gestionarea automat a memoriei (un mecanism implementat n platforma .NET fiind acela de eliberare automat a zonelor de memorie
asociate unor date devenite inutile Garbage Collection).
Ca un element de portabilitate, trebuie spus c .NET Framework este implementarea unui standard numit Common Language Infrastructure (http://www.ecmainternational.org/publications/standards/Ecma-335.htm), ceea ce permite rularea
aplicaiilor .NET, n afar de Windows, i pe unele tipuri de Unix, Linux, Solaris, Mac
OS X i alte sisteme de operare (http://www.mono-project.com/Main_Page ).

2.3. De ce am alege .NET?


n primul rnd pentru c ne ofer instrumente pe care le putem folosi i n alte programe, ofer acces uor la baze de date, permite realizarea desenelor sau a altor elemente grafice. Spaiul de nume System.Windows.Forms conine instrumente (controale) ce permit implementarea elementelor interfeei grafice cu utilizatorul.
Folosind aceste controale, putei proiecta i dezvolta rapid i interactiv, elementele
interfeei grafice. Tot .NET v ofer clase care efectueaz majoritatea sarcinilor uzuale
cu care se confrunt programele i care plictisesc i fur timpul programatorilor,
reducnd astfel timpul necesar dezvoltrii aplicaiilor.

25

CAPITOLUL

Limbajul C#
3.1. Caracterizare
Limbajul C# fost dezvoltat de o echip restrns de ingineri de la Microsoft, echip
din care s-a evideniat Anders Hejlsberg (autorul limbajului Turbo Pascal i membru
al echipei care a proiectat Borland Delphi).
C# este un limbaj simplu, cu circa 80 de cuvinte cheie, i 12 tipuri de date predefinite. El permite programarea structurat, modular i orientat obiectual, conform
perceptelor moderne ale programrii profesioniste.
Principiile de baz ale programrii pe obiecte (NCAPSULARE, MOTENIRE,
POLIMORFISM) sunt elemente fundamentale ale programrii C#. n mare, limbajul
motenete sintaxa i principiile de programare din C++. Sunt o serie de tipuri noi de
date sau funciuni diferite ale datelor din C++, iar n spiritul realizrii unor secvene
de cod sigure (safe), unele funciuni au fost adugate (de exemplu, interfee i
delegri), diversificate (tipul struct), modificate (tipul string) sau chiar eliminate
(motenirea multipl i pointerii ctre funcii). Unele funciuni (cum ar fi accesul
direct la memorie folosind pointeri) au fost pstrate, dar secvenele de cod corespunztoare se consider nesigure.

3.2. Compilarea la linia de comand


Se pot dezvolta aplicaii .NET i fr a dispune de mediul de dezvoltare Visual Studio,
ci numai de .NET SDK (pentru 2.0 i pentru 3.0). n acest caz, codul se scrie n orice editor de text, fiierele se salveaz cu extensia cs, apoi se compileaz la linie de comand.
Astfel, se scrie n Notepad programul:
using System;
class primul
{
static void Main()
{
Console.WriteLine(Primul program);
Console.ReadKey(true);
}
}

26

Introducere n .Net Framework (Suport de curs)

salveaz fiierul primul.cs, n directorul WINDOWS\Microsoft.NET\


Framework\V2.0, atunci scriind la linia de comand: csc primul.cs se va obine fiierul
primul.exe direct executabil pe o platform .NET.
Dac

se

3.3. Crearea aplicaiilor consol


Pentru a realiza aplicaii n mediul de dezvoltare Visual Studio, trebuie s instalm
o versiune a acestuia, eventual versiunea free Microsoft Visual C# 2005/2008 Express
Edition de la adresa http://msdn.microsoft.com/vstudio/express/downloads/default.
aspx. Pentru nceput, putem realiza aplicaii consol (ca i cele din Borland Pascal sau
Borland C).
Dup lansare, alegem opiunea New Project din meniul File. n fereastra de dialog
(vezi figura), selectm pictograma Console Application, dup care, la Name, introducem numele aplicaiei noastre.

Fereastra n care scriem programul se numete implicit Programs.cs i se poate


modifica prin salvare explicit (Save As). Extensia cs provine de la C Sharp.
n scrierea programului suntem asistai de IntelliSense, ajutorul contextual.

Compilarea programului se realizeaz cu ajutorul opiunii Build Solution (F6) din


meniul Build. Posibilele erori de compilare sunt listate n fereastra Error List.
Efectund dublu clic pe fiecare eroare n parte, cursorul din program se poziioneaz
pe linia coninnd eroarea.

CAPITOLUL 3. Limbajul C#

27

Rularea programului se poate realiza n mai multe moduri: rapid fr asisten de


depanare (Start Without Debugging Shift+F5) , rapid cu asisten de depanare (Start
Debugging F5 sau cu butonul
din bara de instrumente), rulare pas cu pas (Step
Into F11 i Step Over F12) sau rulare rapid pn la linia marcat ca punct de ntrerupere (Toggle Breakpoint F9 pe linia respectiv i apoi Start Debugging F5). ncetarea urmririi pas cu pas (Stop Debugging Shift+F5) permite ieirea din modul
depanare i revenirea la modul normal de lucru. Toate opiunile de rulare i depanare
se gsesc n meniul Debug al mediului.

Fereastra de cod i ferestrele auxiliare ce ne ajut n etapa de editare pot fi vizualizate alegnd opiunea corespunztoare din meniul View. Ferestrele auxiliare utile n
etapa de depanare se pot vizualiza alegnd opiunea corespunztoare din meniul
Debug/Windows.

3.4. Structura unui program C#


S ncepem cu exemplul clasic Hello World adaptat la limbajul C#:
1
2
3
4
5
6
7
8
9
10
11
12

using System;
namespace HelloWorld
{
class Program
{
static void Main()
{
Console.WriteLine(Hello World!);
}
}
}

O aplicatie C# este format din una sau mai multe clase, grupate n spaii de nume
(namespaces). Un spaiu de nume cuprinde mai multe clase cu nume diferite avnd
funcionaliti nrudite. Dou clase pot avea acelai nume cu condiia ca ele s fie definite n spaii de nume diferite. n cadrul aceluiai spaiu de nume poate aprea
definiia unui alt spaiu de nume, caz n care avem de-a face cu spaii de nume imbri-

28

Introducere n .Net Framework (Suport de curs)

cate. O clas poate fi identificat prin numele complet (nume precedat de numele
spaiului sau spaiilor de nume din care face parte clasa respectiv, cu separatorul
punct). n exemplul nostru, HelloWorld.Program este numele cu specificaie complet al clasei Program.
O clas este format din date i metode (funcii). Apelarea unei metode n cadrul
clasei n care a fost definit aceasta presupune specificarea numelui metodei. Apelul
unei metode definite n interiorul unei clase poate fi invocat i din interiorul altei
clase, caz n care este necesar specificarea clasei i apoi a metodei separate prin
punct. Dac n plus, clasa aparine unui spaiu de nume neinclus n fiierul curent,
atunci este necesar precizarea tuturor componentelor numelui: spaiu.clas.metod
sau spaiu.spaiu.clas.metod etc.
n fiierul nostru se afl dou spaii de nume: unul definit (HelloWorld) i unul
extern inclus prin directiva using (System). Console.WriteLine reprezint apelul
metodei WriteLine definit n clasa Console. Cum n spaiul de nume curent este
definit doar clasa Program, deducem c definiia clasei Console trebuie s se
gseasc n spaiul System.
Pentru a facilita cooperarea mai multor programatori la realizarea unei aplicaii
complexe, exist posibilitatea de a segmenta aplicaia n mai multe fiiere numite
assemblies. ntr-un assembly se pot implementa mai multe spaii de nume, iar pri
ale unui aceeai spaiu de nume se pot regsi n mai multe assembly-uri. Pentru o
aplicaie consol, ca i pentru o aplicaie Windows de altfel, este obligatoriu ca una
(i numai una) dintre clasele aplicaiei s conin un punct de intrare (entry point),
i anume metoda (funcia) Main.
S comentm programul de mai sus:
linia 1: este o directiv care specific faptul c se vor folosi clase incluse n spaiul
de nume System. n cazul nostru se va folosi clasa Console.
linia 3: spaiul nostru de nume
linia 5: orice program C# este alctuit din una sau mai multe clase
linia 7: metoda Main, punctul de intrare n program
linia 9: clasa Console, amintit mai sus, este folosit pentru operaiile de
intrare/ieire. Aici se apeleaz metoda WriteLine din acest clas, pentru afiarea
mesajului dorit pe ecran.

3.5. Sintaxa limbajului


Ca i limbajul C++ cu care se nrudete, limbajul C# are un alfabet format din litere
mari i mici ale alfabetului englez, cifre i alte semne. Vocabularul limbajului este format din acele simboluri27 cu semnificaii lexicale n scrierea programelor: cuvinte
(nume), expresii, separatori, delimitatori i comentarii.
Comentarii
comentariu pe un rnd prin folosirea // Tot ce urmeaz dup caracterele // sunt
considerate, din acel loc, pn la sfritul rndului drept comentariu

27 Este un termen folosit un pic echivoc i provenit din traduceriea cuvntului "token"

CAPITOLUL 3. Limbajul C#

29

// Acesta este un comentariu pe un singur rand

comentariu pe mai multe rnduri prin folosirea /* i */ Orice text cuprins ntre
simbolurile menionate mai sus se consider a fi comentariu. Simbolurile /* reprezint nceputul comentariului, iar */ sfritul respectivului comentariu.
/* Acesta este un
comentariu care se
intinde pe mai multe randuri */

Nume
Prin nume dat unei variabile, clase, metode etc. nelegem o succesiune de caractere care ndeplinete urmtoarele reguli:
numele trebuie s nceap cu o liter sau cu unul dintre caracterele _ i @;
primul caracter poate fi urmat numai de litere, cifre sau un caracter de subliniere;
numele care reprezint cuvinte cheie nu pot fi folosite n alt scop dect acela
pentru care au fost definite
cuvintele cheie pot fi folosite n alt scop numai dac sunt precedate de @
dou nume sunt distincte dac difer prin cel puin un caracter (fie el i liter
mic ce difer de aceeai liter majuscul)
Convenii pentru nume:
n cazul numelor claselor, metodelor, a proprietilor, enumerrilor, interfeelor,
spaiilor de nume, fiecare cuvnt care compune numele ncepe cu majuscul
n cazul numelor variabilelor dac numele este compus din mai multe cuvinte,
primul ncepe cu minuscul, celelalte cu majuscul
Cuvinte cheie n C#
abstract
byte
class
delegate
event
fixed
if
internal
new
override
readonly
short
struct
try
unsafe
volatile

as
case
const
do
explicit
float
implicit
is
null
params
ref
sizeof
switch
typeof
ushort
while

base
catch
continue
double
extern
for
in
lock
object
private
return
stackalloc
this
uint
using

bool
char
decimal
else
false
foreach
int
long
operator
protected
sbyte
static
throw
ulong
virtual

break
checked
default
enum
finally
goto
interface
namespace
out
public
sealed
string
true
unchecked
void

Simbolurile lexicale reprezentnd constante, regulile de formare a expresiilor, separatorii de liste, delimitatorii de instruciuni, de blocuri de instruciuni, de iruri de
caractere etc. sunt n mare aceiai ca i n cazul limbajului C++.

30

Introducere n .Net Framework (Suport de curs)

3.6. Tipuri de date


n C# exist dou categorii de tipuri de date:
tipuri valoare
tipul simple: byte, char, int, float etc.
tipul enumerare - enum
tipul structur - struct
tipuri referin
tipul clas - class
tipul interfa - interface
tipul delegat - delegate
tipul tablou - array
Toate tipurile de date sunt derivate din tipul System.Object
Toate tipurile valoare sunt derivate din clasa System.ValueType, derivat la rndul ei din clasa Object (alias pentru System.Object).
Limbajul C# conine un set de tipuri predefinite (int, bool etc.) i permite definirea
unor tipuri proprii (enum, struct, class etc.).
Tipuri simple predefinite
Tip

Descriere

Domeniul de valori

object

rdcina oricrui tip

string

secven de caractere Unicode

sbyte

tip ntreg cu semn, pe 8 bii

-128; 127

short

tip ntreg cu semn, pe 16 bii

-32768; 32767

int

tip ntreg cu semn pe, 32 bii

-2147483648; 21447483647

long

tip ntreg cu semn, pe 64 de bii

-9223372036854775808;
9223372036854775807

byte

tip ntreg fr semn, pe 8 bii

0; 255

ushort

tip ntreg fr semn, pe 16 bii

0; 65535

uint

tip ntreg fr semn, pe 32 bii

0; 4294967295

ulong

tip ntreg fr semn, pe 64 bii

0; 18446744073709551615

float

tip cu virgul mobil, simpl precizie, pe 32 bii


-3.402823E+38; 3.402823E+38
(8 pentru exponent, 24 pentru mantis)

double

tip cu virgul mobil, dubl precizie, pe 64 bii


(11 pentru exponent, 53 -mantisa)

-1.79769313486232E+308;
1.79769313486232E+308

bool

tip boolean

-79228162514264337593543950335;
79228162514264337593543950335

char

tip caracter din setul Unicode, pe 16 bii

decimal

tip zecimal, pe 128 bii (96 pentru mantis), 28


de cifre semnificative

CAPITOLUL 3. Limbajul C#

31

O valoare se asigneaz dup urmtoarele reguli:


Sufix
nu are
u, U
L, L
ul, lu, Ul, lU, UL, LU, Lu

Tip
int, uint, long, ulong
uint, ulong
long, ulong
ulong

Exemple:
string s = "Salut!"
long a = 10;
long b = 13L;
ulong c = 12;
ulong d = 15U;
ulong e = 16L;
ulong f = 17UL;

float g = 1.234F;
double h = 1.234;
double i = 1.234D;
bool cond1 = true;
bool cond2 = false;
decimal j = 1.234M;

Tipul enumerare
Tipul enumerare este un tip definit de utilizator. Acest tip permite utilizarea
numelor care, sunt asociate unor valori numerice. Toate componentele enumerate au
un acelai tip de baz ntreg. n cazul n care, la declarare, nu se specific tipul de baz
al enumerrii, atunci acesta este considerat implicit int.
Declararea unui tip enumerare este de forma:
enum [Nume_tip] [: Tip]o
{
[identificator1][=valoare]o,
...
[identificatorn][=valoare]o
}

Observaii:
n mod implicit valoarea primului membru al enumerrii este 0, iar fiecare variabil care urmeaz are valoarea (implicit) mai mare cu o unitate dect precedenta.
Valorile folosite pentru iniializri trebuie s fac parte din domeniul de valori
declarat al tipului
Nu se admit referine circulare:
enum ValoriCirculare
{
a = b,
b
}

32

Introducere n .Net Framework (Suport de curs)

Exemplu:
using System;
namespace tipulEnum
{
class Program
{
enum lunaAnului
{
Ianuarie = 1,
Februarie, Martie, Aprilie, Mai, Iunie, Iulie,
August, Septembrie, Octombrie, Noiembrie, Decembrie
}
static void Main(string[] args)
{
Console.WriteLine(Luna Mai este a {0},
(int)lunaAnului.Mai + -a luna din an.);
Console.ReadLine();
}
}
}

n urma rulrii programului se afieaz mesajul:


Luna Mai este a 5-a luna din an.
Tablouri
Declararea unui tablou unidimensional:
Tip[] nume;

Prin aceasta, nu se aloc spaiu pentru memorare. Pentru a putea reine date n
structura de tip tablou, este necesar o operaie de instaniere:
nume = new Tip[NumarElemente];

Declararea, instanierea i chiar iniializarea tabloului se pot face n aceeai


instruciune:
Exemplu:
int[] v = new int[] {1,2,3}; sau
int[] v = {1,2,3};

//new este implicit

n cazul tablourilor cu mai multe dimensiuni facem distincie ntre tablouri regulate i tablouri neregulate (tablouri de tablouri)
Declarare n cazul tablourilor regulate bidimensionale:
Tip[,] nume;

Intaniere:
nume = new Tip[Linii,Coloane];

Acces:
nume[indice1,indice2]

CAPITOLUL 3. Limbajul C#

33

Exemple:
int[,] mat = new int[,] {{1,2,3},{4,5,6},{7,8,9}}; sau
int[,] mat = {{1,2,3},{4,5,6},{7,8,9}};

Declarare n cazul tablourilor neregulate bidimensionale:


Tip[][] nume;

Intaniere:
nume = new Tip[Linii],[];
nume[0]=new Tip[Coloane1]
...
nume[Linii-1]=new Tip[ColoaneLinii-1]

Acces:
nume[indice1][indice2]

Exemple:
int[][] mat = new int[][] {
new int[3] {1,2,3},
new int[2] {4,5},
new int[4] {7,8,9,1}
}; sau
int[][] mat={new int[3] {1,2,3},new int[2] {4,5},new int[4] {7,8,9,1}};

iruri de caractere
Se definesc dou tipuri de iruri:
regulate
de tip verbatim
Tipul regulat conine ntre ghilimele zero sau mai multe caractere, inclusiv
secvene escape.
Secvenele escape permit reprezentarea caracterelor care nu au reprezentare grafic
precum i reprezentarea unor caractere speciale: backslash, caracterul apostrof, etc.
Secven escape

Efect

\'

apostrof

\"

ghilimele

\\

backslash

\0

null

\a

alarm

\b

backspace

\f

form feed - pagin nou

\n

new line - linie nou

\r

carriage return - nceput de rnd

\t

horizontal tab - tab orizontal

\u

caracter unicode

\v

vertical tab - tab vertical

\x

caracter hexazecimal

34

Introducere n .Net Framework (Suport de curs)

n cazul n care folosim multe secvene escape, putem utiliza irurile verbatim.
Aceste iruri pot s conin orice fel de caractere, inclusiv caracterul EOLN. Ele se
folosesc n special n cazul n care dorim s facem referiri la fiiere i la regitri. Un
astfel de ir ncepe ntotdeauna cu simbolul@ naintea ghilimelelor de nceput.
Exemplu:
using System;
namespace SiruriDeCaractere
{
class Program
{
static void Main(string[] args)
{
string a = un sir de caractere;
string b = linia unu \nlinia doi;
string c = @linia unu
linia doi;
string d=c:\\exemple\\unu.cs;
string e = @c:\exemple\unu.cs;
Console.WriteLine(a); Console.WriteLine(b);
Console.WriteLine(c); Console.WriteLine(d);
Console.WriteLine(e); Console.ReadLine();
}
}
}

Programul va avea ieirea


un sir de caractere
linia unu
linia doi
linia unu
linia doi
c:\exemple\unu.cs
c:\exemple\unu.cs

3.7. Conversii
3.7.1. Conversii numerice
n C# exist dou tipuri de conversii numerice:
implicite
explicite.
Conversia implicit se efectueaz (automat) doar dac nu este afectat valoarea
convertit.

CAPITOLUL 3. Limbajul C#

35

Exemplu:
using System;
using System.Collections.Generic;
using System.Text;
namespace Conversii
{
class Program
{
static void Main(string[] args)
{
byte a = 13; // byte intreg fara semn
// pe 8 biti
byte b = 20;
long c;
//intreg cu semn pe 64 biti
c = a + b;
Console.WriteLine(c);
Console.ReadLine();
}
}
}

Regulile de conversie implicit sunt descrise de tabelul urmtor:


din
sbyte
byte
short
ushort
int
uint
long
char
float
ulong

n
short, int, long, float, double, decimal
short, ushort, int, uint, long, ulong, float, double, decimal
int, long, float, double, decimal
int, uint, long, ulong, float, double, decimal
long, float, double, decimal
long, ulong, float, double, decimal
float, double, decimal
ushort, int, uint, long, ulong, float, double, decimal
double
float, double, decimal

Conversia explicit se realizeaz prin intermediul unei expresii cast, atunci cnd nu
exist posibilitatea unei conversii implicite.
Exemplu: n urma rulrii programului
using System;
using System.Collections.Generic;
using System.Text;
namespace Conversii1
{

36

Introducere n .Net Framework (Suport de curs)

class Program
{
static void Main(string[] args)
{
int a = 5;
int b = 2;
float c;
c = (float)a / b; //operatorul cast
Console.WriteLine({0}/{1}={2}, a, b, c);
Console.ReadLine();
}
}
}

se obine:
5/2 = 2,5
n cazul n care nu s-ar fi folosit operatorul cast rezultatul, evident eronat, ar fi fost:
5/2=2
Regulile de conversie explicit sunt descrise de tabelul urmtor:
din

sbyte

byte, ushort, uint, ulong, char

byte

sbyte, char

short

sbyte, byte, ushort, uint, ulong, char

ushort

sbyte, byte, short, char

int

sbyte, byte, short, ushort, uint, ulong, char

uint

sbyte,byte, short, ushort, int, char

long

sbyte, byte, short, ushort, int, uint, ulong, char

ulong

sbyte, byte, short, ushort, int, uint, long, char

char

sbyte, byte, short

float

sbyte, byte, short, ushort, int, uint, long, ulong, char, decimal

double

sbyte, byte, short, ushort, int, uint, long, ulong, char, float, decimal

decimal sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double

3.7.2. Conversii ntre numere i iruri de caractere


Limbajul C# ofer posibilitatea efecturii de conversii ntre numere i iruri de caractere.
Sintaxa pentru conversia unui numr n ir de caractere:
numr ir

+ numr

sau se folosete metoda ToString a clasei Object.

CAPITOLUL 3. Limbajul C#

37

Pentru conversia invers, adic din ir de caractere n numr, sintaxa este:


ir
ir
ir
ir

int
long
double
float

int.Parse(ir) sau
long.Parse(ir sau
double.Parse(ir)
float.Parse(ir) sau

Int32.Parse(ir)
Int64.Parse(ir)
sau Double.Parse(ir)
Float.Parse(ir)

Observaie: n cazul n care irul de caractere nu reprezint un numr valid, conversia acesui ir la numr va eua.
Exemplu:
using System;
namespace Conversii
{
class Program
{
static void Main(string[] args)
{
string s;
const int a = 13;
const long b = 100000;
const float c = 2.15F;
double d = 3.1415;
Console.WriteLine(CONVERSII\n);
Console.WriteLine(TIP\tVAL. \tSTRING);
Console.WriteLine();
s = + a;
Console.WriteLine(int\t{0} \t{1},a,s);
s = + b;
Console.WriteLine(long\t{0} \t{1},b,s);
s = + c;
Console.WriteLine(float\t{0} \t{1},c,s);
s = + d;
Console.WriteLine(double\t{0} \t{1},d,s);
Console.WriteLine(\nSTRING\tVAL \tTIP);
Console.WriteLine();
int a1;
a1 = int.Parse(13);
Console.WriteLine({0}\t{1}\tint,13,a1);
long b2;
b2 = long.Parse(1000);
Console.WriteLine({0}\t{1}\tlong,1000,b2);
float c2;
c2 = float.Parse(2,15);
Console.WriteLine({0}\t{1}\tfloat,2,15,c2);

38

Introducere n .Net Framework (Suport de curs)

double d2;
d2 = double.Parse(3.1415,
System.Globalization.CultureInfo.InvariantCulture);
Console.WriteLine({0}\t{1}\tdouble,3.1415,d2);
Console.ReadLine();
}
}
}

n urma rulrii se obine:


CONVERSII
TIP
VAL.

int
13
long
100000
float
2,15
double 3,1415
STRING VAL.

13
13
1000
1000
2,15
2,15
3.1415 3,1415

STRING
13
100000
2,15
3,1415
TIP
int
long
float
double

3.7.3. Conversii boxing i unboxing


Datorit faptului c n C# toate tipurile sunt derivate din clasa Object
(System.Object), prin conversiile boxing (mpachetare) i unboxing (despachetare)
este permis tratarea tipurilor valoare drept obiecte i reciproc. Prin conversia boxing a unui tip valoare, care se pstreaz pe stiv, se produce ambalarea n interiorul
unei instane de tip referin, care se pstraz n memoria heap, la clasa Object.
Unboxing permite convertirea unui obiect ntr-un tipul valoare corespunztor.
Exemplu:
Prin boxing variabila i este asignata unui obiect ob:
int i = 13;
object ob = (object)i;

//boxing explicit

sau
int i = 13;
object ob = i;

//boxing implicit

Prin conversia de tip unboxing, obiectul ob poate fi asignat variabilei ntregi i:


int i=13;
object ob = i;
i = (int)ob;

//boxing implicit
//unboxing explicit

CAPITOLUL 3. Limbajul C#

39

3.8. Constante
n C# exist dou modaliti de declarare a constantelor: folosind const sau
folosind modificatorul readonly. Constantele declarate cu const trebuie s fie iniializate la declararea lor.
Exemple:
const int x;
const int x = 13;

//gresit, constanta nu a fost initializata


//corect

3.9. Variabile
O variabil n C# poate s conin fie o valoare a unui tip elementar, fie o referin
la un obiect.
Exemple:
int Salut;
int Azi_si _maine;
char caracter;

3.10. Expresii i operatori


Prin expresie se nelege o secven format din operatori i operanzi. Un operator este un simbol ce indic aciunea care se efectueaz, iar operandul este valoarea
asupra creia se execut operaia. n C# sunt definii mai muli operatori. n cazul n
care ntr-o expresie nu intervin paranteze, operaiile se execut conform prioritii
operatorilor. n cazul n care sunt mai muli operatori cu aceeai prioritate, evaluarea
expresiei se realizeaz de la stnga la dreapta.
Prioritate Tip

Operatori

Asociativitate

Primar

( ) [ ] f() . x++ x-- new typeof sizeof


checked unchecked ->

Unar

+ - ! ~ ++x --x (tip) true false & sizeof

Multiplicativ

* / %

Aditiv

+ -

De deplasare

<< >>

Relaional

< > <= >= is as

De egalitate

== !=

AND (SI) logic

&

XOR (SAU exclusiv) logic ^

OR (SAU) logic

10

AND (SI) condiional

&&

11

OR (SAU) condiional

||

12

Condiional

?:

13

De atribuire

= *= /= %= += -= ^= &= <<= >>= |=

40

Introducere n .Net Framework (Suport de curs)

3.11. Instruciuni condiionale, de iteraie i de control


Ne referim aici la instruciunile construite folosind cuvintele cheie: if, else, do,
while, switch, case, default, for, foreach, in, break, continue, goto.

3.11.1 Instruciunea if
Instruciunea if are sintaxa:
if (conditie)
Instructiuni_A;
else
Instructiuni_B;

Exemplu:
using System;
namespace Test
{
class Program
{
static void Main(string[] args)
{
int n;
Console.WriteLine(Introduceti un nr intreg );
n = Convert.ToInt32(Console.ReadLine());
if (n >= 0)
Console.WriteLine(Nr. introdus este > 0);
else
Console.WriteLine(Nr. introdus este < 0);
Console.ReadLine();
}
}
}

3.11.2. Instruciunea while


Instruciunea while are sintaxa:
while (conditie) Instructiuni;

Ct timp conditie este indeplinit se execut Instructiuni.


Exemplu: S se afieze numerele ntregi pozitive <= 10
using System;

CAPITOLUL 3. Limbajul C#

41

namespace Test
{
class Program
{
static void Main(string[] args)
{
int n = 0;
while (n <= 10)
{
Console.WriteLine(n este {0}, n);
n++;
}
Console.ReadLine();
}
}
}

3.11.3. Instruciunea do while


Instruciunea do - while are sintaxa este:
do
Instructiuni;
while(conditie)

Exemplu: Asemntor cu exerciiul anterior, s se afieze numerele ntregi pozitive


<= 10
using System;
namespace Test
{
class Program
{
static void Main(string[] args)
{
int n = 0;
do
{
Console.WriteLine(n este {0}, n);
n++;
}
while (n <= 10);
Console.ReadLine();
}
}

42

Introducere n .Net Framework (Suport de curs)

3.11.4. Instruciunea for


Instruciunea for are sintaxa:
for (initializareCiclu; coditieFinal; pas)
Instructiuni

Exemplu: Ne propunem, la fel ca n exemplele anterioare, s afim numerele pozitive <=10


using System;
namespace Test
{
class Program
{
static void Main(string[] args)
{
for(int n=0; n<=10; n++)
{
Console.WriteLine(n este {0}, n);
}
Console.ReadLine();
}
}
}

3.11.5. Instruciunea switch


La switch n C/C++, dac la finalul intruciunilor dintr-o ramur case nu exist
break, se trece la urmtorul case. n C# se semnaleaz eroare. Exist i aici posibilitatea de a face verificri multiple (n sensul de a trece la verificarea urmtoarei
condiii din case) doar dac case-ul nu conine instruciuni:
switch (a)
{
case 13:
case 20:
x=5;
y=8;
break;
default:
x=1;
y-0;
break;
}

Instruciunea switch admite n C# variabil de tip ir de caractere care s fie comparat cu irurile de caractere din case-uri.

CAPITOLUL 3. Limbajul C#

43

Exemplu:
switch(strAnimal)
{
case Pisica :

break;
case Catel :

break;
default:

break;
}

3.11.6. Instruciunea foreach


Instruciunea foreach enumer elementele dintr-o colecie, executnd o instruciune pentru fiecare element. Elementul care se extrage este de tip read-only,
neputnd fi transmis ca parametru i nici aplicat un operator care s-I schimbe valoarea. Pentru a vedea cum acioneaz o vom compara cu instruciunea cunoscut
for. Considerm un vector nume format din iruri de caractere:
string[] nume={Ana, Ionel, Maria};

S afim acest ir folosind instruciunea for:


for(int i=0; i<nume.Length; i++)
{
Console.Write({0} , nume[i]);
}

Acelai rezultat l obinem folosind instruciunea foreach:


foreach (string copil in nume)
{
Console.Write({0} , copil);
}

3.11.7. Instruciunea break


Instruciunea break permite ieirea din instruciunea cea mai apropiat switch,
while, do while, for sau foreach.

3.11.8. Instruciunea continue


Instruciunea continue permite reluarea iteraiei celei mai apropiate instruciuni
switch, while, do while, for sau foreach.

44

Introducere n .Net Framework (Suport de curs)

Exemplu:
using System;
namespace Salt
{
class Program
{
static void Main(string[] args)
{
int i = 0;
while(true)
{
Console.Write({0} ,i);
i++;
if(i<10)
continue;
else
break;
}
Console.ReadLine();
}
}
}

Se va afia:
0 1 2 3 4 5 6 7 8 9

3.11.9. Instruciunea goto


Instruciunea goto poate fi folosit, n C#, n instruciunea switch pentru a face un
salt la un anumit case.
Exemplu:
switch (a)
{
case 13:
x=0;
y=0;
goto case 20;
case 15:
x=3;
y=1;
goto default;
case 20:
x=5;
y=8;
break;
default:
x=1;

CAPITOLUL 3. Limbajul C#

45

y=0;
break;
}

3.12. Instruciunile try-catch-finally i throw


Prin excepie se nelege un obiect care ncapsuleaz informaii despre situaii
anormale n funcionarea unui program. Ea se folosete pentru a semnala contextul
n care apare o situaie special. De exemplu: erori la deschiderea unor fiiere,
mprire la 0 etc. Aceste erori se pot manipula astfel nct programul s nu se termine abrupt.
Sunt situaii n care prefigurm apariia unei erori ntr-o secven de prelucrare i
atunci integrm secvena respectiv n blocul unei instruciuni try, preciznd una sau
mai multe secvene de program pentru tratarea excepiilor aprute (blocuri catch) i
eventual o secven comun care se execut dup terminarea normal sau dup
recuperarea programului din starea de excepie (blocul finally).
Exemplu:
using System;
using System.IO;
namespace Exceptii
{
class tryCatch
{
static void Main(string[] args)
{
Console.Write(Numele fisierului:);
string s=Console.ReadLine(s);
try
{
File.OpenRead(s);
}
catch (FileNotFoundException a)
{
Console.WriteLine(a.ToString());
}
catch (PathTooLongException b)
{
Console.WriteLine(b.ToString());
}
finally
{
Console.WriteLine(Programul s-a sfarsit);
Console.ReadLine();
}
}
}
}

46

Introducere n .Net Framework (Suport de curs)

Alteori putem simula prin program o stare de eroare aruncnd o excepie


(instruciunea throw) sau putem profita de mecanismul de tratare a erorilor pentru a
implementa un sistem de validare a datelor prin generarea unei excepii proprii pe
care, de asemenea, o aruncm n momentul nendeplinirii unor condiii puse
asupra datelor.
Clasa System.Exception i derivate ale acesteia servesc la tratarea adecvat i
diversificat a excepiilor.
Exemplu: Considerm clasele Copil, Fetita, Baiat definite fragmentat n capitolul 1.
O posibilitate de validare la adugara unui copil este aceea care genereaz o excepie
proprie la depirea dimensiunii vectorului static copii:
public static void adaug_copil(Copil c)
{
if (nr_copii < nr_max)
copii[nr_copii++] = c;
else throw new Exception(Prea muli copii);
}

47

CAPITOLUL

Programarea web cu ASP.NET


4.1. Introducere
ASP.NET este tehnologia Microsoft care permite dezvoltarea de aplicaii web
moderne, utiliznd platforma Microsoft .NET cu toate beneficiile sale.
Pentru a nelege procesul de realizare a unui site web cu ASP.NET este important
s cunoatem modul n care funcioneaz comunicarea ntre browser i serverul web.
Acest proces este format din urmtoarele etape principale:
1 Browserul Web iniiaza o cerere (request) a unei resurse ctre serverul Web
unde este instalat aplicaia dorit.
2 Cererea este trimis serverului Web folosind protocolul HTTP.
3 Serverul Web proceseaz cererea.
4 Serverul web trimite un rspuns browserului folosind protocolul HTTP.
5 Browserul proceseaz rspunsul n format HTML, afind pagina web.
6 Utilizatorul poate introduce date (s spunem ntr-un formular), apas butonul
Submit i trimite date napoi ctre server.
7 Serverul Web proceseaz datele.
8 Se reia de la pasul 4.
Serverul web primete cererea (request), iar apoi trimite un rspuns (response)
napoi ctre browser, dup care conexiunea este nchis, i sunt eliberate resursele
folosite pentru procesarea cererii. Acesta este modul de lucru folosit pentru afiarea
paginilor statice (datele dintr-o pagin nu depind de alte date din alte pagini sau de
alte aciuni precedente ale utilizatorului) i nici o informaie nu este stocat pe server.
n cazul paginilor web dinamice, serverul poate s proceseze cereri de pagini ce
conin cod care se execut pe server, sau datele pot fi salvate pe server ntre dou
cereri din partea browserului.
Trimiterea datelor de la browser ctre server se poate realiza prin metoda GET sau
POST.
Prin GET, URL-ul este completat cu un ir de caractere (QueryString) format din
perechi de tipul cheie = valoare separate prin &.

48

Introducere n .Net Framework (Suport de curs)

Exemplu:
GET /getPerson.aspx?Id=1&city=Cluj HTTP/1.1
Folosind POST, datele sunt plasate n corpul mesajului trimis serverului:
Exemplu:
POST /getCustomer.aspx HTTP/1.1
Id=123&color=blue
Prin Get nu se pot trimite date de dimensiuni mari, iar datorit faptului c datele
sunt scrise n URL-ul browser-ului, pot aprea probleme de securitate. De aceea, de
preferat este s se foloseasc metoda POST pentru trimiterea de date.
Trimiterea datelor napoi ctre server este numit deseori PostBack. Aciunea de
PostBack poate fi folosit att cu metoda GET ct i cu metoda POST. Pentru a ti
dac se trimit date (POST) sau pagina este doar cerut de browser (GET), cu alte
cuvinte pentru a ti dac pagina curent se ncarc pentru prim dat sau nu, n
ASP.NET se folosete o proprietate a clasei Page numit IsPostBack.

4.2. Structura unei pagini ASP.NET


La crearea unui proiect nou, n fereastra Solution Explorer apare o nou pagin
web numit Default.aspx.
Orice pagin web .aspx este format din 3 seciuni: seciunea de directive, seciunea de cod, i seciunea de layout.
Seciunea de directive se folosete pentru a seta mediul de lucru, preciznd modul
n care este procesat pagina.
<%@ Page Language=C# AutoEventWireup=true
CodeFile=Default.aspx.cs Inherits=_Default %>

Seciunea de cod, conine codul C# asociat paginii sau obiectelor din pagin.
Codul poate fi plasat direct n pagina sau ntr-un fiier cu extensia .cs, cu acelai
nume ca al paginii (de ex. Default.aspx.cs). n cazul n care se gsete direct n pagin, codul este cuprins ntre tag-urile <script> </script>:
<script runat=server>
protected void Button1_Click(object sender, EventArgs e)
{
Page.Title = First Web Application;
}
</script>

De obicei blocurile <script> conin cod care se execut pe partea de client, ns


dac se folosete atributul runat = server, codul se va executa pe serverul web.
n cazul exemplului de mai sus, la apsarea butonului se schimb titlul paginii
Web n browser.

CAPITOLUL 4. Programarea web cu ASP.NET

49

n cazul n care n fereastra pentru adugarea unei pagini noi n proiect, se bifeaz
opiunea Place code in separate file, codul este plasat ntr-un fiier separat, iar n
seciunea de directive este precizat numele acestui fiier.
Exemplu: CodeFile=Default.aspx.cs.
Seciunea de layout conine codul HTML din seciunea Body:
<body>
<form id=form1 runat=server>
<div>
<asp:Button ID=Button1 runat=server OnClick=Button1_Click
Text=Button /></div>
</form>
</body>

Atributul runat=server pentru un anumit control, specific faptul c pentru obiectul respectiv, ASP.NET Runtime Engine care ruleaz pe serverul web (IIS) va face
transformarea ntr-un obiect HTML standard. Aceast conversie se realizeaz n
funcie de tipul browserului, de varianta de javascript instalat pe browser i de codul
C# asociat obiectului respectiv (numit code behind).
De exemplu pagina aspx de mai sus este transformat n urmtorul fiier html:
<form name=form1 method=post action=Default.aspx id=form1>
<div>
<input type=hidden name=__VIEWSTATE id=__VIEWSTATE
value=/wEPDwUKMTQ2OTkzNDMyMWRkIftHHP/CS/zQf/D4XczzogN1M1w= />
</div>
<div>&nbsp;<br />
<input type=submit name=Button1 value=Button id=Button1 style=zindex: 102;left: 349px; position: absolute; top: 156px />
</div>
<div>
<input type=hidden name=__EVENTVALIDATION = __EVENTVALIDATION
value =
/wEWAgKlr8nLBAKM54rGBh7DPY7SctG1t7rMEnJSrO+1hHyP />
</div>
</form>

Exemple complete de aplicaii web putei gsi pe DVD-ul Academic Resource Kit (ARK),
instalnd Resurse\Visual Studio 2005\101 Samples CS101SamplesAll.msi sau descrcnd
cele 101 exemple de utilizare a Visual Studio 2005 de la adresa http://msdn2.
microsoft.com/en-us/vstudio/aa718334.aspx. Dup instalare, din aplicaia Microsoft
Visual Web Developer 2005 alegei din meniul File opiunea Open Web Site i selectai, din
directorul ..\CS101SamplesAll\CS101SamplesWebDevelopment\, aplicaia dorit. n fereastra Solution Explorer selectai Start.aspx i apoi butonul View in Browser".

50

Introducere n .Net Framework (Suport de curs)

4.3. Controale Server


Un control server poate fi programat, prin intermediul unui cod server-side, s
rspund la anumite evenimente din pagin. i menine n mod automat starea ntre
2 cereri ctre server, trebuie s aib atributul id i atributul runat.
Exist dou tipuri de controale server: Web i Html. Controalele server web ofer
mai multe funcionaliti programabile dect cele HTML. De asemenea pot detecta
tipul browserului i pot fi transformate corespunztor n tag-urile html corespunztoare. ASP.NET vine cu o suit foarte bogat de controale care pot fi utilizate de ctre
programatori i care acoper o foarte mare parte din funcionalitile necesare unei
aplicaii web.
O proprietate important a controalelor server este AutoPostBack. Pentru a
nelege exemplificarea, vom considera o pagin n care avem un obiect de tip checkbox i un obiect de tip textbox care are proprietatea visible = false. n momentul n
care este bifat checkbox-ul, vrem ca obiectul textbox s apar n pagin. Codul poate
fi urmtorul:
protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
if (CheckBox1.Checked == true)
{
TextBox3.Visible = true;
TextBox3.Focus();
}
else
{
TextBox3.Visible = false;
}
}

Cnd vom rula pagina, vom constata c totui nu se ntmpl nimic. Pentru a se
executa metoda CheckBox1_CheckedCanged, pagina trebuie retrimis serverului n
momentul bifrii checkbox-ului. Serverul trebuie s execute codul i apoi s retrimit
ctre browser pagina n care textbox-ul este vizibil sau nu. De aceea controlul checkbox trebuie s genereze aciunea de PostBack, lucru care se ntmpl dac este setat
valoarea true proprietii AutoPostBack. Unele controale genereaz ntotdeauna
Postback atunci cnd apare un anumit eveniment. De exemplu evenimentul click al
controlului button.
Exemplu de folosire a controalelor web putei gsi pe DVDul ARK, instalnd
Resurse\Visual Studio 2005\101 Samples CS101SamplesAll.msi sau descrcnd cele
101 exemple de utilizare a Visual Studio 2005 de la adresa http://msdn2.
microsoft.com/en-us/vstudio/aa718334.aspx, aplicaia MenuAndSiteMapPath.
Pentru a nelege mai bine fenomenul de PostBack, ne propunem s realizm
urmtoarea aplicaie. ntr-o pagin avem un textbox i un buton. Dorim ca n textbox
s avem iniial (la ncrcarea paginii) valoarea 0, i de fiecare dat cnd se apas

CAPITOLUL 4. Programarea web cu ASP.NET

51

butonul, valoarea din textbox s fie incrementat cu 1. Codul evenimentului Click al


butonului i al evenimentului Load al paginii ar putea fi urmtorul:
protected void Page_Load(object sender, EventArgs e)
{
TextBox1.Text = 0;
}
protected void Button1_Click(object sender, EventArgs e)
{
TextBox1.Text = Convert.ToString(Convert.ToInt32(TextBox1.Text) + 1) ;
}

Vom observa, ns, c dup prima incrementare valoarea n textbox rmne 1.


Acest lucru se ntampl deoarece evenimentul Load se execut la fiecare ncrcare a
paginii (indiferent c este vorba de request-ul iniial al browserului su de apelul de
postback generat automat de evenimentul clic al butonului). Pentru a remedia
aceast situaie, obiectul Page n ASP are proprietarea isPostBack, a.. putem s
rescriem codul metodei Load:
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack == false) // nu este postback deci e prima
{
// incarcare a paginii
TextBox1.Text = 0;
}
}

4.4. Pstrarea informaiilor n aplicaiile web


Exist o deosebire fundamental ntre aplicaiile Windows i cele Web. Anume, n
aplicaiile Windows odat creat un obiect acesta rmne n memorie n principiu
pn la terminarea aplicaiei i va putea fi utilizat i din alte ferestre dect cele n care
a fost creat, atta timp ct este public. Pe de alt parte, n aplicaiile web paginile nu
se pstreaz n memorie pe calculatorul utilizatorului (clientului) iar aici ne vom pune
problema pstrrii informaiilor.
Cnd browserul cere o anumit pagin, ea este ncrcat de serverul web, se execut codul asociat pe baza datelor trimise de user, rezultnd un rspuns n format
html trimis browserului. Dup ce este prelucrat pagina de ctre server, obiectele din
pagin sunt terse din memorie, pierznd astfel valorile. De aceea apare ntrebarea:
cum se salveaz/transmit informaiile ntre paginile unui site web sau chiar n cadrul
aceleiai pagini, ntre dou cereri succesive ctre server?

4.4.1. Pstrarea strii controalelor


Obiectul ViewState
Starea controalelor unei pagini este pastrat automat de ctre ASP.NET i astfel
nu trebuie s ne facem griji cu privire la informaiile care apar n controale pentru ca

52

Introducere n .Net Framework (Suport de curs)

ele nu vor disprea la urmtorul PostBack adic la urmtoarea ncrcare a paginii


curente. De exemplu, dac scriem un text ntr-o csu de text i apoi apsm un
buton care genereaz un PostBack iar pagina se rencarc, ea va conine csua de
text respectiv cu textul introdus de noi nainte de rencrcare.
n momentul generrii codului Html de ctre server se genereaz un control html
de tip <input type=hidden...> , a crui valoare este un ir de caractere ce codific
starea controalelor din pagin:
<input type=hidden name=__VIEWSTATE id=__VIEWSTATE
value=/wEPDwULLTE1OTg1NDYyNDZkZFCFstl/DwSGv81TuCB397Tk5+CJ />

Se pot aduga valori n ViewState i de ctre programator, folosind obiectul


ViewState cu metoda Add (cheie, valoare_obiect): ViewState.Add(TestVariable,
Hello);
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack == false)
{
ViewState.Add(ViewStateTest, Hello);
}
}

Regsirea datelor se realizeaz folosind ca indice numele obiectului:


protected void Button1_Click(object sender, EventArgs e)
{
TextBox1.Text = ViewState[ViewStateTest].ToString();
}

4.4.2. Pstrarea altor informaii


Aa cum am observat n paragraful anterior, starea controalelor de pe o anumit
pagin web ASP.NET se pastreaz ntre mai multe cereri ctre server pentru aceeai
pagin, folosind obiectul ViewState n mod automat, transparent pentru programator.
Dac dorim s pstrm mai multe informaii dect doar coninutul controalelor,
cum ar fi valorile unor variabile instaniate ntr-o anumit pagin, atunci va trebui s
o facem explicit, pentru c acestea se pierd n momentul n care serverul web
regenereaz pagina curent, ceea ce se ntmpl la fiecare PostBack , cum se ntmpl de exemplu la apsarea unui buton ASP.NET.

4.4.2.1. Profile
O posibilitate de pstrare a informaiilor specifice unui utilizator const n folosirea
obiectului Profile, prin intermediul fiierului de configurare Web.Config. Acesta este
un fiier XML n care se rein opiuni de configurare. Pentru a aduga o proprietate
obiectului profile, n fiierul Web.Config se adaug:

CAPITOLUL 4. Programarea web cu ASP.NET

53

<profile enabled=true>
<properties>
<add name =ProfileTest allowAnonymous =true/>
</properties>
</profile>

Atributul name reine numele proprietii. Dup aceste modificri, proprietatea


definit n Web.config poate fi apelat pentru obiectul Profile:
Profile.ProfileTest = Hello world;
Sau
Label1.Text = Profile.ProfileTest;

4.4.2.2. Session
Obiectul Session este creat pe serverul web la prima accesare a sitului de ctre un
utilizator i rmne n memorie n principiu att timp ct utilizatorul rmne conectat
la site. Exist i excepii, dar ele nu fac obiectul acestui material.
Pentru a aduga un obiect n sesiune, trebuie doar s scriem un cod de genul
urmtor:
protected void Button1_Click(object sender, EventArgs e)
{
Session[sir] = test;
}

Session este de fapt un dicionar (list de perechi cheie valoare), n care valorile sunt de tip object. Ceea ce nseamn c la citirea unor valori din sesiune va trebui s realizm o conversie de tip.
protected void Button2_Click(object sender, EventArgs e)
{
test = Session[sir].ToString();
TextBox1.Text = test;
}

Odat introdus un obiect n Session, el poate fi accesat din toate paginile aplicaiei,
att timp ct el exist acolo. Programatorul poate realiza scoaterea obiectului din
sesiune atunci cnd dorete acest lucru:
Session.Remove(sir);

4.4.2.3. Application
Obiectul Application se comport n mod identic cu Session, doar c este specific
ntregii aplicaii, adic tuturor utilizatorilor care acceseaza un site web la un moment

54

Introducere n .Net Framework (Suport de curs)

dat, i nu unei anumite sesiuni. Cu alte cuvinte odat introdus un obiect n Applicatio,
va putea fi accesat din orice loc al sitului i de ctre toi utilizatorii acestuia.

4.4.2.4. Membrii statici


Toate variabilele declarate ca fiind statice sunt specifice ntregii aplicaii i nu unei
anumite sesiuni. De exemplu, dac atunci cnd un site este accesat de Utilizator1 i
o variabil declarat:
static string test = init;

se modific de ctre acesta:


test = modificat;

atunci toi utilizatorii aplicaiei vor vedea valoarea modificat din acel moment
nainte.

4.4.3. Concluzii
n cazul obiectului ViewState, datele sunt salvate n pagina web sub forma unui ir
de caractere, iar n cazul obiectului Session respectiv Application n memoria
serverului web. Dac datele salvate sunt de dimensiuni mari, n primul caz crete
dimensiunea paginii web, care va fi transmis mai ncet, iar n al doilea caz rezult o
folosire excesiv a memoriei serverului web, ceea ce duce la scderea vitezei de
lucru. Aceast folosire excesiv a memoriei poate s apar i n cazul unei dimensiuni a datelor ceva mai redus, dar a unui numr mare de utilizatori care acceseaz
simultan pagina (pentru fiecare se va creea un obiect sesiune).

4.5. Validarea datelor


n toate aplicaiile web i nu numai se pune problema validrii datelor introduse
de utilizator. Cu alte cuvinte, trebuie s ne asigurm c utilizatorul site-ului nostru
introduce numai date corecte n csuele de text care i sunt puse la dispoziie. De
exemplu, dac pe o pagin web se cere utilizatorului introducerea vrstei sale i pentru asta i punem la dispozitie o csu de text, va fi obligatoriu s ne asigurm c n
acea csu se pot introduce numai cifre i c numrul rezultat este ncadrat ntr-un
anumit interval. Sau, un alt exemplu, este introducerea unei adrese de email valid
din punct de vedere al formatului.
ASP.NET vine cu o serie de controale gata create n scopul validrii datelor. Aceste
controale sunt de fapt clase care provin din aceeai ierarhie, avnd la baz o clas cu
proprieti comune tuturor validatoarelor.

4.5.1. Proprieti comune


1 ControlToValidate: este proprietatea unui control de validare care arat spre
controlul (csua de text) care trebuie s fie validat.
2 ErrorMessage: reprezint textul care este afiat n pagina atunci cnd datele din

CAPITOLUL 4. Programarea web cu ASP.NET

55

controlul de validat nu corespund regulii alese.


3 EnableClientSideScript: este o proprietate boolean care specific locul n care
se execut codul de validare (pe client sau pe server).
4 Alte proprieti, specifice tipului de validator.

4.5.2. Validatoare
1 RequiredFieldValidator. Verific dac n csua de text asociat prin proprietatea
ControlToValidate s-a introdus text. Util pentru formularele n care anumite date
sunt obligatorii.
2 RangeValidator. Verific dac informaia introdus n csua de text asociat
face parte dintr-un anumit interval, specificat prin tipul datei introduse (prorietatea Type) i MinimumValue respectiv MaximumValue.
3 RegularExpressionValidator. Verific dac informaia din csua de text asociat
este conform unei expresii regulate specificate. Este util pentru validarea unor
informaii de genul adreselor de email, numerelor de telefon, etc n general
informaii care trebuie s respecte un anumit format. Trebuie setat proprietatea
ValidationExpression n care se pot alege cteva expresii uzuale gata definite.
4 CompareValidator. Compar datele introduse n csua de text asociat cu o valoare prestabilit (ValueToCompare), n funcie de operatorul ales (proprietatea
Operator) i de tipul de date care se ateapt (proprietatea Type).
Pe lng validatoarele prezentate mai sus, programatorul poate crea validatoare
customizate, care s verifice datele introduse de utilizator conform unor reguli proprii.
Exemplu de folosire a validrilor pentru un modul de login putei gsi pe dvd-ul
ARK, instalnd Resurse\Visual Studio 2005\101 Samples CS101SamplesAll.msi sau
descrcnd cele 101 exemple de utilizare a Visual Studio 2005 de la adresa
http://msdn2.microsoft.com/en-us/vstudio/aa718334.aspx, aplicaia Membership.

4.6. Securitatea n ASP.NET


Pentru o aplicaie securizat, avem mai multe posibiliti de autentificare, cele mai
des ntlnite fiind sintetizate n tabelul de pe slide. Implementarea politicii de securitate se poate face att din IIS ct i din aplicaia ASP.NET.
Tipul aplicaiei
Modul de autentificare Descriere
Aplicaie web public
Anonim
Nu avem nevoie de securizare.
pe Internet.
Acest mod autentific utilizatorii folosind lista de useri
Aplicaie web pentru
de pe server (Domain Controller). Drepturile userilor n
Windows Integrated
Intranet.
aplicaia web este dat de nivelul de privilegii al contului respectiv.
Aplicaie web disponibil pe Internet, dar
Windows Integrated
cu acces privat.

Utilizatorii companiei pot accesa aplicaia din afara


Intranetului, folosind conturi din lista serverului
(Domain Controller).

Aplicaii web
comerciale.

Aplicaii care au nevoie de informaii confideniale i


eventual n care sunt mai multe tipuri de utilizatori.

Forms Authentication

56

Introducere n .Net Framework (Suport de curs)

4.6.1. Windows Authentication


n acest mod de autentificare, aplicaia ASP .NET are ncorporate procedurile de
autentificare, dar se bazeaz pe sistemul de operare Windows pentru autentificarea
utilizatorului.
1. Utilizatorul solicit o pagin securizat de la aplicaia Web.
2. Cererea ajunge la Serverul Web IIS care compar datele de autentificare ale utilizatorului cu cele ale aplicaiei (sau ale domeniului)
3. Dac acestea dou nu corespund, IIS refuz cererea utilizatorului
4. Calculatorul clientului genereaz o fereastr de autentificare
5. Clientul introduce datele de autentificare, dup care retrimite cererea ctre IIS
6. IIS verific datele de autentificare, i n cazul n care sunt corecte, direcioneaz
cererea ctre aplicaia Web.
7. Pagina securizat este returnat utilizatorului.

4.6.2. Forms-Based Authentication


Atunci cnd se utilizeaz autentificarea bazat pe formulare, IIS nu realizeaz autentificarea, deci este necesar ca n setrile acestuia s fie permis accesul anonim.
1. n momentul n care un utilizator solicit o pagin securizat, IIS autentific
clientul ca fiind un utilizator anonim, dup care trimite cererea ctre ASP.NET
2. Acesta verific pe calculatorul clientului prezena unui anumit cookie1
3. Dac cookie-ul nu este prezent sau este invalid, ASP.NET refuz cererea clientului i returneaz o pagin de autentificare (Login.aspx)
4. Clientul completeaz informaiile cerute n pagina de autentificare i apoi trimite
informaiile
5. Din nou, IIS autentific clientul ca fiind un utilizator anonim i trimite cererea
ctre ASP.NET
6. ASP.NET autentific clientul pe baza informaiilor furnizate. De asemenea
genereaz i un cookie. Cookie reprezint un mic fiier text ce pstreaz diverse
informaii despre utilizatorul respectiv, informaii folosite la urmtoarea vizit a
sa pe site-ul respectiv, la autentificare, sau n diverse alte scopuri.
7. Pagina securizat cerut i noul cookie sunt returnate clientului. Atta timp ct
acest cookie rmne valid, clientul poate solicita i vizualiza orice pagin securizat ce utilizeaz aceleai informaii de autentificare.

4.6.3. Securizarea unei aplicaii web


Securizarea unei aplicaii web presupune realizarea a dou obiective: (1) autentificarea i (2) autorizarea.
1. Autentificarea presupune introducerea de ctre utilizator a unor credeniale, de
exemplu nume de utilizator i parol, iar apoi verificarea n sistem c acestea
exist si sunt valide.

CAPITOLUL 4. Programarea web cu ASP.NET

57

2. Autorizarea este procesul prin care un utilizator autentificat primete acces pe


resursele pe care are dreptul s le acceseze.
Aceste obiective pot fi atinse foarte uor utiliznd funcionalitile i uneltele din
ASP.NET respectiv Visual Studio, anume clasa Membership i unealta
ASP.NET Configuration (din meniul Website al Visual Studio Web Developer
Express). Configurarea autentificrii i autorizrii se poate realiza dup cum se vede
n acest tutorial:
http://msdn2.microsoft.com/en-us/library/879kf95c(VS.80).aspx.
Un exemplu de securizare a aplicailor web putei gsi pe dvd-ul ARK, instalnd
Resurse\Visual Studio 2005\101 Samples CS101SamplesAll.msi sau descrcnd cele
101 exemple de utilizare a Visual Studio 2005 de la adresa http://msdn2.
microsoft.com/en-us/vstudio/aa718334.aspx, aplicatia Security.

4.7. Accesul la o baza de date ntr-o pagin web


Pentru adugarea unei baze de date proiect, din meniul Add Item se alege SQL
Database. Baza de date va fi adaugat n directorul App_data al proiectului.
Legtura ntre baza de date i controalele html se realizeaz prin intermediul
obiectului SqlDataSource. Din meniul contextual asociat acestui obiect se alege opiunea Configure Data Source, se alege baza de date, i se construiete interogarea
SQL pentru regsirea datelor.
La aceast surs de date se pot lega controale de afiare a datelor cum ar fi:
GridView, Detailview, FormView. Din meniul contextual asociat acestor controale se
alege opiunea Choose data source, de unde se alege sursa de date.
Un exemplu de acces la o baz de date ntr-o aplicaie web putei gsi pe DVD-ul
ARK instalnd Resurse\Visual Studio 2005\101 Samples CS101SamplesAll.msi sau
descrcnd cele 101 exemple de utilizare a Visual Studio 2005 de la adresa
http://msdn2.microsoft.com/en-us/vstudio/aa718334.aspx, aplicaia DataControls.
Pentru acest exemplu va trebui s descrcai baza de date AdventureWorksDB de la
adresa http://www.codeplex.com/MSFTDBProdSamples/Release/ProjectReleases.
aspx?ReleaseId=4004. Fiierul descrcat va fi unul de tip *.msi care trebuie lansat
pentru a instala baza de date pe server/calculator.

4.8. Resurse
Dezvoltarea de aplicaii web cu Visual Web Developer Express:
http://msdn.microsoft.com/vstudio/express/vwd/

59

CAPITOLUL

Programare vizual
5.1. Concepte de baz ale programrii vizuale
Programarea vizual trebuie privit ca un mod de proiectare a unui program prin
operare direct asupra unui set de elemente grafice (de aici vine denumirea de programare vizual). Aceast operare are ca efect scrierea automat a unor secvene de
program, secvene care, mpreun cu secvenele scrise textual28, vor forma programul.
Spunem c o aplicaie este vizual dac dispune de o interfa grafic sugestiv i
pune la dispoziia utilizatorului instrumente specifice de utilizare (drag, clic, hint etc.)
Realizarea unei aplicaii vizuale nu const doar n desenare i aranjare de controale, ci presupune n principal stabilirea unor decizii arhitecturale29, decizii ce au la
baz unul dintre modelele arhitecturale de baz:
a) Modelul arhitectural orientat pe date.
Acest model nu este orientat pe obiecte, timpul de dezvoltare al unei astfel de
aplicaii este foarte mic, o parte a codului este generat automat de Visual
Stdio.Net, codul nu este foarte uor de ntreinut i este recomandat pentru aplicaii relativ mici sau cu multe operaii de acces (in/out) la o baz de date.
b)Modelul arhitectural Model-view-controller
Este caracterizat de cele trei concepte de baz: Model (reprezentarea datelor se
realizeaz ntr-o manier specific aplicaiei: conine obiectele de business,
ncapsuleaz accesul la date), View (sunt utilizate elemente de interfa, este
format din Form-uri), Controller( proceseaz i rspunde la evenimente iar SO,
clasele Form i Control din .Net ruteaz evenimentul ctre un handler, eveniment tratat n codul din spatele Form-urilor).
c) Modelul arhitectural Multi-nivel
Nivelul de prezentare ( interfaa)
Se ocup numai de afiarea informaiilor ctre utilizator i captarea celor introduse de
acesta. Nu cuprinde detalii despre logica aplicaiei, i cu att mai mult despre baza de date
28 Se utilizeaz ades antonimia dintre vizual (operaii asupra unor componente grafice) i textual (scriere de linii de
cod); proiectarea oricrei aplicaii "vizuale" mbin ambele tehnici.
29 Deciziile arhitecturale stabilesc n principal cum se leag interfaa de restul aplicaiei i ct de uor de ntreinut
este codul rezultat.

60

Introducere n .Net Framework (Suport de curs)

sau fiierele pe care aceasta le utilizeaz. Cu alte cuvinte, n cadrul interfeei cu utilizatorul,
nu se vor folosi obiecte de tipuri definite de programator, ci numai baza din .NET.
Nivelul de logic a aplicaiei
Se ocup de tot ceea ce este specific aplicaiei care se dezvolt. Aici se efectueaz
calculele i procesrile i se lucreaz cu obiecte de tipuri definite de programator.
Nivelul de acces la date
Aici rezid codul care se ocup cu accesul la baza de date, la fiiere, la alte servicii.

Aceast ultim structur este foarte bun pentru a organiza aplicaiile, dar nu este
uor de realizat. De exemplu, dac n interfaa cu utilizatorul prezentm date sub
form ListView i la un moment dat clientul ne cere reprezentarea datelor ntr-un
GridView, modificrile la nivel de cod nu se pot localiza doar n interfa deoarece
cele dou controale au nevoie de modele de acces la date total diferite.
Indiferent de modelul arhitectural ales, n realizarea aplicaiei mai trebuie respectate i principiile proiectrii interfeelor:
Simplitatea
Interfaa trebuie s fie ct mai uor de neles30 i de nvat de ctre utilizator i
s permit acestuia s efectueze operaiile dorite n timp ct mai scurt. n acest sens,
este vital culegerea de informaii despre utilizatorii finali ai aplicaiei i a modului n
care acetia sunt obinuii s lucreze.
Poziia controalelor
Locaia controalelor dintr-o fereastr trebuie s reflecte importana relativ i
frecvena de utilizare. Astfel, cnd un utilizator trebuie s introduc nite informaii
unele obligatorii i altele opionale este indicat s organizm controalele astfel
nct primele s fie cele care preiau informaii obligatorii.
Consistena
Ferestrele i controalele trebuie s fie afiate dup un design asemntor (tem30 ntruct mintea uman poate s perceap la un moment dat aproximativ 5-9 obiecte, o fereastr supra-ncrcat

de controale o face greu de utilizat..

CAPITOLUL 5. Programare vizual

61

plate) pe parcursul utilizrii aplicaiei. nainte de a implementa interfaa, trebuie


decidem cum va arta aceasta, s definim template-ul.
Estetica
Intefaa trebuie s fie pe ct posibil plcut i atrgtoare.

5.2. Mediul de dezvoltare Visual C#


Mediul de dezvoltare Microsoft Visual C# dispune de instrumente specializate de
proiectare, ceea ce permite crearea aplicaiilor n mod interactiv, rapid i uor.
Pentru a construi o aplicaie Windows (FileNew Project) se selecteaz ca template Windows Application.
O aplicaie Windows conine cel puin o fereastr (Form) n care se poate crea o
interfa cu utilizatorul aplicaiei.
Componentele vizuale ale aplicaiei pot fi prelucrate n modul Designer (Shift+F7)
pentru a plasa noi obiecte, a le stabili proprietile etc. Codul din spatele unei componente vizuale este accesibil n modul Code (F7).
n fereastra Solution Explorer sunt afiate toate fiierele pe care Visual Studio.NET
le-a inclus n proiect. Form1.cs este formularul creat implicit de Visual Studio.NET ca
parte a proiectului.
Fereastra Properties este utilizat pentru a schimba proprietile obiectelor.
Toolbox conine controale standard drag-and-drop i componente utilizate n
crearea aplicaiei Windows. Controalele sunt grupate n categoriile logice din imaginea alturat.

Designer, Code, Solution Explorer i celelalte se afl grupate n meniul View.


La crearea unei noi aplicaii vizuale, Visual Studio.NET genereaz un spaiu de
nume ce conine clasa static Program, cu metoda static ce constituie punctul de
intrare (de lansare) a aplicaiei:
static void Main()
{

...
Application.Run(new Form1());

Clasa Application este responsabil cu administrarea unei aplicaii Windows,


punnd la dispoziie proprieti pentru a obine informaii despre aplicaie, metode
de lucru cu aplicaia i altele. Toate metodele i proprietile clasei Application sunt

62

Introducere n .Net Framework (Suport de curs)

statice. Metoda Run invocat mai sus creeaz un formular implicit, aplicaia rspunznd la mesajele utilizatorului pn cnd formularul va fi nchis.
Compilarea modulelor aplicaiei i asamblarea lor ntr-un singur fiier executabil se realizeaz cu ajutorul opiunilor din meniul Build, uzual fiind Build
Solution (F6).
Odat implementat, aplicaia poate fi lansat, cu asisten de depanare sau nu
(opiunile Start din meniul Debug). Alte faciliti de depanare pot fi folosite prin
umrirea pas cu pas, urmrirea pn la puncte de ntrerupere etc. (celelalte opiuni ale
meniului Debug). Ferestre auxiliare de urmrire sunt vizualizate automat n timpul procesului de depanare, sau pot fi activate din submeniul Windows al meniului Debug.

5.3. Ferestre
Spaiul Forms ne ofer clase specializate pentru: creare de ferestre sau formulare
(System.Windows.Forms.Form), elemente specifice (controale) cum ar fi butoane
(System.Windows.Forms.Button), casete de text (System.Windows.Forms.TextBox)
etc. Proiectarea unei ferestre are la baz un cod complex, generat automat pe msur
ce noi desemnm componentele i comportamentul acesteia. n fapt, acest cod realizeaz: derivarea unei clase proprii din System.Windows.Forms.Form, clas care
este nzestrat cu o colecie de controale (iniial vid). Constructorul ferestrei realizeaz instanieri ale claselor Button, MenuStrip, Timer etc. (orice plasm noi n fereastr) i adaug referinele acestor obiecte la colecia de controale ale ferestrei.
Dac modelul de fereastr reprezint ferestra principal a aplicaiei, atunci ea este
instaniat automat n programul principal (metoda Main). Dac nu, trebuie s scriem
noi codul ce realizeaz instanierea.
Clasele derivate din Form motenesc o serie de proprieti care determin
atributele vizuale ale ferestrei (stilul marginilor, culoare de fundal, etc.), metode care
implementeaz anumite comportamente (Show, Hide, Focus etc.) i o serie de
metode specifice (handlere) de tratare a evenimentelor (Load, Clic etc.).
O fereastr poate fi activat cu form.Show() sau cu form.ShowDialog(), metoda a
doua permind ca revenirea n fereastra din care a fost activat noul formular s se
fac numai dup ce noul formular a fost inchis (spunem c formularul nou este
deschis modal).
Un propietar este o fereastr care contribuie la comportarea formularului deinut.
Activarea propietarului unui formular deschis modal va determina activarea formularului deschis modal. Cnd un nou formular este activat folosind form.Show() nu va
avea nici un deintor, acesta stabilindu-se direct:
public Form Owner { get; set; }
F_nou form=new F_nou();
form.Owner = this; form.Show();

Formularul deschis modal va avea un proprietar setat pe null. Deintorul se poate


stabili setnd proprietarul nainte s apelm Form.ShowDialog() sau apelnd

CAPITOLUL 5. Programare vizual

63

From.ShowDialog() cu proprietarul ca argument.


F_nou form = new F_nou();form.ShowDialog(this);

Vizibilitatea unui formular poate fi setat folosind metodele Hide sau Show. Pentru a
ascunde un formular putem folosi:
this.Hide();

// setarea propietatii Visible indirect sau

this.Visible = false; // setarea propietatii Visible direct

Printre cele mai uzuale proprieti ale form-urilor, reamintim:


StartPosition determin poziia ferestrei atunci cnd aceasta apare prima dat,
poziie ce poate fi setat Manual sau poate fi centrat pe desktop
(CenterScreen), stabilit de Windows, formularul avnd dimensiunile i locaia
stabilite de programator (WindowsDefaultLocation) sau Windows-ul va stabili
dimensiunea iniial i locaia pentru formular (WindowsDefaultBounds) sau,
centrat pe formularul care l-a afiat (CenterParent) atunci cnd formularul va fi
afiat modal.
Location (X,Y) reprezint coordonatele colului din stnga sus al formularului
relativ la colul stnga sus al containerului. (Aceast propietate e ignorat dac
StartPosition = Manual). Micarea formularului ( i implicit schimbarea locaiei)
poate fi tratat n evenimentele Move i LocationChanged .
Locaia formularului poate fi stabilit relativ la desktop astfel:
void Form_Load(object sender, EventArgs e) {
this.Location = new Point(1, 1);
this.DesktopLocation = new Point(1, 1); } //formularul in desktop

Size (Width i Height) reprezint dimensiunea ferestrei. Cnd se schimb proprietile Width i Height ale unui formular, acesta se va redimensiona automat,
aceast redimensionare fiind tratat n evenimentele Resize sau in
SizeChanged. Chiar dac propietatea Size a formularului indic dimensiunea
ferestrei, formularul nu este n totalitate responsabil pentru desenarea ntregului coninut al su. Partea care este desenat de formular mai este denumit i
Client Area. Marginile, titlul i scrollbar-ul sunt desenate de Windows.
MaxinumSize i MinimumSize sunt utilizate pentru a restriciona dimensiunile
unui formular.
void Form_Load(object sender, EventArgs e) {
this.MinimumSize = new Size(200, 100);...
this.MaximumSize = new Size(int.MaxValue, 100);...}

IsMdiContainer precizeaz dac form-ul reprezint un container pentru alte


form-uri.
ControlBox precizeaz dac fereastra conine sau nu un icon, butonul de nchidere

64

Introducere n .Net Framework (Suport de curs)

al ferestrei i meniul System (Restore, Move, Size, Maximize, Minimize, Close).


HelpButton-precizeaz dac butonul
va aprea sau nu lng butonul de
nchidere al formularului (doar dac MaximizeBox=false, MinimizeBox=false).
Dac utilizatorul apas acest buton i apoi apas oriunde pe formular va aprea
evenimentul HelpRequested (F1).
Icon reprezint un obiect de tip *.ico folosit ca icon pentru formular.
MaximizeBox i MinimizeBox precizeaz dac fereastra are sau nu butonul
Maximize i respectiv Minimize
Opacity indic procentul de opacitate31
ShowInTaskbar precizeaz dac fereastra apare in TaskBar atunci cnd formularul este minimizat.
SizeGripStyle specific tipul pentru Size Grip (Auto, Show, Hide). Size grip
(n colul din dreapta jos) indic faptul c aceast fereastr poate fi redimensionat.
TopMost precizeaz dac fereastra este afisat n faa tuturor celorlalte ferestre.
TransparencyKey identific o culoare care va deveni transparent pe form.

Definirea unei funcii de tratare a unui eveniment asociat controlului se realizeaz


prin selectarea grupului
Events din ferestra Properties a controlului respectiv i
alegerea evenimentului dorit.
Dac nu scriem nici un nume pentru funcia de tratare, ci efectum dublu clic n
csua respectiv, se genereaz automat un nume pentru aceast funcie, innd cont
de numele controlului i de numele evenimentului (de exemplu button1_Click).
Dac n Designer efectum dublu clic pe un control, se va genera automat o funcie
de tratare pentru evenimentul implicit asociat controlului (pentru un buton evenimentul implicit este Click, pentru TextBox este TextChanged, pentru un formular
Load etc.).
Printre evenimentele cele mai des utilizate, se numr :
Load apare cnd formularul este pentru prima data ncrcat n memorie.
FormClosed apare cnd formularul este nchis.
FormClosing apare cnd formularul se va inchide ca rezultat al aciunii utilizatorului asupra butonului Close (Dac se seteaz CancelEventArgs.Cancel =True
atunci se va opri nchiderea formularului).
Activated apare pentru formularul activ.
Deactivate apare atunci cnd utilizatorul va da clic pe alt formular al aplicatiei.

5.4. Controale
Unitatea de baz a unei interfee Windows o reprezint un control. Acesta poate fi
gzduit de un container ce poate fi un formular sau un alt control.
Un control este o instan a unei clase derivate din System.Windows.Forms i este
reponsabil cu desenarea unei pri din container. Visual Studio .NET vine cu o serie
de controale standard, disponibile n Toolbox. Aceste controale pot fi grupate astfel:

31 Dac va fi setat la 10% formularul i toate controalele sale vor fi aproape invizibile.

CAPITOLUL 5. Programare vizual

65

5.4.1. Controale form. Controlul form este un container. Scopul su este de a gzdui
alte controale. Folosind proprietile, metodele i evenimentele unui formular,
putem personaliza programul nostru.
n tabelul de mai jos vei gsi o list cu controalele cel mai des folosite i cu
descrierea lor. Exemple de folosire a acestor controale vor urma dup explicarea proprietilor comune al controalelor i formularelor.
Funcia controlului Numele controlului Descriere
Sunt folosite pentru a executa o secven de instruciuni n
buton
Button
momentul activrii lor de ctre utilizator
calendar

MonthCalendar

Afieaz implicit un mic calendar al lunii curente. Acesta


poate fi derulat i nainte i napoi la celelalte luni calendaristice.

caset de validare

CheckBox

Ofer utilizatorului opiunile : da/nu sau include/exclude

etichet

Label

caset cu list

ListBox

imagine

PictureBox

pointer

Pointer

buton radio

RadioButton

caset de text

TextBox

Sunt folosite pentru afiarea etichetelor de text, i a pentru


a eticheta controalele.
Afieaz o list de articole din care utilizatorul poate alege.
Este folosit pentru adugarea imaginilor sau a altor resurse
de tip bitmap.
Este utilizat pentru selectarea, mutarea sau redimensionarea unui control.
Este folosit pentru ca utilizatorul s selecteze un singur element dint-un grup de selecii.
Este utilizat pentru afiarea textului generat de o aplicaie
sau pentru a primi datele introduse de la tastatur de ctre
utilizator.

5.4.2. Proprieti comune ale controalelor i formularelor:


Proprietatea Text Aceast proprietate poate fi setat n timpul proiectrii din fereastra Properties, sau programatic, introducnd o declaraie n codul programului.
Exemplu:
public Form1()
{
InitializeComponent();
this.Text = Primul formular;
}

Proprietile ForeColor i BackColor. Prima proprietate enunat seteaz culoare textului din formular, iar cea de a doua seteaz culoarea formularului. Toate acestea le
putei modifica dup preferine din fereastra Properties.

66

Introducere n .Net Framework (Suport de curs)

Proprietatea BorderStyle. Controleaz stilul bordurii unui formular. ncercai s


vedei cum se modific setnd proprietatea la Fixed3D. (tot din fereastra Properties)
Proprietatea FormatString v permite s setai un format comun de afiare pentru
toate obiectele din cadrul unei ListBox. Aceasta se gsete disponibil n panoul
Properties.
Proprietatea Multiline schimb setarea implicit a controlului TextBox de la o singur
linie, la mai multe linii. Pentru a realiza acest lucru tragei un TextBox ntr-un formular
i modificai valoarea proprietii Multiline din panoul Properties de la False la true.
Proprietatea AutoCheck cnd are valoarea true, un buton radio i va schimba starea
automat la executarea unui clic.
Proprietatea AutoSize folosit la controalele Label i Picture, decide dac un control
este redimensionat automat, pentru a-i cuprinde ntreg coninutul.
Proprietatea Enabled determin dac un control este sau nu activat ntr-un formular.
Proprietatea Font determin fontul folosit ntr-un formular sau control.
Proprietatea ImageAlign specific alinierea unei imagini aezate pe suprafaa controlului.
Proprietatea TabIndex seteaz sau returneaz poziia controlului n cadrul aranjrii
taburilor.
Proprietatea Visible seteaz vizibilitatea controlului.
Proprietatea Width and Height permite setarea nlimii i a limii controlului.

5.4.3. Cteva dintre metodele i evenimentele Form


Cnd dezvoltm programe pentru Windows, uneori trebuie s afim ferestre
adiionale. De asemenea trebuie s le facem s dispar de pe ecran. Pentru a reui
acest lucru folosim metodele Show() i Close() ale controlului. Cel mai important
eveniment pentru Button este Click (desemnnd aciunea clic stnga pe buton).
Un exemplu n acest sens:
Deschidei o nou aplicaie Windows. Tragei un buton pe formular. Din meniul
Project selectai Add Windows Form, iar n caseta de dialog care apare adugai
numele Form2, pentru noul formular creat. n acest moment ai inclus n program
dou formulare. Tragei un buton n Form2 i executai dublu clic pe buton, pentru a
afia administratorul su de evenimente. Introducei acum n el linia de cod
this.Close();.
private void button1_Click(object sender, EventArgs e)
{
this.Close();
}

Numele metodei button1_Click este alctuit din numele controlului button1,


urmat de numele evenimentului: Click.
Acum ar trebui s revenii la Form1 i executai dublu clic pe butonul din acest formular pentru a ajunge la administratorul su de evenimente. Editai administratorul
evenimentului conform exemplului de mai jos:

CAPITOLUL 5. Programare vizual

67

private void button1_Click(object sender, EventArgs e)


{
Form2 form2 = new Form2();
form2.Show();
}

n acest moment rulai programul apsnd tasta F5 i vei observa c la executarea


unui clic pe butonul din Form1 se deschide Form2 iar la executarea unui clic pe
butonul din Form2 acesta se nchide.

Tot n cadrul evenimentului Click, oferim acum un exemplu de afiare ntr-un


TextBox a unui mesaj, n momentul n care se execut clic pe un buton:

Deschidei o nou aplicaie Windows. Tragei un buton pe formular i o caset


TextBox. Modificai textul ce apare pe buton, conform imaginii, i executai dublu clic
pe el, pentru a ajunge la administratorul su de evenimente. Modificai sursa astfel
nct s arate n modul urmtor.
private void button1_Click(object sender, EventArgs e)
{
string a = PLATFORMA .NET;
textBox1.Text = a;
}

Casete de mesaje:
Pentru a crea o caset mesaj, apelm metoda MessageBox.Show();.ntr-o nou aplicaie Windows, tragei un buton n formular, modificai textul butonului cum dorii
sau ca n imaginea alturat va apare un mesaj, executai dublu clic pe buton i

68

Introducere n .Net Framework (Suport de curs)

adugai n administratorul evenimentului Click linia de program: MessageBox.Show(tiam spus);. Apoi rulai programul.

Casete de dialog
O caset de dialog este o form specializat de control de tip Form.
Exemplu:
Creai o nou aplicaie Windows, apoi tragei un buton n formular i setai proprietatea Text a butonului la : s avem un dialog, iar apoi executai dublu clic pe buton
i folosii urmtorul cod pentru administratorul evenimentului Click.
private void button1_Click(object sender, EventArgs e)
{
Form2 w = new Form2();
w.ShowDialog();
}

Creai un alt formular la acest proiect(alegei Add Windows Forms din meniul
Project), apoi n ordine: setai proprietatea ControlBox la valoarea false, setai proprietatea Text la caset de dialog, tragei n formular un control de tip Label i Text la
introdu text, adugai un control TextBox n formular, adugai dou butoane,
setai proprietatea Text a butonului din stnga la OK iar al celui din dreapta la
Cancel, setai proprietatea DialogResult a butonului din stanga la OK iar al celui din
dreapta la Cancel, executai clic pe formularul casetei de dialog i setai proprietatea
AcceptButton la OKButton iar proprietatea CancelButton la CancelButton. Acum executai dublu clic pe butonul OK i folosii urmtorul cod pentru administratorul evenimentului Click:
private void button1_Click(object sender, EventArgs e)
{
textBoxText = textBox1.Text;
this.Close();
}

CAPITOLUL 5. Programare vizual

69

Executai dublu clic pe butonul Cancel i folosii urmtorul cod pentru administratorul evenimentului Click:
private void button2_Click(object sender, EventArgs e)
{
Form2 v = new Form2();
v.ShowDialog();
if (v.DialogResult != DialogResult.OK)
{ this.textBox1.Clear(); }
}

La nceputul clasei Form2 adugai declaraia: public string textBoxText;


Iar la sfritul clasei Form2 adugai proprietatea:
public string TextBoxText
{get{ return(textBoxText);}

Acum putei rula acest program.


Crearea interfeei cu utilizatorul:
Vom crea o aplicaiei numit Minicalculator, ce va conine un meniu principal.
Meniul principal va avea un obiect File ce va conine cte un obiect Exit i Clear.
Ieirile vor fi afiate ntr-un TextBox.

Creai o nou aplicaie Windows n care tragei 13 butoane pe care le vei poziiona
i numi ca n figura alturat, apoi mai adugai un TextBox(pe acesta l putei seta
s arate textul n stnga sau n dreapta).
Adugai un menuStrip care s conin elementele precizate mai sus, i pe care le
putei observa n figura alturat.
Facei dublu clic pe fiecare buton numeric n parte pentru a ajunge la surs i modificai fiecare surs respectnd codul de mai jos:
private void button7_Click(object sender, EventArgs e)
{
string v = textBox1.Text;
v += 7;
textBox1.Text = v;
}

70

Introducere n .Net Framework (Suport de curs)

Am dat exemplu pentru tasta 7, dar atenie la fiecare tast, variabila v, va primi ca
valoare numrul afiat pe tasta respectiv.
Acum procedai la fel, i modificai sursa pentru butoanele + i -.
private void button11_Click(object sender, EventArgs e)
{
op1 = textBox1.Text;
operatie = +;
textBox1.Text = ;
}

Pentru butonul = folosii codul urmtor:


private void button13_Click(object sender, EventArgs e)
{
int n1, n2, x = 0;
n1 = Convert.ToInt16(op1);
n2 = Convert.ToInt16(op2);
if (operatie == +) { x = n1 + n2; }
else if (operatie == -) { x = n1 - n2; }
textBox1.Text = Convert.ToString(x);
op1 = ; op2 = ;
}

Codul pentru obiectele Exit i Clear din meniul File va fi:


private void clearToolStripMenuItem_Click(object sender, EventArgs e)
{
textBox1.Text = ;
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
}

Un alt exemplu:
Se adaug pe formular dou butoane i o caset text. Apsarea primului buton va
determina afiarea textului din TextBox ntr-un MessageBox iar apsarea celui de-al
doilea buton va nchide nchide aplicaia.

CAPITOLUL 5. Programare vizual

71

Dup adugarea celor dou butoane i a casetei text, a fost schimbat textul afiat
pe cele dou butoane i au fost scrise funciile de tratare a evenimentului Click pentru cele dou butoane:
private void
{
private void
{

button1_Click(object sender, System.EventArgs e)


MessageBox.Show(textBox1.Text);}
button2_Click(object sender, System.EventArgs e)
Form1.ActiveForm.Dispose();}

Controale valoare (label, textbox, picturebox) care arat utilizatorului o informaie (text, imagine).
Label este folosit pentru plasarea de text pe un formular. Textul afiat este
coninut n propietatea Text i este aliniat conform propietii TextAlign.
TextBox - permite utilizatorului s introduc un text. Prevede, prin intermediul ContextMenu-ului asociat, un set de funcionaliti de baz, ca de exemplu (Cut, Copy, Paste, Delete, SelectAll).
PictureBox permite afiarea unei imagini.
Exemplul PV2 afieaz un grup alctuit din 3 butoane, etichetate A,B respectiv C
avnd iniial culoarea roie. Apsarea unui buton determin schimbarea culorii acestuia n galben. La o nou apsare butonul revine la culoare iniial. Acionarea
butonului Starea butoanelor determin afiarea ntr-o caset text a etichetelor
butoanelor galbene. Caseta text devine vizibil atunci cnd apsm prima oar acest
buton. Culoarea butonului mare (verde/portocaliu) se schimb atunci cnd mouse-ul
este poziionat pe buton.

Dup adugarea butoanelor i a casetei text pe formular, stabilim evenimentele


care determin schimbarea culoriilor i completarea casetei text.

72

Introducere n .Net Framework (Suport de curs)

private void button1_Click(object sender, System.EventArgs e)


{if (button1.BackColor== Color.IndianRed) button1.BackColor=Color.Yellow;
else button1.BackColor= Color.IndianRed;}
private void button4_MouseEnter(object sender, System.EventArgs e)
{button4.BackColor=Color.YellowGreen;button4.Text=Butoane apasate;}
private void button4_MouseLeave(object sender, System.EventArgs e)
{textBox1.Visible=false;button4.Text=Starea butoanelor;
button4.BackColor=Color.Orange;}
private void button4_Click(object sender, System.EventArgs e)
{textBox1.Visible=true;textBox1.Text=;
if( button1.BackColor==Color.Yellow)textBox1.Text=textBox1.Text+A;
if( button2.BackColor==Color.Yellow)textBox1.Text=textBox1.Text+B;
if( button3.BackColor==Color.Yellow)textBox1.Text=textBox1.Text+C;
}

Exerciiu Modificai aplicaia precedent astfel nct s avem un singur eveniment


button_Click, diferenierea fiind fcut de parametrul sender.
Exerciiu ( Password) Adugai pe un formular o caset text n care s introducei
un ir de caractere i apoi verificai dac acesta coincide cu o parol dat. Textul
introdus n caset nu este vizibil (fiecare caracter este nlocuit cu*). Rezultatul va fi
afiat ntr-un MessageBox.
Controale de selecie (CheckBox,RadioButton) au propietatea Checked care
indic dac am selectat controlul. Dup schimbarea strii unui astfel de control,
se declaneaz evenimentul Checked. Dac propietatea ThreeState este setat,
atunci se schimb funcionalitatea acestor controale, n sensul c acestea vor
permite setarea unei alte stri. n acest caz, trebuie verificat propietatea
CheckState(Checked, Unchecked,Indeterminate) pentru a vedea starea controlului.
Aplicaia PV3 este un exemplu de utilizare a acestor controale. Soluia unei probleme
cu mai multe variante de rspuns este memorat cu ajutorul unor checkbox-uri cu
proprietatea ThreeState. Apsarea butonului Verific determin afiarea unei
etichete i a butoanelor radio DA i NU. Rspunsul este afiat ntr-un MessageBox.

Dup adugarea controalelor pe formular i setarea proprietilor Text i


ThreeState n cazul checkbox-urilor stabilim evenimentele click pentru butonul
Verifica i pentru butonul radio cu eticheta DA:

CAPITOLUL 5. Programare vizual

73

private void radioButton1_Click(object sender, System.EventArgs e)


{if (checkBox1.CheckState==CheckState.Checked &&
checkBox2.CheckState==CheckState.Checked &&
checkBox3.CheckState==CheckState.Checked &&
checkBox5.CheckState==CheckState.Checked &&
checkBox4.CheckState==CheckState.Unchecked) MessageBox.Show(CORECT);
else MessageBox.Show(Indicatie> Daca punem un sac in altul....);
label2.Visible=false;
radioButton1.Checked=false; radioButton2.Checked=false;
radioButton1.Visible=false; radioButton2.Visible=false;}
private void button1_Click(object sender, System.EventArgs e)
{label2.Visible=true;radioButton1.Visible=true;radioButton2.Visible=true;}

Exerciiu (Test gril) Construii un test gril care conine 5 itemi cu cte 4 variante
de rspuns (alegere simpl sau multipl), memorai rspunsurile date i afiai, dup
efectuarea testului, ntr-o caset text, n dreptul fiecrui item, rspunsul corect.
LinkLabel afieaz un text cu posibilitatea ca anumite pri ale textului
(LinkArea) s fie desenate ca i hyperlink-uri. Pentru a face link-ul funcional trebuie tratat evenimentul LinkClicked.
n exemplul PV4, prima etichet permite afiarea coninutului discului C:, a doua
legtur este un link ctre pagina www.microsoft.com/romania i a treia acceseaz
Notepad.

private void etichetaC_LinkClicked (object sender,


LinkLabelLinkClickedEventArgs e )
{ etichetaC.LinkVisited = true;
System.Diagnostics.Process.Start( @C:\ );}
private void etichetaI_LinkClicked( object sender,
LinkLabelLinkClickedEventArgs e )
{etichetaI.LinkVisited = true;
System.Diagnostics.Process.Start(IExplore,
http://www.microsoft.com/romania/ );}
private void etichetaN_LinkClicked( object sender,
LinkLabelLinkClickedEventArgs e )
{etichetaN.LinkVisited = true;
System.Diagnostics.Process.Start( notepad );}

74

Introducere n .Net Framework (Suport de curs)

Exerciiu (Memorator) Construii o aplicaie care s conin patru legturi ctre


cele patru fiiere/ pagini care conin rezumatul capitolelor studiate.
Controale pentru listare (ListBox, CheckedListBox, ComboBox, ImageList) ce pot
fi legate de un DataSet, de un ArrayList sau de orice tablou (orice surs de date ce
implementeaz interfaa IEnumerable).
n exemplul PV5 elementele selectate din CheckedListBox se adaug n ListBox.
Dup adugarea pe formular a CheckedListBox-ului, stabilim colecia de itemi
(Properties-Items-Collection), butonul Selecie i ListBox-ul.

Evenimentul Click asociat butonului Setectie golete mai nti listBox-ul


(listBox1.Items.Clear();) i dup aceea adaug n ordine fiecare element selectat din
CheckedListBox. Suplimentar se afieaz o etichet cu itemii selectai.
void button1_Click(object source, System.EventArgs e)
{ String s = Am selectat si am adaugat itemii: ;
listBox1.Items.Clear();
foreach ( object c in checkedListBox1.CheckedItems)
{listBox1.Items.Add(c);
s = s + c.ToString();s = s + ;}
label1.Text = s;}

Exerciiu (Filtru) Construii o aplicaie care afieaz fiierele dintr-un folder ales
care au un anumit tip (tipul fiierelor este ales de utilizator pe baza unui
CheckedListBox)

Aplicaia PV6 este un exemplu de utilizare a controlului ImageList. Apsarea


butonului Desene va aduga fiierele *.gif din folderul C:\Imagini n list i va afia
coninutul acesteia. Butonul Animate va determina afiarea fiierelor *.gif cu ajutorul
PictureBox.

CAPITOLUL 5. Programare vizual

75

ImageList desene_animate = new System.Windows.Forms.ImageList();


private void contruieste_lista_Click(object sender, System.EventArgs e)
{
// Configureaza lista
desene_animate.ColorDepth =System.Windows.Forms.ColorDepth.Depth8Bit;
desene_animate.ImageSize = new System.Drawing.Size(60, 60);
desene_animate.Images.Clear();
string[] gif_uri = Directory.GetFiles(C:\\Imagini, *.gif);
// se construieste un obiect Imagine pentru fiecare fisier si se adauga la
ImageList.
foreach (string fisier_gif in gif_uri)
{Bitmap desen= new Bitmap (fisier_gif);
desene_animate.Images.Add(desen);pictureBox2.Image=desen;}
Graphics g = this.CreateGraphics();
// Deseneaza fiecare imagine utilizand metoda ImageList.Draw()
for (int i = 0; i < desene_animate.Images.Count; i++)
desene_animate.Draw(g, 60 + i * 60, 60, i);
g.Dispose();
}

Exerciiu (Thumbnails) Afiai ntr-o ferestr coninutul folder-ului curent n mod


View-Thumbnails.
MonthCalendar afieaz un calendar prin care se poate selecta o dat (zi, luna,
an) n mod grafic. Proprietile mai importante sunt: MinDate, MaxDate, TodayDate
ce reprezint data minim/maxim selectabil i data curent (care apare afiat
difereniat sau nu n funcie de valorile proprietilor ShowToday,ShowTodayCircle.
Exist 2 evenimente pe care controlul le expune: DateSelected i DateChanged. n
rutinele de tratare a acestor evenimente, programatorul are acces la un obiect de
tipul DateRangeEventArgs care conine proprietile Start i End (reprezentnd
intervalul de timp selectat).

Formularul din aplicaia PV7 conine un calendar pentru care putem selecta un
interval de maximum 30 de zile, sunt afiate sptmnile i ziua curent. Intervalul
selectat se afieaz prin intermediul unei etichete. Dac se selecteaz o dat atunci
aceasta va fi adugat ca item ntr-un ComboBox (orice dat poate aprea cel mult o
dat n list).
Dup adugarea celor 3 controale pe formular, stabilim proprietile pentru
monthCalendar1 (ShowWeekNumber-True, MaxSelectionCount-30, etc.) i precizm
ce se execut atunci cnd selectm un interval de timp:

76

Introducere n .Net Framework (Suport de curs)

private void monthCalendar1_DateSelected(object sender,


System.Windows.Forms.DateRangeEventArgs e)
{ this.label1.Text = Interval selectat: Start =
+e.Start.ToShortDateString() + : End =
+ e.End.ToShortDateString();
if (e.Start.ToShortDateString()==e.End.ToShortDateString())
{String x=e.Start.ToShortDateString();
if(!(comboBox1.Items.Contains(x)))
comboBox1.Items.Add(e.End.ToShortDateString());}
}

DateTimePicker este un control care (ca i MonthCalendar) se poate utiliza pentru a selecta o dat. La clic se afieaz un control de tip MonthCalendar, prin care
se poate selecta data dorit. Fiind foarte asemntor cu MonthCalendar, proprietile prin care se poate modifica comportamentul controlului sunt identice cu
cele ale controlului MonthControl.
Exerciiu (Formular) Contruii un formular de introducere a datelor necesare realizrii unei adrese de e-mail. Data naterii va fi selectat direct utiliznd
MonthCalendar.
ListView este folosit pentru a afia o colecie de elemente n unul din cele 4
moduri (Text, Text+Imagini mici, Imagini mari, Detalii). Acesta este similar grafic cu ferestrele n care se afieaz fiierele dintr-un anumit director din
Windows Explorer. Fiind un control complex, conine foarte multe proprieti,
printre care: View (selecteaz modul de afiare (LargeIcon, SmallIcon, Details,
List)), LargeImageList, SmallImageList (icon-urile de afiat n modurile
LargeIcon, SmallIcon), Columns(utilizat doar n modul Details, pentru a defini
coloanele de afiat), Items(elementele de afiat).
Aplicaia PV8 este un exemplu de utilizare ListView. Se pornete de la rdcin i
se afieaz coninutul folder-ului selectat cu dublu clic. La expandare se afieaz
numele complet, data ultimei accesri i, n cazul fiierelor, dimensiunea.
Controlul lista_fisiere este de tip ListView.
Funcia ConstruiesteHeader permite stabilirea celor trei coloane de afiat.
private void ConstruiesteHeader()
{ColumnHeader colHead;colHead = new ColumnHeader();
colHead.Text = Nume fisier;
this.lista_fisiere.Columns.Add(colHead);
colHead = new ColumnHeader();colHead.Text = Dimensiune;
his.lista_fisiere.Columns.Add(colHead);
colHead = new ColumnHeader();colHead.Text = Ultima accesare;
this.lista_fisiere.Columns.Add(colHead);
}

CAPITOLUL 5. Programare vizual

77

Pentru item-ul selectat se afieaz mai nti folderele i dup aceea fiierele.
Pentru aceasta trebuie s determinm coninutul acestuia:
ListViewItem lvi;
ListViewItem.ListViewSubItem lvsi;
this.calea_curenta.Text = radacina + (Doublu Click pe folder);
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(radacina);
DirectoryInfo[] dirs = dir.GetDirectories();
FileInfo[] files = dir.GetFiles();

s tergem vechiul coninut al listei:


this.lista_fisiere.Items.Clear();
this.lista_fisiere.BeginUpdate();

i s adugm fiecare nou item ( coloana a doua este vid n cazul folderelor):
foreach (System.IO.DirectoryInfo fi in dirs)
{ lvi = new ListViewItem();lvi.Text = fi.Name;
lvi.ImageIndex = 1; lvi.Tag = fi.FullName;
lvsi = new ListViewItem.ListViewSubItem();
lvsi.Text = ;lvi.SubItems.Add(lvsi);
lvsi = new ListViewItem.ListViewSubItem();
lvsi.Text = fi.LastAccessTime.ToString();
lvi.SubItems.Add(lvsi); this.lista_fisiere.Items.Add(lvi);
}

Exerciiu (Ordonare) Modificai aplicaia anterioar astfel nct apsarea pe


numele unei coloane s determine afiarea informaiilor ordonate dup criteriul
specificat (nume, dimensiune, data).
Controale de control al executrii (Timer) sau de dialog (OpenFileDialog,
SaveFileDialog, ColorDialog, FontDialog, ContextMenu).
Utilizatorul nu are drept de control asupra tuturor controalelor. Dintre acestea vom
studia n cele ce urmeaz controlul Timer asupra cruia are drept de interaciune doar
cel care dezvolt aplicaia.

78

Introducere n .Net Framework (Suport de curs)

Observm c aducnd din Toolbox controlul Timer, acesta nu se afieaz pe formular, el aprnd ntr-o zon gri a suprafeei de lucru (Designer).

Vom stabili urmtoarele proprietti legate de Timer:

Proprietate Valoare
(Name)
aplCeas
Enabled
True

Interval

1.000

Explicaie
Activarea controlului de timp
Numrul de milisecunde dintre apelurile
la metoda de tratare a evenimentului.
Se stabilete, n cazul de fa numrtoarea din secund n secund

Aducem n formular un control Label cu urmtoarele proprieti:


Control
label1

Proprietate
(Name)
AutoSize
BorderStyle
FontSize
Location
Text
Size
TextAlign

Valoare
labelCeas
False
Fixed3D
16,25, Bold
82;112
129;42
MiddleCenter

Dm clic pe icoana de la timer care are numele aplCeas, iar la Events, la Tick selectm lblCeas_Click

CAPITOLUL 5. Programare vizual

79

Dm dublu clic pe label i inserm codul:


private void lblCeas_Click(object sender, EventArgs e)
{
DateTime OraCurenta = DateTime.Now;
lblCeas.Text=OraCurenta.ToLongTimeString();
}

Compilm i obinem ntr-o fereastr vizualizarea orei sistemului.

n urmtorul exemplu vom folosi ProgressBar pentru a vizualiza ceasul sistemului.


Vom construi un formular ca n imaginea alturat. Pentru aceasta aducem din
Toolbox trei controale ProgressBar, un control Timer, apte controale Label i un control Button. Tabelul de mai jos descrie proprietile i valorile formularului i a respectivelor controale:

Formularul:
Control
Form1

Proprietate
(Name)
Size
BorderStyle
Text

Valoare
Form1
606;265
Fixed3D
Afiare timp cu ProgressBar si Label

ProgressBar-urile:
Control
ProgressBar1

Proprietate
(Name)
Location
Maximum
Size
Step
Style

Valoare
prgOre
82;64
23
431;23
1
Blocks

80

Introducere n .Net Framework (Suport de curs)

Control
ProgressBar2

ProgressBar3

Proprietate
(Name)
Location
Maximum
Size
Step
Style
(Name)
Location
Maximum
Size
Step
Style

Valoare
prgMinute
82;106
59
431;23
1
Blocks
prgSecunde
82;144
59
431;23
1
Blocks

Pentru afiarea textelor Ore, Minute, Secunde folosim:


Control
Label1

Label2

Label3

Proprietate
(name)
Autosize
BorderStyle
Locations
Size
Text
TextAlign
(name)
Autosize
BorderStyle
Locations
Size
Text
TextAlign
(name)
Autosize
BorderStyle
Locations
Size
Text
TextAlign

Valoare
lblOre
False
None
22;64
54;23
Ore
MiddleLeft
lblMinute
False
None
22;104
54;23
Minute
MiddleLeft
lblSecunde
False
None
22;144
54;23
Minute
MiddleLeft

Pentru Ieire folosim:


Control
Button1

Proprietate
(Name)
Location
Size
Text

Valoare
btnIesire
25;198
75;23
Iesire

CAPITOLUL 5. Programare vizual

81

Pentru informaiile din partea dreapt a formularului:


Control
Label4

Label5

Label6

Label4

Proprietate
(name)
Autosize
Locations
Size
Text
TextAlign
(name)
Autosize
BorderStyle
Locations
Size
Text
TextAlign
(name)
Autosize
BorderStyle
Locations
Size
Text
TextAlign
(name)
Autosize
BorderStyle
Locations
Size
Text
TextAlign

Valoare
lblTextTimp
False
523;10
54;23
Timp
MiddleCenter
lblAfisOre
False
Fixed3D
523;64
54;23
00
MiddleCenter
lblAfisMinute
False
Fixed3D
523;106
54;23
00
MiddleCenter
lblAfisSecunde
False
Fixed3D
523;144
54;23
00
MiddleCenter

Proprietate
(Name)
Enabled
Interval

Valoare
Timer1
True
1.000

Pentru Timer:
Control
Timer1

Evenimente
Timer1_Tick

pentru timer1:
private void timer1_Tick(object sender, EventArgs e)
{
DateTime TimpCurent = DateTime.Now;
int H = TimpCurent.Hour;
int M = TimpCurent.Minute;
int S = TimpCurent.Second;
prgOre.Value = H;
prgMinute.Value = M;
prgSecunde.Value = S;
lblAfisOre.Text = H.ToString();

82

Introducere n .Net Framework (Suport de curs)

lblAfisMinute.Text = M.ToString();
lblAfisSecunde.Text = S.ToString();
}

pentru a redimensiona proporional ProgressBar-ul Ore cu cel care reprezint


Minutele, respectiv Secundele, introducem urmtorul cod:
private void Form1_Load(object sender, EventArgs e)
{
this.prgOre.Width = 2 * this.prgMinute.Width
/ 5;
}

pentru butonul de Ieire:


private void btnIesire_Click(object sender, EventArgs e)
{
Close();
}

Compilm i obinem ora sistemului afiat ntr-o fereastr de forma:

Grupuri de controale Toolbar (ToolStrip) afieaz o bar de butoane n partea de


sus a unui formular. Se pot introduce vizual butoane (printr-un designer, direct
din Visual Studio.NET IDE), la care se pot seta att textul afiat sau imaginea.
Evenimentul cel mai util al acestui control este ButtonClick (care are ca parametru un obiect de tip ToolBarButtonClickEventArgs, prin care programatorul
are acces la butonul care a fost apasat).
n aplicaia urmtoare PV9 cele 3 butoane ale toolbar-ului permit modificarea proprietilor textului introdus n caset. Toolbar-ul se poate muta fr a depi spaiul
ferestrei. Schimbarea fontului se realizeaz cu ajutorul unui control FontDialog(),iar
schimbarea culorii utilizeaz ColorDialog()
FontDialog fd = new FontDialog();
fd.ShowColor = true;fd.Color = Color.IndianRed;
fd.ShowApply = true;
fd.Apply += new EventHandler(ApplyFont);
if(fd.ShowDialog() !=
System.Windows.Forms.DialogResult.Cancel)

CAPITOLUL 5. Programare vizual

83

{ this.richTextBox1.Font= fd.Font;
this.richTextBox1.ForeColor=fd.Color;
}
ColorDialog cd = new ColorDialog();
cd.AllowFullOpen = true;cd.Color = Color.DarkBlue;
if(cd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
this.richTextBox1.ForeColor = cd.Color;

Mutarea toolbar-ul este dirijat de evenimentele produse atunci cnd apsm


butonul de mouse i/sau ne deplasm pe suprafaa ferestrei.
private void toolBar1_MouseDown(object sender, MouseEventArgs e)
{ // am apasat butonul de mouse pe toolbar
am_apasat = true;
forma_deplasata = new Point(e.X, e.Y); toolBar1.Capture = true;}
private void toolBar1_MouseUp(object sender, MouseEventArgs e)
{ am_apasat = false;toolBar1.Capture = false;}
private void toolBar1_MouseMove(object sender, MouseEventArgs e)
{ if (am_apasat)
{ if(toolBar1.Dock == DockStyle.Top || toolBar1.Dock == DockStyle.Left)
{ // daca depaseste atunci duc in stanga sus
if (forma_deplasata.X < (e.X-20) || forma_deplasata.Y < (e.Y-20))
{ am_apasat = false;// Disconect toolbar
toolBar1.Dock = DockStyle.None;
toolBar1.Location = new Point(10, 10);
toolBar1.Size = new Size(200, 45);
toolBar1.BorderStyle = BorderStyle.FixedSingle;
}
}
else if (toolBar1.Dock == DockStyle.None)
{toolBar1.Left = e.X + toolBar1.Left - forma_deplasata.X;
toolBar1.Top = e.Y + toolBar1.Top - forma_deplasata.Y;
if (toolBar1.Top < 5 || toolBar1.Top>this.Size.Height-20)
{
am_apasat = false;toolBar1.Dock = DockStyle.Top;
toolBar1.BorderStyle = BorderStyle.Fixed3D;}
else if (toolBar1.Left < 5 || toolBar1.Left > this.Size.Width - 20)
{ am_apasat = false;toolBar1.Dock = DockStyle.Left;

84

Introducere n .Net Framework (Suport de curs)

toolBar1.BorderStyle = BorderStyle.Fixed3D;
}}}
}

Exerciiu (Editor) Realizai un editor de texte care conin un control toolBar cu


butoanele uzuale.
Controale container (GroupBox, Panel, TabControl) sunt controale ce pot
conine alte controale.
Aplicaia PV10 simuleaz lansarea unei comenzi ctre un magazin de jucrii. Se
utilizeaz 4 pagini de Tab pentru a simula selectarea unor opiuni ce se pot grupa pe
categorii.

Exerciiu (Magazin) Dezvoltai aplicaia precedent astfel nct pe o pagin s se


afieze modelele disponibile (imagine+detalii) i s se permit selectarea mai multor obiecte. Ultima pagin reprezint coul de cumprturi.
Grupuri de controale tip Meniu (MenuStrip, ContextMenuStrip etc.)
Un formular poate afia un singur meniu principal la un moment dat, meniul asociat iniial fiind specificat prin propietatea Form.MainMenuStrip. Meniul care este
afiat de ctre un formular poate fi schimbat dinamic la rulare:
switch(cond) { case cond1:this.MainMenuStrip = this.mainMenu1;break;
case cond2:this.MainMenuStrip = this.mainMenu2;
}

unde mainMenu1 i mainMenu2 sunt obiecte de tip MenuStrip. Editarea unui astfel de obiect se poate face utiliznd Menu Designer. Clasa MenuStrip are o colecie
de MenuItem care conine 0 sau mai multe obiecte de tip MenuItem. Fiecare dintre
aceste obiecte de tip MenuItem are 0 sau mai multe obiecte de tip MenuItem, care
vor constitui noul nivel de itemi (Ex: File New,Save, Open, Close, Exit).
Propietile Checked i RadioCheck indic itemul selectat, Enabled and Visible
determin dac un item poate fi sau nu selectat sau vizibil, Shortcut permite
asignarea unei combinaii de taste pentru selectarea unui item al meniului i Text

CAPITOLUL 5. Programare vizual

85

memoreaz textul care va fi afiat pentru respectivul item al meniului.


Evenimentul Click are loc cnd un utilizator apas un item al meniului.
Exemplul PV11 permite, prin intermediul unui meniu, scrierea unui fiier Notpad,
afiarea continutului acestuia ntr-o caset text, schimbarea fontului i culorii de
afiare, tergerea coninutului casetei, afiarea unor informaii teoretice precum i
Help dinamic. Au fost definite chei de acces rapid pentru accesarea componentelor
meniului.

File New permite scrierea unui fiier notepad nou


System.Diagnostics.Process.Start( notepad );

File Open selecteaz i afieaz n caseta text coninutul unui fiier text.
OpenFileDialog of = new OpenFileDialog();
of.Filter = Text Files (*.txt)|*.txt;
of.Title = Fisiere Text;
if (of.ShowDialog() == DialogResult.Cancel)return;
richTextBox1.Text=;richTextBox1.Visible=true;
FileStream strm;
try{strm = new FileStream (of.FileName, FileMode.Open, FileAccess.Read);
StreamReader rdr = new StreamReader (strm);
while (rdr.Peek() >= 0){string str = rdr.ReadLine ();
richTextBox1.Text=richTextBox1.Text+ +str;}
}
catch (Exception){MessageBox.Show (Error opening file, File Error,
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);}

File Close terge coninutul casetei text, File Exit nchide aplicaia
Window Font i Window Color permit stabilirea fontului/culorii textului afiat.
Help DinamicHelp acceseaz
System.Diagnostics.Process.Start(IExplore,
http://msdn2.microsoft.com/en-us/default.aspx);

Help About PV afieaz n caseta text informaii despre implementarea unui menu.

86

Introducere n .Net Framework (Suport de curs)

Exerciiu (Fisiere) Contruii un menu care s permit efectuarea operaiilor uzuale


cu fiiere.

5.5. System.Drawing
Spaiul System.Drawing conine tipuri care permit realizarea unor desene 2D i au rol

deosebit n proiectarea interfeelor grafice.


Un obiect de tip Point este reprezentat prin coordonatele unui punct ntr-un spaiu
bidimensional (exemplu: Point myPoint = new Point(1,2);)
Point este utilizat frecvent nu numai pentru desene, ci i pentru a identifica n program un punct dintr-un anumit spaiu. De exemplu, pentru a modifica poziia unui
buton n fereastr putem asigna un obiect de tip Point proprietii Location indicnd
astfel poziia colului din stnga-sus al butonului (button.Location = new Point(100, 30)).
Putem construi un obiect de tip Point pentru a redimensiona un alt obiect.
Size mySize = new Size(15, 100);
Point myPoint = new Point(mySize);
System.Console.WriteLine(X: + myPoint.X + , Y: + myPoint.Y);

Structura Color conine date, tipuri i metode utile n lucrul cu culori. Fiind un tip
valoare (struct) i nu o clas, aceasta conine date i metode, ns nu permite
instaniere, constructori, destructor, motenire.
Color myColor = Color.Brown;

button1.BackColor = myColor;

Substructura FromArgb a structurii Color returneaz o culoare pe baza celor trei


componente ale oricrei culori (red, green, blue).
Clasa Graphics este o clas sigilat reprezentnd o arie rectangular care permite
reprezentri grafice. De exemplu, o linie frnt se poate realiza astfel:
Point[] points = new Point[4];
points[0] = new Point(0, 0);points[1] = new Point(0, 120);
points[2] = new Point(20, 120);points[3] = new Point(20, 0);
Graphics g = this.CreateGraphics();
Pen pen = new Pen(Color.Yellow, 2);
g.DrawLines(pen, points);

Aplicaia PV12 este un exerciiu care deseneaz cercuri de raze i culori aleatorii i
emite sunete cu frecven aleatoare.
Random x = new Random();
Console.Beep(300 + x.Next(1000), 150);
Graphics g = e.Graphics;
i = 1 + x.Next(30);
p=new Pen(System.Drawing.Color.FromArgb(x.Next(256),x.Next(256),x.Next(256)))

CAPITOLUL 5. Programare vizual

87

g.DrawEllipse(p, x.Next(100), x.Next(100), i, i);


Console.Sleep(200);

n exemplul PV13 se construiete o pictogram pe baza unei imagini.


Image thumbnail;
private void Thumbnails_Load(object sender, EventArgs e)
{ try{Image img = Image.FromFile(C:\\Imagini\\catel.jpg);
int latime=100, inaltime=100;
thumbnail=img.GetThumbnailImage(latime, inaltime,null, IntPtr.Zero);}
catch{MessageBox.Show(Nu exista fisierul);}
}
private void Thumbnails_Paint(object sender, PaintEventArgs e)
{e.Graphics.DrawImage(thumbnail, 10, 10);}

5.6. Validarea informaiilor de la utilizator


nainte ca informaiile de la utilizator s fie preluate i transmise ctre alte clase,
este necesar s fie validate. Acest aspect este important, pentru a preveni posibilele
erori. Astfel, dac utilizatorul introduce o valoare real (float) cnd aplicaia ateapt
un ntreg (int), este posibil ca aceasta s se comporte neprevzut abia cteva secunde
mai trziu, i dup multe apeluri de metode, fiind foarte greu de identificat cauza primar a problemei.
Validarea la nivel de cmp
Datele pot fi validate pe msur ce sunt introduse, asociind o prelucrare unuia

88

Introducere n .Net Framework (Suport de curs)

dintre handlerele asociate evenimentelor la nivel de control (Leave, Textchanged,


MouseUp etc.)
private void textBox1_KeyUp(object sender,
System.Windows.Forms.KeeyEventArgs e)
{if(e.Alt==true) MessageBox.Show (Tasta Alt e apasata);
// sau
if(Char.IsDigit(e.KeyChar)==true)
MessageBox.Show(Ati apasat o cifra);
}

Validarea la nivel de utilizator


n unele situaii (de exemplu atunci cnd valorile introduse trebuie s se afle ntr-o
anumit relaie ntre ele), validarea se face la sfritul introducerii tuturor datelor la
nivelul unui buton final sau la nchiderea ferestrei de date.
private void btnValidate_Click(object sender, System.EventArgs e)
{ foreach(System.Windows.Forms.Control a in this.Controls)
{ if( a is System.Windows.Forms.TextBox & a.Text==)
{ a.Focus();return;}
}
}

ErrorProvider
O manier simpl de a semnala erori de validare este aceea de a seta un mesaj de
eroare pentru fiecare control.
myErrorProvider.SetError(txtName, Numele nu are spatii in stanga);

Aplicatii recapitulative.
Urmrii aplicaiile i precizai pentru fiecare dintre ele controalele utilizate, evenimentele tratate: Forma poloneza (PV14), Triunghi (PV15), Ordonare vector(PV16),
Subsir cresctor de lungime maxim(PV17), Jocul de Nim (PV18)
Exerciiu (Test grila) Realizai un generator de teste gril (ntrebrile sunt preluate
dintr-un fiier text, pentru fiecare item se precizeaz tipul (alegere simpl/multipl),
punctajul, enunul i distractorii, imaginea asociat (dac exist). Dup efectuarea
testului se afieaz rezultatul obinut i statistica rspunsurilor.

89

CAPITOLUL

ADO.NET
ADO.NET (ActiveX Data Objects) reprezint o parte component a nucleului .NET
Framework ce permite conectarea la surse de date diverse, extragerea, manipularea
i actualizarea datelor.
De obicei, sursa de date este o baz de date, dar ar putea de asemenea s fie un
fiier text, o foaie Excel, un fiier Access sau un fiier XML.
n aplicaiile tradiionale cu baze de date, clienii stabilesc o conexiune cu baza de
date i menin aceast conexiune deschis pn la ncheierea executrii aplicaiei.
Conexiunile deschise necesit alocarea de resurse sistem. Atunci cnd meninem
mai multe conexiuni deschise server-ul de baze de date va rspunde mai lent la
comenzile clienilor ntruct cele mai multe baze de date permit un numr foarte mic
de conexiuni concurente.
ADO.NET permite i lucrul n stil conectat dar i lucrul n stil deconectat, aplicaiile
conectndu-se la server-ul de baze de date numai pentru extragerea i actualizarea
datelor. Acest lucru permite reducerea numrului de conexiuni deschise simultan la
sursele de date.
ADO.NET ofer instrumentele de utilizare i reprezentare XML pentru transferul
datelor ntre aplicaii i surse de date, furniznd o reprezentare comun a datelor,
ceea ce permite accesarea datelor din diferite surse de diferite tipuri i prelucrarea lor
ca entiti, fr s fie necesar s convertim explicit datele n format XML sau invers.
Aceste caracteristici sunt determinate n stabilirea beneficiilor furnizate de
ADO.NET:
Interoperabilitate. ADO.NET poate interaciona uor cu orice component care
suport XML.
Durabilitate. ADO.NET permite dezvoltarea arhitecturii unei aplicaii datorit
modului de transfer a datelor ntre nivelele arhitecturale.
Programabilitate.ADO.NET simplific programarea pentru diferite task-uri cum
ar fi comenzile SQL, ceea ce duce la o cretere a productivitii i la o scdere a
numrului de erori.
Performan. Nu mai este necesar conversia explicit a datelor la transferul
ntre aplicaii, fapt care duce la crete performanelor acestora.
Accesibilitate Utilizarea arhitecturii deconectate permite accesul simultan la
acelai set de date. Reducerea numrului de conexiuni deschise simultan determin utilizarea optim a resurselor.

90

Introducere n .Net Framework (Suport de curs)

6.1. Arhitectura ADO.NET


Componentele principale ale ADO.NET sunt DataSet i Data Provider. Ele au fost
proiectate pentru accesarea i manipularea datelor.

6.2. Furnizori de date (Data Providers)


Din cauza existenei mai multor tipuri de surse de date este necesar ca pentru
fiecare tip de protocol de comunicare s se foloseasc o bibliotec specializat de
clase.
.NET Framework include SQL Server.NET Data Provider pentru interaciune cu
Microsoft SQL Server, Oracle Data Provider pentru bazele de date Oracle i OLE DB
Data Provider pentru accesarea bazelor de date ce utiliteaz tehnologia OLE DB pentru expunerea datelor (de exemplu Access, Excel sau SQL Server versiune mai veche
dect 7.0)
Furnizorul de date permite unei aplicaii s se conecteze la sursa de date, execut
comenzi i salveaz rezultate. Fiecare furnizor de date cuprinde componentele
Connection, Command, DataReader i DataAdapter.

6.3.Connection.
nainte de orice operaie cu o surs de date extern, trebuie realizat o conexiune
(legtur) cu acea surs. Clasele din categoria Connection (SQLConnection,
OleDbConnection etc.) conin date referitoare la sursa de date (locaia, numele i
parola contului de acces, etc.), metode pentru deschiderea/nchiderea conexiunii,
pornirea unei tranzacii etc. Aceste clase se gsesc n subspaii (SqlClient, OleDb etc.)
ale spaiului System.Data. n plus, ele implementeaz interfaa IdbConnection.
Pentru deschiderea unei conexiuni prin program se poate instania un obiect de tip
conexiune, precizndu-i ca parametru un ir de caractere coninnd date despre
conexiune.

CAPITOLUL 6. ADO.NET

91

6.3.1. Exemple de conectare


Ex.1) conectare la o surs de date SQL
using System.Data.SqlClient;
SqlConnection co = new SqlConnection();
co.ConnectionString = Data Source=localhost; User ID=profesor;pwd=info; Initial
Catalog=Orar;
co.Open();

Ex.2) conectare la o surs de date SQL


using System.Data.SqlClient;
SqlConnection co =
new SqlConnection(@Data Source=serverBD;Database=scoala;User
ID=elev;Password=madonna);
co.Open();

Ex.3) conectare la o surs de date Access


using System.Data.OleDb;
OleDbConnection co =
new OleDbConnection(@Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\Date\scoala.mdb);
co.Open();

6.3.2. Proprieti
a) ConnectionString (String, cu accesori de tip get i set ) definete un ir care permite identificarea tipului i sursei de date la care se face conectarea i eventual
contul i parola de acces. Conine lista de parametri necesarii conectrii sub
forma parametru=valoare, separai prin ;.
Parametru
Provider

Descriere
Specific furnizorul de date pentru conectarea la sursa de date. Acest furnizor
trebuie precizat doar dac se folosete OLE DB .NET Data Provider,
i nu se specific pentru conectare la SQL Server.

Data Source

Identific serverul, care poate fi local,


un domeniu sau o adresa IP.

Initial Catalog

specific numele bazei de date. Baza de date trebuie s se gseasc pe


serverul dat n Data Source

Integrated Security32 Logarea se face cu user-ul configurat pentru Windows.


User ID
Password

Numele unui user care are acces de logare pe server


Parola corespunztoare ID-ului specificat.

b) ConnectionTimeout (int, cu accesor de tip get): specific numrul de secunde pentru care un obiect de conexiune poate s atepte pentru realizarea conectrii la
32 User Id i Password pot nlocui parametrul Integrated Security

92

Introducere n .Net Framework (Suport de curs)

server nainte de a se genera o excepie. (implicit 15). Se poate specifica o


valoare diferit de 15 n ConnectionString folosind parametrul Connect Timeout,
Valoarea Timeout=0 specific ateptare nelimitat.
Ex.) using System.Data.SqlClient;
SqlConnection cn = new SqlConnection(Data Source=serverBD;
Database=scoala;User ID=elev;Password=madonna; Connect Timeout=30);

c) Database (string, read-only): returneaz numele bazei de date la care sa fcut


conectarea. Este necesar pentru a arta unui utilizator care este baza de date
pe care se face operarea
d)Provider (de tip string, read-only): returneaz furnizorul de date
e) ServerVersion (string, read-only): returneaz versiunea de server la care s-a fcut
conectarea.
f) State (enumerare de componente ConnectionState, read-only): returneaz
starea curent a conexiunii. Valorile posibile: Broken, Closed, Connecting,
Executing, Fetching, Open.

6.3.3. Metode
a) Open(): deschide o conexiune la baza de date
b)Close() i Dispose(): nchid conexiunea i elibereaz toate resursele alocate pentru ea
c) BeginTransaction(): pentru executarea unei tranzacii pe baza de date; la sfrit
se apeleaz Commit() sau Rollback().
d)ChangeDatabase(): se modific baza de date la care se vor face conexiunile. Noua
baz de date trebuie s existe pe acelai server ca i precedenta.
e) CreateCommand(): creeaz o comand (un obiect de tip Command) valid asociat conexiunii curente.

6.3.4. Evenimente
a) StateChange: apare atunci cnd se schimb starea conexiunii. Handlerul corespunztor (de tipul delegat StateChangeEventHandler) spune ntre ce stri s-a
fcut tranziia.
b) InfoMessage: apare cnd furnizorul trimite un avertisment sau un mesaj ctre client.

6.4. Command
Clasele din categoria Command (SQLCommand, OleDbCommand etc.) conin date
referitoare la o comand SQL (SELECT, INSERT, DELETE, UPDATE) i metode pentru
executarea unei comenzi sau a unor proceduri stocate. Aceste clase implementeaz
interfaa IDbCommand. Ca urmare a interogrii unei baze de date se obin obiecte din
categoriile DataReader sau DataSet. O comand se poate executa numai dup ce s-a
stabilit o conxiune cu baza de date corespunztoare.

CAPITOLUL 6. ADO.NET

93

6.4.1. Proprieti
a) CommandText (String): conine comanda SQL sau numele procedurii stocate care
se execut pe sursa de date.
b)CommandTimeout (int): reprezint numrul de secunde care trebuie s fie ateptat
pentru executarea comenzii. Dac se depeste acest timp, atunci se genereaz
o excepie.
c) CommandType (enumerare de componente de tip CommandType): reprezint tipul
de comand care se execut pe sursa de date. Valorile pot fi: StoredProcedure
(apel de procedur stocat), Text (comand SQL obinuit), TableDirect (numai
pentru OleDb)
d)Connection (System. Data. [Provider].PrefixConnection): conine obiectul de tip
conexiune folosit pentru legarea la sursa de date.
e) Parameters (System.Data.[Provider].PrefixParameterCollection): returneaz o
colecie de parametri care s-au transmis comenzii.
f) Transaction (System.Data.[Provider].PrefixTransaction): permite accesul la
obiectul de tip tranzacie care se cere a fi executat pe sursa de date.

6.4.2. Metode
a) Constructori:
SqlCommand()
SqlCommand(string CommandText)
SqlCommand(string CommandText, SqlConnection con )
SqlCommand(string CommandText,SqlConnection con,SqlTransaction trans)
b)Cancel() oprete o comand aflat n executare.
c) Dispose() distruge obiectul comand.
d)ExecuteNonQuery()execut o comand care nu returneaz un set de date din baza
de date; dac comanda a fost de tip INSERT, UPDATE, DELETE, se returneaz
numrul de nregistrri afectate.
Exemplu:
SqlCommand cmd = new SqlCommand();
cmd.CommandText = DELETE FROM elevi WHERE nume = BARBU;
cmd.Connection = con;
Console.WriteLine(cmd.ExecuteNonQuery().ToString());
//cte nreg. s-au sters

e) ExecuteReader() execut comanda i returneaz un obiect de tip DataReader.


Exemplu

Se obine coninutul tabelei elevi ntr-un obiect de tip SqlDataReader.


SqlCommand cmd = new SqlCommand(SELECT * FROM elevi,con);
SqlDataReader reader = cmd.ExecuteReader();
while(reader.Read()) { Console.WriteLine({0} - {1},

94

Introducere n .Net Framework (Suport de curs)

reader.GetString(0),reader.GetString(1));
}
reader.Close();

Metoda ExecuteReader() mai are un argument opional de tip enumerare,


CommandBehavior, care descrie rezultatele i efectul asupra bazei de date:
CloseConnection (conexiunea este nchis atunci cnd obiectul DataReader este
nchis),
KeyInfo (returnez informaie despre coloane i cheia primar),
SchemaOnly (returnez doar informaie despre coloane),
SequentialAccess (pentru manevrarea valorilor binare cu GetChars() sau
GetBytes()),
SingleResult (se returneaz un singur set de rezultate),
SingleRow (se returneaz o singur linie).
f) ExecuteScalar() execut comanda i returneaz valoarea primei coloane de pe primul
rnd a setului de date rezultat; folosit pentru obinerea unor rezultate statistice.
Exemplu:
SqlCommand cmd = new SqlCommand(SELECT COUNT(*) FROM elevi,con);
SqlDataReader reader = cmd.ExecuteScalar();
Console.WriteLine(reader.GetString(0));

f) ExecuteXmlReader() returneaz un obiect de tipul XmlReader obinut prin


interogare
Exemplu:
SqlCommand CMD=
new SqlCommand(SELECT * FROM elevi FOR XML MATE,EXAMEN, con);
System.Xml.XmlReader myXR = CMD.ExecuteXmlReader();

Obiectele de tip SQLCommand pot fi utilizate ntr-un scenariu ce presupune


deconectarea de la sursa de date dar i n operaii elementare care presupun
obinerea unor rezultate imediate.
Vom exemplifica utilizarea obiectelor de tip Command n operaii ce corespund
acestui caz.
Presupunem c am stabilit conexiunea:
using System.Data.SqlClient;
SqlConnection conn =
new SqlConnection(@Data Source=serverBD;Database=MAGAZIN;User ID=adm;Password=eu);
conn.Open();

CAPITOLUL 6. ADO.NET

95

i c tabela PRODUSE are cmpurile ID_PRODUS, DENUMIRE_PRODUS, DESCRIERE


Instanierea unui obiect de tip SQLCommnand
SqlCommand cmd = new SqlCommand(select DENUMIRE_PRODUS from PRODUSE, conn);

conine un string ce precizeaz comanda care se execut i o referin ctre obiectul SQLConnection.

6.4.3. Interogarea datelor.


Pentru extragerea datelor cu ajutorul unui obiect SqlCommand trebuie s utilizm
metoda ExecuteReader care returneaz un obiect SqlDataReader.
//

Instantiem o comand cu o cerere si precizam conexiunea

SqlCommand cmd = new SqlCommand(select DENUMIRE_PRODUS from PRODUSE, conn);


// Obtinem rezultatul cererii
SqlDataReader rdr = cmd.ExecuteReader();

6.4.4. Inserarea datelor.


Pentru a insera date ntr-o baz de date utilizm metoda ExecuteNonQuery a
obiectului SqlCommand.
// Sirul care pstreaz comanda de inserare
string insertString = @insert into PRODUSE(DENUMIRE_PRODUS, DESCRIERE)
values (Barbie, papusa);
// Instantiem o comand cu acest cerere si precizm conexiunea
SqlCommand cmd = new SqlCommand(insertString, conn);
// Apelm metoda ExecuteNonQuery pentru a executa comanda
cmd.ExecuteNonQuery();

Facem observaia c am specficat explicit numai coloanele DENUMIRE_PRODUS i


DESCRIERE. Tabela PRODUSE are cheia primar ID_PRODUS. Valoarea acestui cmp va
fi atribuit de SQL Server. Dac ncercm s adugm o valoare atunci va fi generat
o excepie.

6.4.5. Actualizarea datelor.


// Sirul care pstreaz comanda de actualizare
string updateString = @update PRODUSE set DENUMIRE_PRODUS = Locomotiva Thomas
where DENUMIRE_PRODUS = Thomas;
//

Instantiem o nou comand fr s precizm conexiunea

SqlCommand cmd = new SqlCommand(updateString);


//

Stabilim conexiunea

96

Introducere n .Net Framework (Suport de curs)

cmd.Connection = conn;33
//

Apelm ExecuteNonQuery pentru executarea comenzii

cmd.ExecuteNonQuery();

6.4.6. tergerea datelor.


Se utilizeaz aceeai metod ExecuteNonQuery.
// sirul care pstreaz comanda de tergere
string deleteString = @delete from PRODUSE where DENUMIRE_PRODUS = Barbie;
// Instaniem o comand
SqlCommand cmd = new SqlCommand();34
// Setm proprietatea CommandText
cmd.CommandText = deleteString;
// Setm proprietatea Connection
cmd.Connection = conn;
// . Executm comanda
cmd.ExecuteNonQuery();

Cteodat avem nevoie s obinem din baza de date o singur valoare, care poate
fi o sum, o medie sau alt rezultat al unei funcii agregat. O alegere ineficient ar fi
utilizarea metodei ExecuteReader i apoi calculul valorii. n acest caz, cea mai bun
alegere este s lucrm direct asupra bazei de date i s obinem aceast valoare.
// Instantiem o comand nou
SqlCommand cmd = new SqlCommand(select count(*) from PRODUSE, conn);
//

Executm comanda si obtinem valoarea

int count = (int)cmd.ExecuteScalar();35

Exerciii:
1) Realizai o conexiune la baza de date MAGAZIN i afiai ID-urile produselor.
using System;
using System.Data;
using System.Data.SqlClient;
class ADO1
{
static void Main()
{ SqlConnection conn = new SqlConnection(
Data Source=(local);Initial Catalog=MAGAZIN;Integrated Security=SSPI);
SqlDataReader rdr = null;
try
{ conn.Open();
SqlCommand cmd = new SqlCommand(select * from PRODUSE, conn);
33 Am fi putut folosi acelai constructor ca la Insert. Acest exemplu demonstreaz c putem schimba oricnd obiectul connection asignat unei comenzi
34 n acest exemplu am ales s aplel constructorul SqlCommand fr parametri, pentru a exemplifica cum putem
stabili explicit conexiunea i comanda
35 Este necesar conversia ntruct rezultatul returnat de ExecuteScalar este de tip object

CAPITOLUL 6. ADO.NET

97

rdr = cmd.ExecuteReader();
while (rdr.Read()) { Console.WriteLine(rdr[0]);}
}
finally
{ if (rdr != null) {rdr.Close();}
if (conn != null){conn.Close();}
}
}
}

2) Realizai funcii care s implementeze operaiile elementare asupra unei baze


de date i verificai funcionalitatea lor.
using System;
using System.Data;
using System.Data.SqlClient;
class ADO2
{
SqlConnection conn;
public ADO2()
{ conn = new SqlConnection(Data Source=(local);Initial
Catalog=MAGAZIN;Integrated Security=SSPI);
}
static void Main()
{
ADO2 scd = new ADO2();
Console.WriteLine(Produse aflate n magazin nainte de Insert);
scd.ReadData();scd.Insertdata();
Console.WriteLine(Produse aflate n magazin dupa Insert);
scd.ReadData();scd.UpdateData();
Console.WriteLine(Produse aflate n magazin dupa Update);
scd.ReadData();scd.DeleteData();
Console.WriteLine(Categories After Delete);
scd.ReadData();
int number_inregistrari = scd.GetNumberOfRecords();
Console.WriteLine(Numarul de inregistrari: {0}, numar_inregistrari);
}
public void ReadData()
{ SqlDataReader rdr = null;
try
{conn.Open();
SqlCommand cmd = new SqlCommand(select DENUMIRE_PRODUS from PRODUSE,
conn);
rdr = cmd.ExecuteReader();
while (rdr.Read()) {Console.WriteLine(rdr[0]);}
}
finally
{ if (rdr != null){rdr.Close();}

98

Introducere n .Net Framework (Suport de curs)

if (conn != null){conn.Close();}
}
}
public void Insertdata()
{try
{conn.Open();
string insertString = @insert into PRODUSE(DENUMIRE_PRODUS, DESCRIERE)
values (SCOOBY, jucarie de plus);
SqlCommand cmd = new SqlCommand(insertString, conn);
cmd.ExecuteNonQuery();
}
finally
{if (conn != null){conn.Close();}
}
}
public void UpdateData()
{
try
{conn.Open();
string updateString = @update PRODUSE set DENUMIRE_PRODUS = SCOOBY DOO
where DENUMIRE_PRODUS = SCOOBY;
SqlCommand cmd = new SqlCommand(updateString);
cmd.Connection = conn;
cmd.ExecuteNonQuery();
}
finally
{if (conn != null){conn.Close();}
}
}
public void DeleteData()
{ try
{ conn.Open();
string deleteString = @delete from PRODUSE where DENUMIRE_PRODUS = BARBIE;
SqlCommand cmd = new SqlCommand();
cmd.CommandText = deleteString;
cmd.Connection = conn;
cmd.ExecuteNonQuery();
}
finally
{if (conn != null){conn.Close();}}
}
public int GetNumberOfRecords()
{
int count = -1;
try
{ conn.Open();
SqlCommand cmd = new SqlCommand(select count(*) from Produse, conn);
count = (int)cmd.ExecuteScalar();
}

CAPITOLUL 6. ADO.NET

99

finally
{if (conn != null){conn.Close();}
}
return count;
}
}

6.5. DataReader
Datele pot fi explorate n mod conectat (cu ajutorul unor obiecte din categoria
DataReader), sau pot fi preluate de la surs (dintr-un obiect din categoria
DataAdapter) i nglobate n aplicaia curent (sub forma unui obiect din categoria
DataSet).
Clasele DataReader permit parcurgerea ntr-un singur sens a sursei de date, fr
posibilitate de modificare a datelor la surs. Dac se dorete modificarea datelor la
surs, se va utiliza ansamblul DataAdapter + DataSet.
Datorita faptului c citete doar nainte (forward-only) permite acestui tip de date
s fie foarte rapid n citire. Overhead-ul asociat este foarte mic (overhead generat cu
inspectarea rezultatului i a scrierii n baza de date). Dac ntr-o aplicaie este nevoie
doar de informaii care vor fi citite o singura dat, sau rezultatul unei interogri este
prea mare ca sa fie reinut n memorie (caching) DataReader este soluia cea mai
bun.
Un obiect DataReader nu are constructor36, ci se obine cu ajutorul unui obiect de
tip Command i prin apelul metodei ExecuteReader() (vezi exerciiile de la capitolul
anterior). Evident, pe toat durata lucrului cu un obiect de tip DataReader, conexiunea trebuie s fie activ. Toate clasele DataReader (SqlDataReader,
OleDbDataReader etc.) implementeaz interfaa IDataReader.

6.5.1. Proprieti:
a) IsClosed (boolean, read-only)- returnez true dac obiectul este deschis si fals
altfel
b)HasRows (boolean,read-only) - verific dac reader-ul conine cel puin o nregistrare
c) Item (indexator de cmpuri)
d)FieldCount - returneaz numrul de cmpuri din nregistrarea curent

6.5.2. Metode:
a) Close() nchidere obiectului i eliberarea resurselor; trebuie s precead
nchiderea conexiunii.
b)GetBoolean(), GetByte(), GetChar(), GetDateTime(), GetDecimal(), GetDouble(),
GetFloat(), GetInt16(), GetInt32(), GetInt64(), GetValue(), GetString()
returneaz valoarea unui cmp specificat, din nergistrarea curent
36 Dac pentru instantiere este folosit operatorul new vei obine un obiect cu care nu putei face nimic pentru c nu
are o conexiune i o comand ataate.

100

Introducere n .Net Framework (Suport de curs)

c) GetBytes(), GetChars() citirea unor octei/caractere dintrun cmp de date binar


d)GetDataTypeName(), GetName() returneaz tipul/numele cmpului specificat
e) IsDBNull() returneaz true dac n cmpul specificat prin index este o valoare
NULL
f) NextResult()determin trecerea la urmtorul rezultat stocat n obiect (vezi exemplul)
g)Read() determin trecerea la urmtoarea nregistrare, returnnd false numai
dac aceasta nu exist; de reinut c iniial poziia curent este naintea primei
nregistrri.
DataReader obine datele ntr-un stream secvenial. Pentru a citi aceste informaii trebuie apelat metoda Read; aceasta citeste un singur rnd din tabelul rezultat. Metoda
clasic de a citi informaia dintr-un DataReader este de a itera ntr-o bucl while.
Ex.1)
SqlCommand cmd=new SqlCommand(select * from elevi;select * from profi, conn );
conn.Open ();
SqlDataReader reader = cmd.ExecuteReader ();
do { while ( reader.Read () )
{Console.WriteLine ( {0}\t\t{1}, reader[0], reader[1] );}
} while ( reader.NextResult () );

DataReader implementeaz i indexatori (n exemplul anterior am afiat primele


coloane folosind indexatori numerici).
Nu este foarte clar pentru cineva care citete codul care sunt coloanele afiate
dect dac s-a uitat i n baza de date. Din aceasta cauz este preferat utilizarea
indexatorilor de tipul string. Valoarea indexului trebuie s fie numele coloanei din
tabelul rezultat.
Indiferent c se folosete un index numeric sau unul de tipul string indexatorii
ntorc totdeauna un obiect de tipul object fiind necesar conversia.
Exemplu: Codul
SqlCommand cmd = new SqlCommand(select * from PRODUSE, conn);
rdr = cmd.ExecuteReader();
while (rdr.Read()) {Console.WriteLine(rdr[0]);}

este echivalent cu
SqlCommand cmd = new SqlCommand(select * from PRODUSE, conn);
rdr = cmd.ExecuteReader();
while (rdr.Read()){Console.WriteLine (rdr[ID_PRODUS]);

Exerciiu. Afiai coninutul tabelei PRODUSE utiliznd DataReader.

CAPITOLUL 6. ADO.NET

101

using System;
using System.Data;
using System.Data.SqlClient;
class ADO3
{ static void Main()
{ADO3 rd = new ADO3();
rd.SimpleRead();
}
public void SimpleRead()
{ SqlDataReader rdr = null;
SqlConnection conn = new SqlConnection(
Data Source=(local);Initial Catalog=MAGAZIN;Integrated Security=SSPI);
SqlCommand cmd = new SqlCommand(select * from PRODUSE, conn);
try { conn.Open();
rdr = cmd.ExecuteReader();
Console.WriteLine(DENUMIRE PRODUS DESCRIERE);
while (rdr.Read()){string den = (string)rdr[DENUMIRE_PRODUS];
string descr = (string)rdr[DESCRIERE];
Console.Write({0,-20}, den);
Console.Write({0,-30}, descr);
Console.WriteLine();
}
}
finally {if (rdr != null){rdr.Close();}
if (conn != null){conn.Close();}
}
}
}

6.6. DataAdapter
Folosirea combinat a obiectelor DataAdapter i DataSet permite operaii de
selectare, tergere, modificare i adugare la baza de date. Clasele DataAdapter
genereaz obiecte care funcioneaz ca o interfa ntre sursa de date i obiectele
DataSet interne aplicaiei, permind prelucrri pe baza de date. Ele gestioneaz
automat conexiunea cu baza de date astfel nct conexiunea s se fac numai atunci
cnd este imperios necesar.
Un obiect DataSet este de fapt un set de tabele relaionate. Folosete serviciile
unui obiect DataAdapter pentru a-i procura datele i trimite modificrile napoi ctre
baza de date. Datele sunt stocate de un DataSet n format XML, acelai folosit i pentru transferul datelor.
n exemplul urmtor se preiau datele din tablele elevi i profi:
SqlDataAdapter de=new SqlDataAdapter(SELECT nume,clasa FROM elevi, conn);
de.Fill(ds,Elevi);//transfer datele n datasetul ds sub forma unei tabele locale
numite elevi
SqlDataAdapter dp=new SqlDataAdapter(SELECT nume, clasdir FROM profi,conn);

102

Introducere n .Net Framework (Suport de curs)

dp.Fill(ds,Profi);//transfer datele n datasetul ds sub forma unei tabele locale


numite profi

6.6.1. Proprieti
a) DeleteCommand, InsertCommand, SelectCommand, UpdateCommand (Command), conin
comenzile ce se execut pentru selectarea sau modificarea datelor n sursa de
date.
b)MissingSchemaAction (enumerare) determin ce se face atunci cnd datele aduse
nu se potrivesc peste schema tablei n care sunt depuse. Poate avea urmtoarele
valori:
Add - implicit, DataAdapter adaug coloana la schema tablei
AddWithKey se adug coloana i informaii relativ la cheia primar
Ignore - se ignor lipsa coloanei respective, ceea ce duce la pierdere de date
Error - se genereaz o excepie de tipul InvalidOperationException.

6.6.2. Metode
Constructori:SqlDataAdapter()|SqlDataAdapter(obiect_comanda)|
SqlDataAdapter(string_comanda, conexiune);
a) Fill() permite umplerea unei tabele dintrun obiect DataSet cu date. Permite
specificarea obiectului DataSet n care se depun datele, eventual a numelui
tablei din acest DataSet, numrul de nregistrare cu care s se nceap popularea (prima avnd indicele 0) i numrul de nregistrri care urmeaz a fi aduse.
a) Update() permite transmiterea modificrilor efectuate ntrun DataSet ctre
baza de date.

6.7. DataSet
Un DataSet este format din Tables (colecie format din obiecte de tip DataTable;
DataTable este compus la rndul lui dintr-o colecie de DataRow i DataColumn),
Relations (colecie de obiecte de tip DataRelation pentru memorarea legturilor
printecopil) i ExtendedProperties ce conine proprieti definite de utilizator.
Scenariul uzual de lucru cu datele dintr-o tabel conine urmtoarele etape:
popularea succesiv a unui DataSet prin intermediul unuia sau mai multor
obiecte DataAdapter, apelnd metoda Fill (vezi exemplul de mai sus)
procesarea datelor din DataSet folosind numele tabelelor stabilite la umplere,
ds.Tables[elevi], sau indexarea acestora, ds.Tables[0], ds.Tables[1]
actualizarea datelor prin obiecte comand corespunztoare operaiilor INSERT,
UPDATE i DELETE. Un obiect CommandBuilder poate construi automat o combinaie de comenzi ce reflect modificrile efectuate.
Aadar, DataAdapter deschide o conexiune doar atunci cnd este nevoie i o
inchide imediat aceasta nu mai este necesar.

CAPITOLUL 6. ADO.NET

103

De exemplu DataAdapter realizeaz urmtoarele operaiuni atunci cnd trebuie sa


populeze un DataSet:deschide conexiunea, populeaza DataSet-ul,nchide conexiunea
i urmatorele operaiuni atunci cnd trebuie sa fac update pe baza de date:
deschide conexiunea, scrie modificarile din DataSet in baza de date,inchide conexiunea. Intre operaiunea de populare a DataSet-ului i cea de update conexiunile sunt
inchise. Intre aceste operaii n DataSet se poate scrie sau citi.
Crearea unui obiect de tipul DataSet se face folosind operatorul new.
Exemplu. DataSet dsProduse = new DataSet ();

Constructorul unui DataSet nu necesit parametri. Exist totui o suprancrcare a


acestuia care primete ca parametru un string i este folosit atunci cand trebuie s se
fac o serializare a datelor ntr-un fisier XML. In exemplul anterior avem un DataSet
gol i avem nevoie de un DataAdapter pentru a-l popula.
Un obiect DataAdapter conine mai multe obiecte Command (pentru inserare,
update, delete i select) i un obiect Connection pentru a citi i scrie date.
n exemplul urmtor construim un obiect de tipul DataAdapter, daProd. Comanda
SQL specific cu ce date va fi populat un DataSet, iar conexiunea conn trebuie s fi
fost creat anterior, dar nu i deschis. DataAdapter-ul va deschide conexiunea la
apelul metodelor Fill i Update.
SqlDataAdapter daProd =
new SqlDataAdapter (SELECT ID_PRODUS, DENUMIRE_PRODUS FROM PRODUSE, conn);

Prin intermediul constructorului putem instania doar comanda de interogare.


Instanierea celorlalte se face fie prin intermediul propriettilor pe care le expune
DataAdapter, fie folosind obiecte de tipul CommandBuilder.
SqlCommandBuilder cmdBldr = new SqlCommandBuilder (daProd);

La iniializarea unui CommandBuilder se apleleaz un constructor care primete


ca parametru un adapter, pentru care vor fi construite comenzile.
SqlCommandBuilder are nu poate construi dect comenzi simple i care se aplic
unui singur tabel. Atunci cand trebui ca sa facem comenzi care vor folosi mai multe
tabele este recomandat construirea separat a comnezilor i apoi atasarea lor
adapterului folosind proprieti.
Popularea DataSet-ului se face dup ce am construit cele dou instane:
daProd.Fill (dsProduse, PRODUSE);

n exemplul urmtor va fi populat DataSet-ul dsProduse. Cel de-al doilea parametru (string) reprezint numele tabelului (nu numele tabelului din baza de date, ci
al tabelului rezultat n DataSet) care va fi creat. Scopul acestui nume este identificarea
ulterioar a tabelului. n cazul n care nu sunt specificate numele tabelelor, acestea
vor fi adugate n DataSet sub numele Table1, Table2, ...

104

Introducere n .Net Framework (Suport de curs)

Un DataSet poate fi folosit ca surs de date pentru un DataGrid din Windows


Forms sau ASP.Net .
Exemplu.
DataGrid dgProduse = new DataGrid();
dgProduse.DataSource = dsProduse;
dgProduse.DataMembers = PRODUSE;37

Dup ce au fost fcute modificri ntr-un DataSet acestea trebuie scrise i n baza
de date. Actualizarea se face prin apelul metodei Update.
daProd.Update (dsProduse, PRODUSE);

6.8. SqlParameter
Atunci cnd lucrm cu bazele de date avem nevoie, de cele mai multe ori s filtrai
rezultatul dup diverse criterii. De obicei acest lucru se face n funcie de nite criterii
pe care utilizatorul le specific (ex: vrei s vedei doar ppuile Barbie).
Cea mai simpl metod de filtrare a rezultatelor este s construim dinamic string-ul
SqlCommand dar aceast metoda nu este recomandat deoarece poate afecta baza
de date (ex. Accesarea informaiilor confideniale).
Dac folosim interogri cu parametri atunci orice valoare pus ntr-un parametru
nu va fi tratat drept cod SQL, ci ca valoare a unui cmp, fcnd aplicaia mai sigur.
Pentru a folosi interogri cu parametri trebuie s:
a) construim string-ul pentru SqlCommand folosind parametri;
Ex. SqlCommand cmd =
new SqlCommand(SELECT * FROM PRODUSE WHERE DENUMIRE = @den, conn);38

b)construim un obiect SqlParameter asignnd valorile corespunztoare;


Ex. SqlParameter param = new SqlParameter();
param.ParameterName = @Cden;
param.Value = sir;

c) adugai obiectul SqlParameter la obiectul SqlCommand, folosind proprietatea


Parameters.
Ex. cmd.Parameters.Add(param);

37 Se pot afia mai multe tabele dintr-un DataSet, semnul "+" permindu-i utilizatorului s aleaga care tabel s fie
afiat. Pentru a suprima afiarea acelui semn "+" setm proprietatea DataMembers pe numele tabelului care va fi
afiat. Numele tabelului este acelai care l-am folosit ca parametru n apelul metodei Fill.
38 Atunci cnd comanda va fi executat @den va fi nlocuit cu valoarea aflat n obiectul SqlParameter ataat. Dac
nu asociem o instan de tipul SqlParameter pentru un parametru din string-ul de interogare sau avem mai multe
instane SqlParameter pentru un parametru vom obine o eroare la rulare

CAPITOLUL 6. ADO.NET

105

6.9. Proceduri Stocate (Stored Procedures)


O procedur stocat este o secven de instruciuni SQL, salvat n baza de date,
care poate fi apelat de aplicaii diferite. Sql Server compileaz procedurile stocate,
ceea ce crete eficiena utilizrii lor. De asemenea, procedurile stocate pot avea parametri.
O procedur stocat poate fi apelat folosind obiectul SqlCommand:
SqlCommand cmd = new SqlCommand(StoredProcedure1, conn);
cmd.CommandType = CommandType.StoredProcedure; //Tipul obiectului comanda este procedura stocata

Primul parametru al constructorului este un ir de caractere ce reprezint numele


procedurii stocate. A doua instruciune de mai sus spune obiectului SqlCommand ce
tip de comand va fi executat, prin intermediul proprietii CommandType.
Exemplu:
SqlCommand cmd = new SqlCommand(StoredProcedure1, conn);
cmd.CommandType = CommandType.StoredProcedure; //Tipul obiectului comanda este procedura stocata
personDs = new DataSet();
personDa = new SqlDataAdapter(, conn);
personDa.SelectCommand = cmd;
personDa.Fill(personDs, PersonTable);

Apelul procedurilor stocate, parametrizate, este asemnator cu cel al interogrilor


cu parametri.
//Obiect Comanda, in care primul parametru este numele procedurii stocate
SqlCommand cmd = new SqlCommand(City, conn);
cmd.CommandType = CommandType.StoredProcedure; //Tipul obiectului comanda este procedura stocata
cmd.Parameters.Add(new SqlParameter(@City, inputCity));
personDs = new DataSet();
personDa = new SqlDataAdapter(, conn);
personDa.SelectCommand = cmd;
personDa.Fill(personDs, PersonTable);

Primul argument al constructorului obiectului SqlCommand este numele procedurii stocate. Aceast procedur are un parametru numit @City. De aceea trebuie
folosit un obiect de tip SqlParameter pentru a adauga acest parametru la obiectul de
tip Command.
Exerciiu de sintez. Construii o aplicaie pentru a simula gestiunea unei biblioteci colare.

106

Introducere n .Net Framework (Suport de curs)

Precizri.Toate informaiile se vor afla ntr-o baz de date. Creati propriile structuri
de date adecvate rezolvarii problemei. Utilizati Microsoft Access pentru crearea bazei
de date. Iniial aplicaia va afia o form Windows care permite selectarea operaiei
efectuate (adugare carte/cri, adugare abonat, actualizare stare carte/cri/abonat,
mprumut carte/cri, etc.)

6.11. Proiectarea vizual a seturilor de date


Mediul de dezvoltare Visual Studio dispune de instrumente puternice i sugestive
pentru utilizarea bazelor de date n aplicaii. Conceptual, n spatele unei ferestre n
care lucrm cu date preluate dintr-una sau mai multe tabele ale unei baze de date se
afl obiectele din categoriile Connection, Command, DataAdapter i DataSet prezentate. La vedere se afl controale de tip DataGridView, sau TableGridView,
BindingNavigator etc.
Meniul Data i fereastra auxiliar Data Sources ne sunt foarte utile n lucrul cu
surse de date externe.

S urmrim un scenariu de realizare a unei aplicaii simple cu o fereastr n care putem


vizualiza date dintr-o tabel, putem naviga, putem modifica sau terge nregistrri.
Iniiem adugarea unei surse de date (Add New Source)
Configurm cu atenie (asistai de vrjitor) conexiunea cu o surs de tip SQL
sau Access; figura surprinde elemente de conectare la o baz de date Access,
numit Authors, baz stocat pe hard-discul local.
Selectm tabelele care ne intereseaz din baza de date i cmpurile din cadrul
tabelei ce vor fi reinute n TableAdapter (din categoria DataAdapter)

Cnd operaiunea se ncheie, date relative la baza de date la care ne-am


conectat sunt integrate n proiect i pictograma, ca i structura bazei de date,
apar n fereastra Data Source

CAPITOLUL 6. ADO.NET

107

Prin tragerea unor obiecte din fereastra Data Sources n fereastra noastr
nou, se creeaz automat obiecte specifice. n partea de jos a figurii se pot
observa obiectele de tip Dataset, TableAdapter, BindingSource,
BindingNavigator i, n fereastr, TableGridView

BindingNavigator este un tip ce permite, prin instaniere, construirea barei de navigare care faciliteaz operaii de deplasare, editare, tergere i adugare n tabel.
S observm c reprezentarea vizual a fiecrui obiect este nzestrat cu o sget
n partea de sus, n dreapta. Un clic pe aceast sgeat activeaz un meniu contextual cu lista principalelor operaii ce se pot efectua cu obiectul respectiv.

Meniul contextual asociat grilei n care vor fi vizualizate datele permite configurarea modului de lucru cu grila (sursa de date, operaiile permise i altele).

108

Introducere n .Net Framework (Suport de curs)

n timpul rulrii aplicaiei, bara de navigare i elementele vizuale ale grilei permit
operaiile de baz cu nregistrrile bazei de date. Operaiile care modific baza de
date trebuie s fie definitivate prin salvarea noilor date .

109

CAPITOLUL

MiniGhid Metodologic

39

I. Programa colar reper obligatoriu pentru un demers flexibil


Programa colar este parte a Curriculumului national. Termenul de curriculum
deriv din limba latin unde, printre altele nseamna drum ctre.
Programa colar descrie oferta educaional a unei anumite discipline pentru un
parcurs colar determinat Filosofia contemporan a educaiei a evideniat diferena
dintre o educaie bazat pe curriculum, adic avnd ca element central la toate etajele sale activiatea de proiectare i programa analitic, care are n centrul activitii
didactice ideea de programare a traseului elevului ctre un el cunoscut i impus doar
de ctre aduli.
Conceptual, programele colare actuale, se difereniaz de ,,programele analitice
prin accentul pe care l pun pe interiorizarea unui mod de gndire specific fiecrui
domeniu transpus n coal prin intermediul unui obiect de studiu, nu pe succesiunea
coninuturilor i pe numrul de ore alocat lor.
Actualele programe colare subliniaz importana rolului reglator al achiziiilor
elevilor n plan formativ. Centrarea pe competene reprezint modalitatea care face
ca sintagma centrarea pe elev s nu rmn o lozinc fr coninut.
Proiectarea curriculumului pe competene vine n ntmpinarea cercetrilor din psihologia cognitiv, conform crora prin competen se realizeaz n mod exemplar tranferul i mobilizarea cunotinelor i a depriderilor n situaii/contexte noi i dinamice.
Modelul de proiectare curricular centrat pe competene simplific structura curriculumului i asigur o mai mare eficien a proceselor de predare/nvare i evaluare. Acesta permite operarea la toate nivelurile cu aceeai unitate: competena, n
msur s orienteze demersurile agenilor implicai n procesul de educaie:

conceptorii de curriculum;
specialitii n evaluare;
profesorii;
inspectorii;
eleviii;
prinii.

39 n realizarea minighidului metodologic baza de documentare a constituit-o un set de lucrri bibliografice, crora li
s-au operat simplificri, actualizri, particularizri i recomandri, corelate cu curriculumul colar n vigoare, n scopul operaionalizrii informaiilor."

110

Introducere n .Net Framework (Suport de curs)

Fr a intra n detalii conceptuale, formulm cteva definiii de lucru necesare pentru explicarea manierei n care au fost concepute programele colare.
Definim competenele ca fiind ansambluri structurate de cunotine i deprinderi
dobndite prin nvare; acestea permit identificarea i rezolvarea n contexte diverse
a unor probleme caracteristice unui anumit domeniu.
Structura programei colare cuprinde: o not de prezentare, competene generale,
competene specifice i coninuturi, valori i atitudini, sugestii metodologice.
Competenele generale se definesc pe obiect de studiu i se formeaz pe durata nvmntului liceal. Ele au un grad ridicat de generalitate i complexitate i
au rolul de a orienta demersul didactic ctre achiziiile finale ale elevului.
Competenele specifice se definesc pe obiect de studiu i se formeaz pe parcursul unui an colar. Ele sunt derivate din competenele generale, fiind etape n
dobndirea acestora. Competenelor specifice li se asociaz prin program
uniti de coninut.
Componenta fundamental a programei este cea referitoare la competene specifice i coninuturi.
Pentru a asigura o marj ct mai larg de acoperire a obiectelor de studiu, s-a pornit de la o difereniere ct mai fin a etapelor unui proces de nvare. Acestora le
corespund categorii de competene organizate n jurul ctorva verbe definitorii, ce
exprim complexe de operaii mentale:
1. Receptarea - concretizat prin urmtoarele concepte operaionale:
-

identificarea de termeni, relaii, procese;


observarea unor fenomene, procese;
perceperea unor relaii, conexiuni;
nominalizarea unor concepte;
culegerea de date din surse variate;
definirea unor concepte.

2. Prelucrarea primar (a datelor) - concretizat prin urmtoarele concepte operaionale:


-

compararea unor date, stabilirea unor relaii;


calcularea unor rezultate pariale;
clasificarea datelor;
reprezentarea unor date;
sortarea-discriminarea;
investigarea, descoperirea, explorarea;
experimentarea.

3. Algoritmizarea - concretizat prin urmatoarele concepte operaionale:


-

reducerea la o schem sau model;


anticiparea unor rezultate;
remarcarea unor invariani;
reprezentarea datelor
rezolvarea de probleme prin modelare si algoritmizare.

4. Exprimarea - concretizata prin urmatoarele concepte operaionale:


-

descrierea unor stri, sisteme, procese, fenomene;


generarea de idei;
argumentarea unor enunuri;
demonstrarea.

CAPITOLUL 7. MiniGhid Metodologic

111

5. Prelucrarea secundar (a rezultatelor) - concretizat prin urmtoarele concepte


operaionale:
-

compararea unor rezultate, date de ieire, concluzii;


calcularea, evaluarea unor rezultate;
interpretarea rezultatelor;
analiza de situaii;
elaborarea de strategii;
relaionri ntre diferite tipuri de reprezentri, ntre reprezentare i obiect.

6. Transferul, care poate fi concretizat prin urmatoarele concepte operaionale:


-

aplicarea n alte domenii;


generalizarea i particularizarea;
integrarea unor domenii;
verificarea unor rezultate;
optimizarea unor rezultate;
transpunerea ntr-o alt sfer;
negocierea;
realizarea de conexiuni ntre rezultate;
adaptarea i adecvarea la context.

Competenele generale ce se urmresc a fi formate la elevi pe parcursul treptei


liceale de colarizare precum i competenele specifice fiecrui an de studiu, derivate
din acestea, se stabilesc pornind de la modelul de generare prin gruparea categoriilor de concepte operaionale n funcie de dominantele avute n vedere.
Valorile i atitudinile apar n mod explicit sub forma unei liste separate in programa fiecrui obiect de studiu. Ele acoper ntreg parcursul nvmantului liceal i
orienteaz dimensiunile axioiogic si afectiv-atitudinal aferente formrii personalitii din perspective fiecrei discipline. Realizarea lor concret deriv din
activitatea didactic permanent a profesorului, constituind un implicit al acesteia. Valorile i atitudinile au o importan egal n reglarea procesului educativ
ca i competenele - care acoper dimensiunea cognitiv a personalitii - dar se
supun altor criterii de organizare didactico-metodic i de evaluare.
Sugestiile metodologice cuprind recomandri generale privind metodologia de
aplicare a programei. Aceste recomandri se pot referi la:
desfurarea efectiv a procesului de predare/nvare, centrat pe formarea
de competene:
identificarea celor mai adecvate metode i activiti de nvare;
dotri/materiale necesare pentru aplicarea n condiii optime a programei;
evaluarea continu.
Dincolo de structura unitar a programelor colare, curriculumul naional actual
propune o ofert flexibil, ce permite profesorului adaptarea cadrului formal la personalitatea sa i la specificul clasei de elevi cu care lucreaz. Elementele care asigur
acest reglaj sunt:
posibilitatea interveniei profesorului n succesiunea elementelor de coninut, cu
condiia asigurrii coerenei tematice i a respectrii logicii interne a domeniului;

112

Introducere n .Net Framework (Suport de curs)

lipsa prescrierii de la centru a intervalului de timp alocat elementelor de coninut;


posibilitatea modificrii, a completrii sau a nlocuirii activitilor de nvare,
astfel nct acestea s permit un demers didactic personalizat.

II. Aplicarea programelor colare


Existena unor programe centrate pe achiziiile elevilor determin un anumit sens
al schimbrii n didactica fiecrei discipline. Tabelul de mai jos prezint n antitez
caracteristici ale procesului de predare-nvare din didactica tradiionala i didactica
actual.

Criterii

Rolul elevului

Strategii didactice
Orientare tradiional
Urmrete prelegerea, expunerea,
explicaia profesorului.
ncearc sa rein i sa reproduc
ideile auzite
Accept n mod pasiv ideile
transmise.
Lucreaz izolat.
Expune, ine prelegeri.

Rolul profesorului

Modul de realizare
a nvrii

Impune puncte de vedere.


Se consider i se manifest n permanen "ca un printe"'.
nvarea are loc predominant prin
memorare i reproducere de
cunotine, prin apel doar la exemple
"clasice", validate.
nvarea conduce la competiie ntre
elevi, cu scopul de ierarhizare
Vizeaz msurarea i aprecierea
cunotinelor (ce tie elevul).

Evaluarea

Orientare modern
Exprim puncte de vedere proprii.
Realizeaz un schimb de idei cu
ceilali.
Argumenteaz; pune i i pune
ntrebri cu scopul de a nelege,
de a realiza sensul unor idei
Coopereaz n rezolvarea problemelor
i a sarcinilor de lucru.
Faciliteaz i modereaz nvarea.
Ajut elevii s neleag i s explice
punctele de vedere proprii.
Este partener n nvare.
nvarea are loc predominant prin
formare de competene i deprinderi
practice.
nvarea se realizeaz prin
cooperare.
Vizeaz msurarea i aprecierea
competenelor (ce poate s fac
elevul cu ceea ce tie).

Pune accent pe aspectul cantitativ


Pune accent pe elementele de ordin
(ct de mult informaie deine elevul). calitativ (valori, atitudini).
Vizeaz clasificarea "static" a
elevilor,

Vizeaz progresul n nvare pentru


fiecare elev.

De fapt, diferena dintre didactica tradiional i cea actual const n modul de


concepere i organizare a situaiilor de nvare (riguros dirijate n primul caz i
avnd autonomie de diferite grade, n cel de-al doilea). Altfel spus, o strategie este
legitim sau ilegitim nu n general, ci potrivit unor circumstane concrete; profesorul
eficient este acela care tie:
s selecioneze
s combine
s varieze diferite metode
s aleag strategii adecvate.

CAPITOLUL 7. MiniGhid Metodologic

113

III. Proiectarea demersului didactic


Predarea reprezint activitatea profesorului de organizare i conducere a ofertelor
de nvare care are drept scop facilitarea i stimularea nvrii eficiente la elevi.
Proiectarea demersului didactic este acea activitate desfurat de profesor care
const n anticiparea etapelor i a aciunilor concrete de realizare a predrii.
Proiectarea demersului didactic presupune:
lectura personalizat a programelor colare;
planificarea calendaristic;
proiectarea secvenial (a unitilor de nvare).

III.1. Lectura personalizat a programelor colare


n contextul noului curriculum, conceptul central al proiectrii didactice este demersul didactic personalizat, iar instrumentul acestuia este unitatea de nvare.
Demersul personalizat exprim dreptul profesorului - ca i al autorului de manual de a lua decizii asupra modalitilor pe care le consider optime n creterea calitii
procesului de nvatamant, respectiv, rspunderea personal pentru a asigura elevilor
un parcurs colar individualizat, n funcie de condiii i cerine concrete.
LECTURAREA PROGRAMEI se realizeaz pe orizontal n succesiunea urmtoare:
Competente
Generale

Competente
Specifice

Coninuturi

Activiti
de nvare

III.2. Planificarea calendaristic


n contextul noului curriculum, planificarea calendaristic este un document
administrativ care asociaz elemente ale programei cu alocarea de timp considerat
optim de ctre profesor pe parcursul unui an colar.
n elaborarea planificrilor calendaristice recomandm parcurgerea urmtoarelor
etape:
1 Realizarea asocierilor dintre competenele specifice i coninuturi.
2 mprirea n uniti de nvare.
3 Stabilirea succesiunii de parcurgere a unitilor de nvare.
4 Alocarea timpului considerat necesar pentru fiecare unitate de nvare, n concordan cu competenele specifice i coninuturile vizate.
Planificrile pot fi ntocmite pornind de la urmtoarea rubricaie:

114

Introducere n .Net Framework (Suport de curs)

Unitatea colar

Profesor......

Disciplina....

Clasa/Nr. ore pe spt./ .....

Planificare calendaristic
Anul colar..
Uniti de
nvare

Competene
specifice

Coninuturi

Nr. de ore
alocate

Sptmna

Observatii

n acest tabel:
Unitile de nvare se indic prin titluri (teme) stabilite de ctre profesor.
n rubrica Competene specifice se trec simbolurile competenelor specifice din
programa colar.
Coninuturile selectate sunt cele extrase din lista de continuturi ale programei.
Numarul de ore alocate se stabilete de ctre profesor n funcie de experiena
acestuia i de nivelul de achiziii ale elevilor clasei.
ntregul cuprins al planificrii are valoare orientativ, eventualele modificri determinate de aplicarea efectiv la clas putnd fi consemnate n rubrica Observaii.
O planificare anual corect ntocmit trebuie s acopere integral programa
colar la nivel de competene specifice i coninuturi.

III.3. Proiectarea unei uniti de nvare


Elementul generator al planificrii calendaristice este unitatea de nvare.
O unitate de nvare reprezint o structur didactic deschis i flexibil,care are
urmtoarele caracteristici:
determin formarea la elevi a unui comportament specific, generat prin integrarea unor competene specifice;
este unitar din punct de vedere tematic;
se desfoar n mod sistematic i continuu pe o perioad de timp;
se finalizeaz prin evaluare.
Detaliem n continuare elementele eseniale ale proiectrii unei uniti de nvare.
Se recomand utilizarea urmtorului format:

CAPITOLUL 7. MiniGhid Metodologic

115

Unitatea colar

Profesor......

Disciplina....

Clasa/Nr. ore pe spt./ .....

Proiectul unitii de nvare ..


Nr. de ore alocate ..
Coninuturi

Competene
specifice

Activiti de
nvare

Resurse

Evaluare

Observatii

Coninuturi: apar inclusiv detalieri de coninut necesare n explicitarea anumitor


parcursuri, respectiv n cuplarea lor la baza proprie de cunoatere a elevilor.
n rubrica Competene specifice se trec simbolurile competenelor specifice din
programa colar
Activitile de nvare pot fi cele din programa colar, completate, modificate
sau chiar nlocuite de altele, pe care profesorul le consider adecvate pentru
atingerea obiectivelor propuse.
Rubrica Resurse cuprinde specificri de timp, de loc, forme de organizare a clasei, material didactic folosit etc.
n rubrica Evaluare se menioneaz instrumentele sau modalitaile de evaluare
aplicate la clas.
Finalul fiecrei uniti de nvare presupune Evaluare sumativ.
Dei denumirea i alocarea de timp pentru unitile de nvare se stabilesc la
nceputul anului colar prin planificare, este recomandabil ca proiectele unitailor de
nvare s se completeze ritmic pe parcursul anului, avnd n avans un interval de
timp optim pentru ca acestea s reflecte ct mai bine realitatea.
n completarea rubricaiei, se urmrete corelarea elementelor celor cinci coloane.
Practic pe baza indicaiilor din planificare se fac detalierile pe orizontal, ordonnd
activitile n succesiunea derulrii, raportndu-le la competene i specificnd
resursele necesare bunei desfurri a procesului didactic.
Proiectarea unitii de nvare - ca i a leciei - ncepe prin parcurgerea schemei
urmtoare:

n ce scop voi
face?

Ce voi face?

Cu ce voi face?

Cum voi face?

Ct s-a realizat?

Identificarea
competenelor

Selectarea
coninuturilor

Analiza resurselor

Determinarea
activitilor de
nvare

Stabilirea
instrumentelor de
evaluare

ConceptuI de unitate de nvare are rolul s materializeze conceptul de demers


didactic personalizat, flexibilizd proiectarea didactic i definind n acest sens pentru

116

Introducere n .Net Framework (Suport de curs)

practica didactic premise mai bine fundamentate din punct de vedere pedagogic.
Identificarea unei uniti de nvare se face prin tema acesteia. Stabilirea temei de
catre profesor pe baza lecturii programei, utiliznd surse diverse, este primul pas n
identificarea unitilor de nvare n care va fi mparit materia anului colar,
respectiv, n organizarea unui demers didactic personalizat. Temele sunt enunuri
complexe legate de analiza scopurilor nvarii, formulri fie originale, fie preluate
din lista de coninuturi a programei sau din manual, formulri care reflect din partea
profesorului o nelegere profund a scopurilor activitii sale, talent pedagogic,
inspiraie, creativitate, etc.
Activitile de nvare se construiesc prin corelarea competenelor cu coninuturile i presupun orientarea ctre un anumit scop, redat prin tema activitii. n
momentul propunerii lor spre rezolvare elevilor, activitile de nvare vor fi transpuse ntr-o anumit form de comunicare inteligibil nivelului de vrst.
ntr-o abordare pragmatic, resursele cuprind acele elemente care asigur cadrul
necesar pentru buna desfurare a activitilor de nvare. Astfel, profesorul va
meniona n aceast rubric forme de organizare a clasei (tipuri de interaciuni ale
resurselor umane), mijloace de nvmnt, alocarea de timp, precum i orice alte
elemente pe care le consider utile n derularea scenariului didactic.
n condiiile noului curriculum, lectura programei i a manualelor nu mai este n
mod obligatoriu liniar. Programa trebuie parcurs n mod necesar de ctre toi , dar
ea, ca i manualele, se pliaz unei citiri personale i adaptate. Asupra coninuturilor
programei profesorul poate interveni prin regruparea lor sub temele unitilor de
nvare pe care le-a stabilit.

III.4. Proiectarea activitii de evaluare se realizeaz concomitent cu proiectarea


demersului de predare/nvare i n deplin concordan cu acesta. Cteva ntrebri
utile n proiectarea instrumentelor de evaluare sunt urmtoarele:
Care sunt competenele din programa colar, pe care trebuie s le dobndeasc elevii?
Care sunt performanele minime, medii i superioare pe care le pot atinge elevii, pentru a demonstra c au atins aceste competene?
Care este specificul colectivului de elevi pentru care mi propun evaluarea?
Cnd i n ce scop evaluez?
Pentru ce tipuri de evaluare optez?
Cu ce instrumente voi realiza evaluarea?
Cum voi proceda pentru ca fiecare elev sa fie evaluat prin tipuri de probe ct mai
variate astfel nct evaluarea s fie ct mai obiectiv?
Cum voi folosi datele oferite de instrumentele de evaluare administrate, pentru
a elimina eventualele blocaje constatate n formarea elevilor i pentru a asigura
progresul scolar al fiecruia dintre ei?

CAPITOLUL 7. MiniGhid Metodologic

117

PREDICTIV (INIIAL)
TIPURI
DE
EVALUARE

FORMATIV (CONTINU)
SUMATIV (FINAL)

TRADIIONALE
METODE I
INSTRUMENTE
DE
EVALUARE
COMPLEMENTARE

Probe scrise
Probe orale
Probe practice

Observarea sistematic a elevilor


Investigaia
Proiectul
Portofoliul
Tema pentru acas
Tema de lucru n clas
Autoevaluarea

Adeseori, evaluarea formativ este nlocuit cu evaluarea curent, n accepiunea


tradiional de notare ritmic, constnd n probe stereotipe precum dictri, calcule,
compuneri, diverse tipuri de exerciii etc., care sunt apreciate prin note n mod aproximativ, fr interes n ceea ce privete nivelul cognitiv, afectiv, psihomotor, relaional. O astfel de evaluare are n vedere doar unele tipuri de comportamente, de obicei nerelevante pentru personalitatea elevului i neglijeaz aspecte importante ca:
gndirea, imaginaia, atitudinea de responsabilitate, adoptarea unor metode proprii
de lucru, competena de comunicare i de relaionare etc.
Ceea ce este generalizat n evaluarea curent din coli este stocarea n memorie a
abstraciilor i promptitudinea reproducerii acestora. Multe cunotine i capaciti
care necesit evaluare sunt ignorate, dei sunt, n egal msur, variabile importante
ale nvrii, cum ar fi: atitudinea elevului fa de nvare, fa de disciplina de
studiu, fa de educator i fa de interrelaiile din interiorul colectivului de elevi,
modul n care elevul nva (sistematic sau sporadic), modul cum abordeaz
cunotinele pentru a rezolva probleme practice, specifice vieii cotidiene etc.
Focalizat pe unitatea de nvare, evaluarea ar trebui s asigure evidenierea progresului nregistrat de elev n raport cu sine nsui, pe drumul atingerii competenelor prevzute n program. Este important s fie evaluat nu numai cantitatea
de informaie de care dispune elevul, ci, mai ales, ceea ce poate el s fac utiliznd
ceea ce tie sau ceea ce intuiete.
n acest sens, cteva aspecte pot fi avute n vedere:
modificarea raportului dintre evaluarea sumativ, care inventariaz, selecteaz
i ierarhizeaz prin not i evaluarea formativ, ce are drept scop valorificarea
potenialului de care dispun elevii i conduce la perfecionarea continu a stilului i a metodelor proprii de nvare;
realizarea unui echilibru dinamic ntre evaluarea scris i evaluarea oral: aceasta din urm, dei presupune un volum mare de timp pentru aprecierea tuturor

118

Introducere n .Net Framework (Suport de curs)

elevilor i blocaje datorate emoiei sau timiditii, prezint avantaje deosebite,


ca: realizarea interaciunii elev-profesor, demonstrarea comportamentului
comunicativ i de inter-relaionare a elevului.
folosirea cu mai mare frecven a metodelor de autoevaluare i evaluare prin
consultare n grupuri mici.
n raport cu momentele realizrii evalurii, n proiectul unitii de nvare apar
specificaii: evaluare iniial, formativ sau sumativ.
Fiecare activitate de evaluare a rezultatelor colare trebuie nsoit n mod sistematic de o autoevaluare a procesului pe care profesorul l-a desfurat cu toi elevii
i cu fiecare elev. Numai astfel pot fi stabilite modalitile prin care poate fi reglat,
de la o etap la alta, activitatea de nvare / formare a elevilor n mod difereniat.

III.4.1. Tipuri de itemi


Item = <ntrebare> + <formatul acesteia> + <rspunsul ateptat>

Teoria i practica evalurii evideniaz mai multe citerii pe baza crora pot fi clasificai itemii. Unul dintre criteriile cel mai des utilizate este acela al gradului de obiectivitate oferit n corectare. n funcie de acest criteriu, itemii pot fi clasificai n trei
mari categorii:
a. Itemii obiectivi asigur un grad de obiectivitate ridicat n msurarea rezultatelor
colare i testeaz un numr mare de elemente de coninut ntr-un interval de
timp relativ scurt. Rspunsul ateptat este bine determinat, ca i modalitatea de
notare a acestuia.
b. Itemii semiobiectivi permit ca rspunsul ateptat s nu fie totdeauna unic determinat, modalitatea de corectare i notare inducnd uneori mici diferene de la
un corector la altul. Acetia testeaz o gam mai variat de capaciti intelectuale, oferind n acelai timp posibilitatea de a utiliza i materiale auxiliare n
rezolvarea sarcinilor de lucru propuse.
c. Itemii subiectivi (cu rspuns deschis) solicit un rspuns amplu, permind valorificarea capacitilor creative ale elevilor. Acetia sunt relativ uor de construit, principala problem constituind-o modul de elaborare a schemei de notare
astfel nct s se poat obine unitate i uniformitate la nivelul corectrii.
d. Itemi obiectivi
Fie c este vorba de activiti de proiectare i programare (Informatic), fie c este
vorba de activiti de utilizare i combinare a instrumentelor informatice (Tehnologia
Informaiei), lucrul cu calculatorul implic formulri standardizate, lipsite de echivoc,
itemii obiectivi i cei semiobiectivi repezentnd instrumente de evaluare fracvent
aplicate la aceste discipline.
Itemii obiectivi sunt caracterizai prin:

CAPITOLUL 7. MiniGhid Metodologic

119

structurarea sarcinilor propuse i standardizarea formatului lor de prezentare;


corelarea strict a sarcinilor cu obiectivele de evalurii;
capacitatea de a testa un numr mare de elemente de coninut ntr-un timp relativ scurt;
obiectivitate privind aprecierea rspunsului;
posibilitatea asocierii cu un sistem de notare extrem de simplu: punctajul aferent se acord integral, se acord parial conform unei reguli (formule) de calcul
sau nu se acord deloc (n funcie de rspunsul ateptat);
rolul secundar pe care l au de a obinui elevul cu formulri standard, tiinifice,
elemente utile n construirea rspunsurilor pentru itemii semiobiectivi i subiectivi.
a.1. Itemi cu alegere dual
Alegerea dual presupune formularea unei cerine cu dou variante complementare de rspuns (Adevrat/Fals, Da/Nu, Corect/Incorect etc.).
Se pot verifica prin intermediul itemilor cu alegere dual:
cunotinele legate de corectitudinea sintactic a unor expresii (comenzi,
instruciuni, notaii etc.);
nelegerea semnificaiei unor noiuni din terminologia de specialitate (denumiri, instrumente de prelucrare, metode de rezolvare, proprieti etc.)
recunoaterea unor explicaii, definiii, sau imagini.
Itemii de acest tip se prezint sub forma unor ntrebri sau enunuri, efortul elevului reducndu-se la identificarea unui rspuns din dou posibile. Achiziiile evaluate
prin itemii cu alegere dual sunt de regul rudimentare. Fac excepie enunurile care
pun n eviden justificri ale unor proprieti, operaii sau reguli, justificri care necesit achiziii cognitive superioare. Tot n categoria itemilor cu alegere dual se pot realiza cerine care necesit din partea elevului operaii de anticipare a efectului unei operaii prin aplicarea unui sistem riguros de cunotine ntr-un context nou. Acetia sunt
itemii cu cel mai nalt grad de dificultate. Atragem atenia asupra faptului c lipsa firului rou care pune n eviden elementele sistematice ntlnite n utilizarea unui produs soft (chiar i n cazul unui soft de baz) conduc la un experimentalism accentuat
care mpiedic formarea capacitii elevului de a se adapta situaiilor noi, neexersate.
Factorul de discriminare fiind ns extrem de mic, elevul va putea obine un rezultat acceptabil la un test format numai din astfel de itemi alegnd la ntmplare un
rspuns dintre cele dou admise pentru fiecare item n parte. De obicei, itemii cu
alegere dual sunt formulai n combinaie cu itemi subiectivi de tipul Justificai...,
Scriei varianta corect..., Explicai n ce const eroarea... etc. n aceste cazuri, o
parte din punctaj este alocat justificrii.
Pentru proiectarea corect a itemilor cu alegere dual este necesar respectarea
urmtoarelor cerine:
formularea clar a enunului, fr ambiguiti sau formulri incomplete;
dac se solicit aprecierea cu ADEVRAT/FALS, se vor evita enunurile foarte
generale;

120

Introducere n .Net Framework (Suport de curs)

selectarea unor enunuri relevante pentru domeniul de cunoatere sau categoria


de competene testat (uneori, efortul de a realiza enunuri fr echivoc duce la
elaborarea de itemi nesemnificativi din punct de vedere educaional sau tiinific);
se va evita utilizarea unor enunuri negative, acestea conducnd la raionamente
ce folosesc dubla negaie, inducnd un grad nalt de ambiguitate;
se vor evita enunurile lungi i complexe, prin eliminarea elementelor redundante inutile n raport cu ideea enunului i cerina itemului; nu se va folosi un
limbaj academic, o terminologie foarte specializat sau o construcie lingvistic
stufoas i greoaie;
se va evita introducerea a dou idei ntr-un singur enun, cu excepia cazului n
care se dorete evidenierea relaiei dintre acestea;
enunurile vor fi aproximativ egale ca lungime;
enunurile adevrate sau false s fie aproximativ egale ca numr, dar nu exact
egale, deoarece acesta ar putea constitui un indiciu dup care elevul ncearc s
ghiceasc rspunsul corect.
a.2. Itemi de tip pereche
Itemii de tip pereche solicit stabilirea unor corespondene ntre informaiile distribuite pe dou coloane. Prima coloan conine informaii de tip enun (premise), cea
de-a doua coloan coninnd informaii de tip rspuns. Elevului i se solicit s asocieze fiecare enun cu un unic rspuns.
Cele dou coloane sunt precedate de instruciuni de asociere n care i se explic
elevului tehnica de formare a perechilor (s uneasc printr-o linie, s rescrie
perechile asociate sau doar elementele lor de identificare etc.) i se precizeaz dac
un rspuns poate fi folosit la mai mult de un enun (dac funcia de asociere este
injectiv sau nu), eventual dac exist rspunsuri care nu vor fi folosite niciodat
(dac funcia de asociere este surjectiv sau nu).
Se verific prin intermediul itemilor de tip pereche capacitatea elevului de a stabili
corelaii ntre:
funcii i instrumente;
simboluri i concepte;
termeni i definiii;
probleme i metode de rezolvare.
Itemii de acest tip permit abordarea unui volum mare de informaie ntr-un interval de timp relativ redus. Factorul de discriminare este ceva mai mare dect n cazul
itemilor cu alegere dual, strategia de asociere la ntmplare neconducnd dect
n situaii foarte rare la un rezultat acceptabil privind rezultatul testului.
Pentru proiectarea corect a itemilor de tip de pereche este necesar respectarea
urmtoarelor cerine:
utilizarea unui material omogen, dintr-o sfer relativ restrns;
utilizarea unui numr inegal de premise i rspunsuri, astfel nct, dac elevul
asociaz corect n-1 enunuri dintre cele n date, s nu rezulte automat rspunsul
pentru cel de-al n-lea enun;

CAPITOLUL 7. MiniGhid Metodologic

121

aranjarea listei de rspunsuri (mai ales dac sunt multe) ntr-o ordine logic, astfel nct cutarea rspunsului n list s se realizeze ct mai comod;
aranjarea enunurilor n list astfel nct s nu se poat intui o regul de asociere
(referinele s fie ncruciate);
aranjarea coloanelor astfel nct acestea s ncap n ntregime pe aceeai pagin.
a.3. Itemi cu alegere multipl
Itemii cu alegere multipl sunt cele mai utilizate tipuri de itemi, n special n testele
standardizate (bacalaureat, admitere etc.)
Un item cu alegere multipl este format dintr-un enun numit premis sau baz i un
numr de opiuni din care elevul trebuie s aleag un singur rspuns numit cheie.
Celelalte rspunsuri, neconforme cu cerina, dar plauzibile poart numele de distractori.
Se verific prin intermediul itemilor de tip pereche capacitatea elevului de a identifica:
definiii i notaii;
instrumentul adecvat unei prelucrri;
secvene de program care realizeaz o anumit prelucrare;
expresii cu o valoare dat;
termeni i expresii de specialitate;
metode de rezolvare i tehnici de implementare.
Itemii de acest tip permit abordarea unui volum mare de informaie ntr-un interval
de timp relativ redus, oferind posibilitatea evalurii unor achiziii cognitive complexe,
dei nu pot msura capacitatea elevului de a-i organiza i exprima ideile. Sunt forme
de testare cu un grad mare de fidelitate, iar factorul de discriminare este mai mare
dect n cazul celorlali itemi obiectivi. Abilitatea profesorului de a elabora distractori
ct mai plauzibili, care s construiasc toate alternativele posibile de a grei, contribuie
la reuita aplicrii testelor cu alegere multipl. Erorile comise de elevi ofer profesorului informaii suplimentare necesare n autoreglarea procesului de nvmnt.
O categorie de itemi cu alegere multipl solicit rspunsul corect, celelalte variante
fiind greite, n timp ce ali itemi solicit cel mai bun rspuns, pe baza unei discriminri complexe. n aceste cazuri trebuie manifestat grij la formularea cerinei astfel nct criteriul de discriminare a celui mai bun rspuns s reias clar din enun.
Pentru proiectarea corect a itemilor cu alegere multipl este necesar respectarea
urmtoarelor cerine:
stabilirea clar a cerinei, n concordan cu obiectivul de evaluare;
furnizarea tuturor informaiilor necesare n premis, eliminndu-se materialul
irelevant;
formularea premisei folosind afirmaii sau ntrebri pozitive;
construirea unor alternative plauzibile, aflate n concordan cu premisa;
construirea itemului astfel nct s existe o singur alternativ corect sau
cea mai bun;
construirea unor alternative astfel nct distractorii s fie n mod cert greii sau
mai puin buni, iar varianta cheie s fie n mod cert corect sau cea mai bun;

122

Introducere n .Net Framework (Suport de curs)

aranjarea listei de rspunsuri ntr-o ordine logic, astfel nct cutarea rspunsului n list s se realizeze ct mai comod;
construirea ansamblurilor de itemi cu alegere multipl astfel nct rspunsurile
s ocupe poziii diferite n lista de variante (s nu fie n mod constant al doilea
rspuns, de exemplu)
b. Itemi semiobiectivi
Itemii semiobiectivi formeaz o categorie de instrumente de evaluare ce solicit
construirea parial sau total a unui rspuns pe baza unei sarcini definite.
Itemii semiobiectivi sunt caracterizai prin:
posibilitatea de a testa o gam mai larg de capaciti intelectuale i rezultate
ale nvrii;
crearea unor situaii cognitive de nivel mai ridicat prin solicitarea de elaborare a
rspunsului i nu de alegere a lui dintr-o mulime prestabilit, ca n cazul
itemilor obiectivi;
raportarea parial subiectiv a profesorului n raport cu rspunsul formulat
(rspunsul poate fi scris ordonat sau dezordonat, formularea poate fi mai clar
sau mai neclar, termenii folosii se pot ncadra n nite standarde tiinifice sau
pot fi variante particulare ale acestora etc.)
posibilitatea asocierii unui sistem de notare n care pot s intervin situaii
neprevzute (rspunsuri neateptate, care comport raportri noi la barem).
b.1. Itemi cu rspuns scurt / de completare
Itemii cu rspuns scurt solicit ca elevul s formuleze un rspuns scurt sau s
completeze o afirmaie astfel nct aceasta s capete sens sau s aib valoare de adevr.
Se pot verifica prin intermediul itemilor cu rspuns scurt i de completare:
cunoaterea unor noiuni, expresii de specialitate, simboluri, notaii etc.;
recunoaterea i nominalizarea unor elemente vizuale specifice unui anumit
mediu de lucru;
capacitatea de integrare a unor elemente necesare din punct de vedere sintactic
sau semantic ntr-un context dat;
schimbarea unor elemente dintr-un context dat astfel nct s se realizeze o
finalitate precizat.
Itemii cu rspuns scurt se prezint cel mai des sub forma unor ntrebri. Ei solicit
un rspuns sub o form restrns (un numr, un simbol, un cuvnt, o expresie, o
propoziie sau fraz concis).
Itemii de completarea se prezint sub forma unui enun, unei afirmaii incomplete.
Ei solicit gsirea cuvntului sau sintagmei care completeaz i d sens enunului
respectiv.
Pentru proiectarea corect a itemilor cu rspuns scurt / de completare este necesar respectarea urmtoarelor cerine:
formularea enunului astfel nct s admit un rspus scurt, exprimat cu precizie;

CAPITOLUL 7. MiniGhid Metodologic

123

formularea enunului astfel nct acesta s admit un singur rspuns corect, pe


ct posibil;
rezervarea unor spaii pentru rspuns care s sugereze numrul de cuvinte
ateptate (dac acest lucru nu reprezint un indiciu), nu i dimensiunea lor;
vizarea unui rspuns care s reprezinte o sintez de cunotine sau un rezultat al
nelegerii unei situaii i mai puin o reproducere a unor informaii.

b.2. ntrebri structurate


ntrebrile structurate solicit, printr-un sistem de subntrebri relative la o tem
comun, rspunsuri de tip obiectiv, rspunsuri scurte sau de completare prin care se
pot evalua cunotinele complexe referitoare la tema respectiv fr a solicita elaborarea unui rspuns deschis (eseu).
Se pot verifica prin intermediul ntrebrilor structurate:
capacitatea de a urmri, recunoate, adapta i construi un algoritm pe o tem
dat sau un program ntr-un limbaj de programare;
capacitatea de a realiza din aproape n aproape o prelucrare complex utiliznd
un mediu de lucru informatic.
O ntrebare structurat poate s conin materiale suport i informaii suplimentare ce se adaug treptat, conferind procesului de evaluare varietate, complexitate i
gradualitate. Se pot verifica totodat cunotine, dar i priceperi i deprinderi sporind
gradul de obiectivitate n raport cu itemii cu rspuns deschis. Subntrebrile ce
formeaz itemul permit creterea progresiv a dificultii cerinelor, dar este recomandat ca subntrebrile s fie independente, adic rspunsul la o ntrebare s nu
depind de rspunsul la ntrebrile precedente. Proiectarea lor necesit atenie, pricepere i timp.
Pentru proiectarea corect a ntrebrilor strucutrate este necesar respectarea
urmtoarelor cerine:
redactarea subntrebrilor astfel nct acestea s solicite rspunsuri simple la
nceput crescnd pe parcurs dificultatea acestora;
formularea unor subntrebri autoconinute (al cror rspuns corect s nu
depind de rspunsul corect la una dintre ntrebrile precedente;realizarea concordanei dintre enunul general (tema ntrebrii) i subntrebrile formulate.
c. Itemi subiectivi (cu rspuns deschis)
Itemii subiectivi formeaz o categorie de instrumente de evaluare ce vizeaz creativitatea elevului, originalitatea i caracterul personal al rspunsului. Dei sunt
uor de formulat, itemii subiectivi ridic probleme privind obiectivitatea evalurii.
Itemii subiectivi sunt caracterizai prin:
abordare global a unei sarcini asociate unui obiectiv ce nu poate fi evaluat prin
intermediul itemilor obiectivi;
crearea unor situaii cognitive de nivel foarte ridicat prin solicitarea de a realiza
interaciuni reale i complexe ntre cunotine, abiliti i deprinderi;

124

Introducere n .Net Framework (Suport de curs)

raportarea subiectiv a profesorului n raport cu rspunsul formulat;


necesitatea predefinirii unor criterii privind baremul de corectare i notare, criterii clare, judicioase i puternic anticipative;
posibilitatea, n cazul n care baremul nu a prevzut toate situaiile de interpretare i construire a rspunsului, a unor elemente noi (rspunsuri neateptate)
care comport reanalizarea baremului.
n cazul informaticii i tehnologiei informaiei se pot elabora itemi subiectivi de tip
eseu (structurat sau liber) i itemi de tip problem (care necesit proiectare, redactare
i uneori implementare a rezolvrii).

c.1. Itemi de tip eseu


Itemii de tip eseu pot fi structurai sau liberi. Itemii structurai sunt construii astfel nct rspunsul ateptat s fie orientat cu ajutorul unor elemente din enun
(indicii privind ordinea de tratare, numrul de linii, formularea rspunsului, ideile
care trebuie s fie atinse etc.). Un eseu liber nu furnizeaz n enun nici un fel de indicaii sau constrngeri, elevul avnd libertatea s-i strucutreze cum consider i cum
poate materialul pe care-l solicit enunul. Acest tip de eseu comport operaii de
maxim complexitate (analiz, sintez, sistematizare i restructurare) lsnd fru
liber fanteziei i capacitilor creative ale elevului.
Deoarece la informatic elementele de creativitate se manifest mai ales prin
rezolvri de probleme i proiecte, iar n cazul tehnologiei informaiei prin teme practice i proiecte, itemii de tip eseu preferai sunt cei structurai, un eseu liber nefiind
necesar dect rar, pentru anumite teme cu un volum mai mare de elemente informative n raport cu achiziiile operaionale.
Se pot verifica prin intermediul itemilor de tip eseu:
cunotinele globale legate de stuctura sistemelor de calcul, sisteme de operare,
evoluia istoric a sitemelor hard i soft, principiile de utilizare a unei anumite
aplicaii, etapele conceptuale ale proiectrii unei aplicaii etc.
capacitile de sistematizare a unor elemente prin construirea unor scheme sau
reprezentri grafice.
Itemii de tip eseu se prezint sub forma unor cerine generale nsoite eventual (pentru eseurile structurate) de indicii privind tratarea cerinei. Se pot aduga restricii
privind ntinderea n timp sau spaiu (numr rnduri, pagini, paragrafe etc.) sau
privind forma de prezentare a rspunsului.
c.2. Itemi de tip problem
Rezolvarea unei probleme presupune soluionarea unei situaii conflictuale generat de neconcordane ivite ntre sistemul de achiziii i situaiile concrete descrise de
un enun. Aceste neconcordane sunt generate uneori de nepotrivirea ntre contextul
general al cunotinelor i situaiile particulare n care acestea trebuie s fie aplicate.
Alteori achiziiile sunt dobndite prin experimente (situaii particulare) i, pentru a fi
aplicate n cu totul alte situaii, acestea trebuie s fie ridicate la un nalt nivel de
abstractizare i generalizare.

CAPITOLUL 7. MiniGhid Metodologic

125

Rezolvarea de probleme este o activitate specific i des utilizat la disciplina


Informatic, elementele gndirii algoritmice, metodele de rezolvare i tehnicile de
implementare fiind supuse unui tir sistematic de probleme prin care acestea s
formeze competene reale de programare.
Capacitile cognitive superioare legate de aplicare creativ, gndire divergent,
descoperirea condiiilor interne, alegerea modelului adecvat etc. sunt verificate prin
itemi de acest tip. Obiectivele urmrite prin utilizarea rezolvrii de probleme sunt:
obinerea informaiilor necesare rezolvrii problemei;
formularea i testarea ipotezelor;
descrierea metodei de rezolvare a problemei;
elaborarea unui raport despre rezultatele obinute;
posibilitatea de generalizare i transfer a tehnicilor de rezolvare.

Cerine suplimentare asociate unei probleme pot pune n eviden capacitatea elevului de a estima eficiena unei rezolvri, de a construi un algoritm conform unor criterii (limita de memorie, numr de instruciuni etc.).
Se pot formula probleme n care se furnizeaz algoritmul i se cere un enun de
problem care se rezolv prin intermediul algoritmului respectiv. Acest tip de item
impune o analiz atent a algoritmului i asocierea lui cu una dintre problemele sau
prelucrrile numerice ntlnite la matematic, fizic sau n alte domenii, o formulare
a enunului care s se caracterizeze prin coeren.
Enunurile pot fi formulate abstract, la obiect sau pot crea un context care trebuie modelat pentru a se ajunge la rezolvarea propriu-zis. Povestea n spatele
creia se ascunde problema are de cele mai multe ori conotaii practice, descriind
situaii concrete de prelucrare, amintind c rolul programatorului este acela de a
ordona iniial informaia i operaiile specifice unui anumit context i abia dup
aceea de a elabora algoritmul, de a implementa i verifica programul corespunztor.
Aspecte de aceeai natur se ntlnesc i n domeniul utilizrii calculatorului, la
Tehnologia informaiei, cnd beneficiarul formuleaz un enun i utilizatorul trebuie
s-i aleag programul de aplicaie adecvat, din cadrul programului s-i aleag
obiectele i instrumentele potrivite, s proiecteze, pe pai, prelucrarea astfel nct
produsul (documentul, prezentarea, raportul etc.) s rspund cerinelor i s fie
realizat n timp record. Aspectele reale de concepie, de creativitate i gndire divergent intervin la realizarea machetelor, a prezentrilor etc.
Evaluarea prin rezolvare de probleme la informatic ridic uneori probleme din
punctul de vedere al ntocmirii baremului de corectare. Unele tendine exagerate tind
s impun o corectare pe principiul: problem=program funcional corect (pornind
de la premisa c un program care aproape merge e ca un avion care aproape
zboar). Se recomand totui ca baremul de corectare s cuprind fraciuni din
punctaj pentru diferitele aspecte pe care le comport rezolvarea unei probleme la
informatic: corectitudinea sintactic, structurarea datelor i declararea variabilelor,
structurarea programului, corectitudinea algoritmului, eficiena algoritmului, tratarea
unor situaii limit, eventual explicarea metodei aplicate (chiar daca a fost aplicat
greit) etc.

126

Introducere n .Net Framework (Suport de curs)

Se pot verifica prin intermediul itemilor de rezolvare de probleme:


concepia unor algoritmi de rezolvare a problemelor elementare;
asimilarea unui algoritm general prin adaptarea lui astfel nct s rezolve o problem particular;
capacitatea de a alege structurile de program i de date adecvate rezolvrii unei
probleme;
abilitatea de a implementa programul, de a-l depana, de a-l testa i, n funcie de
erorile aprute, de a reconsidera elementele de sintax ale programului, strategiile de structurare a datelor sau nsui algoritmul de rezolvare (n partea practic a probei);
capacitatea de a organiza volume mari de date cu ajutorul bazelor de date;
discernmntul n a alege un algoritm mai eficient (conform unuia dintre din criteriile studiate: numr operaii, spaiu de memorie utilizat)

III.4.2. Metode complementare de evaluare


Metodele complementare de evaluare reprezint instrumente suplimentare, nestandardizate, de evaluare dispunnd de forme specifice cum ar fi: investigaia, referatul,
portofoliul, proiectul, observarea sistematic a activitii elevului i autoevaluarea.
Metodele complementare realizeaz actul evalurii n strns legtur cu procesul
educativ, prin ntreptrundere cu etapele acestuia, urmrind n special capacitile
cognitive superioare, motivaiile i atitudinea elevului n demersul educaional.
Metodele alternative de evaluare se caracterizeaz prin urmtoarele:
capacitatea de a transforma relaia profesor-elev inducnd un climat de colaborare i parteneriat;
posibilitatea transformrii procesului de evaluare prin nlocuirea tendinei de a
corecta i sanciona prin aceea de a soluiona erorile semnalate;
posibilitatea de a deprinde elevul cu mecanismele de aurocorectare i autoeducare necesare i n procesul de integrare social;
utilizarea mai ampl a tehnicilor i mijloacelor didactice;
caracterul sumativ, realizat prin evaluarea cunotinelor, capacitilor i atitudinilor pe o periad mai lung de timp i dintr-o arie mai larg;
caracterul formativ, realizat prin valorificarea atitudinii elevului n raport cu propria sa evaluare;
capacitatea de a realiza o evaluare individualizat (observare sistematic);
capacitatea de a educa spiritul de echip prin activiti de grup (investigaii,
proiecte);
caracterul profund integrator realizat prin interdisciplinaritate, educare i instruire mutilateral.
1. Investigaia
Investigaia este o metod de evaluare i nvare utilizat foarte des la disciplina
Tehnologie informaiei i numai ocazional la disciplina Informatic.

CAPITOLUL 7. MiniGhid Metodologic

127

Organizarea unei activiti de evaluare i nvare prin metoda investigaiei presupune:


valorificarea metodei de nvare prin descoperire;
studiul unor documentaii complementare, experimentarea unor instrumente de
prelucrare nestandard, compararea i generalizarea unor tehnici i metode utilizate n tehnologie prin cercetarea altor izvoare sau prin utilizarea altor instrumente echivalente;
extrapolarea cunotinelor dobndite i verificarea ipotezelor formulate;
solicitarea unor cunotine sau deprinderi dobndite la alte dicipline prin
adaptarea creatoare a acestora la cerinele temei de investigaie.
n cele mai multe dintre cazuri investigaia trebuie s fie organizat ca munc independent depus de elev, dirijat i sprijinit de profesor. Tehnologia informaiei, cu
multitudinea de aplicaii software din domenii att de variate, este un teren ideal pentru desfurarea investigaiilor. Elevul cerceteaz posibilitile unei aplicaii (de
exemplu, aplicaia romneasc de tip agend MyCount difuzat pe Internet): citete
explicaiile asociate butoanelor, opiunile din meniuri, informaiile din Help, experimenteaz operaiile propuse de aplicaie imaginnd utilitatea practic a acestora i
formuleaz concluzii generale referitoare la acel soft (utilitate, spaiul ocupat pe disc
sau n memorie, spaiul ocupat de produsele construite cu ajutorul lui, calitatea
grafic i funcional a interfeei). Investigaii mai rafinate pot realiza elevii iniiai n
programare i n sisteme de operare care disting mult mai multe aspecte n spatele
produsului soft investigat (eficien, posibilitate de dezvoltare, configurare, conflicte
cu alte programe etc.).
Pentru organizarea activitilor de investigaie, profesorul va urmri:
formularea general a temei;
asigurarea surselor bibliografice sau tehnice necesare;
formularea unor indicaii care s direcioneze activitatea elevilor;
urmrirea activitii elevului n sensul utilizrii eficiente i creatoare a materialului de investigat;
sprijinirea elevilor sau grupurilor de elevi care ntmpin dificulti n
nelegerea temei sau a metodelor specifice de studiu;
ncurajarea i evidenierea activitilor creatoare desfurate de elevi, a
descoperirilor neateptate.
2. Referatul i proiectul
Referatul reprezint o form de mbinare a studiului individual cu activitate de
prezentare i argumentare. Tema referatului, nsoit de bibliografie i alte surse de
documentare (Internet, vizite etc.), este tratat n mod independent de ctre elev i
susinut apoi n faa colegilor sau altui auditoriu mai larg. Varietatea universului
informatic (a limbajelor i tehnicilor de programare, a aplicaiilor din domeniul TIC, a
noutilor hardware etc.) justific utilizarea acestei forme de studiu i evaluare la
clas, att la Tehnologia informaiei ct i la Informatic. Dac studiul aferent i rezultatul studiului prezint interes i din punct de vedre practic, rezultatul fiind un program (o aplicaie) sau un produs TI complex (rezultatul aplicrii creatoare a instru-

128

Introducere n .Net Framework (Suport de curs)

mentelor informatice), dac bibliografia propus este mai bogat i etapele de


proiectare (concepie), implementare i testare necesit un timp mai ndelungat,
lucrarea poart numele de proiect.
Organizarea unei activiti de evaluare i nvare prin intermediul referatelor i
proiectelor presupune:
valorificarea metodei de nvare prin descoperire;
studiul unor materiale suplimentare i izvoare de informare diverse n scopul
mbogirii i activizrii cunotinelor din domeniul studiat sau domenii conexe,
prin completri de coninut ale programei sau prin aducerea n atenie a unei
problematici complet noi;
structurarea informaiei corespunztoare unui referat ntr-un material ce poate fi
scris, ilustrat sau prezentat pe calculator; activitile de concepere, organizare,
experimentare, reproiectare (dac este cazul), dezvoltare i elaborare a documentaiei aferente necesit planificarea unor etape de elaborare i o strategie de
lucru, n cazul proiectului;
prezentarea referatului sau proiectului de ctre elevul sau elevii care l-au elaborat, acesta (sau un reprezentant al grupului) trebuind s-l susin, s fie capabil
s dea explicaii suplimentare, s rspund la ntrebri etc.
Referatul este de regul o lucrarea de mai mic amploare, dar mai structurat i
mai bogat n informaii dect o tem de munc independent aferent leciei
curente. Proiectul este o lucrare mai ampl a crei tem este comunicat sau aleas
din timp, elaborarea unui proiect putnd s dureze de la 1-2 sptmni pn la 2-3
luni sau chiar un semestru. Proiectul poate fi elaborat n grup, cu o distribuire judicioas a sarcinilor ntre membrii grupului.
Referatul poate fi utilizat la Informatic i n egal msur la Tehnologia informaiei temele referatelor viznd cel mai des domenii de actualitate n producia
sofware sau n domeniul TIC.
Pentru a realiza o evaluare pe baz de referate, profesorul:
va formula teme clare, de complexitate medie, preciznd pe ct posibil
amploarea lucrrii (cte pagini, durata maxim necesar prezentrii etc.)
va recomanda sau asigura sursele bibliografice i de informare necesare;
i va rezerva suficient timp (n perioada de evaluare sau la sfritul unor uniti
de nvare) pentru ca elevii nsrcinai cu elaborarea referatelor s-i poat
prezenta referatul;
va supraveghea discuiile purtate cu elevii asupra coninutului referatului.
Pentru a realiza o evaluare pe baz de proiecte, profesorul:
va formula teme practice, de complexitate sporit, lsnd celor care elaboreaz
proiectul mult libertate n a improviza, adapta i interpreta cerina ntr-un mod
personal;
va stabili un termen final i, n funcie de modul de evaluare, termene intermediare de raportare;

CAPITOLUL 7. MiniGhid Metodologic

129

va recomanda sau asigura sursele bibliografice i de informare necesare;


i va rezerva suficient timp (n perioada de evaluare sau la sfritul unor uniti
de nvare) pentru ca elevii nsrcinai cu elaborarea proiectelor s-i poat
prezenta rezultatul proiectrii;
va supraveghea discuiile purtate cu elevii asupra proiectului.
3. Portofoliul
Portofoliul reprezint o metod complex de evaluare n care un rezultat al evalurii este elaborat pe baza aplicrii unui ansamblu variat de probe i instrumente de
evaluare.
Prin multitudinea de forme i momente n care se desfoar testarea elevului,
rezultatul final converge ctre valoarea real a acestuia, sesiznd elementele de
progres sau regres, ilustrnd preocuparea pentru lmurirea neclaritilor, oferind o
imagine de ansamblu asupra nivelului cunotinelor, gradului de formare a abilitilor i gradului de raportare atitudinal pe care acesta o are fa de tema evaluat. Portofoliul este realizat pe o periad mai ndelungat, de la un semestru, un an,
pn la un ciclu de nvmnt.
Coninutul unui portofoliu este reprezentat de rezultatele la: lucrri scrise sau practice, teme pentru acas, investigaii, referate i proiecte, observarea sistematic la
clas, autoevaluarea elevului, chestionare de atitudini etc. La Tehnologia informaiei
portofoliul se poate constitui dintr-o colecie de lucrri practice realizate pe calculator, fiecare viznd anumite aspecte de utilizare.
Alegerea elementelor ce formeaz portofoliul este realizat de ctre profesor (astfel
nct acestea s ofere informaii concludente privind pregtirea, evoluia, atitudinea
elevului) sau chiar de ctre elev (pe considerente de performan, preferine etc.)
Structurarea evalurii sub forma de portofoliu se dovedete deosebit de util, att
pentru profesor, ct i pentru elev sau prinii acestuia.
Pentru a realiza o evaluare pe baz de potofoliu, profesorul:
va comunica elevilor intenia de a realiza un portofoliu, adaptnd instrumentele
de evaluare ce constituie centrul de greutate ale portofoliului la specificul disciplinei;
va alege componentele ce formeaz portofoliul, dnd i elevului posibilitatea de
a aduga piese pe care le consider relevante pentru activitatea sa;
va evalua separat fiecare pies a portofoliului n momentul realizrii ei, dar va
asigura i un sistem de criterii pe baza crora s realizeze evaluarea global i
final a portofoliului;
va pune n eviden evoluia elevului, particularitile de exprimare i de
raportare a acestuia la aria vizat;
va integra rezultatul evalurii portofoliului n sistemul general de notare.
4. Observarea sistematic a activitii i comportamentului elevilor
Fia de observare a activitii i comportamentului elevului nregistreaz informaii legate de particularitile personalitii elevului manifestate n procesul didac-

130

Introducere n .Net Framework (Suport de curs)

tic, de achiziiile evaluate spontan (rspunsuri sporadice, atitudini semnificative etc.),


de progresul nregistrat de acesta. Profesorul construiete aceast fi n vederea
individualizrii procesului sumativ de evaluare, dar i a celui de nvare.
Pe baza fiei de evaluare se poate realiza i orientarea colar i profesional a elevului. Informaiile din fia personal au caracter parial secret, parte dintre ele fiind
comunicate elevului i prinilor acestuia.
Un model orientativ de fi de observare conine:
Date generale despre elev (nume, prenume, vrst, climat educativ, condiii
materiale, particulariti socio-comportamentale);
Particulariti ale proceselor intelectuale (gndire, limbaj, imaginaie, memorie,
atenie, spirit de observaie etc.);
Aptitudini i interese manifestate;
Particulariti afectiv-motivaionale;
Trsturi de temperament;
Atitudini i relaionare (cu sine nsui, cu materia studiat, cu colegii)
Consideraii privind evoluia aptitudinilor, atitudinilor, intereselor i nivelului de
integrare.
Prin stabilirea copmpetenelor generale ale disciplinei i achiziiile cognitive i comportamentale vizate de aceasta, fia de observare poate s conin i considerente
legate de atingerea i formarea competenelor specifice. Completarea fiei se realizeaz n timp ntr-un ritm adecvat specificului activitilor de la disciplina, din anul i
de la clasa respectiv, dar i n funcie de implicarea i de ritmul individual al elevului.

IV. Proiectul unitii de nvare - Proiectul de lecie?


Fa de proiectarea tradiional centrat pe lecie (ora de curs) - proiectarea unitii
de nvare are urmatoarele avantaje:
creeaz un mediu de nvare coerent n care ateptrile elevilor devin clare pe
termen mediu i lung;
implic elevii n ,,proiecte de nvatare personale pe termen mediu si lung rezolvare de probleme complexe, luare de decizii complexe, cu accent pe explorare i reflecie;
implic profesorul ntr-un ,,proiect didactic pe termen mediu i lung, cu accent
pe ritmurile de nvare proprii ale elevilor;
d perspectiva leciilor, conferind acestora o structur specific, n funcie de
secvena unitii de nvare n care se afl.
Proiectul de lecie - conceput ca document separat - este recunoscut ca o formalitate consumatoare de timp i energie. Proiectul unei uniti de nvare conine suficiente elemente pentru a oferi o imagine asupra fiecrei ore. Ca urmare, n tabelul
care sintetizeaza proiectarea unitatii de nvare se pot delimita prin linii orizontale
(punctate) spaiile corespunzatoare unei ore de curs. Astfel, pentru fiecare lecie,
proiectul unitii de nvare ofer date referitoare la elementele de coninut i com-

CAPITOLUL 7. MiniGhid Metodologic

131

petenele vizate, la care se raporteaz anumite activiti de nvare; totodat, sunt


indicate resurse materiale, forme de organizare a clasei etc., pentru fiecare activitate
precum i instrumente de evaluare necesare la nivelul leciei (orei). In consecin,
dac proiectul unitii de nvare este bine construit, nu mai este necesar detalierea
la nivelul proiectului de lecie.
Lecia este neleas ca o component operaional (Cum?) pe termen scurt a
unitii de nvare. Dac unitatea de nvare ofer ntelegerea procesului din perspectiv strategic, lecia ofer nelegerea procesului din perspectiva operativ, tactic. Proiectul unitii de nvare trebuie s ofere o derivare simpl a leciilor componente. Ca urmare, trecerea de la unitatea de nvare - o entitate supraordonat - la o
lecie component trebuie s permit o ,,replicare n acelai timp functional (De
ce?), structural (Cu ce?) i operaional (Cum?) a unitaii de nvare, la o scar temporal mai mic i ntr-un mod subordonat.
Acest mod de tratare orientat ctre scopuri precise caracterizeaz organizarea
att a unitii de nvare ct i a leciei.

V. Curriculum la decizia colii CD


CD ul cuprinde orele alocate pentru dezvoltarea ofertei curriculare proprii
fiecrei uniti de nvmnt.
Planurile - cadru de nvmnt pentru ciclul superior al liceului, filierele teoretic
i vocaional, prevd la toate profilurile i specializrile, un numr minim i un
numr maxim de ore pe sptmn pentru CD.
Schemele orare ale tuturor claselor vor cuprinde, n mod obligatoriu, la toate profilurile i specializrile, cel puin numrul minim de ore pe sptmn prevzut pentru CD n planul-cadru.
Tipuri de CD n nvmntul liceal
Reglementrile n vigoare menioneaz urmtoarele tipuri de opionale:
1 de aprofundare
2 de extindere
3 ca disciplin nou
4 integrat - la nivelul uneia sau mai multor arii curriculare
5 ca disciplin care apare n trunchiul comun la alte specializri
1 Opionalul de aprofundare este derivat dintr-o disciplin studiat n trunchiul
comun, care urmrete aprofundarea competenelor din curriculumul nucleu
prin noi uniti de coninut.
2 Opionalul de extindere este derivat dintr-o disciplin studiat n trunchiul
comun, care urmrete extinderea competenelor generale din curriculumul
nucleu prin noi competene specifice i noi coninuturi.
3 Opionalul ca disciplin nou introduce noi obiecte de studiu, n afara celor prevzute n trunchiul comun la un anumit profil i specializare, sau teme noi care
nu se regsesc n programele naionale.
4 Opionalul integrat introduce noi discipline structurate n jurul unei teme integratoare pentru o arie curricular sau pentru mai multe arii curriculare

132

Introducere n .Net Framework (Suport de curs)

5 Opionalul ca disciplin care apare n trunchiul comun la alte specialzri dis-

pune de o program deja elaborat la nivel central, ca program obligatorie n


cadrul unei anumite specialzri.
Structura programei de opional este aproximativ aceeai cu cea a programelor de
trunchi comun elaborate la nivel naional. n plus apare un Argument care motiveaz
cursul propus, nevoile elevilor, ale comunitii locale, formarea unor competene de
transfer.

A. Argument
B. Competene specifice

C. Coninuturi

1.
2.
3.
.
D. Valori i atitudini
E. Sugestii metodologice

Tabel sintetic care asociaz tipurilor de opional caracteristici obligatorii ale programei i modalitatea de notare n catalog

Tip de opional
Opionalul de aprofundare

Opionalul de extindere

Caracteristici ale programei

Notare n catalog

Aceleai competene
Noi coninuturi
Noi competene specifice corelate cu

Aceeai rubric n catalog cu


disciplina surs

cele din programa de trunchi comun

Noi coninuturi corelate cu cele din

Aceeai rubric n catalog

programa de trunchi comun

Noi competene specifice diferite de


Opionalul ca disciplin nou

cele din programa de trunchi comun

Noi coninuturi diferite de cele din pro-

Rubric nou n catalog

grama de trunchi comun


Opionalul integrat

Noi competene specifice complexe


Noi coninuturi interdisciplinare

Rubric nou n catalog

Modulele din programa de clasa a XII-a, specializarea matematic informatic


pot constitui baz pentru proiectarea unui opional ca disciplin nou, opional integrat sau Opional ca disciplin care apare n trunchiul comun la alte specializri, pentru alte specializri din filiera teoretic sau vocaional.

CAPITOLUL 7. MiniGhid Metodologic

133

VI.1. Anexa 1
a) Planificare calendaristic
Liceul...........................
Disciplina INFORMATIC

Profesor: ...........................................
Clasa a XII-a , 3 ore/spt

Planificare calendaristic
Anul colar 2007-2008

Nr.
Crt.

Uniti de
nvare

Competene
Coninuturi
specifice

Nr.
Ore

Sptmna Observaii

12

S1-S3

21

S4-S10

21

S11-S17

18

S18-S23

30

S24-S33

Limbajul

Limbajul C#

1.3, 1.4, 3.1,


3.2

C# (structura unui proiect, declarri de date, citiri/scrieri folosind dispozitive


strandard, instruciuni, structuri de control,
structuri de date)
Interfaa Visual Studio .Net, C# (meniuri,
bare de instrumente, etapele realizrii unei
aplicaii consol, tehnici de depanare i
autodocumentare)
Programare procedural (subprograme,
tehnici de transfer al parametrilor)

Principiile programrii orientate pe obiecte


Clase (structura clasei: date, metode i pro2

Programare
Orientat pe
Obiecte

prieti, constructori, destructor)


(instaniere, specificatori de acces,
membri statici ai unei clase)
Derivare (motenire, definire i redefinire de
metode, clase i metode abstracte, clase i
metode sigilate, polimorfism)
Ierarhii de clase predefinite (using)
Aplicaii consol cu clase

Obiecte
1.1, 1.2, 1.3,
1.4, 3.1

Elemente

Programare
vizual

1.1, 2.1, 2,2,


3.1,3.2

de baz ale programrii vizuale


(clase predefinite, interfa, evenimente,
excepii)
Ferestre (crearea i particularizarea formularelor)
Controale Standard, Container i Components (proprieti, evenimente specifice,
metode asociate evenimentelor, Sender)
Obiecte de tip dialog i obiecte grafice
Tratarea excepiilor (ierarhia claselor de
erori, try-catch-finally-throw)
Construirea unei aplicaii vizuale (proiect,
spaiu de nume, bare de instrumente, moduri de vizualizare i instrumente de depanare)

Structuri de date nlnuite (liste, stive, cozi,


clase generice; foreach)

Structuri de
date
n mediu
vizual

Baze de date (conexiuni, tabele, relaii, con1.1, 1.2, 1.3,


1.4, 3.1, 3.2

troale de tip DataSet, DataGridView,


TableAdapter)
Operaii cu baze de date (comenzi SQL,
generarea i executarea comenzilor)
Construirea unei aplicaii cu liste i tabele

Ciclul
5

Dezvoltarea
i
2.1, 2.2, 2.3,
prezentarea
3.1, 3.2, 3.3
unei aplicaii
vizuale

de via al unui produs software


(alegerea temei, definirea cerinelor utilizator, modelarea soluiei, implementarea i
testarea produsului)
Modele arhitecturale
Realizarea i documentarea proiectului
Prezentarea proiectului

134

s1

b) Proiectarea unitii de nvare


Liceul .................................
INFORMATIC

Sptmnile S1-S3,
Clasa a XII-a , 3 ore/sptmn

Proiectul unitii de nvare


An colar 2007-2008
Unitatea 1. Limbajul C# (12 ore)
Nr.
Coninuturi
Crt.

C.S. Activiti de nvare

Resurse

Evaluare

Observaii

Familiarizare/repetare

Limbajul C#
- structura unui proiect
- declarri de dat
- citiri/scrieri folosind dispozitive strandard
- instruciuni i structuri
de control
- structuri de date

sintax C

Program C# pentru o prelu2.1


2.2
1.4

crare simpl (simplificare


fracie, termeni Fibonacci din
interval, cifra de control etc.)
Realizare aplicaie consol
corespunztoare
Tipuri de date noi n C#.
iruri de caractere

Conversaia,
modelarea,
exerciiul
Observare
Act.frontal sistematic
3 ore

Discutarea structurii unui

Interfaa Visual Studio .Net


(C#)
- meniuri i bare de
instrumente
3.1
- etapele realizrii unei
aplicaii consol
- tehnici de depanare i
autodocumentare

proiect simplu i enumerarea etapelor de realizare


a acestuia
Exersarea principalelor
opiuni din meniuri, butoane
i shorcut-uri pentru
realizarea unei aplicaii
consol
Program de prelucrare
stringuri (inversare numeprenume, criptri sau codificri etc.)
Aplicaie consol cu tablouri
(ordonare, diagonale matrice
etc.)

Definire funcie (prim, palin3

Programare procedural
- subprograme
- tehnici de transfer al
parametrilor

2.1

drom etc.) i subprogram


procedural (transformare,
citire, afiare matrice,
ordonare vector etc.)
Aplicaie consol care apeleaz funcia i procedura
definite

Realizarea unei aplicaii-joc


4

Realizarea unor aplicaii


consol cu algoritmi
elementari, structuri de
date i subprograme

3.1
3.2

simple (centrate i necentrate, X i O, corbii etc.)


Discutarea algoritmilor de
prelucrare, implementarea i
testarea subprogramelor,
implementarea aplicaiei
consol

Exerciiul,
demonstrarea Act.
frontal i
individual
Fia de
activ.
Practic

Observare
sistematic
Investigaie

3 ore

Exerciiul
Act.frontal
i
individual
Test
evaluare

Fia de
evaluare
1.1

3 ore
Conversaia,
exerciiul
Act.frontal Fia de
i
evaluare
individual
1.2
3 ore

se prefer
algoritmi
din
tematica de
atestat i
bacalaureat

CAPITOLUL 7. MiniGhid Metodologic

135

c) Instrumente de evaluare
FIA DE EVALUARE 1.1
Nr.1
1. (1p.) Care dintre urmtoarele variante reprezint antetul corect al unui subprogram cif1
care primete o valoare real prin intermediul parametrului r i returneaz prin intermediul parametrului z numrul de cifre aflate la partea ntreag a lui r (de exemplu
pentru r=5.12703, z va returna valoarea 1, iar pentru r=126, z va returna valoarea 3)
a) static void cif1(ref float r,int z)
b) static void cif1(float r, ref int z)
c) int void cif1(float r)
d) static float cif1(int z)
2. (1p.) Se tie c sunt declarate o variabil x i ea reine o valoare real oarecare i o variabila ntreag k i ea reine valoarea 0. Care dintre urmtoarele variante reprezint un
apel corect al subprogramului cif1 de la cerina 1?
a) cif1(x,k)
b) k=cif1(x,0)
c) cif1(x,ref k)
d) cif1(ref x, k)
3. (4p.) Scriei secvena de program ce realizeaz prelucrarea cerut la 1. Valoarea variabilei
reale x este considerat cunoscut, iar valoarea calculat a lui z nu se va afia.
4. (3p.) Considernd implementat subprogramul cif1, scriei un program care citete de la
tastatur o valoare real i, folosind apeluri ale subprogramului cif1, verific dac
aceast valoare are mai multe cifre la partea ntreag dect la cea zecimal. Se va
afia unul dintre mesajele DA sau NU.

136

ANEXA 1

FIA DE EVALUARE 1.1


Nr.2
1. (1p.) Care dintre urmtoarele variante reprezint antetul corect al unui subprogram cif2
care are un singur parametru r prin intermediul cruia primete o valoare real cif2
va returna numrul de cifre aflate la partea zecimal semnificativ a lui r (de exemplu
pentru r=5.120700, subprogramul va returna valoarea 4, iar pentru r=126, va returna valoarea 0)
a) static void cif2(ref float r,int z)
b) static void cif2(float r, ref int z)
c) static int cif2(float r)
d) static float cif2(ref float r)
2. (1p.) Se tie c sunt declarate o variabil x i ea reine o valoare real oarecare i o variabil ntreag k i ea reine valoarea 0. Care dintre urmtoarele variante reprezint un
apel corect al subprogramului cif2 de la cerina 1?
a) cif2(x,k)
b) k=cif2(x)
c) cif2(x,ref k)
d) k=cif2(x,ref k)
3. (3p.) Scriei secvena de program ce realizeaz prelucrarea cerut la 1. Valoarea variabilei
reale x este considerat cunoscut, iar valoarea determinat se va afia.
4. (3p.) Considernd implementat subprogramul cif2, scriei un program care citete de la
tastatur o valoare real i, folosind apeluri ale subprogramului cif2, verific dac
aceast valoare are mai multe cifre la partea ntreag dect la cea zecimal. Se va
afia unul dintre mesajele DA sau NU.

CAPITOLUL 7. MiniGhid Metodologic

137

VI.2. Anexa 2
a) Planificare calendaristica
Unitatea colar.
Disciplina INFORMATIC

Profesor..
Clasa/Nr.Ore/spt 3 ore/spt

Planificarea calendaristic
Anul colar 2007-2008
MODUL Programare orientat pe obiecte i programare vizual
(1 or teorie + 2 ore activitai practice sau 3 ore activiti practice)
Nr. Uniti de
crt. nvare

1.

2.

PROGRAMAREA
ORIENTAT PE
OBIECTE

Competene specifice
C1 Insuirea conceptelor
de abstractizare a
datelor
C2 Folosirea terminologiei specifice POO n
contexte variate de
aplicare
C3 Organizarea datelor
ce intervin n
rezolvarea unei probleme utiliznd
structuri de date
adecvate
C4 Utilizarea facilitilor
oferite de POO
C5 Elaborarea i
realizarea unei aplicaii, folosind un
mediu de programare specific

C6 Exprimarea i
redactarea coerent
n limbaj formal sau
n limbaj cotidian, a
rezolvrii sau a
strategiilor de
rezolvare a unei
probleme
C7 Analiza de situaiiproblem n scopul
descoperirii de
strategii pentru optimizarea soluiilor
C8 Generalizarea unor
proprieti prin moPROGRAMAREA
dificarea contextului
VIZUAL
iniial de definire a
problemei sau prin
generalizarea algoritmilor
C9 ntelegerea principiilor
de proiectare a interfetelor C10) Utilizarea
instrumentelor de
dezvoltare a unei aplicaii C11) Elaborarea
i realizarea unei aplicaii, folosind un
mediu de programare
specific C12)
Prezentarea unei aplicaii

Coninuturi

Nr.
Sptmn Observatii
ore

1.1 Principiile programrii


orientate pe obiecte

S1

1.2 Structura unei aplicaii


orientat pe obiecte

12

S2-S5

1.3 Clase i obiecte

33

S6-S16

1.4 Derivarea claselor

S17-S18

1.5 Tratarea erorilor

S19

1.6 Polimorfism

S20

1.7 Recapitulare

S21

2.1 Concepte de baz ale


programrii vizuale

S22

2.2 Prezentarea unui


mediu de programare
vizual (Microsoft Visual
C#, Delphi, Microsoft
Visual Basic etc.).

S23

2.3 Elementele POO n


context vizual

S24

2.4 Construirea interfeei


utilizator

15

S25-S29

2.5 Accesarea i prelucrarea datelor

12

S30-S33

2.6 Dezvoltarea i
prezentarea unei aplicaii n mediu vizual

S34-S35

138

ANEXA 2

b) Proiectul unitii de nvare


Unitatea colar.
Disciplina INFORMATIC
Profesor.......

Sptmna/ Anul...
Clasa/Nr. Ore /spt 3ore/spt.

Proiectul unitatii de invatare


Unitatea de nvare PROGRAMAREA ORIENTAT PE OBIECTE
Nr. Ore alocate: 63
Nr.
Coninuturi
Crt

1.

Principiile
programrii
orientate pe
obiecte

Evaluare
Tip/
instrument

Resurse
C.S. Activiti de nvare

C1

- pentru a ilustra principiile programrii orientat


pe obiecte i modul de
structurare a unei aplicaii POO se va prezenta
i analiza o aplicaie
gata implementat; se
va realiza o analiz
comparativ ntre abordarea POO n raport cu
abordarea specific programrii structurate;

Temporale Forme de
(ore)
organizare

Materiale

Iniial/
Studiu de
caz
Anexa 1
Jurnal
Reflexiv
Anexa 2

Frontal

Structura unei aplicaii orientat pe obiecte

2.

2.1 Arhitectura
platformei
Microsoft
.NET, componente ale lui
.NET
Framework,
trsturi ale
platformei
.NET
2.2 Structura general a unei
aplicaii C#
2.3 Tipuri de date
(predefinite,val
oare, enumerare)

C1
C2
C4

2.4 Tablouri
Tablouri unidimensionale,
Tablouri multidimensionale

C2
C4
C5

2.5 String-uri

C2
C4
C5

- analiza arhitecturii platformei .NET


- formularea trsturilor
platformei .NET
- identificarea caracteristicilor fiecrei componente
ale platformei .NET
- exerciii de descriere a
metodei de rezolvare a
unei probleme din perspectiva structurrii
datelor;
- exerciii de utilizare a
seleciei, iteraiei i saltului
- exerciii de identificare a
tipurilor de date necesare
n aplicaii
- formularea unor probleme
simple; discuii preliminare i analiza problemei;
- formularea i rezolvarea
unor probleme care
necesit utilizarea datelor
structurate

Formativ/
Individual
R.A.I.
Frontal
Anexa 3
Anexa 4
Pe grupe
Anexa 5

Individual
Anexa 6 Formativ/
Frontal
Anexa 7 Exerciiul
Pe grupe

Individual
Formativ/
Frontal
Anexa 8
Exerciiul
Pe grupe

Observaii

CAPITOLUL 7. MiniGhid Metodologic

139

Evaluare Tip/
instrument

Resurse
Nr.
Coninuturi
Crt

C.S. Activiti de nvare

TempoForme de
rale
organizare
(ore)

Materiale

Anexa 9

Clase i obiecte

3.

3.1.Definirea
claselor i a
obiectelor
3.2.Utilizarea
claselor i a
obiectelor

C2
C4

3.3.Specificatori de
acces la membrii
unei clase

C2
C5

3.4.Funcii.
Transmiterea
parametrilor
3.5.Crearea
obiectelor;
Constructori

C2
C5

3.6.Distrugerea
obiectelor
Destructori

C2
C4
C5

3.7.Operatori
3.8.Delegai

C2
C3
C4

C2
C4

C2
C3
C3
C4

Frontal

Anexa
Frontal
Anexa
Individual
Anexa
Frontal
Individual Anexa
Pe grupe

Iniial/
Exerciiul

10 Formativ/
11 Exerciiul T
12 3-2-1
13

Formativ/
Exerciii

Frontal
Formativ/
Anexa 14
Individual
R.A.I.

Frontal
Formativ
Anexa 15
Individual
Exerciiul

Frontal
Formativ/
Individual Anexa 16
Exerciiul
Pe grupe

3
3

Frontal
Formativ
Anexa 17
Individual
Exerciiul
Frontal
Formativ
Anexa 18
Individual
Exerciii

Frontal
Formativ/
Anexa 19
Individual
Studiu de caz

C2
C3
C4
C5

- se va analiza un exemplu de ierarhie de clase


gata implementat,
pentru a nelege
mecanismele care
guverneaz derivarea
claselor;

Formativ
Frontal
T 3-2-1
Individual Anexa 21 Studiu de
Pe grupe
caz
Exerciiul

Ce este o eroare
Cum se genereaz
Tratarea/propagarea
erorilor
Ierarhia claselor de erori

C2
C3
C4
C5

- discuii privind validitatea datelor;


- testarea i analizarea
comportamentului aplicaiilor pentru diferite
date de intrare;

Formativ/
Frontal
Anexa 22 Exerciii
Individual
R.A.I.

Polimorfism

C2
C3
C4
C5

Frontal
Formativ/
Anexa 23
Individual
T 3-2-1

Frontal
Individual
Pe grupe

3.9.Evenimente

C2
C5

- pentru ca elevii s neleag diferenele specifice abordrii POO, se


va alege una dintre aplicaiile familiare elevilor
(de exemplu: numere
complexe, numere
raionale, polinoame,
liste, etc.), care va fi
analizat din perspectiva POO, apoi se vor
implementa clasele
necesare i se va realiza
o aplicaie n care vor fi
utilizate clasele create;
exerciii de utilizare a
conversiilor -exerciii
care implic boxing i
unboxing -exerciii de
definire i apelare a
metodelor -exerciii de
utilzare a delegrilor

Derivarea claselor

Definirea noiunii de
motenire simpl i
motenire multipl
Declararea unei clase
derivate
Drepturi de acces n
clase derivate
Constructori i destructor n clase derivate

Tratarea erorilor
5

Funcii virtuale Clase


abstracte i funcii
virtuale pure

Recapitulare

C1
C2
C3
C4
C5

- fiecare elev va alege o


problem concret, va
defini clasele/ierarhiile
de clase necesare i va
crea o aplicaie n care
s fie utilizate
clasele/ierarhiile de
clase create; n acest
scop se poate folosi un
mediu vizual; elevii vor
prezenta colegilor aplicaiile create; profesorul
va stimula discuiile critice i creative pe marginea aplicaiilor elaborate de elevi;

Sumativ/
Proiect

Observaii

140

ANEXA 3

VI.3. Anexa 3
a) Planificare calendaristic
PROGRAMARE WEB
Unitatea colar.
Disciplina INFORMATIC

Profesor..
Clasa/Nr.Ore/spt 3 ore/spt

Planificarea calendaristic
Anul colar 2007-2008

Nr.
Uniti de nvare
Crt.
Principii generale
ale proiectrii interfeelor Web

Competene specifice
1.1

1.1

Analizarea unei probleme n


scopul identificrii i clasificrii resurselor necesare
Analizarea unei probleme n
scopul identificrii i clasificrii resurselor necesare

Identificare tehnicilor de
programare adecvate
rezolvrii unei probleme i
aplicarea creativ a acestora
3.28 Utilizarea foilor de stil, a
principiilor de baz ale
structurii unei foi de stil
3.29 Folosirea comenzilor
asociate foilor de stil CSS,
ale stilurilor CSS n
paginile HTML

Nr.
Ore

Spt.

2h

2h

1-2

7h

2-4

4. Foi de stiluri (CSS)

6h

4-6

5. Evaluare sumativ

1h

1h

2. Server Web - IIS

1h

4. Prezentarea limbajului de

13h
15h

7-11
12-16

3h

17

3h

18

18h

19-24

33 h

25-35

Coninuturi
1. Etapele procesului de dezvoltare

a unei aplicaii Web


2. Aspecte generale ale proiectrii

interfeelor Web

2.1
1.

3.1

2.

Utilizarea instrumentelor de
dezvoltare a unei aplicaii

3.1

Utilizarea instrumentelor de
dezvoltare a unei aplicaii

3.1

Utilizarea instrumentelor de
dezvoltare a unei aplicaii

Mediul de lucru

3. Realizare interfeelor Web

utiliznd HTML

1. Modelul client - server,

protocoale de comunicaii

scripting - ASP
5. Evaluare sumativ

3.24 Operarea cu baze de date


3.25 Utilizarea informaiilor
dintr-o baz de date
3.26 Aplicarea operaiilor elementare pe o baz de date
3.

Interaiunea cu baze
de date Web

TOTAL

Utilizarea instrumentelor de
dezvoltare a unei aplicaii
3.22 Elaborarea i realizarea unei
aplicaii folosind un mediu
de programare specific
2.3 Analiza comparativ a eficienei diferitelor tehnici de
rezolvare a problemei
respective i alegerea celei
mai eficiente variante

1. Definirea i gestionarea unei

baze de date

2. Lucrul cu baze de date

3.1

3. Proiectarea i realizarea unei

aplicaii Web

105h

BIBLIOGRAFIE
Marshall Donis, Programming Microsoft Visual C# 2005: The Language, Microsoft Press 2006,

ISBN:0735621810
Pelland Patrice, Build a Program NOW, Microsoft Visual C# 2005 Express Edition, Microsoft Press

2006,
LearnVisualStudio.NET http://www.learnvisualstudio.net resurse educaionale gratuite sub forma de

filme
Harris Andy, Microsoft C# Programming for the Absolute Beginner, Premier Press 2002,

ISBN: 1?931841?16?0
Wright Peter, Beginning Visual C# 2005 Express Edition: From Novice to Professional, Apress 2006,

ISBN-13 (pbk): 978-1-59059-549-7, ISBN-10 (pbk): 1-59059-549-1


Liberty Jesse, Programming C#, Second Edition, O'REILLY 2002, ISBN 10: 0-596-00309-9,

ISBN 13:9780596003098
Solis Daniel, Illustrated C# 2005, Apress 2006, ISBN-13 (pbk): 978-1-59059-723-1,

ISBN-10 (pbk): 1-59059-723-0


Rasheed Faraz, C# School, Synchron Data 2005-2006,

http://www.programmersheaven.com/2/CSharpBook
Schneider Robert, Microsoft SQL Server 2005 Express Edition For Dummies, Wiley Publishing

2006, ISBN-13: 978-0-7645-9927-9, ISBN-10: 0-7645-9927-5


Bradley L. Jones, Sams Teach Yourself the C# Language in 21 Days, SAMS, 2004,

International Standard Book Number: 0-672-32546-2


Michel de Camplain, Brian G. Patrik, C# 2.0: Practical Guide for Programmers, Elsevier, 2005,

ISBN: 0-12-167451-7
Christian Nagel, Bill Evjen, Jay Glynn, Karli Watson, Morgan Skinner, Allen Jones,

Professional C# 2005, Wiley Publishing, Inc., 2006, ISBN-13: 978-0-7645-7534-1


ISBN-10: 0-7645-7534-1
Sharp John, Visual C# 2005, DUNOD 2006
Iulian Serban, Dragos Brezoi, Tiberiu Radu, Adam Ward, GDI+ Custom Controls with Visual C#
2005, PACKT Publishing 2006, ISBN 1-904811-60-4
Simpson Alan, Visual Web Developer Server 2005 Express Edition For Dummies, Wiley
Publishing 2006, ISBN-13: 978-0-7645-8360-5, ISBN-10: 0-7645-8360-3
Hoffman Kevin, Microsoft Visual C# 2005 Unleashed, Sams 2006,
ISBN-10: 0-672-32776-7, ISBN-13: 978-0-672-32776-6
Popovici, Dorin Mircea i colaboratorii - Proiectare i implementare software,
Editura TEORA, Bucureti, 1998
C# Language Specification, Microsoft Corporation, 1999-2003
C# Version 2.0 Specification May 2004, Microsoft Corporation, 1999-2005
David Conger, Programarea n C#, editura B.I.C. ALL 2003
Chris H. Pappas, William H. Murray C# pentru programarea Web, editura B.I.C. ALL 2004
MCAD/MCSD -Developing XML WEB SERVICES and SERVER COMPONENTS WITH MICROSOFT
http://www.csharp-station.com
http://msdn2.microsoft.com
M.E.C. Serviciul Naional de Evaluare i Examinare - Ghid de evaluare,
INFORMATICA i TEHNOLOGIA INFORMATIEI, Editura Aramis, Bucureti 2001
M.E.C. Consiliul Naional pentru Curriculum - Ghid metodologic pentru aplicarea programelor
colare, Editura Aramis, Bucureti 2002
M.E.C Consiliul Naional pentru curriculum - Ghid metodologic pentru Educaie Tehnologic
Informatic - Tehnologia Informaiei - Liceu teoretic - Editura Aramis, Bucureti 2001

Autori, n ordine alfabetic:


Adrian Ni

Suport de curs pentru profesori

Introducere n

.Net Framework
ISBN: 973-86699-6-0

Ediia 2008

S-ar putea să vă placă și