Autori, în ordine alfabetică: Adrian Niţă profesor, Colegiul Naţional „Emanuil Gojdu”, Oradea Maria Niţă profesor, Colegiul

Naţional „Emanuil Gojdu”, Oradea Nicolae Olăroiu profesor, Colegiul Naţional „B.P. Hașdeu”, Buzău Rodica Pintea profesor, Liceul „Grigore Moisil”, București (capitolul 1) Cristina Sichim profesor, Colegiul Naţional „Ferdinand I”, Bacău Daniela Tarasă Inspector Informatică, ISJ Bacău Coordonatori: Mihai Tătăran cadru didactic asociat, Universitatea Politehnică Timișoara Nușa Dumitriu-Lupan inspector General MECT Petru Jucovschi Developer Community Lead, Microsoft România

Suport de curs pentru profesori

.Net Framework
Ediţia 2008

Introducere în

Cerinþe de sistem
Arhitectura suportatã: • x86 • x64 (WOW) Sistem de operare suportat: • Microsoft Windows XP • Microsoft Windows Server 2003 • Windows Vista Cerinþe Hardware: • Minimum: CPU 1.6 GHz, RAM 192 MB, Rezoluþie Monitor 1024x768, Disc 5400 RPM • Recomandat: CPU 2.2 GHz sau mai puternic, RAM 384 MB sau mai mult, rezoluþie monitor 1280x1024, Disc 7200 RPM sau mai mult. • Windows Vista: CPU 2.4 GHz, RAM 768 MB, Spaþiu liber disc 1.3 GB pentru instalare completã Resurse ºi Instrumente: • www.microsoft.ro/ark - Academic Resource Kit, educaþionale. colecþie de instrumente software ºi resurse

Cuvânt Înainte

Stimaþi profesori, Introducere în .NET Framework este un curs dezvoltat în cadrul programului Microsoft Parteneri pentru Educaþie, în colaborare cu un grup de profesori de informaticã din România. Pânã la sfârºitul anului ºcolar 2007-2008 va fi disponibil în pe situl Microsoft România, în pagina Secþiuni pentru educaþie. Cursul vã propune sã exploraþi tehnologia .NET, cea mai rãspânditã platformã de aplicaþii software. Aveþi posibilitatea sã studiaþi soluþii software ºi sã dezvoltaþi aplicaþii ce pot fi trimise la concursuri sau pot fi integrate în proiecte educaþionale. Suportul de curs este publicat în douã versiuni. Cea pentru elevi cuprinde doar componenta de specialitate. Versiunea pentru profesori cuprinde pe lângã componenta de specialitate ºi pe cea metodicã de predare. Suportul de curs poate fi descãrcat gratuit ºi folosit exclusiv în procesul educaþional. Scopul acestei iniþiative a programului Parteneri pentru Educaþie este de a încuraja dezvoltarea profesionalã a profesorilor ºi de a da un suflu nou experienþei educaþionale la materia Informaticã. Împreunã cu partenerii, echipa Microsoft România vã mulþumeºte pentru interesul pentru studiul tehnologiei .Net. Sperãm doamnelor ºi domnilor profesori, ca aceste materiale sã vã ajute în predarea materiei la clasã!

Sanda Foamete SNR Manager de Proiecte Educaþionale Microsoft România

P. Progamare vizualã cu C# ºi Programare web cu Asp. Oradea Nicolae Olãroiu. profesor.Net Framework” pentru scopuri comerciale sau în alte scopuri în afara celui descris mai sus. Haºdeu”. Inspector Informaticã. profesor. . Bacãu Daniela Tarasã. pentru variantele: Programare orientatã obiect. Drepturile de autor asupra suportului de curs „Introducere în . Universitatea Politehnica din Timiºoara Nuºa Dumitriu-Lupan. ISBN: 973-86699-6-0 Notã: Acest suport de curs este destinat profesorilor ce predau la clasele matematicã-informaticã ºi matematicã-informaticã intensiv. ISJ Bacãu Coordonatori: Mihai Tãtãran. Ediþia 2008. Microsoft România Formatul electronic al textului digital: PDF Editat de BYBLOS SRL sub coordonarea Agora Media SA. Oradea Maria Niþã.Autori. profesor Colegiul Naþional „B. Colegiul Naþional „Emanuil Gojdu”. Suportul de curs poate fi utilizat gratuit exclusiv în procesul de predare-învãþare. profesor. Liceul „Grigore Moisil”. profesor. Colegiul Naþional „Ferdinand I”. Developer Community Lead. care au optat în programa ºcolarã. cadru didactic asociat. în ordine alfabeticã: Adrian Niþã. Bucureºti (capitolul 1) Cristina Sichim. pentru Microsoft România. Buzãu Rodica Pintea. Inspector General MECT Petru Jucovschi.Net. Este interzisã utilizarea suportului de curs „Introducere în .Net Framework” aparþin Microsoft. Colegiul Naþional „Emanuil Gojdu”.

. . . . . .12. . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2. . . . . . . . . .3. . . . . . . . . . . . .25 3. . . . . Constante . . Polimorfism. . . . . . . . . . . . .Introducere în . . . . . . . . . . . . . . . . . . . .17 1. . . . . . . . . . . . . . . . . . . . . . .39 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9. . . . . . . . . . . Supraîncãrcare . . . . . . . . . . . . . . . . . . . . . . Conversii boxing ºi unboxing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39 3. . . . . . . . . Conversii numerice . .6. . . . . . .8. . . . . . . . . . . . . .11. . . . . . . . . . .25 3. . . . . . . . . . . . . . . . . . . . . . . .8. . . . . . . . . . . . . . . . . . .16 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2. . . . . .28 3. . . . . . . . . . . . . . . . . . . . . . . . . . Moºtenire . . . . . . Programare orientatã obiect în C# . . . . . . . . . . . . . . . . . .10. . . . . . . . . . . . . .12 1. . . . . . . . . . . . . .10 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .NET? . . . . . . Expresii ºi operatori . . . . . . . . . . . . . .7 1. . . . . . . . . . . . . . . . .40 3. . . . . .39 3. . . . . . . . . . . . . . . . . . . . . . . Sintaxa limbajului . . . . . . . . . Proprietãþi . . . . . . . . . . . . . . . . .30 3. .8 1. . . . . . . . . .5. .3. . . . . .Net Framework (Suport de curs) 3 CUPRINS 1 Programarea Orientatã Obiect (POO) cu C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Compilarea programelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Încapsulare . . . . . . .3.21 2. . . . . . . . . . . . . . . . .11. . . . .34 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Caracterizare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25 3. . . . . . . . . . . . . Destructor . . . . . . . . . . . . . . .21 2. . . . . . . . . . . .1. .7. . . . . . . . . . . . . . . . . . . . . .7. . . . . . . . . . . . . . . . . . . . . . . . .2. . . . . . Variabile . . . . . . . .14 1. . . . . . .13. . . . . . . . . . Interfeþe . . . . . . . . . . . . . Evoluþia tehnicilor de programare . . . .14 1. . . . . . . . . . . . . Metode . . . . . . . . . . . . . .11 1. . . . . . . . . . . . . . . . . . . . .9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11 1.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2. . . . . . . . . . . . . .10 1. . . . . . . . . . . . . . . . Instrucþiunea if . . . . . . . .34 3. . . . . . . . . . . . Declararea unei clase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40 . . . . . . . . . . . . . . de iteraþie ºi de control . . . . . . . . . . . Conversii între numere ºi ºiruri de caractere . . . . . . . . . . . . . Structura unui program C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . . . . . . . . . . . .26 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .36 3. . . . . . . . . . . . . . . . . . . . . . . . Prezentare . . . . . . . . . . . . . . . . . . . . . . . . . . .27 3. . . . . . Evenimente ºi delegãri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11. . . . . . . . . . . . . . . . Constructori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Crearea aplicaþiilor consolã . . . . . . . . . . . . . . . . . . . . . . . . Tipuri de date obiectuale. . . . . .7. Tipuri de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .NET . . . . . . . . . . . . . . Instrucþiuni condiþionale. . . . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . . . . . . . . .22 2. . . . . .23 3. . . . . . . . . . . . . . . .7 1. . . . . . . . . Conversii . . . . . . . . . . .4. . . . . . . . . . . . . . . . . . . .7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10. Compilarea la linia de comandã . . . . .6. . . . . . . . . .1. . . . . . . . . . . . . . . . . . . . . . . De ce am alege . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19 2. . . . . Platforma . . . . . . . . .4. . . . . . . . . . . . Metode virtuale . . . . . . . . . . . . . . . . . . . . .7. . . . . . . . . . . . . . . . Limbajul C# . . . . . . . . . . . .

. . . . . . . . . . .9. . . .2.4. . . . .4. . . .3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3. . . Pastrarea altor informatii . . . . . . . .4. . Instrucþiunile try-catch-finally ºi throw . . . . . . .53 4. . . . . . . . . . . . . . . . . . .3. . . . .4. . . . .4 Introducere în . . .41 3. . . . . . . . . . . . . . . . . . . . . . . .3. . . . . . . . . . . . . . Controale Server . . . . . . . . . . . . .43 3. . . . . . . . . . . . . . . . . . . .47 4. . . . . . . . .64 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11. . . . . . . . .1. . . . . . . . . . . .4. . . . . . . . . . . . . . . .59 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Controale form . . . Windows Authentication . . . . . . . . . . . . . . . . .2. . . . . . . . . . . . . . . . .40 3.47 4. . . . . . . .NET . Câteva dintre metodele ºi evenimentele Form . . .5. . . . . . . .4. . . . . . .2. . . . . . . . . . . . . . . . . . Instrucþiunea break . . . .44 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52 4. . . . . . . . . . . Structura unei pagini ASP. . . . . . . . . . . . . . . . . . . . . . . . . . . Instrucþiunea while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50 4. . . . .54 4. . . . . . . .1. .3. . . Instrucþiunea foreach . . . . . . .87 . . .56 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4. . .2. . . . . . . . . . . . . Concepte de bazã ale programãrii vizuale . . . . . . . . . . . . . . .51 4. . . Instrucþiunea goto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .86 5. . . . . . . Instrucþiunea continue . . . . . . . . . . . . . . . . . . . . . . .42 3. . . . . . . . . . . .2. . . . . . Proprietati comune . . . . . . . . . . . . .66 5. . . . . . .NET . . . . . . . .54 4. . . . .55 4. . . . . . . . . .6. . Introducere . . .45 4. . . . . . . . .3. . . . . . . . . . . Accesul la o baza de date intr-o pagina web . . . . . . . . . . . . . . . .43 3. . . . Instrucþiunea switch . . . . . . . . .4. . . . . . . .Drawing . . . . . . . . . . . .51 4. . . . . .57 4. . .59 5. . . . . . . . . . . . . . .43 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pastrarea informatiilor in aplicatiile web . . . Membrii statici . . . Mediul de dezvoltare Visual C# . . . . . .11.8. . . . . . . Programare vizualã . . . . . . . .5. . . . . .42 3. . . . . . . . . . . . . . . . . . . . . . .4. . . . . . Instrucþiunea for . . . . . . . . .5. . . . . . . . . . . . . . . . . . . . . .7. . . . . . Proprietãþi comune ale controalelor ºi formularelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Securizarea unei aplicaþii web . . . . . . . . . . . . . . . . .4. . . . . . . . . . . . . . Profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ferestre . . . . . . . . .5. . . . . . . Pastrarea starii controalelor . . . . . . .2. .12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65 5. . . .1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3. . Validatoare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instrucþiunea do – while . . . Application . . . . . . . . . . . . . . . . . . . . Concluzii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11. . . . . . .2. . . . . Controale . . . . . Validarea informaþiilor de la utilizator . . . . . . . . . . . .6. . . . . . . . . . . . . . . . . . . . . Session . . . . .2. . . . . . .11. . . . . . . . . . . .NET . . . . . . . . . . . . . . . .6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . . . Resurse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57 5.2. . . . . . . . . . . . . . . . . . . . . . . . . . .48 4. . . . . . . . . . . . . . . . .11. . . . . . . . . . . . . . Validarea datelor . . . .8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Net Framework (Suport de curs) 3. . . . . . . . . . . . . . . . . . . . . .53 4. . . . . . . . . . . . . . .1. . . . System. . . . . . . . . . . Securitatea în ASP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7. . . . . .56 4. . . . . . . . . . . . . .52 4. .4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11. . . . . . . . Forms-Based Authentication . . . . . . . . . . . . . . . . . . . .2. . . . . . . . .1. .4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . .2. . . . . . . . . . . . . . . . . .56 4. .2. . . . . . . . . . . . . . . . . . . . . . . . Programarea web cu ASP. . . . . . .6. . . . . . . . . . . . . . . . . . . . . . . . . . .54 4. . . . . . . . . . . . . . . . . . .61 5. . . . . . . . . .4. . . . . . . . . . . . .3. . . . . . . . . . . . . . . . . . . . . . . . .5. . . . . . . . . .62 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . .137 III. . . . . . . . . . . . . . . . . . . . . . . . Anexa 2 . . . . . . . .2. . . . . . . . . . . . . . . . . . . . SqlParameter . . . . . . . . . . . . . . . Anexe . . . . . . . . . . . . . . . . . . . . . .90 6. . . . . . . . . . . . . . . Proprietãþi . . . .113 III.Introducere în . . . . . . Lectura personalizatã a programelor ºcolare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ADO. . . . .1. . . .116 III. . .4. . . . . . . . . . . . . . Programa ºcolarã reper obligatoriu pentru un demers flexibil . . . . . . . . 113 III. . . . . . . . . . DataAdapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Furnizori de date (Data Providers) . . . . . . . . . Proiectarea demersului didactic . . . . . . . .102 6. . . . . . . . . . . . . . . Metode . .1. . . . . . . . . . . . . . .2. . . . . . . . . . . . . . . . . . . . . . .4. . . . . . . . .5. . . . . . . . . . . . . . . . . . . . . . . . . .118 III. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99 6. . . . . . . . . . . . Curriculum la decizia ºcolii . . . . . . . . . . . . . . . . . . .104 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . Proiectarea unei unitãþi de învãþare . . .1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Connection. . . . . . . . . . . . . . . . . . . . .4. . . . . . . . . . . . . . . .8. . . .92 6. . . . . . . . .4. . ªtergerea datelor. . . . . . . . . .10. . . . . .95 6. . . . . . . . . . . . . . . .5. . . . . . . . . . . . Metode complementare de evaluare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113 III. . . . . . . . . . . . . .4. . . . . . . . . . . . . . . . . . . . . . . . . . . Interogarea datelor. . . . . . . . . . . . . . . . . . . MiniGhid Metodologic . . . . . . . .3. . . . . . . . . . .1. . .3. . . .4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .105 6. . . . . . . . . . . . . . . . . . .91 6. . . . . . . . . . . . . . . . . . . . . . . .7. . . . . . . . . . . . . . .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Proiectul de lecþie? . . . . . . . .3. . . . . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . .CDS . . . . . . . . . . . . . . . . . 133 III. . . . . . . . .92 6. . . . . . . . . . . . . . . . . . . . . . . . . 131 III. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . Proiectul unitãþii de învãþare . . . . . . . Proiectarea vizualã a seturilor de date . . . . . . . . . . . . . . . . Command . . . . . . . . . .2. . . .3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93 6. . . . . . . . . . . . . . .3. . . . . . . . . . .2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Evenimente . . . . . . . . . . . . . Inserarea datelor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4. . . . .4. . . . . Anexa 1 . . . . . . . . . . . . . . . . . . . . . . . . . . .99 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .101 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Anexa 3 . . . . . . . . .90 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4. . . . . . . . . 130 V. . . . . . . . . . . . . . . . . . . . . .2. . . . . . . . . . . . . . . . . . . . . . . .3. . . . . . . . . . . . . . . . . .4. . . . . . . . . . . . . . . . . . . . . . . . Actualizarea datelor. . . . . . . . . .2. . . . . . . . . . . . . . . . . . . . . . . . .91 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9. . .5.4. . . . . .3. . . . Metode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93 6. .99 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .126 IV. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Proceduri Stocate (Stored Procedures) . .114 III. . . . . . . . . . . . . . . . . . . . . . . . . . . . .95 6. . . . . . .102 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . Proprietãþi . . . . . . . . . . Exemple de conectare . . . . . . .6. .95 6.89 6. . . . . . . . . . . . . . . . . . . . . . . .2. . . . . . .140 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90 6. . .2. . . . . . . . . . . . . . . . . . . . . . . . . .133 III. . . . . . . . . . . . . . . . . . 109 II. . . . . . . . . . .3. .109 I. 112 III. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Net Framework (Suport de curs) 5 6. . . . . . . . .1. . . . . . . . . . . . . . . . . . . . . . . . . .6. . . . . . . . . .6. . . . . . . Metode .4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92 6. . . . . . . . . . . . . . . . . . Planificarea calendaristicã . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DataSet . . . . .3.1. . . . . . . . . . . . . . . . . . . Metode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DataReader . . . . . . . . . . . . . Proprietãþi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Aplicarea programelor ºcolare . . . . . . . . . . . . . . . .1. . . . Tipuri de itemi . . . . . . . . . . . . . . . . . . . . . . . . . . Proprietãþi . . . . . . . . . . . Proiectarea activitãþii de evaluare . . . . . . . . . . . . . . .102 6. . . . . . . . . . . .96 6. . . . . . . . . Arhitectura ADO. . . . . . . . . . . . . . . . . . . . . . . . . . . .106 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

.

• Programarea orientatã obiect (programe cu noi tipuri ce integreazã atât datele. • Programarea proceduralã (program principal deservit de subprograme cu parametri formali.1 Evolutia tehnicilor de programare • Programarea nestructuratã (un program simplu. complicaþiile apar atunci când la program sunt asignaþi doi sau mai mulþi programatori care nu pot lucra simultan pe un acelaºi fiºier ce conþine codul sursã. stabilind ºi diferite reguli de acces la date ºi la subprograme. variabile locale ºi apeluri cu parametri efectivi).7 CAPITOLUL 1 Programarea Orientatã Obiect (POO) cu C# 1. complicaþiile apar când prelucrarea devine mai amplã. ci un ansamblu de obiecte care prind viaþã. de exemplu. toate înzestrate comportamental cu procedurile din modulul module1. dorim sã avem mai multe seturi diferite de date. implementate ºi depanate separat). se obþin avantaje prin abstractizarea programãrii (programul nu mai este o succesiune de prelucrãri. iar datele se multiplicã ºi se diversificã. • Programarea modularã (gruparea subprogramelor cu funcþionalitãþi similare în module. sunt . au diverse proprietãþi. ce utilizeazã numai variabile globale). pãstrând vizibilitatea numai asupra zonei de interfaþã a modulului) ºi se aplicã tehnici de asociere a procedurilor cu datele pe care le manevreazã. cât ºi metodele asociate creãrii. prelucrãrii ºi distrugerii acestor date). acestea gestionând ºi setul de date pe care le prelucreazã (date+date1 din figurã). aceastã arhitecturã de aplicaþie nu este avantajoasã. se obþin avantaje privind depanarea ºi reutilizarea codului ºi se aplicã noi tehnici privind transferul parametrilor ºi vizibilitatea variabilelor. se obþin avantaje privind independenþa ºi încapsularea (prin separarea zonei de implementare. Daca. Se observã cã modulele sunt ”centrate” pe proceduri.

Analog. ”culoarea ochilor” este irelevantã în acest caz. 1. tipul abstract USER. operaþii interne cum ar fi conversia datei de naºtere la un numãr standard calculat de la 01. Iar operaþiile specifice pot fi: introducerea în stivã (push) ºi extragerea din stivã (pop). În aceeaºi idee. vom obseva cã sunt multe date ce caracterizeazã un utilizator Internet. Evident. Astfel. operaþii specifice ca ”se înregistreazã”. nici nu se pun în discuþie date sau operaþii nespecifice (”numãrul de laturi” sau acþiunea ”zboarã”). în cazul nostru. Un exemplu de-acum clasic de tip de date abstract este STIVA. numãr de elemente etc. în timp ce ”data naºterii” poate fi importantã.01. ”comandã on-line” pot fi relevante. Spunem cã datele ºi metodele sunt membrii unui tip de date obiectual.1900 nu fac parte din interfaþa tipului de date abstract. Totuºi se va þine cont doar de datele semnificative pentru problema datã. derivarea ºi polimorfismul tipurilor obiectuale. Crearea unei instanþe noi a unui tip obiectual. 2 Tipuri de date obiectuale. vârful etc. sã testeze dacã stiva este vidã sau dacã stiva este plinã etc.8 Introducere în .) O instanþã a unui tip de date abstract este o ”concretizare” a tipului respectiv. La implementarea tipului STIVA. la desfiinþarea unei instanþe ºi eliberarea spaþiului de memorie . Ea poate avea ca date: numerele naturale din stivã. în timp ce operaþia ”manâncã” nu este. presupune operaþii specifice de ”construire” a noului obiect. intervin tehnici noi privind instanþierea. formatã din valori efective ale datelor. STOC etc. Încapsulare Un tip de date abstract (ADT) este o entitate caracterizatã printr-o structurã de date ºi un ansamblu de operaþii aplicabile acestor date. Vom mai defini metode (subprograme) capabile sã creeze o stivã vidã. Folosirea unui astfel de tip presupune: existenþa definiþiei acestuia. Astfel. sã extragã valoarea din vârful stivei.Net Framework (Suport de curs) capabile de acþiuni specifice ºi care interacþioneazã în cadrul programului). deoarece permite interacþiunea cu alte obiecte (SITE. Considerând. vom defini o structura de date care sã reþinã valorile memorate în stivã ºi câmpuri de date simple pentru: capacitate. metoda corespunzãtoare purtând numele de constructor. apelul metodelor ºi accesul la date. Un tip de date obiectual este un tip de date care implementeazã un tip de date abstract. în rezolvarea unei probleme de gestiune a accesului utilizatorilor la un anumit site. în timp ce operaþia ”plaseazã o comandã on-line” face parte. care sã introducã o valoare în stivã. Operaþiile care sunt accesibile din afara entitãþii formeazã interfaþa acesteia. capacitatea stivei. Vom numi operaþiile implementate în cadrul tipului de date abstract metode.

nu unul de tip instanþã. membrii statici sunt unici. astfel încât utilizatorul sã nu fie nevoit sã þinã cont de detalii ale acestei implementãri. C#) poartã numele de clasã (class). Principalul tip obiectual întâlnit în majoritatea mediilor de dezvoltare (Viisual Basic. • date ºi metode specifice clasei (membri de tip clasã). 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 operaþiilor de depunere. Aspectele specifice ºi modificatorii de acces/vizibilitate pot fi studiaþi din documentaþiile de referinþã C#. clasa STIVA poate beneficia. Delphi. Supraîncãrcare Deºi nu este o tehnicã specificã programãrii orientatã obiect. Java ºi C# permit existenþa mai multor constructori 2 Noþiunile generale legate de vizibilitate se considerã cunoscute din programarea proceduralã. extragere ºi aplicare a dobânzilor. dar cu parametri diferiti ca tip ºi/sau ca numãr. de exemplu). O instanþã a unui tip obiectual poartã numele de obiect. Astfel ansamblul format din numele funcþiei ºi lista sa de parametri reprezintã o modalitate unicã de identificare numitã semnãturã sau amprentã. EL va utiliza unul sau mai multe conturi (instanþe ale tipului CONT). Mai mult.3. va putea construi douã sau mai multe stive (de cãrþi de joc. O aplicaþie ce utilizeazã tipul obiectual STIVA. accesând proprietãþile ºi metodele din interfaþã. se aplicã o metodã specificã numitã destructor1. ºi de date ale clasei cum ar fi: numãrul de stive generate. fiind accesaþi în comun de toate instanþele clasei.CAPITOLUL 1. El va accesa datele. Spunem cã tipurile de date obiectuale respectã principiul încapsulãrii. ea creeazã un anumit context pentru metodele ce formeazã o clasã ºi modul în care acestea pot fi (ca orice subprogram) apelate. La implementare. Permiþând extensia tipurilor de date abstracte. prin intermediul proprietãþilor ºi va efectua operaþiile. Astfel. datele ºi metodele asociate trebuie sã fie complet ºi corect definite. Programarea orientatã obiect (POO) cu C# 9 aferent datelor sale. Astfel. realizatorul tipului obiectual asumându-ºi acele griji în momentul definirii tipului CONT. membrii statici pot fi referiþi chiar ºi fãrã a crea vreo instanþã a clasei respective. prin intermediul metodelor puse la dispoziþie de tipul obiectual definit. Prin supraîncarcare se înþelege posibilitatea de a defini în acelaºi domeniu de vizibilitate2 mai multe funcþii cu acelaºi nume. Java. Supra- 1 Datoritã tehnicii de supraîncãrcare C++. object). va muta valori dintr-o stivã în alta dupã o anumitã regulã desfiinþând orice stivã golitã. în plus. Modificatorul static plasat la definirea unui membru al clasei face ca acela sã fie un membru de clasã. . destructorul ºi la metodele din interfaþa tipului STIVA descris mai sus. De observat cã toate aceste prelucrãri recurg la datele. Existã ºi alte tipuri obiectuale (struct. constructorul. existã câte un exemplar al membrului respectiv pentru fiecare instanþã a clasei. Dacã în cazul membrilor nestatici. numãrul maxim sau numãrul minim de componente ale stivelor existente etc. clasele pot avea la implementare: • date ºi metode caracterisitice fiecãrui obiect din clasã (membri de tip instanþã). pânã ce rãmâne o singurã stivã. le va umple cu valori distincte. C++. 1.

calitate) cu primul parametru întreg ºi al-II-lea caracter. cu aceastã ocazie putând fi redefiniþi unii membri existenþi sau adãugaþi unii membri noi.5. 4 care trebuie sã fie ºi ea abstractã (virtualã purã. O subclasã. Operaþia mai poartã numele de derivare. În contextul mecanismelor de moºtenire trebuie amintiþi modificatorii abstract ºi sealed aplicaþi unei clase. se obþin membri dife3 Capacitatea unor limbaje (este ºi cazul limbajului C#) de a folosi ca "nume" al unui subprogram un operator.10 Introducere în . O metodã abstractã este o metodã pentru care nu este definitã o implementare. Clasa din care se moºteneºtea se mai numeºte clasã de bazã sau superclasã. de douã sau mai multe semnãturi se realizeazã prin selecþia funcþiei a cãrei semnãturã se potriveºte cel mai bine cu lista de parametri efectivi (de la apel). prin supraîncãrcare. . sã aibã comportamente diferite. Moºtenire Pentru tipurile de date obiectuale class este posibilã o operaþie de extindere sau specializare a comportamentului unei clase existente prin definirea unei clase noi ce moºteneºte datele ºi metodele clasei de bazã. În C#. la randul ei. deoarece direct din ea nu se pot obþine obiecte prin operaþia de instanþiere. unde. 1. Astfel. O metodã sigilatã nu mai poate fi redefinitã în clasele derivate din clasa curentã. Astfel. Polimorfism. sã se afle în diferite stãri. adicã avem de-a face cu moºtenire simplã. Deºi ajutã la sporirea expresivitãþii codului. Aceasta este o facilitate care "reduce" diferenþele dintre operarea la nivel abstract (cu DTA) ºi apelul metodei ce realizeazã acestã operaþie la nivel de implementare obiectualã. aceasta urmând a fi realizatã în clasele derivate din clasa curentã4. Polimorfismul obiectual5 se manifestã în lucrul cu obiecte din clase aparþinând unei ierarhii de clase. aceeaºi superclasã însã poate fi derivatã în mai multe subclase distincte. poate fi definitã metoda ”comandã on-line” cu trei semnãturi diferite: comanda_online(cod_prod) cu un parametru întreg (desemnând comanda unui singur produs identificat prin cod_prod. în C# o subclasã poate moºteni de la o singurã superclasã. Clasa care moºteneºte se numeºte subclasã. 1. O clasã de bazã impreunã cu toate clasele descendente (direct sau indirect) formeaza o ierarhie de clase. comanda_online(cod_prod. Apelul unei funcþii care beneficiazã.4. prin redefinirea unor date sau metode. repre- zintã supraîncãrcarea operatorilor. un obiect polimorfic este cel capabil sã ia diferite forme. poate fi superclasã pentru o altã clasã derivatã.Net Framework (Suport de curs) încãrcarea permite obþinerea unor efecte diferite ale apelului în contexte diferite3.cantitate) cu primul parametru întreg ºi celalalt real comanda_online(cod_prod. o clasã abstractã trebuie obligatoriu derivatã. Metode virtuale Folosind o extensie a sensului etimologic. prin supraîncãrcarea operatorilor ºi metodelor se pot crea ºi confuzii. în timp ce o clasã sigilatã (sealed) nu mai poate fi derivatã (e un fel de terminal în ierarhia claselor). toate clasele moºtenesc de la clasa de bazã Object. modificatori ce obligã la ºi respectiv se opun procesului de derivare. conform terminologiei din C++) 5 deoarece tot aspecte polimorfice îmbracã ºi unele tehnici din programarea clasicã sau tehnica supraîncãrcãrcãrii funcþiilor ºi operatorilor. Ca ºi în Java. clasã derivatã sau clasã descendentã.

iar o semnificã o componentã opþionalã . Comportamentul polimorfic este un element de flexibilitate care permite stabilirea contextualã. îi corespunde un specificator override al funcþiei din clasa derivatã ce redefineºte funcþia din clasa de bazã. Astfel. tipuri de date definite de 6 Este posibil doar în cazul limbajelor ce permit "legarea întârziatã". metoda muta poate fi implementatã la nivelul clasei PIESA ºi redefinitã la nivelul subclasei PION. Pentru a permite acest mecanism. va fi invocatã metoda din clasa de bazã.0 a limbajului i s-a adãugat un nou tip: clasele generice8. a membrului referit. Corpul clasei este un bloc de declarãri ale membrilor clasei: constante (valori asociate clasei). se pune problema stabilirii datei sau metodei referite. La limbajele cu "legare timpurie". în cazul unei referiri obiectuale. în C# modificatorului virtual al funcþiei din clasa de bazã. Chiar ºi tipurile predefinite byte. câmpuri (variabile). Toate componentele limbajului sunt într-un fel sau altul. în momentul apelului. 1. în mod dinamic6. asociate noþiunii de clasã. La limbajele cu legare întârziatã. Atunci.CAPITOLUL 1. 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 passant”7). pentru a particulariza acest tip de deplasare care captureazã piesa peste care trece pionul în diagonalã. aparþinând claselor derivate din PIESA. se declarã ca metode virtuale (cu modificatorul virtual).pozitie_finala). Versiunii 2. Programul însuºi este o clasã având metoda staticã Main() ca punct de intrare. adresa la care se face un apel al unui subprogram se stabileºte la compilare. putându-se calcula distinct. De exemplu. cu metoda nestaticã muta(pozitie_initiala. 1. 7 Într-o altã concepþie. În mod curent. int sau bool sunt clase sigilate derivate din clasa ValueType din spaþiul System. clasã ce nu se instanþiazã. 8 echivalentrul claselor template din C++ 9 [] din definiþia schematicã semnificã un neterminal. Totuºi mecanismele POO permit stabilirea. în funcþie de contextul în care apare apelul. indiferent de clasa cãreia îi aparþine obiectul. a clasei proxime cãreia îi aparþine obiectul T ºi apelarea metodei corespunzãtore (mutare de pion sau turã sau altã piesã). Programare orientatã obiect în C# C# permite utilizarea OOP respectând toate principiile enunþate anterior. Declararea unei clase Sintaxa9: [atrib]o [modificatori]o class [nume_clasã] [:clasa_de_bazã]o [corp_clasã]o Atributele reprezintã informaþii declarative cu privire la entitatea definitã. referirea la metoda muta pare nedefinitã. O metodã ne-virtualã nu este polimorficã ºi.7. metodele care necesitã o decizie contextualã (în momentul apelului). aceastã adresa se stabileste doar in momentul rulãrii. dacã este definitã clasa numitã PIESA (de ºah). Pentru a evita unele tehnici de programare periculoase. Programarea orientatã obiect (POO) cu C# 11 riþi având însã acelaºi nume.6. limbajul oferã tipuri speciale cum ar fi: interfeþe ºi delegãri. pentru un obiect T. Modificatorii reprezintã o secvenþã de cuvinte cheie dintre: public protected internal private (modificatori de acces) new abstract sealed (modificatori de moºtenire) Clasa de bazã este clasa de la care moºteneºte clasa curentã ºi poate exista o singurã astfel de clasã de bazã.

this([listã_param]o) ce permite invocarea unui constructor anume12 înainte de executarea instrucþiunilor ce formeazã corpul constructorului curent. subclasele Baiat_cuminte ºi Baiat_rau) 1. • 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 excepþia metodelor.Net Framework (Suport de curs) utilizator. indexatori (ce permit indexarea instanþelor din cadrul clasei respective) ºi operatori. metode (subprograme). ele formeazã contextele tuturor instanþelor clasei respective Exemplul urmãtor defineºte o ierarhie de clase (conform figurii alãturate) 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 obþine obiecte din clasa Copil. conform mecanismului de supraîncãrcare) • metodele sau constructorii care au acelaºi nume trebuie sã difere prin semnãturã11 • se pot defini date ºi metode statice (caracteristice clasei) ºi un constructor static care se executã la iniþializarea 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 operaþiei de instanþiere. iar modificatorul sealed a fost folosit pentru a desemna faptul cã nu se mai pot obtine clase derivate din clasa Baiat (de exemplu. Constructori Sintaxa: [atrib]o [modificatori]o [nume_clasã]([listã_param_formali]o)[:iniþializator]o [corp_constr]o Modificatori: public protected internal private extern Iniþializator: base([listã_param]o).8. constructori. Baiat). se asociazã implicit iniþializatorul base(). ci numai din derivatele acesteia (Fetita. Dacã nu este precizat niciun iniþializator. un destructor. evenimente (instrumente de semnalizare). proprietãþi (caracteristici ce pot fi consultate sau setate). Corpul constructorului este format din instrucþiuni care se executã la crearea unui 10 având în vedere cã ele pot sã facã parte dintr-o clasã interioarã altei clase 11 din semnãturã nefãcând parte specificatorii ref ºi out asociaþi parametrilor 12 Din clasa de bazã (base) sau din clasa insãºi (this) .12 Introducere în .

. //datã accesibilã numai în interiorul clasei ºi claselor derivate public Copil() {nume = Console.} } class Fetita:Copil { public Fetita(string s):base(s) {nume=”Fetita ”+nume}13 public Fetita(){} //preia constructorul fãrã parametri din clasa de bazã14 //public Fetita(string s):base() {nume=s} } . în cazul constructorilor cu modificatorul static). se va asigna automat constructorul fãrã parametri al clasei de bazã (clasa object. Copil c1= new Copil().Fetita f2=new Fetita(“Ioana”). dacã nu este precizatã clasa de bazã) Instanþierea presupune declararea unei variabile de tipul clasei respective ºi iniþializarea acesteia prin apelul constructorului clasei (unul dintre ei. • pot exista mai mulþi constructori care se pot diferenþia prin lista lor de parametri • constructorii nu pot fi moºteniþi • dacã o clasã nu are definit niciun constructor. //Pentru clasa Copil abstractã. s-ar fi obþinut eroare aici Supraîncãrcarea constructorilor ºi definirea explicitã a constructorilor în clase derivate public class Copil { protected string nume.} //la iniþializarea obiectului se citeºte //de la tastaturã un ºir de caractere ce va reprezenta numele copilului } class Fetita:Copil {} .ReadLine(). Copil c= new Copil().CAPITOLUL 1. Fetita f1=new Fetita().} public Copil(string s) {nume=s..ReadLine(). 13 Preia ºi specializeazã constructorul al doilea din clasa de bazã 14 Este echivalent cu public Fetita():base(){} . Fetita f=new Fetita(). public Copil() {nume = Console. Acestea se pot realiza ºi simultan într-o instrucþiune de felul: [Nume_clasã] [nume_obiect]=new [Nume_clasã] ([listã_param]o) Utilizarea unui constructor fãrã parametri ºi a constructorului implicit în clasã derivatã public abstract class Copil { protected string nume. dacã sunt definiþi mai mulþi) precedat de operatorul new.. //se citeste numele de la tastaturã Copil c2= new Copil(“Codrina”). Programarea orientatã obiect (POO) cu C# 13 nou obiect al clasei respective (sau la crearea clasei..

Destructorii nu pot fi moºteniþi. sealed. în cazul în care defineºte în mod explicit un membru al unei interfeþe. override ºi abstract. Care sunt aceste motive? 1. Un parametru formal special este parametrul tablou cu sintaxa: [atrib]o params [tip][] [nume]. virtual ºI override . modificatorii acesteia. private nu poate sã aparã cu niciunul dintre virtual. Pentru metodele abstracte ºi externe. corpul metodei se poate reduce la un semn . Definirea datelor ºi metodelor statice corespunzãtoare unei clase 15 Poate fi folosit cel mult unul dintre modificatorii static.[nume_metoda] Lista de parametri formali este o succesiune de declarãri despãrþite prin virgule. În mod normal. destructorul nu este apelat în mod explicit. Semnãtura fiecãrei metode este formatã din numele metodei.10. numele este de forma [nume_interfata].14 Introducere în . nu pot apãrea împreunã new ºi over- ride. numele parametrilor formali ºi nici specificatorii ref ºi out. Destructor Sintaxa: [atrib]o [extern]o ~[nume_clasã] () [corp_destructor]o Corpul destructorului este format din instrucþiuni care se executã la distrugerea unui obiect al clasei respective. 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. virtual. abstract nu poate sã aparã cu niciunul dintre static. numãrul ºi tipul parametrilor16 Numele metodei trebuie sã difere de numele oricãrui alt membru care nu este metodã. Numele poate fi un simplu identificator sau. . seald obligã ºi la override 16 Din semnãturã (amprentã) nu fac parte tipul returnat. 1. Parametrii care nu au niciun modificator sunt parametri de intrare. La apelul metodei.[nume_metoda] (pentru metodele nestatice) ºi respectiv [nume_clasã]. deoarece procesul de distrugere a unui obiect este invocat ºi gestionat automat de Garbagge Collector.[nume_metoda] (pentru metodele statice).Net Framework (Suport de curs) Existã douã motive pentru care definiþia constructorului al treilea din clasa Fetita este greºitã ºi de aceea este comentatã. Pentru orice clasã poate fi definit un singur constructor. declararea unui parametru având sintaxa: [atrib]o [modificator]o [tip] [nume] Modificatorul unui parametru poate fi ref (parametru de intrare ºi ieºire) sau out (parametru care este numai de ieºire).9. extern. orice parametru trebuie sã aibã acelaºi modificator ca la definire Invocarea unei metode se realizeazã prin sintagma [nume_obiect].

ReadLine().adaug_copil(c).WriteLine(“{0} se joaca cu {1}.WriteLine(“Nr.nume. copii[i].. //constantã public static int nr_copii=0.17 } . } . Copil c = new Copil().WriteLine(“{0} se joaca. referinþa noului obiect se memoreazã în tabloul static copii (caracteristic clasei) ºi se incrementeazã data staticã nr_copii Baiat c = new Baiat(). public string nume. } public static void afisare() //metodã { Console. Copil.nume).adaug_copil(c). //câmp simplu (variabilã) static Copil[] copii=new Copil[nr_max].. Fetita c = new Fetita().. //se afiºeazã o listã cu numele celor 3 copii Definirea datelor ºi metodelor nestatice corespunzãtoare clasei Copil ºi claselor derivate public class Copil { . nr_copii).nume)..} 18 Decât cu ajutorul modificatorului new pentru metoda respectivã în clasa derivatã . Copil. i++) Console. //câmp 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”).} } .WriteLine(“Sunt {0} copii:”. {1}”.} } //supraîncãrcarea metodei se_joaca class Fetita:Copil { public override void se_joaca() //redefinire à comportament polimorfic {Console. Copil.this. this. i<nr_copii.8: public Copil() {nume = Console.} } class Baiat:Copil { public override void se_joaca() {Console.nume). public virtual void se_joaca() //virtual à se poate suprascrie la derivare {Console. for (int i = 0.} public void se_joaca(string jucaria) //nu permite redefinire18 {Console.”.. 17 Se are în vedere ºi constructorul fãrã parametri definit ºi preluat implicit în subclasele din cadrul primului exem- plu din subcapitolul 1. i+1.this.. Programarea orientatã obiect (POO) cu C# 15 public class Copil { public const int nr_max = 5. this.adaug_copil(c).”.nume).CAPITOLUL 1.WriteLine(“{0} leagana papusa.WriteLine(“{0} chinuie pisica.{0}.. jucaria)..Copil.”.afisare().”.

Dacã proprietatea nu este abstractã sau externã. string nume.c.se_joaca().IsUpper(nume[0]))return nume.se_joaca(). 1. else return nume. } } 19 Desigur cã proprietatea care controleazã accesul la câmpul identificat prin nume se poate numi cu totul altfel (proprietatea Nume fiind uºor de confundat cu câmpul de date nume).c. definind instrumente de acces la acestea: pentru a obþine valoarea câmpului respectiv (get) sau de a memora o anumitã valoare în câmpul respectiv (set). Dacã metoda de acces get este perfect asimilabilã cu o metodã ce retuneazã o valoare (valoarea datei pe care vrem s-o obþinem sau valoarea ei modificatã conform unei prelucrãri suplimentare specifice problemei în cauzã). Sintaxa: [atrib]o [modificatori]o [tip] [nume_proprietate] {[metode_de_acces]o} Observaþiile privind modificatorii ºi numele metodelor sunt valabile ºi în cazul proprietãþilor.c.se_joaca(“pisica”).. i<nr_copii. numele copilului respctiv. sub forma unui ºir de caractere. public class Copil {.se_joaca().c. Cum parametrul corespunzãtor valorii transmise nu apare în structura sintacticã a metodei. Dacã se supune unor condiþii specifice problemei.ToUpper(). Fetita sau Baiat): for (int i=0. Metodele de acces sunt douã: set ºi get.se_joaca(). i++) copii[i].} set { nume = value. //polimorfism Copil c = new Copil().16 Introducere în .c. Se va observã cã proprietatea este moºtenitã ºi de clasele derivate Fetita ºi Bãiat19. //polimorfism Pentru a evidenþia mai bine comportamentul polimorfic.se_joaca(“calculatorul”). în orice ordine. Proprietãþi Proprietatea este un membru ce permite accesul controlat la datele-membru ale clasei. // este implicit protected public string Nume //proprietatea Nume { get { if(char. Definirea în clasa Copil a proprietãþii Nume. propunem secvenþa urmãtoare în care nu se ºtie exact ce este obiectul copii[i] (de tip Copil. corespunzãtoare câmpului protejat ce reþine.Net Framework (Suport de curs) Fetita c = new Fetita(). este de stiut cã el este implicit identificat prin cuvântul value.. în funcþie de context) valoarea respectivã câmpului. se face o atribuire de felul câmp=value. metoda set este asimilabilã cu o metodã care un parametru de tip valoare (de intrare) ºi care atribuie (sau nu.11. //polimorfism Baiat c = new Baiat(). Este o manierã de lucru recomandabilã aceea de a proteja datele membru (câmpuri) ale clasei. . poate sã aparã una singurã dintre cele douã metode de acces sau amândouã.

dacã dorim sã definim o metodã asociatã unui vector de numere întregi. o implementare ”genericã” se poate realiza folosind delegãri: public delegate bool pereche_ok(object t1. .} //metoda get }20 1. for (int i = 0. Tipul delegat este un tip de date ca oricare altul. object t2).CAPITOLUL 1. 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 tratãrii evenimentelor. Sintaxa: [atrib]o [modificatori]o event [tip_delegat] [nume] Modificatorii permiºi sunt aceiaºi ca ºi la metode.Next(0. Clasa furnizoare a unui eveniment publicã (pune la dispoziþia altor clase) acest lucru printr-o declarare event care asociazã evenimentului un delegat. adicã o referinþã cãtre o funcþie necunoscutã cãreia i se precizeazã doar antetul. } public void scrie() 20 De observat cã în exemplul anterior (subcapitolul 1. Tehnica prin care clasele implementeazã metode (handler-e) ce rãspund la evenimente generate de alte clase poartã numele de tratare a evenimentelor. Prezentãm în continuare un exemplu. i++) v[i] = rand.ReadLine(). pentru a permite accesul "general" la câmpul respectiv de date. public class Vector { public const int nmax = 4.5). adicã sã anunþe celelalte obiecte asupra unor schimbãri petrecute la nivelul stãrii lor. metodã ce verificã dacã vectorul este o succesiune ”bine aranjatã” (orice douã valori succesive respectã o anumitã regulã). Este modul prin care se realizeazã comunicarea între obiecte.10). public Vector() { Random rand = new Random().Nume). Iar metodele ºi constructorii foloseau identificatorul nume ºi nu proprietatea Nume. din spaþiul System. Evenimente ºi delegãri Evenimentele sunt membri ai unei clase ce permit clasei sau obiectelor clasei sã facã notificãri.WriteLine(“{0} leagana papusa. derivat din clasa sigilatã Delegate. câmpul nume era declarat public. Programarea orientatã obiect (POO) cu C# 17 public Copil() {Nume = Console.12.”. De exemplu. i < nmax.} //metoda set } class Fetita:Copil { public override void se_joaca() {Console. public int[] v=new int[nmax]. funcþia urmând a fi implementatã la nivelul claselor interesate de evenimentul respectiv.this.

i++) if (!ok(v[i]. Console. Orice obiect x din clasa Vector are un membru E (iniþial null).18 Introducere în . i++) Console. doar delegatul asociat are nume într-o atribuire de felul x.aranj(f2))Console. i < nmax.else return false. va implementa o metodã M ce realizeazã animaþia ºi va adãuga pe M (prin intermediul unui delegat) la x. object t2) {if ((int)t1 <= (int)t2) return true. } public bool aranj(pereche_ok ok)//ok e o delegare cãtre o funcþie necunoscutã { for (int i = 0. i < nmax-1.x. if (x. Care credeþi cã sunt motivele pentru care apelãm la evenimente în acest caz. do { x =new Vector().E24.Net Framework (Suport de curs) { for (int i = 0.aranj(f1))Console. Invocarea lui E realizeazã de fapt activarea tuturor metodelor adãugate la E. Î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 aplicaþiei. return true. de exemplu. if (x. Cumulând mai multe astfel de referinþe.scrie().WriteLine().} public static bool f2(object t1.E ajunge un fel de listã de metode (handlere).else return false. //Escape } Revenind la evenimente. “. descriem pe scurt un exemplu teoretic de declarare ºi tratare a unui eveniment.Write(“{0}.WriteLine(“Monoton crescator”).WriteLine(“Monoton descrescator”).ReadKey(true). } } Dacã în clasa-program21 se adugã funcþiile (exprimând douã “reguli de aranjare” posibile) public static bool f1(object t1. x.E+=new [tip_delegat](M) .} atunci o secvenþã de prelucrare aplicativã ar putea fi: static void Main(string[] args) { Vector x. În clasa Vector. v[i]). Se defineºte un tip delegat TD (sã zicem) cu niºte parametri de interes22 ºi un eveniment care are ca asociat un delegat E (de tip TD)23. v[i + 1])) return false. când pare mult mai simplu sã apelãm direct metoda M la orice interschimbare? 21 22 23 24 Independent de definiþia clasei Vector De exmplu indicii componentelor interschimbate A se observa cã evenimentul în sine este anonim. O clasã C interesatã sã fie înºtiinþatã când se face vreo interschimbare într-un vector pentru a genera o animaþie. în metoda sort. } while (Console. la interschimbarea valorilor a douã componente se invocã delegatul E. object t2) {if ((int)t1 >= (int)t2) return true.KeyCar!=’\x001B’).

iar moºtenirea multiplã nu este admisã în C#. tot aºa putem spune cã o clasã care implementeazã interfaþa VENIT ºi clasele derivate din ea sunt ºi de tip VENIT . În exemplul nostru. Programarea orientatã obiect (POO) cu C# 19 1. fiecare dintre clasele care implementeazã interfaþa VENIT fiind obligatã sã furnizeze o implementare (dupã o formulã de calcul specificã) pentru metoda calc din interfaþã. ce declarã prin membrii sãi (metode. atunci o clasã VENIT nu este posibilã.O interfaþã este o componentã a aplicaþiei. inclusiv moºteniri multiple. un imobil închiriat ºi o 25 Acele clase care "aderã" la o interfaþã spunem cã "implementeazã" interfaþa respectivã 26 Dacã în sens polimorfic spunem cã Investiþie este ºi de tip Bani ºi de tip Avere. se poate defini o interfaþã VENIT care sã conþinã antetul unei metode calc (sã zicem) pentru calculul venitului obþinut. Interfeþe Interfeþele sunt foarte importante în programarea orientatã pe obiecte. asemãnãtoare unei clase. Toate clasele care moºtenesc dintr-o clasã care implementeazã o interfaþã moºtenesc. atunci pentru o avere cu acþiuni la douã firme.13. în care AVERE este o clasã abstractã. implementarea lor fiind furnizatã de unele dintre clasele aplicaþiei25. Pentru metodele din cadrul unei interfeþe nu se dã nici o implementare. deoarece permit utilizarea polimorfismului într-un sens mai extins. dar se admit derivãri. metodele respective.CAPITOLUL 1. evident. clasa Credit_acordat redefineºte metoda calc din clasa Investiþie. comportament care nu se poate defini prin ierarhia de clase a aplicaþiei. Orice clasã care doreºte sã adere la interfaþã trebuie sã implementeze toate metodele din interfaþã. proprietãþi. dacã presupunem cã toate clasele subliniate implementeazã interfaþa VENIT. evenimente ºi indexatori) un ”comportament” unitar aplicabil mai multor clase. deoarece formula de calcul implementatã acolo nu i se ”potriveºte” ºi ei26). De exemplu. ci sunt pur ºi simplu specificate. dar le pot ºi redefini (de exemplu. dacã vom considera arborele din figura urmãtoare. deoarece ea ar moºteni de la toate clasele evidenþiate. iar derivarea claselor a fost conceputã urmãrind proprietãþile comune ale componentelor unei averi. Nu existã instanþiere în cazul interfeþelor. De exemplu.

venituri[2] = casa.i<4. I_inchiriat casa = new I_inchiriat().i++) t+=v[i].20 Introducere în .Net Framework (Suport de curs) depunere la bancã.calc()+act2.calc()+dep. for(i=0. putem determina venitul total: Actiune act1 = new Actiune(). .calc().. . venituri[3] = dep.Actiune act2 = new Actiune().Depunere dep=new Depunere(). venituri[1] = act2. int t=0. Gãsiþi douã motive pentru care interfaþa VENIT ºi rezovarea de mai sus oferã o soluþie mai bunã decât: t=act1.calc()+casa.. Venit[] venituri = new Venit()[4]. venituri[0] = act1.calc().

XML.NET.NET (din familia SQL Server 2000. Pascal etc).un set de servere Enterprise . Smart Display.NET 3.) . WDSL.NET. De fapt. J#. Perl. aplicaþiilor Web ºi aplicaþiilor desktop Windows. Lisp.NET este bine sa avem 3 componente esenþiale: • un set de limbaje (C#.NET Passport .21 CAPITOLUL 2 Platforma .NET pune laolaltã mai multe tehnologii (ASP. . . Smalltalk. Când dezvoltãm aplicaþii . aplicaþii B2B (Bussiness to Bussiness – comerþ electronic între partenerii unei afaceri).NET 2. C++. C#. care pun la dispoziþie funcþii de stocare a bazelor de date.1 Prezentare . J#) asigurând totodatã atât portabilitatea codului compilat între diferite calculatoare cu sistem Windows. • Servicii Web (în special comerciale). Fortran. Cobol. Visio).NET este un cadru (Framework) de dezvoltare software unitarã care permite realizarea. cât ºi reutilizarea codului în programe.NET. email. set-top boxes. .0 vine cu Windows Server 2003. • un set de medii de dezvoltare (Visual Studio .NET. etc. pânã la Windows 98 inclusiv.NET Framework este o componentã livratã împreunã cu sistemul de operare Windows. Exchange 2000 etc). Tehnologia . Pentru a dezvolta aplicaþii pe platforma . putem utiliza: • Servere specializate . Managed C++. XBox. . se poate instala pe versiunile anterioare.NET Framework Componenta . distribuirea ºi rularea aplicaþiilor-desktop Windows ºi aplicaþiilor WEB. este ultima interfaþã . Tablet PC. • ºi o bibliotecã de clase pentru crearea serviciilor Web. Visual Basic . OOP.NET 2.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. indiferent de limbajul de programare utilizat.NET Framework stã la baza tehnologiei . UDDI) ºi limbaje de programare (VB.0 vine instalat pe Windows Vista ºi poate fi instalat pe versiunile Windows XP cu SP2 ºi Windows Server 2003 cu minimum SP1. SOAP. utile în aplicaþii care necesitã identificarea utilizatorilor (de exemplu. Smartphone.

Fiºierele corespunzãtoare se aflã. delegãri.0…. în directorul C:\WINDOWS\Microsoft. interfeþe. Ele au ca elemente de bazã: clase.NET conform Common Language Specification (CLS) este compilat în Microsoft Intermediate Language (MSIL sau IL). NET\Framework\V2.NET. ce executã instrucþiunile IL rezultate în urma compilãrii. polimorfism ºi tratarea excepþiilor. C++ ºi J#. CTS face parte din CLR.NET pot fi utilizate cu succes în altul. Compilarea programelor Un program scris într-unul dintre limbajele . Ansamblul de biblioteci necesare în realizarea aplicaþiilor desktop sau Web numit Framework Class Library (FCL).2.NET Framework este formatã din compilatoare. .NET sã fie din ce în ce mai rapide. dar nu este direct executabil. CLR include o maºinã virtualã asemãnãtoare cu o maºinã Java. biblioteci ºi alte executabile utile în rularea aplicaþiilor .NET ºi sistemul de operare ºi actualmente conþine: Limbajele C#. Platforma comunã de executare a programelor numitã Common Language Runtime (CLR).NET toate aceste limbaje respectã niºte specificaþii OOP numite Common Type System (CTS). Codul astfel obþinut are extensia exe.Net Framework (Suport de curs) între aplicaþiile . El recunoaºte secvenþele de cod pentru care s-a obþinut deja codul maºinã adecvat permiþând reutilizarea acestuia fãrã recompilare. Arhitectura . iar ca mecanisme: moºtenire.22 Introducere în . Faptul cã programul IL produs de diferitele limbaje este foarte asemãnãtor are ca rezultat interoperabilitatea între aceste limbaje. pe parcursul rulãrii. Compilatorul JIT analizeazã codul IL corespunzãtor apelului unei metode ºi produce codul maºinã adecvat ºi eficient. aplicaþiile . clasele ºi obiectele create într-un limbaj specific . utilizatã de toate cele 4 limbaje. Pentru a fi integrate în platforma . VB. în general. tipuri valoare ºi referinþã.NET Framework Componenta .NET. Maºina foloseºte un compilator special JIT (Just In Time). (corespunzãtor versiunii instalate) 2. ceea ce face ca. Astfel. ci respectã formatul unic MSIL.

în afarã de Windows. puteþi proiecta ºi dezvolta rapid ºi interactiv. Platforma . Tot .3.Windows.htm). elementele interfeþei grafice. Mac OS X ºi alte sisteme de operare (http://www.CAPITOLUL 2.Forms conþine instrumente (controale) ce permit implementarea elementelor interfeþei grafice cu utilizatorul. Folosind aceste controale. Ca un element de portabilitate. CLR se ocupã de gestionarea automatã a memoriei (un mecanism implementat în platforma .NET vã oferã clase care efectueazã majoritatea sarcinilor uzuale cu care se confruntã programele ºi care plictisesc ºi furã timpul programatorilor. ceea ce permite rularea aplicaþiilor . Linux. permite realizarea desenelor sau a altor elemente grafice. oferã acces uºor la baze de date.NET. . De ce am alege . reducând astfel timpul necesar dezvoltãrii aplicaþiilor.NET? În primul rând pentru cã ne oferã instrumente pe care le putem folosi ºi în alte programe. 2.NET 23 În plus.ecmainternational.com/Main_Page ). Solaris. Spaþiul de nume System.NET Framework este implementarea unui standard numit Common Language Infrastructure (http://www. trebuie spus cã .mono-project.org/publications/standards/Ecma-335. ºi pe unele tipuri de Unix.NET fiind acela de eliberare automatã a zonelor de memorie asociate unor date devenite inutile – Garbage Collection).

.

} } . interfeþe ºi delegãri). conform perceptelor moderne ale programãrii profesioniste. ci numai de . POLIMORFISM) sunt elemente fundamentale ale programãrii C#. În acest caz. diversificate (tipul struct).NET SDK (pentru 2. Principiile de bazã ale programãrii pe obiecte (ÎNCAPSULARE.0 ºi pentru 3.NET ºi fãrã a dispune de mediul de dezvoltare Visual Studio. class primul { static void Main() { Console. fiºierele se salveazã cu extensia cs. dar secvenþele de cod corespunzãtoare se considerã ”nesigure”. modularã ºi orientatã obiectual. modificate (tipul string) sau chiar eliminate (moºtenirea multiplã ºi pointerii cãtre funcþii). Astfel. codul se scrie în orice editor de text. Caracterizare Limbajul C# fost dezvoltat de o echipã restrânsã de ingineri de la Microsoft.ReadKey(true).0). cu circa 80 de cuvinte cheie. unele funcþiuni au fost adãugate (de exemplu. ºi 12 tipuri de date predefinite. Console. 3. Unele funcþiuni (cum ar fi accesul direct la memorie folosind pointeri) au fost pãstrate. Compilarea la linia de comandã Se pot dezvolta aplicaþii . Sunt o serie de tipuri noi de date sau funcþiuni diferite ale datelor din C++. se scrie în Notepad programul: using System.25 CAPITOLUL 3 Limbajul C# 3. MOªTENIRE.2. apoi se compileazã la linie de comandã. iar în spiritul realizãrii unor secvenþe de cod sigure (safe). limbajul moºteneºte sintaxa ºi principiile de programare din C++. C# este un limbaj simplu. El permite programarea structuratã.WriteLine(“Primul program”). echipã din care s-a evidenþiat Anders Hejlsberg (autorul limbajului Turbo Pascal ºi membru al echipei care a proiectat Borland Delphi).1. În mare.

putem realiza aplicaþii consolã (ca ºi cele din Borland Pascal sau Borland C). eventual versiunea free Microsoft Visual C# 2005/2008 Express Edition de la adresa http://msdn. introducem numele aplicaþiei noastre. dupã care. Dupã lansare.microsoft.3.26 Introducere în .NET. Pentru început.cs ºi se poate modifica prin salvare explicitã (Save As). ajutorul contextual. În fereastra de dialog (vezi figura). Compilarea programului se realizeazã cu ajutorul opþiunii Build Solution (F6) din meniul Build. Dacã se 3. Posibilele erori de compilare sunt listate în fereastra Error List. aspx. Extensia cs provine de la C Sharp. alegem opþiunea New Project din meniul File.com/vstudio/express/downloads/default. . În scrierea programului suntem asistaþi de IntelliSense.cs. Fereastra în care scriem programul se numeºte implicit Programs. în directorul WINDOWS\Microsoft.cs se va obþine fiºierul primul. selectãm pictograma Console Application. atunci scriind la linia de comandã: csc primul.exe direct executabil pe o platformã . cursorul din program se poziþioneazã pe linia conþinând eroarea. la Name.Net Framework (Suport de curs) salveazã fiºierul primul. Efectuând dublu clic pe fiecare eroare în parte.NET\ Framework\V2. trebuie sã instalãm o versiune a acestuia. Crearea aplicaþiilor consolã Pentru a realiza aplicaþii în mediul de dezvoltare Visual Studio.0.

În cadrul aceluiaºi spaþiu de nume poate apãrea definiþia unui alt spaþiu de nume. } } } O aplicatie C# este formatã din una sau mai multe clase. rulare pas cu pas (Step Into F11 ºi Step Over F12) sau rulare rapidã pânã la linia marcatã ca punct de întrerupere (Toggle Breakpoint F9 pe linia respectivã ºi apoi Start Debugging F5). 3. grupate în spaþii de nume (namespaces). 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. Toate opþiunile de rulare ºi depanare se gãsesc în meniul Debug al mediului.CAPITOLUL 3.4. Limbajul C# 27 Rularea programului se poate realiza în mai multe moduri: rapid fãrã asistenþã de depanare (Start Without Debugging Shift+F5) . namespace HelloWorld { class Program { static void Main() { Console. Ferestrele auxiliare utile în etapa de depanare se pot vizualiza alegând opþiunea corespunzãtoare din meniul Debug/Windows. Un spaþiu de nume cuprinde mai multe clase cu nume diferite având funcþionalitãþi înrudite. Fereastra de cod ºi ferestrele auxiliare ce ne ajutã în etapa de editare pot fi vizualizate alegând opþiunea corespunzãtoare din meniul View.WriteLine(“Hello World!”). rapid cu asistenþã de depanare (Start Debugging F5 sau cu butonul din bara de instrumente). caz în care avem de-a face cu spaþii de nume imbri- . Încetarea urmãririi pas cu pas (Stop Debugging Shift+F5) permite ieºirea din modul depanare ºi revenirea la modul normal de lucru. Douã clase pot avea acelaºi nume cu condiþia ca ele sã fie definite în spaþii de nume diferite.

existã posibilitatea de a segmenta aplicaþia în mai multe fiºiere numite assemblies. deducem cã definiþia clasei Console trebuie sã se gãseascã în spaþiul System. Apelarea unei metode în cadrul clasei în care a fost definitã aceasta presupune specificarea numelui metodei. Comentarii comentariu pe un rând prin folosirea // Tot ce urmeazã dupã caracterele // sunt considerate. clasa aparþine unui spaþiu de nume neinclus în fiºierul curent. este folositã pentru operaþiile de intrare/ieºire. HelloWorld. Pentru a facilita cooperarea mai multor programatori la realizarea unei aplicaþii complexe. Sintaxa limbajului Ca ºi limbajul C++ cu care se înrudeºte. pentru afiºarea mesajului dorit pe ecran. cifre ºi alte semne.Program este numele cu specificaþie completã al clasei Program. ºi anume metoda (funcþia) Main. Pentru o aplicaþie consolã. pânã la sfârºitul rândului drept comentariu 27 Este un termen folosit un pic echivoc ºi provenit din traduceriea cuvântului "token" . Apelul unei metode definite în interiorul unei clase poate fi invocatã ºi din interiorul altei clase. O clasã este formatã din date ºi metode (funcþii). este obligatoriu ca una (ºi numai una) dintre clasele aplicaþiei sã conþinã un „punct de intrare” (entry point).clasã.WriteLine reprezintã apelul metodei WriteLine definitã în clasa Console.metodã sau spaþiu. cu separatorul punct).5.clasã. caz în care este necesarã specificarea clasei ºi apoi a metodei separate prin punct. Vocabularul limbajului este format din acele ”simboluri”27 cu semnificaþii lexicale în scrierea programelor: cuvinte (nume). delimitatori ºi comentarii. separatori. limbajul C# are un alfabet format din litere mari ºi mici ale alfabetului englez. În cazul nostru se va folosi clasa Console. Dacã în plus. atunci este necesarã precizarea tuturor componentelor numelui: spaþiu. expresii. amintitã mai sus.28 Introducere în . linia 3: spaþiul nostru de nume linia 5: orice program C# este alcãtuit din una sau mai multe clase linia 7: metoda Main. din acel loc. ca ºi pentru o aplicaþie Windows de altfel.spaþiu. Aici se apeleazã metoda WriteLine din acestã clasã.Net Framework (Suport de curs) cate. O clasã poate fi identificatã prin numele complet (nume precedat de numele spaþiului sau spaþiilor de nume din care face parte clasa respectivã. Cum în spaþiul de nume curent este definitã doar clasa Program.metodã etc. Sã comentãm programul de mai sus: linia 1: este o directivã care specificã faptul cã se vor folosi clase incluse în spaþiul de nume System. Într-un assembly se pot implementa mai multe spaþii de nume. În exemplul nostru. În fiºierul nostru se aflã douã spaþii de nume: unul definit (HelloWorld) ºi unul extern inclus prin directiva using (System). „punctul de intrare” în program linia 9: clasa Console. iar pãrþi ale unui aceeaºi spaþiu de nume se pot regãsi în mai multe assembly-uri. 3. Console.

regulile de formare a expresiilor. interfeþelor. iar */ sfârºitul respectivului comentariu. sunt în mare aceiaºi ca ºi în cazul limbajului C++. spaþiilor de nume. delimitatorii de instrucþiuni. separatorii de liste. Limbajul C# 29 // Acesta este un comentariu pe un singur rand comentariu pe mai multe rânduri prin folosirea /* ºi */ Orice text cuprins între simbolurile menþionate mai sus se considerã a fi comentariu. a proprietãþilor.CAPITOLUL 3. de blocuri de instrucþiuni. metodelor. fiecare cuvânt care compune numele începe cu majusculã • în cazul numelor variabilelor dacã numele este compus din mai multe cuvinte. metode etc. /* Acesta este un comentariu care se intinde pe mai multe randuri */ Nume Prin nume dat unei variabile. Simbolurile /* reprezintã începutul comentariului. • primul caracter poate fi urmat numai de litere. cifre sau un caracter de subliniere. 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 reprezentând constante. • numele care reprezintã cuvinte cheie nu pot fi folosite în alt scop decât 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 puþin un caracter (fie el ºi literã micã ce diferã de aceeaºi literã majusculã) Convenþii pentru nume: • în cazul numelor claselor. înþelegem o succesiune de caractere care îndeplineºte urmãtoarele reguli: • numele trebuie sã înceapã cu o literã sau cu unul dintre caracterele ”_” ºi ”@”. de ºiruri de caractere etc. enumerãrilor. . primul începe cu minusculã. clase.

) ºi permite definirea unor tipuri proprii (enum. 4294967295 0. pe 8 biþi tip întreg cu semn. 127 -32768.array Toate tipurile de date sunt derivate din tipul System. pe 64 de biþi tip întreg fãrã semn. pe 16 biþi tip zecimal. 255 0. • tipul enumerare . pe 64 biþi -128. struct. class etc. 32 biþi tip întreg cu semn. simplã precizie. 79228162514264337593543950335 . pe 128 biþi (96 pentru mantisã). 65535 0.402823E+38 (8 pentru exponent. Tipuri de date În C# existã douã categorii de tipuri de date: • tipuri valoare • tipul simple: byte. 1.30 Introducere în .struct • tipuri referinþã • tipul clasã . Limbajul C# conþine un set de tipuri predefinite (int. dublã precizie.79769313486232E+308. 21447483647 -9223372036854775808. float etc. pe 8 biþi tip întreg fãrã semn. pe 32 biþi tip întreg fãrã semn.Object). Tipuri simple predefinite Tip object string sbyte short int long byte ushort uint ulong float double bool char decimal Descriere rãdãcina oricãrui tip secvenþã de caractere Unicode tip întreg cu semn. pe 16 biþi tip întreg fãrã semn. 24 pentru mantisã) tip cu virgulã mobilã. pe 16 biþi tip întreg cu semn pe. derivatã la rândul ei din clasa Object (alias pentru System. 53 -mantisa) tip boolean tip caracter din setul Unicode. pe 64 biþi (11 pentru exponent.6.class • tipul interfaþã .).delegate • tipul tablou . 18446744073709551615 Domeniul de valori tip cu virgulã mobilã. 9223372036854775807 0.79769313486232E+308 -79228162514264337593543950335. 32767 -2147483648.ValueType.Object Toate tipurile valoare sunt derivate din clasa System. int. 3. char.Net Framework (Suport de curs) 3.enum • tipul structurã . bool etc. 28 de cifre semnificative -1. pe 32 biþi -3.402823E+38.interface • tipul delegat .

bool cond1 = true. atunci acesta este considerat implicit int. Limbajul C# 31 O valoare se asigneazã dupã urmãtoarele reguli: Sufix nu are u. ulong d = 15U. uint. long b = 13L. ulong c = 12. UL. LU. double h = 1. . long. Declararea unui tip enumerare este de forma: enum [Nume_tip] [: Tip]o { [identificator1][=valoare]o. Ul. ulong long.234M. Toate componentele enumerate au un acelaºi tip de bazã întreg. Acest tip permite utilizarea numelor care. • Valorile folosite pentru iniþializãri trebuie sã facã parte din domeniul de valori declarat al tipului • Nu se admit referinþe circulare: enum ValoriCirculare { a = b. nu se specificã tipul de bazã al enumerãrii. sunt asociate unor valori numerice.CAPITOLUL 3. lU.234F. b } .234. decimal j = 1. ulong ulong Tipul enumerare Tipul enumerare este un tip definit de utilizator. float g = 1. ulong e = 16L.. lu. U L.. L ul. double i = 1. bool cond2 = false. [identificatorn][=valoare]o } Observaþii: • În mod implicit valoarea primului membru al enumerãrii este 0. Tip int. iar fiecare variabilã care urmeazã are valoarea (implicitã) mai mare cu o unitate decât precedenta. ulong f = 17UL.234D. la declarare. În cazul în care. Lu Exemple: string s = "Salut!" long a = 10. ulong uint.

Pentru a putea reþine date în structura de tip tablou. //new este implicit În cazul tablourilor cu mai multe dimensiuni facem distincþie între tablouri regulate ºi tablouri neregulate (tablouri de tablouri) Declarare în cazul tablourilor regulate bidimensionale: Tip[.ReadLine().3}. (int)lunaAnului. nu se alocã spaþiu pentru memorare. instanþierea ºi chiar iniþializarea tabloului se pot face în aceeaºi instrucþiune: Exemplu: int[] v = new int[] {1.”). este necesarã o operaþie de instanþiere: nume = new Tip[NumarElemente]. Iulie. Octombrie.2.32 Introducere în .3}. sau int[] v = {1. August. Acces: nume[indice1. Mai.2.Net Framework (Suport de curs) Exemplu: using System. Console. Februarie. Noiembrie. Aprilie.Mai + “-a luna din an. namespace tipulEnum { class Program { enum lunaAnului { Ianuarie = 1. Martie. Decembrie } static void Main(string[] args) { Console. } } } În urma rulãrii programului se afiºeazã mesajul: Luna Mai este a 5-a luna din an.] nume. Intanþiere: nume = new Tip[Linii. Iunie.Coloane]. Declararea. Tablouri Declararea unui tablou unidimensional: Tip[] nume.indice2] .WriteLine(“Luna Mai este a {0}“. Prin aceasta. Septembrie.

inclusiv secvenþe escape.tab vertical caracter hexazecimal .3}. new int[4] {7.8.] mat = {{1. caracterul apostrof.1} }..CAPITOLUL 3. Secvenþele escape permit reprezentarea caracterelor care nu au reprezentare graficã precum ºi reprezentarea unor caractere speciale: backslash. Intanþiere: nume = new Tip[Linii].{4. Limbajul C# 33 Exemple: int[.[]. sau int[][] mat={new int[3] {1.început de rând horizontal tab .2.3}.2..5}. nume[Linii-1]=new Tip[ColoaneLinii-1] Acces: nume[indice1][indice2] Exemple: int[][] mat = new int[][] { new int[3] {1. new int[2] {4.5.6}.{7.8.9.3}.2. sau int[.2.{7.new int[4] {7.9}}.] mat = new int[. nume[0]=new Tip[Coloane1] .5.8.linie nouã carriage return .6}. etc.9}}. Secvenþã escape \' \" \\ \0 \a \b \f \n \r \t \u \v \x Efect apostrof ghilimele backslash null alarmã backspace form feed .tab orizontal caracter unicode vertical tab .] {{1. Declarare în cazul tablourilor neregulate bidimensionale: Tip[][] nume. ªiruri de caractere Se definesc douã tipuri de ºiruri: • regulate • de tip „verbatim” Tipul regulat conþine între ghilimele zero sau mai multe caractere.1}}.new int[2] {4.8.3}.paginã nouã new line .9.{4.5}.

WriteLine(b). string d=”c:\\exemple\\unu. Conversii 3.cs”. Console.WriteLine(a).Net Framework (Suport de curs) În cazul în care folosim multe secvenþe escape. Console. Ele se folosesc în special în cazul în care dorim sã facem referiri la fiºiere ºi la regiºtri. string b = “linia unu \nlinia doi”. Aceste ºiruri pot sã conþinã orice fel de caractere.cs”. Console. Console.34 Introducere în .cs 3. Console.1.7. Exemplu: using System. string e = @”c:\exemple\unu. Conversia implicitã se efectueazã (automat) doar dacã nu este afectatã valoarea convertitã. Conversii numerice În C# existã douã tipuri de conversii numerice: • implicite • explicite.7. putem utiliza ºirurile verbatim. Un astfel de ºir începe întotdeauna cu simbolul’@’ înaintea ghilimelelor de început.WriteLine(d). namespace SiruriDeCaractere { class Program { static void Main(string[] args) { string a = “un sir de caractere”.ReadLine(). string c = @”linia unu linia doi”. } } } Programul va avea ieºirea un sir de caractere linia unu linia doi linia unu linia doi c:\exemple\unu.cs c:\exemple\unu. inclusiv caracterul EOLN.WriteLine(e). Console. .WriteLine(c).

ulong. double. ushort. namespace Conversii1 { . decimal ushort. Exemplu: în urma rulãrii programului using System. decimal long. using System. namespace Conversii { class Program { static void Main(string[] args) { byte a = 13. float.CAPITOLUL 3. long. double. long c. double. float. float. double. ulong. float. Limbajul C# 35 Exemplu: using System.ReadLine(). using System. float.Collections. uint. //intreg cu semn pe 64 biti c = a + b. decimal short. int. long. ulong. decimal float.Collections. long.Text. decimal double float. float. double. using System. decimal int.WriteLine(c). } } } Regulile de conversie implicitã sunt descrise de tabelul urmãtor: din sbyte byte short ushort int uint long char float ulong în short. decimal int. double. Console. Console. int. using System. uint.Generic. // byte intreg fara semn // pe 8 biti byte b = 20. float. decimal Conversia explicitã se realizeazã prin intermediul unei expresii cast. double.Text.Generic. double. long. int. double. decimal long. uint. ulong. atunci când nu existã posibilitatea unei conversii implicite. long.

ReadLine(). ar fi fost: 5/2=2 Regulile de conversie explicitã sunt descrise de tabelul urmãtor: din sbyte byte short ushort int uint long ulong char float double în byte. short. short. int. short. char sbyte. byte.36 Introducere în . char sbyte. short. float. ushort. a. char. ushort. } } } se obþine: 5/2 = 2.Net Framework (Suport de curs) class Program { static void Main(string[] args) { int a = 5.7. ulong.byte. float. //operatorul cast Console. short. ushort. ushort. decimal decimal sbyte. short sbyte. byte. char sbyte. c = (float)a / b. Sintaxa pentru conversia unui numãr în ºir de caractere: numãr → ºir “” + numãr sau se foloseºte metoda ToString a clasei Object. uint. b. float c. ushort. ulong. uint. ushort. uint. . ushort. char. int. short. ulong. ushort. Console. short. uint. short. evident eronat. double 3. int b = 2. byte. byte. char sbyte. char. ulong. uint. ulong. byte. long. byte. byte.2. char sbyte. int. int. ulong. ulong. c). long. long. long. char sbyte. char sbyte. byte. int. char sbyte. uint. Conversii între numere ºi ºiruri de caractere Limbajul C# oferã posibilitatea efectuãrii de conversii între numere ºi ºiruri de caractere. decimal sbyte.WriteLine(“{0}/{1}={2}”. uint.5 În cazul în care nu s-ar fi folosit operatorul cast rezultatul. uint. ushort. byte. int.

WriteLine(“long\t{0} \t{1}”.WriteLine(“float\t{0} \t{1}”. Console.Parse(ºir) sau Double.Parse(ºir) sau long. b2 = long. double d = 3.d.Parse(ºir) Float.WriteLine(“———————————”).WriteLine(“double\t{0} \t{1}”.WriteLine(“{0}\t{1}\tlong”.s).WriteLine(“{0}\t{1}\tint”. float c2. Console.WriteLine(“{0}\t{1}\tfloat”.WriteLine(“int\t{0} \t{1}”.15”.Parse(ºir) Int64.s).Parse(“2.a1).WriteLine(“\nSTRING\tVAL \tTIP”).c2).15”). Console.Parse(ºir) sau Int32. const int a = 13. namespace Conversii { class Program { static void Main(string[] args) { string s. s = “” + d. \tSTRING”). Console.s).”13”. long b2. conversia acesui ºir la numãr va eºua. Console.Parse(ºir sau double.”1000”.s).Parse(ºir) float. c2 = float. sintaxa este: ºir ºir ºir ºir → int → long → double → float int. Console. int a1.Parse(“1000”).Parse(“13”).”2. Console. adicã din ºir de caractere în numãr. const long b = 100000.b.c. . a1 = int.a. Console. Console.WriteLine(“———————————”). s = “” + b.WriteLine(“CONVERSII\n”). Console.CAPITOLUL 3. s = “” + a. const float c = 2.15F.WriteLine(“TIP\tVAL. Console.b2).Parse(ºir) Observaþie: în cazul în care ºirul de caractere nu reprezintã un numãr valid. s = “” + c.1415. Console. Limbajul C# 37 Pentru conversia inversã. Exemplu: using System.

1415 TIP int long float double 3.”3. Console. object ob = i.Object). care se pãstreazã pe stivã. object ob = (object)i. //boxing implicit //unboxing explicit . Prin conversia boxing a unui tip valoare. Exemplu: Prin boxing variabila i este asignata unui obiect ob: int i = 13.3. System.1415”. la clasa Object.1415 STRING 13 100000 2. se produce ambalarea în interiorul unei instanþe de tip referinþã.CultureInfo.15 2. } } } În urma rulãrii se obþine: CONVERSII TIP VAL.Parse(“3.InvariantCulture). obiectul ob poate fi asignat variabilei întregi i: int i=13. Conversii boxing ºi unboxing Datoritã faptului cã în C# toate tipurile sunt derivate din clasa Object (System. care se pãstrazã în memoria heap. Unboxing permite convertirea unui obiect într-un tipul valoare corespunzãtor. d2 = double.1415 STRING VAL.1415”. ——————————— int 13 long 100000 float 2.d2).15 3.7. prin conversiile boxing (împachetare) ºi unboxing (despachetare) este permisã tratarea tipurilor valoare drept obiecte ºi reciproc.15 double 3. Console. i = (int)ob.Globalization. //boxing implicit Prin conversia de tip unboxing.1415 3.15 3.WriteLine(“{0}\t{1}\tdouble”. ——————————— 13 13 1000 1000 2.Net Framework (Suport de curs) double d2.ReadLine().38 Introducere în . object ob = i. //boxing explicit sau int i = 13.

În cazul în care sunt mai mulþi operatori cu aceeaºi prioritate. Expresii ºi operatori Prin expresie se înþelege o secvenþã formatã din operatori ºi operanzi. const int x = 13. Un operator este un simbol ce indicã acþiunea care se efectueazã. În C# sunt definiþi mai mulþi operatori. Constante În C# existã douã modalitãþi de declarare a constantelor: folosind const sau folosind modificatorul readonly. Variabile O variabilã în C# poate sã conþinã fie o valoare a unui tip elementar. Limbajul C# 39 3. constanta nu a fost initializata //corect 3. fie o referinþã la un obiect.9.8. Exemple: int Salut. iar operandul este valoarea asupra cãreia se executã operaþia. operaþiile se executã conform prioritãþii operatorilor. Constantele declarate cu const trebuie sã fie iniþializate la declararea lor. evaluarea expresiei se realizeazã de la stânga la dreapta. Prioritate Tip 0 1 2 3 4 5 6 7 8 9 10 11 12 13 Primar Unar Multiplicativ Aditiv De deplasare Relaþional De egalitate AND (SI) logic OR (SAU) logic AND (SI) condiþional OR (SAU) condiþional Condiþional De atribuire Operatori ( ) [ ] f() . int Azi_si _maine. //gresit.CAPITOLUL 3. x++ x-.! ~ ++x --x (tip) true false & sizeof * / % + << >> < > <= >= is as == != & | && || ?: = *= /= %= += -= ^= &= <<= >>= |= Asociativitate → → → → → → → → → → → → ← ← XOR (SAU exclusiv) logic ^ . char caracter. În cazul în care într-o expresie nu intervin paranteze. 3.new typeof sizeof checked unchecked -> + . Exemple: const int x.10.

switch. 3.WriteLine(“Introduceti un nr intreg “). . introdus este < 0”). Instrucþiuni condiþionale. de iteraþie ºi de control Ne referim aici la instrucþiunile construite folosind cuvintele cheie: if. default.WriteLine(“Nr.2. Console. n = Convert. Instrucþiunea while Instrucþiunea while are sintaxa: while (conditie) Instructiuni.ReadLine()). foreach. case. continue. Cât timp conditie este indeplinitã se executã Instructiuni. in. goto. introdus este > 0”). } } } 3. Exemplu: using System. else Instructiuni_B. else. Exemplu: Sã se afiºeze numerele întregi pozitive <= 10 using System.WriteLine(“Nr.11.ReadLine().40 Introducere în . break. if (n >= 0) Console. else Console.11. do.1 Instrucþiunea if Instrucþiunea if are sintaxa: if (conditie) Instructiuni_A. namespace Test { class Program { static void Main(string[] args) { int n. Console.11.ToInt32(Console. for.Net Framework (Suport de curs) 3. while.

CAPITOLUL 3. n). while(conditie) Exemplu: Asemãnãtor cu exerciþiul anterior.WriteLine(“n este {0}”. } } } . } Console. } while (n <= 10). } } } 3.ReadLine().ReadLine().3. while (n <= 10) { Console.WriteLine(“n este {0}”. sã se afiºeze numerele întregi pozitive <= 10 using System.while are sintaxa este: do Instructiuni.11. n). Limbajul C# 41 namespace Test { class Program { static void Main(string[] args) { int n = 0. n++. Instrucþiunea do – while Instrucþiunea do . namespace Test { class Program { static void Main(string[] args) { int n = 0. Console. do { Console. n++.

În C# se semnaleazã eroare.42 Introducere în . } Console.11. } } } 3.4. n++) { Console.Net Framework (Suport de curs) 3.11. break. n).5. pas) Instructiuni Exemplu: Ne propunem. dacã la finalul intrucþiunilor dintr-o ramurã case nu existã break. Instrucþiunea switch La switch în C/C++. . se trece la urmãtorul case. Existã ºi aici posibilitatea de a face verificãri multiple (în sensul de a trece la verificarea urmãtoarei condiþii din case) doar dacã case-ul nu conþine instrucþiuni: switch (a) { case 13: case 20: x=5. y-0. la fel ca în exemplele anterioare. sã afiºãm numerele pozitive <=10 using System. y=8. default: x=1. break. Instrucþiunea for Instrucþiunea for are sintaxa: for (initializareCiclu. } Instrucþiunea switch admite în C# variabilã de tip ºir de caractere care sã fie comparatã cu ºirurile de caractere din case-uri.WriteLine(“n este {0}”.ReadLine(). coditieFinal. namespace Test { class Program { static void Main(string[] args) { for(int n=0. n<=10.

while.Write(“{0} ”.8. while. . neputând fi transmis ca parametru ºi nici aplicat un operator care sã-I schimbe valoarea. for sau foreach. do – while. do – while. Instrucþiunea foreach Instrucþiunea foreach enumerã elementele dintr-o colecþie.Write(“{0} ”. } Acelaºi rezultat îl obþinem folosind instrucþiunea foreach: foreach (string copil in nume) { Console. “Maria”}. Instrucþiunea break Instrucþiunea break permite ieºirea din instrucþiunea cea mai apropiatã switch. } 3. executând o instrucþiune pentru fiecare element. i++) { Console. Pentru a vedea cum acþioneazã o vom compara cu instrucþiunea cunoscutã for. Elementul care se extrage este de tip read-only.11.11. Limbajul C# 43 Exemplu: switch(strAnimal) { case “Pisica “: … break. copil). for sau foreach. case “Catel “: … break. Ionel”.6. Instrucþiunea continue Instrucþiunea continue permite reluarea iteraþiei celei mai apropiate instrucþiuni switch. 3. Considerãm un vector nume format din ºiruri de caractere: string[] nume={“Ana”.11.Length.CAPITOLUL 3.7. i<nume. Sã afiºãm acest ºir folosind instrucþiunea for: for(int i=0. default: … break. } 3. nume[i]).

namespace Salt { class Program { static void Main(string[] args) { int i = 0. Exemplu: switch (a) { case 13: x=0.Write(“{0} “. în C#. } } } Se va afiºa: 0 1 2 3 4 5 6 7 8 9 3. y=1. while(true) { Console. i++. goto default. if(i<10) continue. break.i).Net Framework (Suport de curs) Exemplu: using System.44 Introducere în . . în instrucþiunea switch pentru a face un salt la un anumit case. default: x=1. Instrucþiunea goto Instrucþiunea goto poate fi folositã. goto case 20. } Console.ReadLine().9.11. else break. y=0. case 15: x=3. case 20: x=5. y=8.

ReadLine(s). Instrucþiunile try-catch-finally ºi throw Prin excepþie se înþelege un obiect care încapsuleazã informaþii despre situaþii anormale în funcþionarea unui program.12. Exemplu: using System. Limbajul C# 45 y=0. } } } } . Aceste erori se pot manipula astfel încât programul sã nu se termine abrupt. Sunt situaþii în care prefigurãm apariþia unei erori într-o secvenþã de prelucrare ºi atunci integrãm secvenþa respectivã în blocul unei instrucþiuni try.CAPITOLUL 3.OpenRead(s). string s=Console.ToString()). } catch (PathTooLongException b) { Console.IO. } 3.WriteLine(“Programul s-a sfarsit”). Ea se foloseºte pentru a semnala contextul în care apare o situaþie specialã.ReadLine().WriteLine(a. precizând una sau mai multe secvenþe de program pentru tratarea excepþiilor apãrute (blocuri catch) ºi eventual o secvenþã comunã care se executã dupã terminarea normalã sau dupã ”recuperarea” programului din starea de excepþie (blocul finally). } catch (FileNotFoundException a) { Console. break. namespace Exceptii { class tryCatch { static void Main(string[] args) { Console.WriteLine(b. Console. } finally { Console. De exemplu: erori la deschiderea unor fiºiere. try { File. using System.Write(“Numele fisierului:”). împãrþire la 0 etc.ToString()).

46 Introducere în . de asemenea. } . Baiat definite fragmentat în capitolul 1. Exemplu: Considerãm clasele Copil. O posibilitate de validare la adãugara unui copil este aceea care genereazã o excepþie proprie la depãºirea dimensiunii vectorului static copii: public static void adaug_copil(Copil c) { if (nr_copii < nr_max) copii[nr_copii++] = c.Exception ºi derivate ale acesteia servesc la tratarea adecvatã ºi diversificatã a excepþiilor. else throw new Exception(“Prea mulþi copii”). o ”aruncãm” în momentul neîndeplinirii unor condiþii puse asupra datelor. Clasa System. Fetita.Net Framework (Suport de curs) Alteori putem simula prin program o stare de eroare ”aruncând” o excepþie (instrucþiunea throw) sau putem profita de mecanismul de tratare a erorilor pentru a implementa un sistem de validare a datelor prin generarea unei excepþii proprii pe care.

7 Serverul Web proceseazã datele. afiºând pagina web. sau datele pot fi salvate pe server între douã cereri din partea browserului. Acesta este modul de lucru folosit pentru afiºarea paginilor statice (datele dintr-o paginã nu depind de alte date din alte pagini sau de alte acþiuni precedente ale utilizatorului) ºi nici o informaþie nu este stocatã pe server. 4 Serverul web trimite un rãspuns browserului folosind protocolul HTTP. iar apoi trimite un rãspuns (response) înapoi cãtre browser. apasã butonul Submit ºi trimite date înapoi cãtre server.NET este tehnologia Microsoft care permite dezvoltarea de aplicaþii web moderne. 6 Utilizatorul poate introduce date (sã spunem într-un formular). Pentru a înþelege procesul de realizare a unui site web cu ASP. Introducere ASP. Serverul web primeºte cererea (request).NET 4. 8 Se reia de la pasul 4. utilizând platforma Microsoft . URL-ul este completat cu un ºir de caractere (QueryString) format din perechi de tipul cheie = valoare separate prin &. 3 Serverul Web proceseazã cererea. 5 Browserul proceseazã rãspunsul în format HTML.NET cu toate beneficiile sale. . ºi sunt eliberate resursele folosite pentru procesarea cererii.47 CAPITOLUL 4 Programarea web cu ASP. serverul poate sã proceseze cereri de pagini ce conþin cod care se executã pe server. În cazul paginilor web dinamice. Acest proces este format din urmãtoarele etape principale: 1 Browserul Web iniþiaza o cerere (request) a unei resurse cãtre serverul Web unde este instalatã aplicaþia doritã. Prin GET. Trimiterea datelor de la browser cãtre server se poate realiza prin metoda GET sau POST. dupã care conexiunea este închisã.NET este important sã cunoaºtem modul în care funcþioneazã comunicarea între browser ºi serverul web.1. 2 Cererea este trimisã serverului Web folosind protocolul HTTP.

2.aspx HTTP/1. de preferat este sã se foloseascã metoda POST pentru trimiterea de date. Acþiunea de PostBack poate fi folositã atât cu metoda GET cât ºi cu metoda POST.Net Framework (Suport de curs) Exemplu: GET /getPerson.1 Id=123&color=blue Prin Get nu se pot trimite date de dimensiuni mari.48 Introducere în .aspx. în ASP. la apãsarea butonului se schimbã titlul paginii Web în browser. În cazul exemplului de mai sus. .cs. datele sunt plasate în corpul mesajului trimis serverului: Exemplu: POST /getCustomer.aspx.aspx?Id=1&city=Cluj HTTP/1.NET La crearea unui proiect nou. În cazul în care se gãseºte direct în paginã. 4. Codul poate fi plasat direct în pagina sau într-un fiºier cu extensia . conþine codul C# asociat paginii sau obiectelor din paginã.cs” Inherits=”_Default” %> Secþiunea de cod. iar datoritã faptului cã datele sunt scrise în URL-ul browser-ului. Default. cu acelaºi nume ca al paginii (de ex. precizând modul în care este procesatã pagina. } </script> De obicei blocurile <script> conþin cod care se executã pe partea de client.NET se foloseºte o proprietate a clasei Page numitã IsPostBack. De aceea. codul este cuprins între tag-urile <script> </script>: <script runat=”server”> protected void Button1_Click(object sender. Trimiterea datelor înapoi cãtre server este numitã deseori PostBack.Title = “First Web Application”. însã dacã se foloseºte atributul runat = „server”. EventArgs e) { Page.1 Folosind POST.cs). Secþiunea de directive se foloseºte pentru a seta mediul de lucru. Orice paginã web .aspx. 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. <%@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”Default. ºi secþiunea de layout. secþiunea de cod. pot apãrea probleme de securitate.aspx este formatã din 3 secþiuni: secþiunea de directive. codul se va executa pe serverul web. în fereastra Solution Explorer apare o nouã paginã web numitã Default. Structura unei pagini ASP.

microsoft.CAPITOLUL 4. Exemplu: CodeFile=”Default.NET Runtime Engine care ruleazã pe serverul web (IIS) va face transformarea într-un obiect HTML standard.cs”. ASP. codul este plasat într-un fiºier separat. specificã faptul cã pentru obiectul respectiv.left: 349px.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. position: absolute. top: 156px” /> </div> <div> <input type=”hidden” name=”__EVENTVALIDATION” = “__EVENTVALIDATION” value = “/wEWAgKlr8nLBAKM54rGBh7DPY7SctG1t7rMEnJSrO+1hHyP” /> </div> </form> Exemple complete de aplicaþii web puteþi gãsi pe DVD-ul Academic Resource Kit (ARK). din aplicaþia Microsoft Visual Web Developer 2005 alegeþi din meniul File opþiunea Open Web Site ºi selectaþi. de varianta de javascript instalatã pe browser ºi de codul C# asociat obiectului respectiv (numit code behind). aplicaþia doritã. Programarea web cu ASP. Dupã instalare..\CS101SamplesAll\CS101SamplesWebDevelopment\. instalând Resurse\Visual Studio 2005\101 Samples CS101SamplesAll.aspx ºi apoi butonul View in Browser". se bifeazã opþiunea Place code in separate file. . În fereastra Solution Explorer selectaþi Start.com/en-us/vstudio/aa718334.aspx. Secþiunea de layout conþine codul HTML din secþiunea 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. Aceastã conversie se realizeazã în funcþie de tipul browserului.msi sau descãrcând cele 101 exemple de utilizare a Visual Studio 2005 de la adresa http://msdn2. iar în secþiunea de directive este precizat numele acestui fiºier. De exemplu pagina aspx de mai sus este transformatã în urmãtorul fiºier html: <form name=”form1” method=”post” action=”Default.aspx. din directorul .NET 49 În cazul în care în fereastra pentru adãugarea unei pagini noi în proiect.

În momentul în care este bifat checkbox-ul. prin intermediul unui cod server-side. ne propunem sã realizãm urmãtoarea aplicaþie. Controalele server web oferã mai multe funcþionalitãþi programabile decât cele HTML.aspx. sã rãspundã la anumite evenimente din paginã.50 Introducere în . Serverul trebuie sã execute codul ºi apoi sã retrimitã cãtre browser pagina în care textbox-ul este vizibil sau nu. De aceea controlul checkbox trebuie sã genereze acþiunea de PostBack. Codul poate fi urmãtorul: protected void CheckBox1_CheckedChanged(object sender. Pentru a înþelege exemplificarea.NET vine cu o suitã foarte bogatã de controale care pot fi utilizate de cãtre programatori ºi care acoperã o foarte mare parte din funcþionalitãþile necesare unei aplicaþii web. instalând Resurse\Visual Studio 2005\101 Samples CS101SamplesAll. } else { TextBox3. De asemenea pot detecta tipul browserului ºi pot fi transformate corespunzãtor în tag-urile html corespunzãtoare. Existã douã tipuri de controale server: Web ºi Html.com/en-us/vstudio/aa718334. EventArgs e) { if (CheckBox1. TextBox3. pagina trebuie retrimisã serverului în momentul bifãrii checkbox-ului. Într-o paginã avem un textbox ºi un buton.3. Controale Server Un control server poate fi programat. O proprietate importantã a controalelor server este AutoPostBack. Pentru a se executa metoda CheckBox1_CheckedCanged. ºi de fiecare datã când se apasã . vrem ca obiectul textbox sã aparã în paginã. Exemplu de folosire a controalelor web puteþi gãsi pe DVDul ARK.Net Framework (Suport de curs) 4. Unele controale genereazã întotdeauna Postback atunci când apare un anumit eveniment.Checked == true) { TextBox3. lucru care se întâmplã dacã este setatã valoarea true proprietãþii AutoPostBack.msi sau descãrcând cele 101 exemple de utilizare a Visual Studio 2005 de la adresa http://msdn2.Focus().Visible = false. trebuie sã aibã atributul id ºi atributul runat. κi menþine în mod automat starea între 2 cereri cãtre server. De exemplu evenimentul click al controlului button. Dorim ca în textbox sã avem iniþial (la încãrcarea paginii) valoarea 0. } } Când vom rula pagina. Pentru a înþelege mai bine fenomenul de PostBack.Visible = true. aplicaþia MenuAndSiteMapPath. ASP. vom considera o paginã în care avem un obiect de tip checkbox ºi un obiect de tip textbox care are proprietatea visible = false. vom constata cã totuºi nu se întâmplã nimic. microsoft.

Pe de altã parte. Anume. obiectul Page în ASP are proprietarea isPostBack. cã dupã prima incrementare valoarea în textbox rãmâne 1. în aplicaþiile Windows odatã creat un obiect acesta rãmâne în memorie în principiu pânã la terminarea aplicaþiei ºi va putea fi utilizat ºi din alte ferestre decât cele în care a fost creat. atâta timp cât este public.4. Codul evenimentului Click al butonului ºi al evenimentului Load al paginii ar putea fi urmãtorul: protected void Page_Load(object sender.NET ºi astfel nu trebuie sã ne facem griji cu privire la informaþiile care apar în controale pentru ca . ea este încãrcatã de serverul web. însã. a.4.Text) + 1) . între douã cereri succesive cãtre server? 4. } protected void Button1_Click(object sender. De aceea apare întrebarea: cum se salveazã/transmit informaþiile între paginile unui site web sau chiar în cadrul aceleiaºi pagini.CAPITOLUL 4. EventArgs e) { if (Page. Programarea web cu ASP. EventArgs e) { TextBox1. Pentru a remedia aceastã situaþie. valoarea din textbox sã fie incrementatã cu 1. EventArgs e) { TextBox1.Text = Convert.î. putem sã rescriem codul metodei Load: protected void Page_Load(object sender. obiectele din paginã sunt ºterse din memorie.NET 51 butonul. Pãstrarea informaþiilor în aplicaþiile web Existã o deosebire fundamentalã între aplicaþiile Windows ºi cele Web. se executã codul asociat pe baza datelor trimise de user. Pãstrarea stãrii controalelor Obiectul ViewState Starea controalelor unei pagini este pastratã automat de cãtre ASP.IsPostBack == false) // nu este postback deci e prima { // incarcare a paginii TextBox1. pierzând astfel valorile.Text = “0”. Când browserul cere o anumitã paginã. în aplicaþiile web paginile nu se pãstreazã în memorie pe calculatorul utilizatorului (clientului) iar aici ne vom pune problema pãstrãrii informaþiilor. } Vom observa. } } 4. rezultând un rãspuns în format html trimis browserului.1.ToString(Convert. Dupã ce este prelucratã pagina de cãtre server. Acest lucru se întamplã deoarece evenimentul Load se executã la fiecare încãrcare a paginii (indiferent cã este vorba de request-ul iniþial al browserului sãu de apelul de postback generat automat de evenimentul clic al butonului).ToInt32(TextBox1.Text = “0”.

Config. ceea ce se întâmplã la fiecare PostBack . 4. Acesta este un fiºier XML în care se reþin opþiuni de configurare. } } Regãsirea datelor se realizeazã folosind ca indice numele obiectului: protected void Button1_Click(object sender. EventArgs e) { TextBox1.1. atunci va trebui sã o facem explicit.NET. prin intermediul fiºierului de configurare Web. folosind obiectul ViewState în mod automat. cum ar fi valorile unor variabile instanþiate într-o anumitã paginã.Text = ViewState[“ViewStateTest”]. protected void Page_Load(object sender.2. În momentul generãrii codului Html de cãtre server se genereazã un control html de tip <input type=”hidden”. Profile O posibilitate de pãstrare a informaþiilor specifice unui utilizator constã în folosirea obiectului Profile.> . De exemplu. transparent pentru programator.NET se pastreazã între mai multe cereri cãtre server pentru aceeaºi paginã. EventArgs e) { if (Page.4. cum se întâmplã de exemplu la apãsarea unui buton ASP.Net Framework (Suport de curs) ele nu vor dispãrea la urmãtorul PostBack – adicã la urmãtoarea încãrcare a paginii curente.Add(“ViewStateTest”. dacã scriem un text într-o cãsuþã de text ºi apoi apãsãm un buton care genereazã un PostBack iar pagina se reîncarcã. “Hello”)...Add(“TestVariable”.2. a cãrui 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 adãuga valori în ViewState ºi de cãtre programator. Dacã dorim sã pãstrãm mai multe informaþii decât doar conþinutul controalelor. } 4. starea controalelor de pe o anumitã paginã web ASP. Pãstrarea altor informaþii Aºa cum am observat în paragraful anterior. valoare_obiect): ViewState. Pentru a adãuga o proprietate obiectului profile. “Hello”).IsPostBack == false) { ViewState.ToString().4. în fiºierul Web. ea va conþine cãsuþa de text respectivã cu textul introdus de noi înainte de reîncãrcare. folosind obiectul ViewState cu metoda Add (cheie.Config se adaugã: . pentru cã acestea se pierd în momentul în care serverul web regenereazã pagina curentã.52 Introducere în .

Sau Label1.4.Remove(“sir”). Dupã aceste modificãri.2. } Odatã introdus un obiect în Session.ToString().4.CAPITOLUL 4. Application Obiectul Application se comportã în mod identic cu Session. proprietatea definitã în Web. Session Obiectul Session este creat pe serverul web la prima accesare a sitului de cãtre un utilizator ºi rãmâne în memorie în principiu atât timp cât utilizatorul rãmâne conectat la site.Text = Profile. adicã tuturor utilizatorilor care acceseaza un site web la un moment . EventArgs e) { test = Session[“sir”]. EventArgs e) { Session[“sir”] = test. Pentru a adãuga un obiect în sesiune. Programatorul poate realiza scoaterea obiectului din sesiune atunci când doreºte acest lucru: Session.ProfileTest = “Hello world”. trebuie doar sã scriem un cod de genul urmãtor: protected void Button1_Click(object sender.3. atât timp cât el existã acolo.NET 53 <profile enabled=”true”> <properties> <add name =”ProfileTest” allowAnonymous =”true”/> </properties> </profile> Atributul name reþine numele proprietãþii. } Session este de fapt un dicþionar (listã de perechi cheie – valoare).Text = test. Programarea web cu ASP. Existã ºi excepþii.2.2.ProfileTest. doar cã este specific întregii aplicaþii. TextBox1. Ceea ce înseamnã cã la citirea unor valori din sesiune va trebui sã realizãm o conversie de tip. protected void Button2_Click(object sender. 4. dar ele nu fac obiectul acestui material.config poate fi apelatã pentru obiectul Profile: Profile. el poate fi accesat din toate paginile aplicaþiei. 4. în care valorile sunt de tip object.

dacã pe o paginã web se cere utilizatorului introducerea vârstei sale ºi pentru asta îi punem la dispozitie o cãsuþã de text. 4.54 Introducere în .1.NET vine cu o serie de controale gata create în scopul validãrii datelor. trebuie sã ne asigurãm cã utilizatorul site-ului nostru introduce numai date corecte în cãsuþele de text care îi sunt puse la dispoziþie. Aceste controale sunt de fapt clase care provin din aceeaºi ierarhie. dar a unui numãr mare de utilizatori care acceseazã simultan pagina (pentru fiecare se va creea un obiect sesiune). Membrii statici Toate variabilele declarate ca fiind statice sunt specifice întregii aplicaþii ºi nu unei anumite sesiuni. iar în cazul obiectului Session respectiv Application în memoria serverului web. va putea fi accesat din orice loc al sitului ºi de cãtre toþi utilizatorii acestuia. este introducerea unei adrese de email validã din punct de vedere al formatului. 4.4. Proprietãþi comune 1 ControlToValidate: este proprietatea unui control de validare care aratã spre controlul (cãsuþa de text) care trebuie sã fie validat. se modificã de cãtre acesta: test = “modificat”.5. Cu alte cuvinte odatã introdus un obiect în Applicatio. care va fi transmisã mai încet. De exemplu.4. 4.3. un alt exemplu. iar în al doilea caz rezultã o folosire excesivã a memoriei serverului web. De exemplu. datele sunt salvate în pagina web sub forma unui ºir de caractere. ASP. va fi obligatoriu sã ne asigurãm cã în acea cãsuþã se pot introduce numai cifre ºi cã numãrul rezultat este încadrat într-un anumit interval. Aceastã folosire excesivã a memoriei poate sã aparã ºi în cazul unei dimensiuni a datelor ceva mai redusã. ceea ce duce la scãderea vitezei de lucru. Sau. în primul caz creºte dimensiunea paginii web. ºi nu unei anumite sesiuni. dacã atunci când un site este accesat de Utilizator1 ºi o variabilã declaratã: static string test = “init”.2. Concluzii În cazul obiectului ViewState.4. Cu alte cuvinte. Dacã datele salvate sunt de dimensiuni mari. Validarea datelor În toate aplicaþiile web ºi nu numai se pune problema validãrii datelor introduse de utilizator. atunci toþi utilizatorii aplicaþiei vor vedea valoarea modificatã din acel moment înainte. 2 ErrorMessage: reprezintã textul care este afiºat în pagina atunci când datele din .5. având la bazã o clasã cu proprietãþi comune tuturor validatoarelor. 4.Net Framework (Suport de curs) dat.

numerelor de telefon. Programarea web cu ASP. 4.msi sau descãrcând cele 101 exemple de utilizare a Visual Studio 2005 de la adresa http://msdn2. Aplicaþii care au nevoie de informaþii confidenþiale ºi eventual în care sunt mai multe tipuri de utilizatori. Aplicaþii web comerciale.NET Pentru o aplicaþie securizatã.com/en-us/vstudio/aa718334. Acest mod autentificã utilizatorii folosind lista de useri Aplicaþie web pentru de pe server (Domain Controller). folosind conturi din lista serverului (Domain Controller). 3 EnableClientSideScript: este o proprietate booleanã care specificã locul în care se executã codul de validare (pe client sau pe server). programatorul poate crea validatoare customizate.NET. cele mai des întâlnite fiind sintetizate în tabelul de pe slide. Este util pentru validarea unor informaþii de genul adreselor de email. . Aplicaþie web disponibilã pe Internet. 4 CompareValidator. Trebuie setatã proprietatea ValidationExpression în care se pot alege câteva expresii uzuale gata definite. dar Windows Integrated cu acces privat. Comparã datele introduse în cãsuþa de text asociatã cu o valoare prestabilitã (ValueToCompare). care sã verifice datele introduse de utilizator conform unor reguli proprii. Verificã dacã informaþia introdusã în cãsuþa de text asociatã face parte dintr-un anumit interval. Validatoare 1 RequiredFieldValidator.6.NET 55 controlul de validat nu corespund regulii alese.2. etc – în general informaþii care trebuie sã respecte un anumit format. Drepturile userilor în Windows Integrated Intranet.5. instalând Resurse\Visual Studio 2005\101 Samples CS101SamplesAll.aspx. Securitatea în ASP. Verificã dacã în cãsuþa de text asociatã prin proprietatea ControlToValidate s-a introdus text. Implementarea politicii de securitate se poate face atât din IIS cât ºi din aplicaþia ASP. aplicaþia Membership. Pe lângã validatoarele prezentate mai sus. Exemplu de folosire a validãrilor pentru un modul de login puteþi gãsi pe dvd-ul ARK. Util pentru formularele în care anumite date sunt obligatorii. 4 Alte proprietãþi.CAPITOLUL 4. specificat prin tipul datei introduse (prorietatea Type) ºi MinimumValue respectiv MaximumValue. aplicaþia web este dat de nivelul de privilegii al contului respectiv. Tipul aplicaþiei Modul de autentificare Descriere Aplicaþie web publicã Anonim Nu avem nevoie de securizare.microsoft. 4. Forms Authentication Utilizatorii companiei pot accesa aplicaþia din afara Intranetului. 2 RangeValidator. în funcþie de operatorul ales (proprietatea Operator) ºi de tipul de date care se aºteaptã (proprietatea Type). pe Internet. Verificã dacã informaþia din cãsuþa de text asociatã este conform unei expresii regulate specificate. 3 RegularExpressionValidator. avem mai multe posibilitãþi de autentificare. specifice tipului de validator.

6. 7. Autentificarea presupune introducerea de cãtre utilizator a unor credenþiale. Clientul completeazã informaþiile cerute în pagina de autentificare ºi apoi trimite informaþiile 5. 4. deci este necesar ca în setãrile acestuia sã fie permis accesul anonim. Cererea ajunge la Serverul Web IIS care comparã datele de autentificare ale utilizatorului cu cele ale aplicaþiei (sau ale domeniului) 3.NET refuzã cererea clientului ºi returneazã o paginã de autentificare (Login. Windows Authentication În acest mod de autentificare. 1. Atâta timp cât acest cookie rãmâne valid. Pagina securizatã cerutã ºi noul cookie sunt returnate clientului.aspx) 4.56 Introducere în . de exemplu nume de utilizator ºi parolã.Net Framework (Suport de curs) 4. 2. dupã care trimite cererea cãtre ASP. Forms-Based Authentication Atunci când se utilizeazã autentificarea bazatã pe formulare. ASP.1.6. dupã care retrimite cererea cãtre IIS 6.3.NET are încorporate procedurile de autentificare. 4. direcþioneazã cererea cãtre aplicaþia Web. 1. 1.NET 6.NET 2. IIS nu realizeazã autentificarea. Utilizatorul solicitã o paginã securizatã de la aplicaþia Web. aplicaþia ASP . IIS refuzã cererea utilizatorului 4. .NET autentificã clientul pe baza informaþiilor furnizate. Cookie reprezintã un mic fiºier text ce pãstreazã diverse informaþii despre utilizatorul respectiv. Securizarea unei aplicaþii web Securizarea unei aplicaþii web presupune realizarea a douã obiective: (1) autentificarea ºi (2) autorizarea. Clientul introduce datele de autentificare. Acesta verificã pe calculatorul clientului prezenþa unui anumit cookie1 3. informaþii folosite la urmãtoarea vizitã a sa pe site-ul respectiv. Dacã acestea douã nu corespund. sau în diverse alte scopuri. iar apoi verificarea în sistem cã acestea existã si sunt valide. 7. clientul poate solicita ºi vizualiza orice paginã securizatã ce utilizeazã aceleaºi informaþii de autentificare. De asemenea genereazã ºi un cookie. Din nou.2. la autentificare. Pagina securizatã este returnatã utilizatorului.6. IIS autentificã clientul ca fiind un utilizator anonim. ºi în cazul în care sunt corecte. În momentul în care un utilizator solicitã o paginã securizatã. ASP. Dacã cookie-ul nu este prezent sau este invalid. dar se bazeazã pe sistemul de operare Windows pentru autentificarea utilizatorului. IIS verificã datele de autentificare. IIS autentificã clientul ca fiind un utilizator anonim ºi trimite cererea cãtre ASP. Calculatorul clientului genereazã o fereastrã de autentificare 5.

8. Din meniul contextual asociat acestor controale se alege opþiunea Choose data source. Aceste obiective pot fi atinse foarte uºor utilizând funcþionalitãþile ºi uneltele din ASP. Pentru acest exemplu va trebui sã descãrcaþi baza de date AdventureWorksDB de la adresa http://www.aspx. microsoft. anume clasa Membership ºi unealta ASP.com/vstudio/express/vwd/ .aspx. aplicatia Security.microsoft.com/en-us/vstudio/aa718334. din meniul Add Item se alege SQL Database. Configurarea autentificãrii ºi autorizãrii se poate realiza dupã cum se vede în acest tutorial: http://msdn2.NET 57 2.7. aspx?ReleaseId=4004. Legãtura între baza de date ºi controalele html se realizeazã prin intermediul obiectului SqlDataSource. aplicaþia DataControls.msi care trebuie lansat pentru a instala baza de date pe server/calculator.com/en-us/vstudio/aa718334.com/en-us/library/879kf95c(VS. Detailview.aspx. La aceastã sursã de date se pot lega controale de afiºare a datelor cum ar fi: GridView. Fiºierul descãrcat va fi unul de tip *. Un exemplu de securizare a aplicaþilor web puteþi gãsi pe dvd-ul ARK.CAPITOLUL 4. Din meniul contextual asociat acestui obiect se alege opþiunea Configure Data Source. se alege baza de date. Autorizarea este procesul prin care un utilizator autentificat primeºte acces pe resursele pe care are dreptul sã le acceseze.microsoft. ºi se construieºte interogarea SQL pentru regãsirea datelor. instalând Resurse\Visual Studio 2005\101 Samples CS101SamplesAll. Resurse Dezvoltarea de aplicaþii web cu Visual Web Developer Express: http://msdn.msi sau descãrcând cele 101 exemple de utilizare a Visual Studio 2005 de la adresa http://msdn2.com/MSFTDBProdSamples/Release/ProjectReleases. Baza de date va fi adaugatã în directorul App_data al proiectului. 4. FormView. Un exemplu de acces la o bazã de date într-o aplicaþie web puteþi gãsi pe DVD-ul ARK instalând Resurse\Visual Studio 2005\101 Samples CS101SamplesAll.msi sau descãrcând cele 101 exemple de utilizare a Visual Studio 2005 de la adresa http://msdn2.NET Configuration (din meniul Website al Visual Studio Web Developer Express). 4.microsoft.NET respectiv Visual Studio.codeplex. Accesul la o baza de date într-o paginã web Pentru adãugarea unei baze de date proiect.80). de unde se alege sursa de date. Programarea web cu ASP.

.

. 29 Deciziile arhitecturale stabilesc în principal cum se leagã interfaþa de restul aplicaþiei ºi cât de uºor de întreþinut este codul rezultat. clasele Form ºi Control din .1. Controller( proceseazã ºi rãspunde la evenimente iar SO. c) Modelul arhitectural Multi-nivel Nivelul de prezentare ( interfaþa) Se ocupã numai de afiºarea informaþiilor cãtre utilizator ºi captarea celor introduse de acesta. o parte a codului este generatã automat de Visual Stdio. clic. timpul de dezvoltare al unei astfel de aplicaþii este foarte mic. încapsuleazã accesul la date). secvenþe care. Acest model nu este orientat pe obiecte.Net. Spunem cã o aplicaþie este vizualã dacã dispune de o interfaþã graficã sugestivã ºi pune la dispoziþia utilizatorului instrumente specifice de utilizare (drag. b)Modelul arhitectural Model-view-controller Este caracterizat de cele trei concepte de bazã: Model (reprezentarea datelor se realizeazã într-o manierã specificã aplicaþiei: conþine obiectele de „business”. hint etc. proiectarea oricãrei aplicaþii "vizuale" îmbinã ambele tehnici. vor forma programul.59 CAPITOLUL 5 Programare vizualã 5. ºi cu atât mai mult despre baza de date 28 Se utilizeazã ades antonimia dintre vizual (operaþii asupra unor componente grafice) ºi textual (scriere de linii de cod). codul nu este foarte uºor de întreþinut ºi este recomandat pentru aplicaþii relativ mici sau cu multe operaþii de acces (in/out) la o bazã de date. Aceastã operare are ca efect scrierea automatã a unor secvenþe de program. împreunã cu secvenþele scrise textual28.) Realizarea unei aplicaþii vizuale nu constã doar în desenare ºi aranjare de controale. decizii ce au la bazã unul dintre modelele arhitecturale de bazã: a) Modelul arhitectural orientat pe date. este format din Form-uri). Nu cuprinde detalii despre logica aplicaþiei. ci presupune în principal stabilirea unor decizii arhitecturale29. View (sunt utilizate elemente de interfaþã. Concepte de bazã ale programãrii 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ã).Net ruteazã evenimentul cãtre un „handler”. eveniment tratat în codul din spatele Form-urilor).

în cadrul interfeþei cu utilizatorul. este vitalã culegerea de informaþii despre utilizatorii finali ai aplicaþiei ºi a modului în care aceºtia sunt obiºnuiþi sã lucreze. dar nu este uºor de realizat. Poziþia controalelor Locaþia controalelor dintr-o fereastrã trebuie sã reflecte importanþa relativã ºi frecvenþa de utilizare. Consistenþa Ferestrele ºi controalele trebuie sã fie afiºate dupã un design asemãnãtor („tem30 Întrucât mintea umanã poate sã perceapã la un moment dat aproximativ 5-9 obiecte. . Aici se efectueazã calculele ºi procesãrile ºi se lucreazã cu obiecte de tipuri definite de programator.60 Introducere în . Cu alte cuvinte. la alte servicii.. o fereastrã supra-încãrcatã de controale o face greu de utilizat. la fiºiere.NET.Net Framework (Suport de curs) sau fiºierele pe care aceasta le utilizeazã. Astfel. nu se vor folosi obiecte de tipuri definite de programator. Nivelul de logicã a aplicaþiei Se ocupã de tot ceea ce este specific aplicaþiei care se dezvoltã. Indiferent de modelul arhitectural ales. Nivelul de acces la date Aici rezidã codul care se ocupã cu accesul la baza de date. modificãrile 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. în realizarea aplicaþiei mai trebuie respectate ºi principiile proiectãrii interfeþelor: Simplitatea Interfaþa trebuie sã fie cât mai uºor de înþeles30 ºi de învãþat de cãtre utilizator ºi sã permitã acestuia sã efectueze operaþiile dorite în timp cât mai scurt. Aceastã ultimã structurã este foarte bunã pentru a organiza aplicaþiile. De exemplu. când un utilizator trebuie sã introducã niºte informaþii – unele obligatorii ºi altele opþionale – este indicat sã organizãm controalele astfel încât primele sã fie cele care preiau informaþii obligatorii. dacã în interfaþa cu utilizatorul prezentãm date sub formã ListView ºi la un moment dat clientul ne cere reprezentarea datelor într-un GridView. În acest sens. ci numai baza din .

Toate metodele ºi proprietãþile clasei Application sunt .NET ca parte a proiectului. Programare vizualã 61 plate”) pe parcursul utilizãrii aplicaþiei. ceea ce permite crearea aplicaþiilor în mod interactiv. 5.cs este formularul creat implicit de Visual Studio. Mediul de dezvoltare Visual C# Mediul de dezvoltare Microsoft Visual C# dispune de instrumente specializate de proiectare. Codul ”din spatele” unei componente vizuale este accesibil în modul Code (F7). Solution Explorer ºi celelalte se aflã grupate în meniul View. Pentru a construi o aplicaþie Windows (File New Project) se selecteazã ca template Windows Application.. Toolbox conþine controale standard drag-and-drop ºi componente utilizate în crearea aplicaþiei Windows.Run(new Form1()).CAPITOLUL 5. rapid ºi uºor. sã definim „template”-ul. Fereastra Properties este utilizatã pentru a schimba proprietãþile obiectelor.2. Visual Studio.NET le-a inclus în proiect. Estetica Intefaþa trebuie sã fie pe cât posibil plãcutã ºi atrãgãtoare. În fereastra Solution Explorer sunt afiºate toate fiºierele pe care Visual Studio. Componentele vizuale ale aplicaþiei pot fi prelucrate în modul Designer (Shift+F7) pentru a plasa noi obiecte. O aplicaþie Windows conþine cel puþin o fereastrã (Form) în care se poate crea o interfaþã cu utilizatorul aplicaþiei.NET genereazã un spaþiu de nume ce conþine clasa staticã Program. Controalele sunt grupate în categoriile logice din imaginea alãturatã.. trebuie decidem cum va arãta aceasta. a le stabili proprietãþile etc. Designer. metode de lucru cu aplicaþia ºi altele. Clasa Application este responsabilã cu administrarea unei aplicaþii Windows. Înainte de a implementa interfaþa. Application. Code. punând la dispoziþie proprietãþi pentru a obþine informaþii despre aplicaþie. cu metoda staticã ce constituie punctul de intrare (de lansare) a aplicaþiei: static void Main() { } . La crearea unei noi aplicaþii vizuale. Form1.

} F_nou form=new F_nou(). generat automat pe mãsurã ce noi desemnãm componentele ºi comportamentul acesteia. Clic etc. aplicaþia poate fi lansatã. (celelalte opþiuni ale meniului Debug).Forms. Când un nou formular este activat folosind form. (orice plasãm noi în fereastrã) ºi adaugã referinþele acestor obiecte la colecþia de controale ale ferestrei.).Show() sau cu form.) ºi o serie de metode specifice (handlere) de tratare a evenimentelor (Load. etc. metode care implementeazã anumite comportamente (Show. Compilarea modulelor aplicaþiei ºi asamblarea lor într-un singur fiºier ”executabil” se realizeazã cu ajutorul opþiunilor din meniul Build. urmãrirea pânã la puncte de întrerupere etc.Button). set. sau pot fi activate din submeniul Windows al meniului Debug.Forms. acest cod realizeazã: derivarea unei clase proprii din System. aplicaþia rãspunzând la mesajele utilizatorului pânã când formularul va fi închis. Ferestre Spaþiul Forms ne oferã clase specializate pentru: creare de ferestre sau formulare (System.Form.Windows. O fereastrã poate fi activatã cu form. clasã care este înzestratã cu o colecþie de controale (iniþial vidã). MenuStrip. Clasele derivate din Form moºtenesc o serie de proprietãþi care determinã atributele vizuale ale ferestrei (stilul marginilor. În fapt. cu asistenþã de depanare sau nu (opþiunile Start din meniul Debug). Odatã implementatã.Forms. culoare de fundal. Alte facilitãþi de depanare pot fi folosite prin umãrirea pas cu pas.Owner = this. 5. metoda a doua permiþând 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).3. trebuie sã scriem noi codul ce realizeazã instanþierea.Form).62 Introducere în . form. Constructorul ferestrei realizeazã instanþieri ale claselor Button. Activarea propietarului unui formular deschis modal va determina activarea formularului deschis modal. elemente specifice (controale) cum ar fi butoane (System. Hide.Forms.ShowDialog(). acesta stabilindu-se direct: public Form Owner { get. Focus etc. Proiectarea unei ferestre are la bazã un cod complex.Show() nu va avea nici un deþinãtor.Windows.Net Framework (Suport de curs) statice. Metoda Run invocatã mai sus creeazã un formular implicit. atunci ea este instanþiatã automat în programul principal (metoda Main).Windows. Dacã nu.Show().Windows. Timer etc. Dacã modelul de fereastrã reprezintã ferestra principalã a aplicaþiei. Deþinãtorul se poate stabili setând proprietarul înainte sã apelãm Form. Un propietar este o fereastrã care contribuie la comportarea formularului deþinut. casete de text (System.TextBox) etc. Formularul deschis modal va avea un proprietar setat pe null. Ferestre auxiliare de urmãrire sunt vizualizate automat în timpul procesului de depanare.). form. uzualã fiind Build Solution (F6).ShowDialog() sau apelând .

form. 1)..ShowDialog(this).MaxValue. • Location (X. Locaþia formularului poate fi stabilitã relativ la desktop astfel: void Form_Load(object sender. Marginile. Când se schimbã proprietãþile Width ºi Height ale unui formular. Programare vizualã 63 From.ShowDialog() cu proprietarul ca argument. butonul de închidere . stabilitã de Windows.. • MaxinumSize ºi MinimumSize sunt utilizate pentru a restricþiona dimensiunile unui formular. // setarea propietatii Visible indirect sau this. aceastã redimensionare fiind tratatã în evenimentele Resize sau in SizeChanged.MaximumSize = new Size(int. Pentru a ascunde un formular putem folosi: this. poziþie ce poate fi setatã Manual sau poate fi centratã pe desktop (CenterScreen). this. Miºcarea formularului ( ºi implicit schimbarea locaþiei) poate fi tratatã în evenimentele Move ºi LocationChanged .Visible = false. void Form_Load(object sender. F_nou form = new F_nou(). acesta se va redimensiona automat. (Aceastã propietate e ignoratã dacã StartPosition = Manual). titlul ºi scrollbar-ul sunt desenate de Windows....MinimumSize = new Size(200.Location = new Point(1. 1). formularul nu este în totalitate responsabil pentru desenarea întregului conþinut al sãu. this. • ControlBox precizeazã dacã fereastra conþine sau nu un icon.} • IsMdiContainer precizeazã dacã form-ul reprezintã un container pentru alte form-uri.CAPITOLUL 5. centrat pe formularul care l-a afiºat (CenterParent) atunci când formularul va fi afiºat modal..Y) reprezintã coordonatele colþului din stânga sus al formularului relativ la colþul stânga sus al containerului. } //formularul in desktop • Size (Width ºi Height) reprezintã dimensiunea ferestrei. // setarea propietatii Visible direct Printre cele mai uzuale proprietãþi ale form-urilor. Partea care este desenatã de formular mai este denumitã ºi Client Area. EventArgs e) { this. formularul având dimensiunile ºi locaþia stabilite de programator (WindowsDefaultLocation) sau Windows-ul va stabili dimensiunea iniþialã ºi locaþia pentru formular (WindowsDefaultBounds) sau. Vizibilitatea unui formular poate fi setatã folosind metodele Hide sau Show. 100). 100).Hide().DesktopLocation = new Point(1. reamintim: • StartPosition determinã poziþia ferestrei atunci când aceasta apare prima datã. EventArgs e) { this. Chiar dacã propietatea Size a formularului indicã dimensiunea ferestrei.

Dacã nu scriem nici un nume pentru funcþia de tratare. se genereazã automat un nume pentru aceastã funcþie. • Activated apare pentru formularul activ.Windows. Show. Maximize. • FormClosed apare când formularul este închis. Visual Studio . SizeGripStyle specificã tipul pentru ‘Size Grip’ (Auto. • FormClosing apare când formularul se va inchide ca rezultat al acþiunii utilizatorului asupra butonului Close (Dacã se seteazã CancelEventArgs. Size. HelpButton-precizeazã dacã butonul va apãrea sau nu lângã butonul de închidere al formularului (doar dacã MaximizeBox=false.NET vine cu o serie de controale standard. Close).).ico folosit ca icon pentru formular. Dacã în Designer efectuãm dublu clic pe un control. Acesta poate fi „gãzduit” de un container ce poate fi un formular sau un alt control. Move. Minimize.Forms ºi este reponsabil cu desenarea unei pãrþi din container. ci efectuãm dublu clic în cãsuþa respectivã. Printre evenimentele cele mai des utilizate. Controale Unitatea de bazã a unei interfeþe Windows o reprezintã un control. MinimizeBox=false). Icon reprezintã un obiect de tip *. Un control este o instanþã a unei clase derivate din System. 5. pentru un formular Load etc. Hide).Cancel =True atunci se va opri închiderea formularului).4. Dacã utilizatorul apasã acest buton ºi apoi apasã oriunde pe formular va apãrea evenimentul HelpRequested (F1). þinând cont de numele controlului ºi de numele evenimentului (de exemplu button1_Click). .Net Framework (Suport de curs) • • • • • • • • al ferestrei ºi meniul System (Restore. Size grip (în colþul din dreapta jos) indicã faptul cã aceastã fereastrã poate fi redimensionatã. se numãrã : • Load apare când formularul este pentru prima data încãrcat în memorie. pentru TextBox este TextChanged. TopMost precizeazã dacã fereastra este afisatã în faþa tuturor celorlalte ferestre. 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 când formularul este minimizat. Definirea unei funcþii de tratare a unui eveniment asociat controlului se realizeazã prin selectarea grupului Events din ferestra Properties a controlului respectiv ºi alegerea evenimentului dorit. TransparencyKey identificã o culoare care va deveni transparentã pe formã. disponibile în Toolbox. se va genera automat o funcþie de tratare pentru evenimentul implicit asociat controlului (pentru un buton evenimentul implicit este Click. Aceste controale pot fi grupate astfel: 31 Dacã va fi setatã la 10% formularul ºi toate controalele sale vor fi aproape invizibile. • Deactivate apare atunci când utilizatorul va da clic pe alt formular al aplicatiei.64 Introducere în .

Scopul sãu este de a gãzdui alte controale. Exemple de folosire a acestor controale vor urma dupã explicarea proprietãþilor comune al controalelor ºi formularelor. Prima proprietate enunþatã seteazã culoare textului din formular. Oferã utilizatorului opþiunile : da/nu sau include/exclude Sunt folosite pentru afiºarea etichetelor de text. Acesta poate fi derulat ºi înainte ºi înapoi la celelalte luni calendaristice. iar cea de a doua seteazã culoarea formularului. Controlul form este un container.CAPITOLUL 5.2. Proprietãþi comune ale controalelor ºi formularelor: Proprietatea Text Aceastã proprietate poate fi setatã în timpul proiectãrii din fereastra Properties. Este folosit pentru ca utilizatorul sã selecteze un singur element dint-un grup de selecþii. 5. Este utilizat pentru afiºarea textului generat de o aplicaþie sau pentru a primi datele introduse de la tastaturã de cãtre utilizator. Este utilizat pentru selectarea. Controale form. Toate acestea le puteþi modifica dupã preferinþe din fereastra Properties. Programare vizualã 65 5. putem personaliza programul nostru. Este folosit pentru adãugarea imaginilor sau a altor resurse de tip bitmap. introducând o declaraþie în codul programului.1. În tabelul de mai jos veþi gãsi o listã cu controalele cel mai des folosite ºi cu descrierea lor.4. Afiºeazã o listã de articole din care utilizatorul poate alege. this.Text = “Primul formular”. ºi a pentru a eticheta controalele. } Proprietãþile ForeColor ºi BackColor. sau programatic. mutarea sau redimensionarea unui control. Exemplu: public Form1() { InitializeComponent(). Funcþia controlului Numele controlului Descriere Sunt folosite pentru a executa o secvenþã de instrucþiuni în buton Button momentul activãrii lor de cãtre utilizator calendar casetã de validare etichetã casetã cu listã imagine pointer buton radio casetã de text MonthCalendar CheckBox Label ListBox PictureBox Pointer RadioButton TextBox Afiºeazã implicit un mic calendar al lunii curente. Folosind proprietãþile.4. . metodele ºi evenimentele unui formular.

la mai multe linii. un buton radio îºi va schimba starea automat la executarea unui clic. Introduceþi acum în el linia de cod this. EventArgs e) { this. iar în caseta de dialog care apare adãugaþi numele Form2. Proprietatea Multiline schimbã setarea implicitã a controlului TextBox de la o singurã linie. } Numele metodei button1_Click este alcãtuit din numele controlului button1. (tot din fereastra Properties) Proprietatea FormatString vã permite sã setaþi un format comun de afiºare pentru toate obiectele din cadrul unei ListBox. Din meniul Project selectaþi Add Windows Form. Proprietatea TabIndex seteazã sau returneazã poziþia controlului în cadrul aranjãrii taburilor. Proprietatea AutoSize folositã la controalele Label ºi Picture. De asemenea trebuie sã le facem sã disparã de pe ecran. Proprietatea ImageAlign specificã alinierea unei imagini aºezate pe suprafaþa controlului. decide dacã un control este redimensionat automat. Acum ar trebui sã reveniþi la Form1 ºi executaþi dublu clic pe butonul din acest formular pentru a ajunge la administratorul sãu de evenimente. Trageþi un buton pe formular. Proprietatea AutoCheck când are valoarea true. Pentru a realiza acest lucru trageþi un TextBox într-un formular ºi modificaþi valoarea proprietãþii Multiline din panoul Properties de la False la true.4. Cel mai important eveniment pentru Button este Click (desemnând acþiunea clic stânga pe buton). Proprietatea Enabled determinã dacã un control este sau nu activat într-un formular. private void button1_Click(object sender.. Trageþi un buton în Form2 ºi executaþi dublu clic pe buton. urmat de numele evenimentului: Click. În acest moment aþi inclus în program douã formulare.Close().66 Introducere în . Editaþi administratorul evenimentului conform exemplului de mai jos: . Pentru a reuºi acest lucru folosim metodele Show() ºi Close() ale controlului. pentru a-i cuprinde întreg conþinutul. pentru noul formular creat. Controleazã stilul bordurii unui formular.Net Framework (Suport de curs) Proprietatea BorderStyle. 5.Close(). Un exemplu în acest sens: Deschideþi o nouã aplicaþie Windows. Proprietatea Font determinã fontul folosit într-un formular sau control. Câteva dintre metodele ºi evenimentele Form Când dezvoltãm programe pentru Windows.3. pentru a afiºa administratorul sãu de evenimente. uneori trebuie sã afiºãm ferestre adiþionale. Proprietatea Visible seteazã vizibilitatea controlului. Încercaþi sã vedeþi cum se modificã setând proprietatea la Fixed3D. Proprietatea Width and Height permite setarea înãlþimii ºi a lãþimii controlului. Aceasta se gãseºte disponibilã în panoul Properties.

conform imaginii. Tot în cadrul evenimentului Click. EventArgs e) { Form2 form2 = new Form2(). EventArgs e) { string a = “PLATFORMA . oferim acum un exemplu de afiºare într-un TextBox a unui mesaj. Modificaþi textul ce apare pe buton. Modificaþi sursa astfel încât sã arate în modul urmãtor. Trageþi un buton pe formular ºi o casetã TextBox. apelãm metoda MessageBox. private void button1_Click(object sender. ºi executaþi dublu clic pe el.CAPITOLUL 5. modificaþi textul butonului cum doriþi sau ca în imaginea alãturatã „va apare un mesaj”.Text = a. } În acest moment rulaþi programul apãsând tasta F5 ºi veþi 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. form2. în momentul în care se executã clic pe un buton: Deschideþi o nouã aplicaþie Windows. Programare vizualã 67 private void button1_Click(object sender.Show().Într-o nouã aplicaþie Windows. executaþi dublu clic pe buton ºi . pentru a ajunge la administratorul sãu de evenimente. trageþi un buton în formular. } Casete de mesaje: Pentru a crea o casetã mesaj.NET”. textBox1.Show()..

this. apoi în ordine: setaþi proprietatea ControlBox la valoarea false.68 Introducere în . EventArgs e) { textBoxText = textBox1.. iar apoi executaþi dublu clic pe buton ºi folosiþi urmãtorul cod pentru administratorul evenimentului Click. executaþi clic pe formularul casetei de dialog ºi setaþi proprietatea AcceptButton la OKButton iar proprietatea CancelButton la CancelButton.ShowDialog(). w. adãugaþi douã butoane. } Creaþi un alt formular la acest proiect(alegeþi Add Windows Forms din meniul Project). Apoi rulaþi programul.Net Framework (Suport de curs) adãugaþi în administratorul evenimentului Click linia de program: MessageBox. setaþi proprietatea DialogResult a butonului din stanga la OK iar al celui din dreapta la Cancel.Text. trageþi în formular un control de tip Label ºi Text la “introdu text”. apoi trageþi un buton în formular ºi setaþi proprietatea Text a butonului la : „sã avem un dialog”. adãugaþi un control TextBox în formular. setaþi proprietatea Text a butonului din stânga la “OK” iar al celui din dreapta la “Cancel”.Show(“tiam spus”). EventArgs e) { Form2 w = new Form2(). private void button1_Click(object sender. } . Acum executaþi dublu clic pe butonul OK ºi folosiþi urmãtorul cod pentru administratorul evenimentului Click: private void button1_Click(object sender. Casete de dialog O casetã de dialog este o formã specializatã de control de tip Form. Exemplu: Creaþi o nouã aplicaþie Windows.Close(). setaþi proprietatea Text la “casetã de dialog”.

Faceþi dublu clic pe fiecare buton numeric în parte pentru a ajunge la sursã ºi modificaþi fiecare sursã respectând codul de mai jos: private void button7_Click(object sender. Adãugaþi un menuStrip care sã conþinã elementele precizate mai sus. Meniul principal va avea un obiect File ce va conþine câte un obiect Exit ºi Clear. Iar la sfãrºitul clasei Form2 adãugaþi proprietatea: public string TextBoxText {get{ return(textBoxText). ce va conþine un meniu principal.OK) { this. Ieºirile vor fi afiºate într-un TextBox. Programare vizualã 69 Executaþi dublu clic pe butonul Cancel ºi folosiþi urmãtorul cod pentru administratorul evenimentului Click: private void button2_Click(object sender.DialogResult != DialogResult. Creaþi o nouã aplicaþie Windows în care trageþi 13 butoane pe care le veþi poziþiona ºi numi ca în figura alãturatã. } . } } La începutul clasei Form2 adãugaþi declaraþia: public string textBoxText.} Acum puteþi rula acest program. ºi pe care le puteþi observa în figura alãturatã. if (v. textBox1. EventArgs e) { Form2 v = new Form2().CAPITOLUL 5.Clear(). v. EventArgs e) { string v = textBox1.textBox1.Text = v.ShowDialog(). apoi mai adãugaþi un TextBox(pe acesta îl puteþi seta sã arate textul în stânga sau în dreapta).Text. Crearea interfeþei cu utilizatorul: Vom crea o aplicaþiei numitã Minicalculator. v += “7”.

Net Framework (Suport de curs) Am dat exemplu pentru tasta 7. EventArgs e) { int n1.70 Introducere în . n2. Acum procedaþi la fel.ToInt16(op2). . EventArgs e) { op1 = textBox1. } textBox1. } Un alt exemplu: Se adaugã pe formular douã butoane ºi o casetã text. if (operatie == “+”) { x = n1 + n2. variabila v. } Pentru butonul = folosiþi codul urmãtor: private void button13_Click(object sender. n1 = Convert. private void button11_Click(object sender. n2 = Convert. Apãsarea primului buton va determina afiºarea textului din TextBox într-un MessageBox iar apãsarea celui de-al doilea buton va închide închide aplicaþia.Close(). va primi ca valoare numãrul afiºat pe tasta respectivã. } private void exitToolStripMenuItem_Click(object sender.Text = “”.Text = “”.n2.ToString(x). x = 0. } Codul pentru obiectele Exit ºi Clear din meniul File va fi: private void clearToolStripMenuItem_Click(object sender.Text = Convert. EventArgs e) { textBox1. textBox1. EventArgs e) { this. dar atenþie la fiecare tastã.ToInt16(op1). } else if (operatie == “-”) { x = n1 . ºi modificaþi sursa pentru butoanele + ºi -. op1 = “”.Text. operatie = “+”. op2 = “”.

textbox. Caseta text devine vizibilã atunci când apãsãm prima oarã acest buton. La o nouã apãsare butonul revine la culoare iniþialã. un set de funcþionalitãþi de bazã. Dupã adãugarea butoanelor ºi a casetei text pe formular. Delete.} • Controale valoare (label. Programare vizualã 71 Dupã adãugarea celor douã butoane ºi a casetei text. a fost schimbat textul afiºat pe cele douã butoane ºi au fost scrise funcþiile de tratare a evenimentului Click pentru cele douã butoane: private void { private void { button1_Click(object sender.EventArgs e) Form1. TextBox . System. Paste.permite utilizatorului sã introducã un text. Exemplul PV2 afiºeazã un grup alcãtuit din 3 butoane. SelectAll). Prevede. prin intermediul ContextMenu-ului asociat. PictureBox permite afiºarea unei imagini. imagine).B respectiv C având iniþial culoarea roºie.CAPITOLUL 5. ca de exemplu (Cut. Acþionarea butonului “Starea butoanelor” determinã afiºarea într-o casetã text a etichetelor butoanelor galbene.} button2_Click(object sender. System.ActiveForm.Text). Label este folosit pentru plasarea de text pe un formular. Apãsarea unui buton determinã schimbarea culorii acestuia în galben. Textul afiºat este conþinut în propietatea Text ºi este aliniat conform propietãþii TextAlign.Show(textBox1. picturebox) care aratã utilizatorului o informaþie (text.EventArgs e) MessageBox.Dispose(). etichetate A. stabilim evenimentele care determinã schimbarea culoriilor ºi completarea casetei text. . Copy. Culoarea butonului mare (verde/portocaliu) se schimbã atunci când mouse-ul este poziþionat pe buton.

Rezultatul va fi afiºat într-un MessageBox.Orange.Yellow.Visible=false.Text=””.BackColor=Color.Yellow)textBox1.72 Introducere în .Text=textBox1. System.BackColor=Color. Soluþia unei probleme cu mai multe variante de rãspuns este memoratã cu ajutorul unor checkbox-uri cu proprietatea ThreeState. se declanºeazã evenimentul Checked.BackColor==Color. Dacã propietatea ThreeState este setatã.} private void button4_MouseLeave(object sender.BackColor==Color.Text=textBox1.} private void button4_MouseEnter(object sender. atunci se schimbã funcþionalitatea acestor controale.IndianRed) button1.EventArgs e) {if (button1. Aplicaþia PV3 este un exemplu de utilizare a acestor controale.} private void button4_Click(object sender.Text+’A’. System. else button1. Dupã adãugarea controalelor pe formular ºi setarea proprietãþilor Text ºi ThreeState în cazul checkbox-urilor stabilim evenimentele click pentru butonul Verifica ºi pentru butonul radio cu eticheta DA: .BackColor==Color.EventArgs e) {button4.Indeterminate) pentru a vedea starea controlului. Apãsarea butonului Verificã determinã afiºarea unei etichete ºi a butoanelor radio DA ºi NU.Net Framework (Suport de curs) private void button1_Click(object sender.button4. Unchecked.Text=textBox1.RadioButton) au propietatea Checked care indicã dacã am selectat controlul.Visible=true.YellowGreen. trebuie verificatã propietatea CheckState(Checked.Text=”Starea butoanelor”. button4.BackColor= Color. Exerciþiu ( Password) Adãugaþi pe un formular o casetã text în care sã introduceþi un ºir de caractere ºi apoi verificaþi dacã acesta coincide cu o parolã datã.Text+’B’.textBox1. if( button2. • Controale de selecþie (CheckBox.BackColor=Color.button4. if( button1. diferenþierea fiind fãcutã de parametrul sender. Rãspunsul este afiºat într-un MessageBox. System.EventArgs e) {textBox1. Dupã schimbarea stãrii unui astfel de control. } Exerciþiu Modificaþi aplicaþia precedentã astfel încât sã avem un singur eveniment button_Click. Textul introdus în casetã nu este vizibil (fiecare caracter este înlocuit cu*). if( button3.IndianRed.Text+’C’.Yellow)textBox1. în sensul cã acestea vor permite setarea unei alte stãri. System.BackColor== Color.Text=”Butoane apasate”.EventArgs e) {textBox1.Yellow)textBox1. În acest caz.

System.} Exerciþiu (Test grilã) Construiþi un test grilã care conþine 5 itemi cu câte 4 variante de rãspuns (alegere simplã sau multiplã). memoraþi rãspunsurile date ºi afiºaþi. else MessageBox. radioButton2. Pentru a face link-ul funcþional trebuie tratat evenimentul LinkClicked. System.Start(“IExplore”.Checked=false.Process.microsoft. dupã efectuarea testului.CAPITOLUL 5.CheckState==CheckState.Checked=false.Checked && checkBox3.LinkVisited = true. System.CheckState==CheckState. rãspunsul corect. prima etichetã permite afiºarea conþinutului discului C:.Process. radioButton1.Process. LinkLabelLinkClickedEventArgs e ) {etichetaI.CheckState==CheckState.Start( “notepad” ).. radioButton2.. Programare vizualã 73 private void radioButton1_Click(object sender. a doua legãturã este un link cãtre pagina www. System. LinkLabelLinkClickedEventArgs e ) {etichetaN.Unchecked) MessageBox.CheckState==CheckState.Diagnostics.} private void etichetaN_LinkClicked( object sender..Visible=true.Checked && checkBox4.EventArgs e) {if (checkBox1. LinkLabelLinkClickedEventArgs e ) { etichetaC. în dreptul fiecãrui item.CheckState==CheckState.Visible=true.com/romania/” ).Show(“Indicatie> Daca punem un sac in altul.radioButton2.Show(“CORECT”). private void etichetaC_LinkClicked (object sender.} private void button1_Click(object sender. radioButton1.Visible=false.Visible=true.radioButton1.microsoft.Checked && checkBox5. label2.} .EventArgs e) {label2.Visible=false. System. “http://www.Diagnostics.Checked && checkBox2. În exemplul PV4. într-o casetã text.Start( @”C:\” ).} private void etichetaI_LinkClicked( object sender.Visible=false.Diagnostics.LinkVisited = true.com/romania ºi a treia acceseazã Notepad.LinkVisited = true.”). • LinkLabel afiºeazã un text cu posibilitatea ca anumite pãrþi ale textului (LinkArea) sã fie desenate ca ºi hyperlink-uri.

Items. Apãsarea butonului Desene va adãuga fiºierele *. foreach ( object c in checkedListBox1.} label1. .} Exerciþiu (Filtru) Construiþi o aplicaþie care afiºeazã fiºierele dintr-un folder ales care au un anumit tip (tipul fiºierelor este ales de utilizator pe baza unui CheckedListBox) Aplicaþia PV6 este un exemplu de utilizare a controlului ImageList. stabilim colecþia de itemi (Properties-Items-Collection).Clear(). de un ArrayList sau de orice tablou (orice sursã de date ce implementeazã interfaþa IEnumerable). listBox1.CheckedItems) {listBox1. În exemplul PV5 elementele selectate din CheckedListBox se adaugã în ListBox.) ºi dupã aceea adaugã în ordine fiecare element selectat din CheckedListBox.Text = s. Evenimentul Click asociat butonului Setectie goleºte mai întâi listBox-ul (listBox1. CheckedListBox. void button1_Click(object source. s = s + c. ComboBox.74 Introducere în . Controale pentru listare (ListBox.Clear(). butonul Selecþie ºi ListBox-ul. Suplimentar se afiºeazã o etichetã cu itemii selectaþi.Items.Net Framework (Suport de curs) Exerciþiu (Memorator) Construiþi o aplicaþie care sã conþinã patru legãturi cãtre cele patru fiºiere/ pagini care conþin rezumatul capitolelor studiate.Items.Add(c). Butonul Animate va determina afiºarea fiºierelor *. System.gif cu ajutorul PictureBox.gif din folderul C:\Imagini în listã ºi va afiºa conþinutul acesteia.ToString().EventArgs e) { String s = “Am selectat si am adaugat itemii: “. Dupã adãugarea pe formular a CheckedListBox-ului. ImageList) ce pot fi legate de un DataSet.s = s + “ “.

i < desene_animate.ImageList(). private void contruieste_lista_Click(object sender.ShowTodayCircle.Forms.Images. desene_animate.pictureBox2.Depth8Bit.Draw(g. luna.Add(desen).Windows.Clear(). 60. MonthCalendar afiºeazã un calendar prin care se poate selecta o datã (zi. stabilim proprietãþile pentru monthCalendar1 (ShowWeekNumber-True. string[] gif_uri = Directory. TodayDate ce reprezintã data minimã/maximã selectabilã ºi data curentã (care apare afiºatã diferenþiat sau nu în funcþie de valorile proprietãþilor ShowToday.EventArgs e) { // Configureaza lista desene_animate. // se construieste un obiect Imagine pentru fiecare fisier si se adauga la ImageList.Dispose().Count.GetFiles(“C:\\Imagini”. i). desene_animate. 60 + i * 60. Formularul din aplicaþia PV7 conþine un calendar pentru care putem selecta un interval de maximum 30 de zile. Programare vizualã 75 ImageList desene_animate = new System. MaxSelectionCount-30. Existã 2 evenimente pe care controlul le expune: DateSelected ºi DateChanged. foreach (string fisier_gif in gif_uri) {Bitmap desen= new Bitmap (fisier_gif). programatorul are acces la un obiect de tipul DateRangeEventArgs care conþine proprietãþile Start ºi End (reprezentând intervalul de timp selectat).Draw() for (int i = 0. // Deseneaza fiecare imagine utilizand metoda ImageList. i++) desene_animate.CAPITOLUL 5. sunt afiºate sãptãmânile ºi ziua curentã. MaxDate.Image=desen. “*.Forms. etc.Images. Dupã adãugarea celor 3 controale pe formular.ColorDepth =System. Intervalul selectat se afiºeazã prin intermediul unei etichete.ColorDepth.Size(60.CreateGraphics().) ºi precizãm ce se executã atunci când selectãm un interval de timp: .Drawing. Proprietãþile mai importante sunt: MinDate. În rutinele de tratare a acestor evenimente.Windows. desene_animate. Dacã se selecteazã o datã atunci aceasta va fi adãugatã ca item într-un ComboBox (orice datã poate apãrea cel mult o datã în listã). an) în mod grafic.gif”).ImageSize = new System.} Graphics g = this. } Exerciþiu (Thumbnails) Afiºaþi într-o ferestrã conþinutul folder-ului curent în mod View-Thumbnails. g.Images. 60). System.

LargeImageList. Se porneºte de la rãdãcinã ºi se afiºeazã conþinutul folder-ului selectat cu dublu clic. proprietãþile prin care se poate modifica comportamentul controlului sunt identice cu cele ale controlului MonthControl. Acesta este similar grafic cu ferestrele în care se afiºeazã fiºierele dintr-un anumit director din Windows Explorer.colHead = new ColumnHeader(). Columns(utilizat doar în modul Details.Add(colHead). SmallIcon).Columns.ToShortDateString().} } • DateTimePicker este un control care (ca ºi MonthCalendar) se poate utiliza pentru a selecta o datã.Net Framework (Suport de curs) private void monthCalendar1_DateSelected(object sender.Contains(x))) comboBox1. colHead = new ColumnHeader(). this. dimensiunea. printre care: View (selecteazã modul de afiºare (LargeIcon.End.End.Items.Columns.ToShortDateString()==e. conþine foarte multe proprietãþi. Exerciþiu (Formular) Contruiþi un formular de introducere a datelor necesare realizãrii unei adrese de e-mail. în cazul fiºierelor. • ListView este folosit pentru a afiºa o colecþie de elemente în unul din cele 4 moduri (Text.Start. private void ConstruiesteHeader() {ColumnHeader colHead. Details. Text+Imagini mici. Items(elementele de afiºat).Text = “Nume fisier”.lista_fisiere. SmallImageList (icon-urile de afiºat în modurile LargeIcon.Text = “Interval selectat: Start = “ +e.Start. System. prin care se poate selecta data doritã.ToShortDateString()) {String x=e. Data naºterii va fi selectatã direct utilizând MonthCalendar.Windows.76 Introducere în .ToShortDateString()). this. La expandare se afiºeazã numele complet. Aplicaþia PV8 este un exemplu de utilizare ListView.lista_fisiere. colHead = new ColumnHeader(). if (e. data ultimei accesãri ºi.Forms. Funcþia ConstruiesteHeader permite stabilirea celor trei coloane de afiºat.Add(colHead).End. Controlul lista_fisiere este de tip ListView. SmallIcon.colHead.label1. Detalii). } .Add(e. Fiind un control complex.ToShortDateString().Add(colHead).Start.lista_fisiere. Imagini mari.Text = “Dimensiune”.DateRangeEventArgs e) { this. List)).colHead.Items. his.Columns.Text = “Ultima accesare”. Fiind foarte asemãnãtor cu MonthCalendar.ToShortDateString() + “ : End = “ + e. colHead. pentru a defini coloanele de afiºat). if(!(comboBox1. La clic se afiºeazã un control de tip MonthCalendar.

this.Add(lvsi).Text = “”. lvi. data).lista_fisiere. dimensiune.ListViewSubItem lvsi.lista_fisiere.Add(lvsi). } Exerciþiu (Ordonare) Modificaþi aplicaþia anterioarã astfel încât apãsarea pe numele unei coloane sã determine afiºarea informaþiilor ordonate dupã criteriul specificat (nume. Utilizatorul nu are drept de control asupra tuturor controalelor. sã ºtergem vechiul conþinut al listei: this. lvsi.ListViewSubItem().FullName. this. ContextMenu). SaveFileDialog.GetFiles(). .DirectoryInfo dir = new System.DirectoryInfo(radacina). • Controale ”de control” al executãrii (Timer) sau de dialog (OpenFileDialog. Programare vizualã 77 Pentru item-ul selectat se afiºeazã mai întâi folderele ºi dupã aceea fiºierele.Text = fi. FontDialog.IO.SubItems.LastAccessTime.GetDirectories(). DirectoryInfo[] dirs = dir. lvsi. Dintre acestea vom studia în cele ce urmeazã controlul Timer asupra cãruia are drept de interacþiune doar cel care dezvoltã aplicaþia.Name. ºi sã adãugãm fiecare nou item ( coloana a doua este vidã în cazul folderelor): foreach (System.Text = radacina + “(Doublu Click pe folder)”. ColorDialog. lvi.lvi. lvsi = new ListViewItem. System.lista_fisiere. this.IO.calea_curenta.Text = fi.ListViewSubItem(). ListViewItem.Tag = fi. Pentru aceasta trebuie sã determinãm conþinutul acestuia: ListViewItem lvi.SubItems. lvi.Add(lvi).ImageIndex = 1.ToString().Items. lvsi = new ListViewItem.Items.DirectoryInfo fi in dirs) { lvi = new ListViewItem(). FileInfo[] files = dir.IO.CAPITOLUL 5.Clear().lvi.BeginUpdate().

Se stabileºte.42 MiddleCenter Dãm clic pe icoana de la timer care are numele aplCeas. Bold 82.Net Framework (Suport de curs) Observãm cã aducând din Toolbox controlul Timer.25.000 Aducem în formular un control Label cu urmãtoarele proprietãþi: Control label1 Proprietate (Name) AutoSize BorderStyle FontSize Location Text Size TextAlign Valoare labelCeas False Fixed3D 16.78 Introducere în . iar la Events. în cazul de faþã numãrãtoarea din secundã în secundã Interval 1. el apãrând într-o zonã gri a suprafeþei de lucru (Designer).112 129. la Tick selectãm lblCeas_Click . Vom stabili urmãtoarele proprietãti legate de Timer: Proprietate Valoare (Name) aplCeas Enabled True Explicaþie Activarea controlului de timp Numãrul de milisecunde dintre apelurile la metoda de tratare a evenimentului. acesta nu se afiºeazã pe formular.

ToLongTimeString(). ºapte controale Label ºi un control Button. un control Timer. EventArgs e) { DateTime OraCurenta = DateTime.Text=OraCurenta. Pentru aceasta aducem din Toolbox trei controale ProgressBar. Vom construi un formular ca în imaginea alãturatã. Programare vizualã 79 Dãm dublu clic pe label ºi inserãm codul: private void lblCeas_Click(object sender. Tabelul de mai jos descrie proprietãþile ºi valorile formularului ºi a respectivelor controale: Formularul: Control Form1 Proprietate (Name) Size BorderStyle Text Valoare Form1 606.265 Fixed3D Afiºare timp cu ProgressBar si Label ProgressBar-urile: Control ProgressBar1 Proprietate (Name) Location Maximum Size Step Style Valoare prgOre 82. În urmãtorul exemplu vom folosi ProgressBar pentru a vizualiza ceasul sistemului. } Compilãm ºi obþinem într-o fereastrã vizualizarea orei sistemului.64 23 431.23 1 Blocks .Now.CAPITOLUL 5. lblCeas.

80 Introducere în .144 54.104 54.23 Iesire .Net Framework (Suport de curs) Control ProgressBar2 ProgressBar3 Proprietate (Name) Location Maximum Size Step Style (Name) Location Maximum Size Step Style Valoare prgMinute 82.144 59 431.23 Ore MiddleLeft lblMinute False None 22.23 1 Blocks prgSecunde 82. „Minute”. „Secunde” folosim: Control Label1 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.23 1 Blocks Pentru afiºarea textelor „Ore”.23 Minute MiddleLeft lblSecunde False None 22.106 59 431.64 54.198 75.23 Minute MiddleLeft Label2 Label3 Pentru „Ieºire” folosim: Control Button1 Proprietate (Name) Location Size Text Valoare btnIesire 25.

Now.64 54.106 54.10 54.23 00 MiddleCenter Label5 Label6 Label4 Pentru Timer: Control Timer1 Proprietate (Name) Enabled Interval Valoare Timer1 True 1.23 00 MiddleCenter lblAfisSecunde False Fixed3D 523.Text = H.23 Timp MiddleCenter lblAfisOre False Fixed3D 523.ToString().Hour.Value = M.144 54.CAPITOLUL 5.Minute. prgMinute. lblAfisOre. int M = TimpCurent. prgSecunde. . int H = TimpCurent. int S = TimpCurent. prgOre.23 00 MiddleCenter lblAfisMinute False Fixed3D 523. EventArgs e) { DateTime TimpCurent = DateTime.000 Evenimente Timer1_Tick pentru timer1: private void timer1_Tick(object sender.Second.Value = H. Programare vizualã 81 Pentru informaþiile din partea dreaptã a formularului: Control 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.Value = S.

Cancel) . } pentru a redimensiona proporþional ProgressBar-ul Ore cu cel care reprezintã Minutele.prgMinute.fd.Windows. prin care programatorul are acces la butonul care a fost apasat). fd.Net Framework (Suport de curs) lblAfisMinute. } pentru butonul de Ieºire: private void btnIesire_Click(object sender. EventArgs e) { Close().Forms. introducem urmãtorul cod: private void Form1_Load(object sender.DialogResult.Color = Color.Text = M. la care se pot seta atât textul afiºat sau imaginea.ToString(). EventArgs e) { this. Toolbar-ul se poate muta fãrã a depãºi spaþiul ferestrei. Se pot introduce vizual butoane (printr-un designer.Apply += new EventHandler(ApplyFont). fd.82 Introducere în .NET IDE). if(fd. direct din Visual Studio. Evenimentul cel mai util al acestui control este ButtonClick (care are ca parametru un obiect de tip ToolBarButtonClickEventArgs. lblAfisSecunde.Text = S. respectiv Secundele.prgOre.ShowDialog() != System. fd.ShowApply = true.Width = 2 * this.IndianRed.ToString(). } Compilãm ºi obþinem ora sistemului afiºatã într-o fereastrã de forma: • Grupuri de controale Toolbar (ToolStrip) afiºeazã o barã de butoane în partea de sus a unui formular.ShowColor = true. În aplicaþia urmãtoare PV9 cele 3 butoane ale toolbar-ului permit modificarea proprietãþilor textului introdus în casetã. Schimbarea fontului se realizeazã cu ajutorul unui control FontDialog().Width / 5.iar schimbarea culorii utilizeazã ColorDialog() FontDialog fd = new FontDialog().

toolBar1. forma_deplasata = new Point(e.AllowFullOpen = true. toolBar1.Y).// Disconect toolbar toolBar1.Color = Color.Top>this. 10).} else if (toolBar1. } } else if (toolBar1.FixedSingle.Dock = DockStyle.richTextBox1. if(cd. .Left. Programare vizualã 83 { this.None. if (toolBar1.ForeColor=fd.forma_deplasata.Left > this. cd.Y + toolBar1.X.Capture = false.Y-20)) { am_apasat = false.Height-20) { am_apasat = false.toolBar1.BorderStyle = BorderStyle.Top.Size.richTextBox1.Size.Font.X-20) || forma_deplasata.Dock = DockStyle.Forms.Font= fd.Width .Left = e. MouseEventArgs e) { if (am_apasat) { if(toolBar1.Left .OK) this. e.None) {toolBar1.Y < (e. toolBar1.CAPITOLUL 5. } ColorDialog cd = new ColorDialog().X < (e.Top < 5 || toolBar1.Capture = true. toolBar1.DarkBlue. toolBar1.toolBar1.Dock = DockStyle.X.} private void toolBar1_MouseMove(object sender.} private void toolBar1_MouseUp(object sender. private void toolBar1_MouseDown(object sender.Left) { // daca depaseste atunci duc in stanga sus if (forma_deplasata.Y.X + toolBar1.ForeColor = cd. 45). toolBar1.Dock == DockStyle.DialogResult.Color.Dock == DockStyle.Fixed3D.Size = new Size(200.Windows.Top || toolBar1.Top .Left < 5 || toolBar1.Color.Location = new Point(10. this.20) { am_apasat = false.cd.Top = e. toolBar1.forma_deplasata.ShowDialog() == System. MouseEventArgs e) { // am apasat butonul de mouse pe toolbar am_apasat = true.Dock == DockStyle. MouseEventArgs e) { am_apasat = false. Mutarea toolbar-ul este dirijatã de evenimentele produse atunci când apãsãm butonul de mouse ºi/sau ne deplasãm pe suprafaþa ferestrei.richTextBox1.BorderStyle = BorderStyle.

) Un formular poate afiºa un singur meniu principal la un moment dat. Open. care vor constitui noul nivel de itemi (Ex: File New. Ultima paginã reprezintã coºul de cumpãrãturi. Editarea unui astfel de obiect se poate face utilizând Menu Designer. case cond2:this.break.Save. TabControl) sunt controale ce pot conþine alte controale.84 Introducere în . Shortcut permite asignarea unei combinaþii de taste pentru selectarea unui item al meniului ºi Text . Se utilizeazã 4 pagini de Tab pentru a simula selectarea unor opþiuni ce se pot grupa pe categorii. Clasa MenuStrip are o colecþie de MenuItem care conþine 0 sau mai multe obiecte de tip MenuItem. Fiecare dintre aceste obiecte de tip MenuItem are 0 sau mai multe obiecte de tip MenuItem.BorderStyle = BorderStyle. Exit). Panel.MainMenuStrip = this. Enabled and Visible determinã dacã un item poate fi sau nu selectat sau vizibil. Meniul care este afiºat de cãtre un formular poate fi schimbat dinamic la rulare: switch(cond) { case cond1:this.Net Framework (Suport de curs) toolBar1. Exerciþiu (Magazin) Dezvoltaþi aplicaþia precedentã astfel încât pe o paginã sã se afiºeze modelele disponibile (imagine+detalii) ºi sã se permitã selectarea mai multor obiecte.Fixed3D.MainMenuStrip = this. Aplicaþia PV10 simuleazã lansarea unei comenzi cãtre un magazin de jucãrii.MainMenuStrip. ContextMenuStrip etc. }}} } Exerciþiu (Editor) Realizaþi un editor de texte care conþinã un control toolBar cu butoanele uzuale. Close. } unde mainMenu1 ºi mainMenu2 sunt obiecte de tip MenuStrip. • Controale container (GroupBox.mainMenu1.mainMenu2. • Grupuri de controale tip Meniu (MenuStrip. meniul asociat iniþial fiind specificat prin propietatea Form. Propietãþile Checked ºi RadioCheck indicã itemul selectat.

aspx”). ºtergerea conþinutului casetei. FileMode.OK.Filter = “Text Files (*. richTextBox1. Programare vizualã 85 memoreazã textul care va fi afiºat pentru respectivul item al meniului.Start(“IExplore”. of. Evenimentul Click are loc când un utilizator apasã un item al meniului.Show (“Error opening file”.Text=””. “http://msdn2.Process. FileStream strm.microsoft.FileName.Cancel)return. afiºarea unor informaþii teoretice precum ºi Help dinamic. MessageBoxIcon. if (of. richTextBox1.ShowDialog() == DialogResult.Text+” “+str. while (rdr. of.com/en-us/default. afiºarea continutului acestuia într-o casetã text. Exemplul PV11 permite.richTextBox1.CAPITOLUL 5. File Exit închide aplicaþia Window Font ºi Window Color permit stabilirea fontului/culorii textului afiºat. scrierea unui fiºier Notpad.Read).txt)|*.Process.Open. “File Error”.Start( “notepad” ).Peek() >= 0){string str = rdr.Diagnostics. MessageBoxButtons.Diagnostics. Help DinamicHelp acceseazã System.Exclamation). File New permite scrierea unui fiºier notepad nou System.ReadLine (). prin intermediul unui meniu. try{strm = new FileStream (of.Text=richTextBox1.Visible=true.txt”.Title = “Fisiere Text”. schimbarea fontului ºi culorii de afiºare. StreamReader rdr = new StreamReader (strm).} } catch (Exception){MessageBox. OpenFileDialog of = new OpenFileDialog(). File Open selecteazã ºi afiºeazã în caseta text conþinutul unui fiºier text. . Au fost definite chei de acces rapid pentru accesarea componentelor meniului. FileAccess. Help About PV afiºeazã în caseta text informaþii despre implementarea unui menu.} File Close ºterge conþinutul casetei text.

button1. green. tipuri ºi metode utile în lucrul cu culori.Location = new Point(100. 30)). Un obiect de tip Point este reprezentat prin coordonatele unui punct într-un spaþiu bidimensional (exemplu: Point myPoint = new Point(1. ci ºi pentru a identifica în program un punct dintr-un anumit spaþiu.Next(256))) . Graphics g = this.Next(256). o linie frântã se poate realiza astfel: Point[] points = new Point[4]. Pen pen = new Pen(Color. points).x. Fiind un tip valoare (struct) ºi nu o clasã. points[2] = new Point(20.Color. Console. 0).Next(256).Drawing. 2).2). 120).Net Framework (Suport de curs) Exerciþiu (Fisiere) Contruiþi un menu care sã permitã efectuarea operaþiilor uzuale cu fiºiere. destructor.X + “.5. 120). De exemplu. Y: “ + myPoint.Next(30).FromArgb(x.points[1] = new Point(0.) Point este utilizat frecvent nu numai pentru desene.Brown. Aplicaþia PV12 este un exerciþiu care deseneazã cercuri de raze ºi culori aleatorii ºi emite sunete cu frecvenþã aleatoare. g.Yellow.Drawing Spaþiul System. System. Random x = new Random().Beep(300 + x.Y). Graphics g = e. Putem construi un obiect de tip Point pentru a redimensiona un alt obiect.Console. blue). Clasa Graphics este o clasã sigilatã reprezentând o arie rectangularã care permite reprezentãri grafice.Drawing conþine tipuri care permit realizarea unor desene 2D ºi au rol deosebit în proiectarea interfeþelor grafice. moºtenire. De exemplu.BackColor = myColor. i = 1 + x. Substructura FromArgb a structurii Color returneazã o culoare pe baza celor trei componente ale oricãrei culori (red. 5. Structura Color conþine date.Graphics. Size mySize = new Size(15. constructori.x.86 Introducere în . p=new Pen(System. însã nu permite instanþiere.WriteLine(“X: “ + myPoint. Point myPoint = new Point(mySize). Color myColor = Color. 0).DrawLines(pen. aceasta conþine date ºi metode.CreateGraphics().Next(1000).points[3] = new Point(20. pentru a modifica poziþia unui buton în fereastrã putem asigna un obiect de tip Point proprietãþii Location indicând astfel poziþia colþului din stânga-sus al butonului (button. points[0] = new Point(0. System. 100). 150).

10). inaltime=100. Programare vizualã 87 g. i). inaltime. În exemplul PV13 se construieºte o pictogramã pe baza unei imagini. x. IntPtr.FromFile(“C:\\Imagini\\catel. Validarea informaþiilor de la utilizator Înainte ca informaþiile de la utilizator sã fie preluate ºi transmise cãtre alte clase. fiind foarte greu de identificat cauza primarã a problemei. Console. Astfel.jpg”).null. asociind o prelucrare unuia .} 5.Sleep(200). EventArgs e) { try{Image img = Image. Acest aspect este important. ºi dupã multe apeluri de metode.6. este necesar sã fie validate.DrawEllipse(p.Zero).DrawImage(thumbnail.CAPITOLUL 5. 10. Image thumbnail.} } private void Thumbnails_Paint(object sender. PaintEventArgs e) {e.GetThumbnailImage(latime.Show(“Nu exista fisierul”). Validarea la nivel de câmp Datele pot fi validate pe mãsurã ce sunt introduse. x. private void Thumbnails_Load(object sender.Next(100). i. este posibil ca aceasta sã se comporte neprevãzut abia câteva secunde mai târziu. thumbnail=img. pentru a preveni posibilele erori. dacã utilizatorul introduce o valoare realã (float) când aplicaþia aºteaptã un întreg (int). int latime=100.} catch{MessageBox.Next(100).Graphics.

Control a in this. // sau if(Char. Aplicatii recapitulative.Forms.TextBox & a.KeeyEventArgs e) {if(e. } Validarea la nivel de utilizator În unele situaþii (de exemplu atunci când valorile introduse trebuie sã se afle într-o anumitã relaþie între ele). Subsir crescãtor de lungime maximã(PV17). Urmãriþi aplicaþiile ºi precizaþi pentru fiecare dintre ele controalele utilizate.) private void textBox1_KeyUp(object sender.” Numele nu are spatii in stanga”). Jocul de Nim (PV18) Exerciþiu (Test grila) Realizaþi un generator de teste grilã (întrebãrile sunt preluate dintr-un fiºier text.Forms. Textchanged.Windows. punctajul. evenimentele tratate: Forma poloneza (PV14).SetError(txtName.Forms.88 Introducere în .Windows.Text==””) { a. System. Triunghi (PV15).KeyChar)==true) MessageBox. private void btnValidate_Click(object sender.Alt==true) MessageBox. Dupã efectuarea testului se afiºeazã rezultatul obþinut ºi statistica rãspunsurilor.return. . System.EventArgs e) { foreach(System.Net Framework (Suport de curs) dintre handlerele asociate evenimentelor la nivel de control (Leave.Windows.} } } ErrorProvider O manierã simplã de a semnala erori de validare este aceea de a seta un mesaj de eroare pentru fiecare control. pentru fiecare item se precizeazã tipul (alegere simplã/multiplã).IsDigit(e.Show (“Tasta Alt e apasata”).Focus(). myErrorProvider.Show(“Ati apasat o cifra”).Controls) { if( a is System. imaginea asociatã (dacã existã). MouseUp etc. enunþul ºi distractorii. Ordonare vector(PV16). validarea se face la sfârºitul introducerii tuturor datelor la nivelul unui buton final sau la închiderea ferestrei de date.

o foaie Excel. dar ar putea de asemenea sã fie un fiºier text. Aceste caracteristici sunt determinate în stabilirea beneficiilor furnizate de ADO. ADO. ceea ce duce la o creºtere a productivitãþii ºi la o scãdere a numãrului de erori. În aplicaþiile tradiþionale cu baze de date. .NET simplificã programarea pentru diferite task-uri cum ar fi comenzile SQL. • Durabilitate. Reducerea numãrului de conexiuni deschise simultan determinã utilizarea optimã a resurselor.NET Framework ce permite conectarea la surse de date diverse. ADO.NET permite ºi lucrul în stil conectat dar ºi lucrul în stil deconectat.NET oferã instrumentele de utilizare ºi reprezentare XML pentru transferul datelor între aplicaþii ºi surse de date. Atunci când menþinem mai multe conexiuni deschise server-ul de baze de date va rãspunde mai lent la comenzile clienþilor întrucât cele mai multe baze de date permit un numãr foarte mic de conexiuni concurente. • Performanþã. aplicaþiile conectându-se la server-ul de baze de date numai pentru extragerea ºi actualizarea datelor. clienþii stabilesc o conexiune cu baza de date ºi menþin aceastã conexiune deschisã pânã la încheierea executãrii aplicaþiei. extragerea. manipularea ºi actualizarea datelor. Acest lucru permite reducerea numãrului de conexiuni deschise simultan la sursele de date.NET poate interacþiona uºor cu orice componentã care suportã XML.ADO. fãrã sã fie necesar sã convertim explicit datele în format XML sau invers. • Programabilitate. sursa de date este o bazã de date.NET permite dezvoltarea arhitecturii unei aplicaþii datoritã modului de transfer a datelor între nivelele arhitecturale. ADO. ceea ce permite accesarea datelor din diferite surse de diferite tipuri ºi prelucrarea lor ca entitãþi.NET: • Interoperabilitate.NET ADO. un fiºier Access sau un fiºier XML. • Accesibilitate Utilizarea arhitecturii deconectate permite accesul simultan la acelaºi set de date. De obicei. Nu mai este necesarã conversia explicitã a datelor la transferul între aplicaþii.89 CAPITOLUL 6 ADO. fapt care duce la creºte performanþelor acestora. ADO.NET (ActiveX Data Objects) reprezintã o parte componentã a nucleului . furnizând o reprezentare comunã a datelor. Conexiunile deschise necesitã alocarea de resurse sistem.

). . DataReader ºi DataAdapter. OleDbConnection etc.Net Framework (Suport de curs) 6. 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.0) Furnizorul de date permite unei aplicaþii sã se conecteze la sursa de date. Excel sau SQL Server versiune mai veche decât 7. etc. Înainte de orice operaþie cu o sursã de date externã. numele ºi parola contului de acces.NET sunt DataSet ºi Data Provider. precizându-i ca parametru un ºir de caractere conþinând date despre conexiune. În plus.) conþin date referitoare la sursa de date (locaþia. OleDb etc. Pentru deschiderea unei conexiuni prin program se poate instanþia un obiect de tip conexiune. executã comenzi ºi salveazã rezultate. Ele au fost proiectate pentru accesarea ºi manipularea datelor. Aceste clase se gãsesc în subspaþii (SqlClient.Data. Command. ele implementeazã interfaþa IdbConnection. trebuie realizatã o conexiune (legãturã) cu acea sursã.NET Componentele principale ale ADO.NET Framework include SQL Server. 6. metode pentru deschiderea/închiderea conexiunii. Arhitectura ADO. Fiecare furnizor de date cuprinde componentele Connection.1. pornirea unei tranzacþii etc. Furnizori de date (Data Providers) Din cauza existenþei 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. Clasele din categoria Connection (SQLConnection.NET Data Provider pentru interacþiune cu Microsoft SQL Server.2. 6. .90 Introducere în .Connection.) ale spaþiului System.3.

SqlConnection co = new SqlConnection().ConnectionString = “Data Source=localhost.User ID=elev.Open(). co. User ID Password Numele unui user care are acces de logare pe server Parola corespunzãtoare ID-ului specificat.pwd=info.1. Proprietãþi a) ConnectionString (String. ºi nu se specificã pentru conectare la SQL Server.4. Initial Catalog=Orar”. Exemple de conectare Ex. cu accesori de tip get ºi set ) defineºte un ºir care permite identificarea tipului ºi sursei de date la care se face conectarea ºi eventual contul ºi parola de acces.Data Source=C:\Date\scoala.Password=madonna”).SqlClient.1) conectare la o sursã de date SQL using System.SqlClient.Open().0.Data. un domeniu sau o adresa IP.3.2) conectare la o sursã de date SQL using System. OleDbConnection co = new OleDbConnection(@”Provider=Microsoft. SqlConnection co = new SqlConnection(@”Data Source=serverBD.OleDb. care poate fi local.Open().3. ADO. co. Ex.Database=scoala. cu accesor de tip get): specificã numãrul de secunde pentru care un obiect de conexiune poate sã aºtepte pentru realizarea conectãrii la 32 User Id ºi Password pot înlocui parametrul Integrated Security . Acest furnizor trebuie precizat doar dacã se foloseºte OLE DB . co.. Identificã serverul. separaþi prin . b) ConnectionTimeout (int.3) conectare la o sursã de date Access using System. Baza de date trebuie sã se gãseascã pe serverul dat în Data Source Integrated Security32 Logarea se face cu user-ul configurat pentru Windows. 6. Conþine lista de parametri necesarii conectãrii sub forma parametru=valoare.NET 91 6.OLEDB. specificã numele bazei de date. User ID=profesor.CAPITOLUL 6.Jet.NET Data Provider. Ex.2.mdb”).Data.Data. Parametru Provider Data Source Initial Catalog Descriere Specificã furnizorul de date pentru conectarea la sursa de date. co.

read-only): returneazã versiunea de server la care s-a fãcut conectarea. SqlConnection cn = new SqlConnection(“Data Source=serverBD. . f) State (enumerare de componente ConnectionState. e) CreateCommand(): creeazã o comandã (un obiect de tip Command) validã asociatã conexiunii curente.) using System.Net Framework (Suport de curs) server înainte de a se genera o excepþie. Aceste clase implementeazã interfaþa IDbCommand. Command Clasele din categoria Command (SQLCommand.4.) conþin date referitoare la o comandã SQL (SELECT. read-only): returneazã starea curentã a conexiunii. UPDATE) ºi metode pentru executarea unei comenzi sau a unor proceduri stocate. b) InfoMessage: apare când furnizorul trimite un avertisment sau un mesaj cãtre client. DELETE.4. Fetching. Closed.3. Open. Evenimente a) StateChange: apare atunci când se schimbã starea conexiunii.3. OleDbCommand etc. Executing. Noua bazã de date trebuie sã existe pe acelaºi server ca ºi precedenta. 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 tranzacþii pe baza de date. 6.Data. 6. INSERT. Valoarea Timeout=0 specificã aºteptare nelimitatã. Se poate specifica o valoare diferitã de 15 în ConnectionString folosind parametrul Connect Timeout.3. Connect Timeout=30”). Handlerul corespunzãtor (de tipul delegat StateChangeEventHandler) spune între ce stãri s-a fãcut tranziþia.Password=madonna. 6. Ca urmare a interogãrii unei baze de date se obþin obiecte din categoriile DataReader sau DataSet.92 Introducere în . read-only): returneazã numele bazei de date la care s–a fãcut conectarea. Database=scoala. read-only): returneazã furnizorul de date e) ServerVersion (string. O comandã se poate executa numai dupã ce s-a stabilit o conxiune cu baza de date corespunzãtoare.SqlClient. Ex. (implicit 15). d)ChangeDatabase(): se modificã baza de date la care se vor face conexiunile. Connecting.User ID=elev. la sfârºit se apeleazã Commit() sau Rollback(). Valorile posibile: Broken. c) Database (string. Este necesarã pentru a arãta unui utilizator care este baza de date pe care se face operarea d)Provider (de tip string.

ExecuteReader().NET 93 6. Exemplu: SqlCommand cmd = new SqlCommand(). s-au sters e) ExecuteReader() executã comanda ºi returneazã un obiect de tip DataReader.WriteLine(cmd. c) CommandType (enumerare de componente de tip CommandType): reprezintã tipul de comandã care se executã pe sursa de date. UPDATE. Text (comandã SQL obiºnuitã).CAPITOLUL 6. . Exemplu Se obþine conþinutul tabelei elevi într-un obiect de tip SqlDataReader.PrefixTransaction): permite accesul la obiectul de tip tranzacþie care se cere a fi executat pe sursa de date. [Provider]. Valorile pot fi: StoredProcedure (apel de procedurã stocatã).{1}”.con). Console. Dacã se depãºeste acest timp. SqlConnection con ) SqlCommand(string CommandText.SqlConnection con.1. f) Transaction (System.Read()) { Console. 6.[Provider].PrefixConnection): conþine obiectul de tip conexiune folosit pentru legarea la sursa de date. Proprietãþi a) CommandText (String): conþine comanda SQL sau numele procedurii stocate care se executã pe sursa de date. e) Parameters (System. d)ExecuteNonQuery()executã o comandã care nu returneazã un set de date din baza de date.2.Connection = con. ADO.[Provider]. cmd. atunci se genereazã o excepþie.Data.4.ToString()). //câte înreg.WriteLine(“{0} .PrefixParameterCollection): returneazã o colecþie de parametri care s-au transmis comenzii. SqlDataReader reader = cmd.ExecuteNonQuery(). se returneazã numãrul de înregistrãri afectate.4. Data. TableDirect (numai pentru OleDb) d)Connection (System.SqlTransaction trans) b)Cancel() opreºte o comandã aflatã în executare. c) Dispose() distruge obiectul comandã.Data. DELETE. SqlCommand cmd = new SqlCommand(“SELECT * FROM elevi”. while(reader. b)CommandTimeout (int): reprezintã numãrul de secunde care trebuie sã fie aºteptat pentru executarea comenzii.CommandText = “DELETE FROM elevi WHERE nume = ’BARBU’”. dacã comanda a fost de tip INSERT. Metode a) Constructori: SqlCommand() SqlCommand(string CommandText) SqlCommand(string CommandText. cmd.

SqlClient. f) ExecuteXmlReader() returneazã un obiect de tipul XmlReader obþinut prin interogare Exemplu: SqlCommand CMD= new SqlCommand(“SELECT * FROM elevi FOR XML MATE.ExecuteScalar(). SchemaOnly (returnezã doar informaþie despre coloane). care descrie rezultatele ºi efectul asupra bazei de date: CloseConnection (conexiunea este închisã atunci când obiectul DataReader este închis). CommandBehavior. Exemplu: SqlCommand cmd = new SqlCommand(“SELECT COUNT(*) FROM elevi”. Presupunem cã am stabilit conexiunea: using System. Obiectele de tip SQLCommand pot fi utilizate într-un scenariu ce presupune deconectarea de la sursa de date dar ºi în operaþii elementare care presupun obþinerea unor rezultate imediate.Password=eu”).reader.GetString(1)).Open(). Console. conn. SqlConnection conn = new SqlConnection(@”Data Source=serverBD. Metoda ExecuteReader() mai are un argument opþional de tip enumerare. folosit pentru obþinerea unor rezultate statistice. SqlDataReader reader = cmd. f) ExecuteScalar() executã comanda ºi returneazã valoarea primei coloane de pe primul rând a setului de date rezultat.User ID=adm. KeyInfo (returnezã informaþie despre coloane ºi cheia primarã).Net Framework (Suport de curs) reader. con). System.Xml. SingleResult (se returneazã un singur set de rezultate).Close().XmlReader myXR = CMD.Data. SequentialAccess (pentru manevrarea valorilor binare cu GetChars() sau GetBytes()).WriteLine(reader. Vom exemplifica utilizarea obiectelor de tip Command în operaþii ce corespund acestui caz.Database=MAGAZIN.ExecuteXmlReader().94 Introducere în .GetString(0).GetString(0)).con). SingleRow (se returneazã o singurã linie). .EXAMEN”. } reader.

6. 6. // Sirul care pãstreazã comanda de actualizare string updateString = @”update PRODUSE set DENUMIRE_PRODUS = ‘Locomotiva Thomas’ where DENUMIRE_PRODUS = ‘Thomas’”. Valoarea acestui câmp va fi atribuitã de SQL Server. // Instantiem o comandã cu o cerere si precizam conexiunea SqlCommand cmd = new SqlCommand(“select DENUMIRE_PRODUS from PRODUSE”. // Apelãm metoda ExecuteNonQuery pentru a executa comanda cmd.NET 95 ºi cã tabela PRODUSE are câmpurile ID_PRODUS. ‘papusa’)”. Pentru extragerea datelor cu ajutorul unui obiect SqlCommand trebuie sã utilizãm metoda ExecuteReader care returneazã un obiect SqlDataReader.CAPITOLUL 6.ExecuteReader().4. Tabela PRODUSE are cheia primarã ID_PRODUS. // Obtinem rezultatul cererii SqlDataReader rdr = cmd.4.ExecuteNonQuery(). Facem observaþia cã am specficat explicit numai coloanele DENUMIRE_PRODUS ºi DESCRIERE. Pentru a insera date într-o bazã de date utilizãm metoda ExecuteNonQuery a obiectului SqlCommand. // // Instantiem o nouã comandã fãrã sã precizãm conexiunea Stabilim conexiunea SqlCommand cmd = new SqlCommand(updateString). Inserarea datelor.5. // Instantiem o comandã cu acestã cerere si precizãm conexiunea SqlCommand cmd = new SqlCommand(insertString. Dacã încercãm sã adãugãm o valoare atunci va fi generatã o excepþie. Actualizarea datelor. conþine un string ce precizeazã comanda care se executã ºi o referinþã cãtre obiectul SQLConnection. DESCRIERE) values (‘Barbie’. // Sirul care pãstreazã comanda de inserare string insertString = @”insert into PRODUSE(DENUMIRE_PRODUS. 6.4. conn). conn).4. conn). ADO. .3. DENUMIRE_PRODUS. DESCRIERE Instanþierea unui obiect de tip SQLCommnand SqlCommand cmd = new SqlCommand(“select DENUMIRE_PRODUS from PRODUSE”. Interogarea datelor.

care poate fi o sumã. using System. cea mai bunã alegere este sã lucrãm direct asupra bazei de date ºi sã obþinem aceastã valoare. O alegere ineficientã ar fi utilizarea metodei ExecuteReader ºi apoi calculul valorii. 6. conn).35 Exerciþii: 1) Realizaþi o conexiune la baza de date MAGAZIN ºi afiºaþi ID-urile produselor.33 // Apelãm ExecuteNonQuery pentru executarea comenzii cmd.ExecuteScalar(). Se utilizeazã aceeaºi metodã ExecuteNonQuery.ExecuteNonQuery().Connection = conn.Integrated Security=SSPI”).Initial Catalog=MAGAZIN.Data.Data. // Setãm proprietatea Connection cmd. conn).Connection = conn. Câteodatã avem nevoie sã obþinem din baza de date o singurã valoare.96 Introducere în . using System.SqlClient. // Instantiem o comandã nouã SqlCommand cmd = new SqlCommand(“select count(*) from PRODUSE”. 33 Am fi putut folosi acelaºi constructor ca la Insert.Net Framework (Suport de curs) cmd.CommandText = deleteString.6. pentru a exemplifica cum putem stabili explicit conexiunea ºi comanda 35 Este necesarã conversia întrucât rezultatul returnat de ExecuteScalar este de tip object .4.34 // Setãm proprietatea CommandText cmd. SqlDataReader rdr = null.Open(). SqlCommand cmd = new SqlCommand(“select * from PRODUSE”. class ADO1 { static void Main() { SqlConnection conn = new SqlConnection( “Data Source=(local). În acest caz. o medie sau alt rezultat al unei funcþii agregat. using System. // Instanþiem o comandã SqlCommand cmd = new SqlCommand(). // Executãm comanda si obtinem valoarea int count = (int)cmd. ªtergerea datelor.ExecuteNonQuery(). try { conn. Acest exemplu demonstreazã cã putem schimba oricând obiectul connection asignat unei comenzi 34 În acest exemplu am ales sã aplelã constructorul SqlCommand fãrã parametri. // . // sirul care pãstreazã comanda de ºtergere string deleteString = @”delete from PRODUSE where DENUMIRE_PRODUS = ‘Barbie’”. Executãm comanda cmd.

ReadData().CAPITOLUL 6.WriteLine(rdr[0]). Console. numar_inregistrari). Console. public ADO2() { conn = new SqlConnection(“Data Source=(local).SqlClient. SqlCommand cmd = new SqlCommand(“select DENUMIRE_PRODUS from PRODUSE”.Integrated Security=SSPI”).ExecuteReader().WriteLine(“Numarul de inregistrari: {0}”.WriteLine(“Produse aflate în magazin dupa Update”).WriteLine(“Produse aflate în magazin înainte de Insert”). while (rdr. while (rdr.ReadData().Insertdata().WriteLine(“Categories After Delete”).Close().} } finally { if (rdr != null){rdr.WriteLine(rdr[0]).ReadData().scd. Console. scd. Console. int number_inregistrari = scd. scd. using System. ADO. } static void Main() { ADO2 scd = new ADO2().DeleteData().ReadData().Read()) {Console. scd. Console.} .Open(). conn). scd.Data.Data. rdr = cmd.NET 97 rdr = cmd. } public void ReadData() { SqlDataReader rdr = null. using System.scd. using System.} } } } 2) Realizaþi funcþii care sã implementeze operaþiile elementare asupra unei baze de date ºi verificaþi funcþionalitatea lor.scd.} if (conn != null){conn.} } finally { if (rdr != null) {rdr.Close().Close().WriteLine(“Produse aflate în magazin dupa Insert”). class ADO2 { SqlConnection conn.ExecuteReader(). try {conn.UpdateData().Read()) { Console.GetNumberOfRecords().Initial Catalog=MAGAZIN.

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

Metode: a) Close() închidere obiectului ºi eliberarea resurselor. sau pot fi preluate de la sursã (dintr-un obiect din categoria DataAdapter) ºi înglobate în aplicaþia curentã (sub forma unui obiect din categoria DataSet). Un obiect DataReader nu are constructor36. GetDouble().} } return count.returneazã numãrul de câmpuri din înregistrarea curentã 6. ADO. GetInt64(). GetChar(). GetInt16().1.) implementeazã interfaþa IDataReader.CAPITOLUL 6.5. se va utiliza ansamblul DataAdapter + DataSet. Proprietãþi: a) IsClosed (boolean. GetFloat(). Dacã într-o aplicaþie este nevoie doar de informaþii care vor fi citite o singura datã. fãrã posibilitate de modificare a datelor la sursã. . GetDecimal(). Clasele DataReader permit parcurgerea într-un singur sens a sursei de date. GetInt32(). GetString() returneazã valoarea unui câmp specificat. trebuie sã preceadã închiderea conexiunii. Datorita faptului cã citeºte doar înainte (forward-only) permite acestui tip de date sã fie foarte rapid în citire. Dacã se doreºte modificarea datelor la sursã.read-only) . din înergistrarea curentã 36 Dacã pentru instantiere este folosit operatorul new veþi obþine un obiect cu care nu puteþi face nimic pentru cã nu are o conexiune ºi o comandã ataºate. GetDateTime().5. 6.verificã dacã reader-ul conþine cel puþin o înregistrare c) Item (indexator de câmpuri) d)FieldCount . } } 6. DataReader Datele pot fi explorate în mod conectat (cu ajutorul unor obiecte din categoria DataReader). GetByte(). pe toatã durata lucrului cu un obiect de tip DataReader. conexiunea trebuie sã fie activã. read-only). ci se obþine cu ajutorul unui obiect de tip Command ºi prin apelul metodei ExecuteReader() (vezi exerciþiile de la capitolul anterior). Evident.returnezã true dacã obiectul este deschis si fals altfel b)HasRows (boolean. Toate clasele DataReader (SqlDataReader. OleDbDataReader etc.2.Close(). Overhead-ul asociat este foarte mic (overhead generat cu inspectarea rezultatului ºi a scrierii în baza de date).5.NET 99 finally {if (conn != null){conn. GetValue(). b)GetBoolean(). sau rezultatul unei interogãri este prea mare ca sa fie reþinut în memorie (caching) DataReader este soluþia cea mai bunã.

Read () ) {Console. Metoda clasicã de a citi informaþia dintr-un DataReader este de a itera într-o buclã while.Read()) {Console. Afiºaþi conþinutul tabelei PRODUSE utilizând DataReader. GetChars() citirea unor octeþi/caractere dintr–un câmp de date binar d)GetDataTypeName(). reader[0].Open (). conn).WriteLine (rdr[“ID_PRODUS”]).Net Framework (Suport de curs) c) GetBytes(). Indiferent cã se foloseºte un index numeric sau unul de tipul string indexatorii întorc totdeauna un obiect de tipul object fiind necesarã conversia. conn ). GetName() returneazã tipul/numele câmpului specificat e) IsDBNull() returneazã true dacã în câmpul specificat prin index este o valoare NULL f) NextResult()determinã trecerea la urmãtorul rezultat stocat în obiect (vezi exemplul) g)Read() determinã trecerea la urmãtoarea înregistrare. while (rdr. while (rdr.1) SqlCommand cmd=new SqlCommand(“select * from elevi.ExecuteReader().WriteLine ( “{0}\t\t{1}”.ExecuteReader ().NextResult () ). . Pentru a citi aceste informaþii trebuie apelatã metoda Read. Exemplu: Codul SqlCommand cmd = new SqlCommand(“select * from PRODUSE”.WriteLine(rdr[0]). do { while ( reader. conn). rdr = cmd.ExecuteReader().Read()){Console. conn. Valoarea indexului trebuie sã fie numele coloanei din tabelul rezultat. Exerciþiu. DataReader obþine datele într-un stream secvenþial. aceasta citeste un singur rând din tabelul rezultat. reader[1] ). rdr = cmd. SqlDataReader reader = cmd. Nu este foarte clar pentru cineva care citeºte codul care sunt coloanele afiºate decât dacã s-a uitat ºi în baza de date. DataReader implementeazã ºi indexatori (în exemplul anterior am afiºat primele coloane folosind indexatori numerici). Ex. returnând false numai dacã aceasta nu existã.select * from profi”. Din aceasta cauzã este preferatã utilizarea indexatorilor de tipul string.} } while ( reader. de reþinut cã iniþial poziþia curentã este înaintea primei înregistrãri.100 Introducere în .} este echivalent cu SqlCommand cmd = new SqlCommand(“select * from PRODUSE”.

Integrated Security=SSPI”).WriteLine(). rd. Clasele DataAdapter genereazã obiecte care funcþioneazã ca o interfaþã între sursa de date ºi obiectele DataSet interne aplicaþiei. class ADO3 { static void Main() {ADO3 rd = new ADO3(). Console. acelaºi folosit ºi pentru transferul datelor. Console.clasa FROM elevi”. Datele sunt stocate de un DataSet în format XML.SimpleRead().Initial Catalog=MAGAZIN. using System.ExecuteReader().Data. ºtergere.} if (conn != null){conn.SqlClient.Fill(ds.Close(). descr). SqlCommand cmd = new SqlCommand(“select * from PRODUSE”. using System.conn). de.NET 101 using System. conn). Un obiect DataSet este de fapt un set de tabele relaþionate. rdr = cmd. ADO.-30}”.-20}”. SqlConnection conn = new SqlConnection( “Data Source=(local). Foloseºte serviciile unui obiect DataAdapter pentru a-ºi procura datele ºi trimite modificãrile înapoi cãtre baza de date. clasdir FROM profi”.//transferã datele în datasetul ds sub forma unei tabele locale numite elevi SqlDataAdapter dp=new SqlDataAdapter(“SELECT nume.Data.WriteLine(“DENUMIRE PRODUS DESCRIERE”). } public void SimpleRead() { SqlDataReader rdr = null. permiþând prelucrãri pe baza de date. .6. string descr = (string)rdr[“DESCRIERE”].Read()){string den = (string)rdr[“DENUMIRE_PRODUS”].Open(). try { conn. DataAdapter Folosirea combinatã a obiectelor DataAdapter ºi DataSet permite operaþii de selectare.Write(“{0.Write(“{0. Ele gestioneazã automat conexiunea cu baza de date astfel încât conexiunea sã se facã numai atunci când este imperios necesar.} } } } 6. conn). Console.Close(). Console. while (rdr. modificare ºi adãugare la baza de date.CAPITOLUL 6. În exemplul urmãtor se preiau datele din tablele elevi ºi profi: SqlDataAdapter de=new SqlDataAdapter(“SELECT nume.”Elevi”). den). } } finally {if (rdr != null){rdr.

Net Framework (Suport de curs) dp. DataAdapter deschide o conexiune doar atunci când este nevoie ºi o inchide imediat aceasta nu mai este necesarã. . ds. conþin comenzile ce se executã pentru selectarea sau modificarea datelor în sursa de date. a) Update() permite transmiterea modificãrilor efectuate într–un DataSet cãtre baza de date.se genereazã o excepþie de tipul InvalidOperationException. ds. eventual a numelui tablei din acest DataSet. a) Fill() permite umplerea unei tabele dintr–un obiect DataSet cu date. UpdateCommand (Command). apelând metoda Fill (vezi exemplul de mai sus) • procesarea datelor din DataSet folosind numele tabelelor stabilite la umplere. Scenariul uzual de lucru cu datele dintr-o tabelã conþine urmãtoarele etape: • popularea succesivã a unui DataSet prin intermediul unuia sau mai multor obiecte DataAdapter. ds. Proprietãþi a) DeleteCommand. Poate avea urmãtoarele valori: Add .”Profi”). DataSet Un DataSet este format din Tables (colecþie formatã din obiecte de tip DataTable. DataAdapter adaugã coloana la schema tablei AddWithKey – se adugã coloana ºi informaþii relativ la cheia primarã Ignore .Tables[1] • actualizarea datelor prin obiecte comandã corespunzãtoare operaþiilor INSERT. ceea ce duce la pierdere de date Error . conexiune).6. 6.implicit. UPDATE ºi DELETE.Tables[“elevi”]. 6.1. Permite specificarea obiectului DataSet în care se depun datele.102 Introducere în . Un obiect CommandBuilder poate construi automat o combinaþie de comenzi ce reflectã modificãrile efectuate.se ignorã lipsa coloanei respective.7. DataTable este compus la rândul lui dintr-o colecþie de DataRow ºi DataColumn). numãrul de înregistrare cu care sã se înceapã popularea (prima având indicele 0) ºi numãrul de înregistrãri care urmeazã a fi aduse. SelectCommand.6. Relations (colecþie de obiecte de tip DataRelation pentru memorarea legãturilor pãrinte–copil) ºi ExtendedProperties ce conþine proprietãþi definite de utilizator. Metode Constructori:SqlDataAdapter()|SqlDataAdapter(obiect_comanda)| SqlDataAdapter(string_comanda. InsertCommand. Aºadar.Tables[0].//transferã datele în datasetul ds sub forma unei tabele locale numite profi 6. sau indexarea acestora.Fill(ds. b)MissingSchemaAction (enumerare) determinã ce se face atunci când datele aduse nu se potrivesc peste schema tablei în care sunt depuse.2.

inchide conexiunea. update.. daProd. În exemplul urmãtor va fi populat DataSet-ul dsProduse. Intre aceste operaþii în DataSet se poate scrie sau citi. Scopul acestui nume este identificarea ulterioarã a tabelului.Fill (dsProduse. “PRODUSE”). Comanda SQL specificã cu ce date va fi populat un DataSet.. conn). Intre operaþiunea de populare a DataSet-ului ºi cea de update conexiunile sunt inchise. Cel de-al doilea parametru (string) reprezintã numele tabelului (nu numele tabelului din baza de date. Constructorul unui DataSet nu necesitã parametri. . Exemplu. DataAdapter-ul va deschide conexiunea la apelul metodelor Fill ºi Update. ci al tabelului rezultat în DataSet) care va fi creat. Popularea DataSet-ului se face dupã ce am construit cele douã instanþe: daProd. pentru care vor fi construite comenzile. DataSet dsProduse = new DataSet (). dar nu ºi deschisã. SqlCommandBuilder cmdBldr = new SqlCommandBuilder (daProd). 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 proprietãþi. delete ºi select) ºi un obiect Connection pentru a citi ºi scrie date. fie folosind obiecte de tipul CommandBuilder.NET 103 De exemplu DataAdapter realizeazã urmãtoarele operaþiuni atunci când trebuie sa populeze un DataSet:deschide conexiunea. ADO. acestea vor fi adãugate în DataSet sub numele Table1.CAPITOLUL 6. . SqlCommandBuilder are nu poate construi decât comenzi simple ºi care se aplicã unui singur tabel. SqlDataAdapter daProd = new SqlDataAdapter (“SELECT ID_PRODUS. Instanþierea celorlalte se face fie prin intermediul proprietãtilor pe care le expune DataAdapter.închide conexiunea ºi urmatoãrele operaþiuni atunci când trebuie sa facã update pe baza de date: deschide conexiunea. Table2. La iniþializarea unui CommandBuilder se apleleazã un constructor care primeºte ca parametru un adapter. Prin intermediul constructorului putem instanþia doar comanda de interogare. scrie modificarile din DataSet in baza de date. In exemplul anterior avem un DataSet gol ºi avem nevoie de un DataAdapter pentru a-l popula. Un obiect DataAdapter conþine mai multe obiecte Command (pentru inserare. iar conexiunea conn trebuie sã fi fost creatã anterior. În exemplul urmãtor construim un obiect de tipul DataAdapter. Crearea unui obiect de tipul DataSet se face folosind operatorul new. populeaza DataSet-ul. DENUMIRE_PRODUS FROM PRODUSE”. În cazul în care nu sunt specificate numele tabelelor. Existã totuºi o supraîncãrcare a acestuia care primeºte ca parametru un string ºi este folosit atunci cand trebuie sã se facã o serializare a datelor într-un fisier XML.

Pentru a suprima afiºarea acelui semn "+" setãm proprietatea DataMembers pe numele tabelului care va fi afiºat.ParameterName = “@Cden”.DataSource = dsProduse. dgProduse. ci ca valoare a unui câmp. folosind proprietatea Parameters.Update (dsProduse. dgProduse. semnul "+" permiþându-i utilizatorului sã aleaga care tabel sã fie afiºat. DataGrid dgProduse = new DataGrid(). fãcând aplicaþia mai sigurã.Parameters.8. de cele mai multe ori sã filtraþi rezultatul dupã diverse criterii. Numele tabelului este acelaºi care l-am folosit ca parametru în apelul metodei Fill. cmd.104 Introducere în . 38 Atunci când comanda va fi executatã @den va fi înlocuit cu valoarea aflatã în obiectul SqlParameter ataºat. Pentru a folosi interogãri cu parametri trebuie sã: a) construim string-ul pentru SqlCommand folosind parametri.Add(param). Ex. “PRODUSE”). daProd. 37 Se pot afiºa mai multe tabele dintr-un DataSet. conn). Exemplu. Ex. SqlCommand cmd = new SqlCommand(“SELECT * FROM PRODUSE WHERE DENUMIRE = @den”. Ex. SqlParameter param = new SqlParameter(). param. c) adãugaþi obiectul SqlParameter la obiectul SqlCommand. Actualizarea se face prin apelul metodei Update. SqlParameter Atunci când lucrãm cu bazele de date avem nevoie. Dacã nu asociem o instanþã de tipul SqlParameter pentru un parametru din string-ul de interogare sau avem mai multe instanþe SqlParameter pentru un parametru vom obþine o eroare la rulare . 6.Net . De obicei acest lucru se face în funcþie de niºte criterii pe care utilizatorul le specificã (ex: vreþi sã vedeþi doar pãpuºile Barbie). Dacã folosim interogãri cu parametri atunci orice valoare pusã într-un parametru nu va fi tratatã drept cod SQL. 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.Value = sir. param.37 Dupã ce au fost fãcute modificãri într-un DataSet acestea trebuie scrise ºi în baza de date.DataMembers = “PRODUSE”.38 b)construim un obiect SqlParameter asignând valorile corespunzãtoare.Net Framework (Suport de curs) Un DataSet poate fi folosit ca sursã de date pentru un DataGrid din Windows Forms sau ASP. Accesarea informaþiilor confidenþiale).

CAPITOLUL 6. ADO.NET

105

6.9. Proceduri Stocate (Stored Procedures)
O procedurã stocatã este o secvenþã de instrucþiuni SQL, salvatã în baza de date, care poate fi apelatã de aplicaþii diferite. Sql Server compileazã procedurile stocate, ceea ce creºte eficienþa utilizãrii 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 instrucþiune de mai sus spune obiectului SqlCommand ce tip de comandã va fi executatã, prin intermediul proprietãþii 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 asemãnator cu cel al interogãrilor 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. Exerciþiu de sintezã. Construiþi o aplicaþie pentru a simula gestiunea unei biblioteci ºcolare.

106

Introducere în .Net Framework (Suport de curs)

Precizãri.Toate informaþiile se vor afla într-o bazã de date. Creati propriile structuri de date adecvate rezolvarii problemei. Utilizati Microsoft Access pentru crearea bazei de date. Iniþial aplicaþia va afiºa o formã Windows care permite selectarea operaþiei efectuate (adãugare carte/cãrþi, adãugare abonat, actualizare stare carte/cãrþi/abonat, împrumutã carte/cãrþi, 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 aplicaþii. Conceptual, în spatele unei ferestre în care lucrãm 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ã urmãrim un scenariu de realizare a unei aplicaþii simple cu o fereastrã în care putem vizualiza date dintr-o tabelã, putem naviga, putem modifica sau ºterge înregistrãri. • Iniþiem adãugarea unei surse de date (Add New Source) • Configurãm cu atenþie (asistaþi de ”vrãjitor”) 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. • Selectãm tabelele care ne intereseazã din baza de date ºi câmpurile din cadrul tabelei ce vor fi reþinute în TableAdapter (din categoria DataAdapter)

• Când operaþiunea 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 instanþiere, construirea barei de navigare care faciliteazã operaþii de deplasare, editare, ºtergere ºi adãugare în tabel. Sã observãm cã reprezentarea vizualã a fiecãrui obiect este înzestratã cu o sãgetã în partea de sus, în dreapta. Un clic pe aceastã sãgeatã activeazã un meniu contextual cu lista principalelor operaþii 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, operaþiile permise ºi altele).

.Net Framework (Suport de curs) În timpul rulãrii aplicaþiei.108 Introducere în . bara de navigare ºi elementele vizuale ale grilei permit operaþiile de bazã cu înregistrãrile bazei de date. Operaþiile care modificã baza de date trebuie sã fie definitivate prin salvarea noilor date .

pãrinþii. adicã având ca element central la toate etajele sale activiatea de proiectare ºi programa analiticã. Acesta permite operarea la toate nivelurile cu aceeaºi unitate: competenþa. Proiectarea curriculumului pe competenþe vine în întâmpinarea cercetãrilor din psihologia cognitivã. Modelul de proiectare curricularã centrat pe competenþe simplificã structura curriculumului ºi asigurã o mai mare eficienþã a proceselor de predare/învãþare ºi evaluare. Actualele programe ºcolare subliniazã importanþa rolului reglator al achiziþiilor elevilor în plan formativ. se diferenþiazã de . printre altele înseamna drum cãtre. Termenul de curriculum derivã din limba latinã unde. specialiºtii în evaluare.programele analitice” prin accentul pe care îl pun pe interiorizarea unui mod de gândire specific fiecãrui domeniu transpus în ºcoalã prin intermediul unui obiect de studiu. programele ºcolare actuale. 39 În realizarea minighidului metodologic baza de documentare a constituit-o un set de lucrãri bibliografice. Programa ºcolarã reper obligatoriu pentru un demers flexibil Programa ºcolarã este parte a Curriculumului national. profesorii. în scopul operaþionalizãrii informaþiilor. care are în centrul activitãþii didactice ideea de programare a traseului elevului cãtre un þel cunoscut ºi impus doar de cãtre adulþi. în mãsurã sã orienteze demersurile agenþilor implicaþi în procesul de educaþie: • • • • • • conceptorii de curriculum.109 CAPITOLUL 7 MiniGhid Metodologic 39 I. cãrora li s-au operat simplificãri. Programa ºcolarã descrie oferta educaþionalã a unei anumite discipline pentru un parcurs ºcolar determinat Filosofia contemporanã a educaþiei a evidenþiat diferenþa dintre o educaþie bazatã pe curriculum. actualizãri. conform cãrora prin competenþã se realizeazã în mod exemplar tranferul ºi mobilizarea cunoºtinþelor ºi a depriderilor în situaþii/contexte noi ºi dinamice. Conceptual. Centrarea pe competenþe reprezintã modalitatea care face ca sintagma centrarea pe elev sã nu rãmânã o lozincã fãrã conþinut. corelate cu curriculumul ºcolar în vigoare." . particularizãri ºi recomandãri. eleviii. inspectorii. nu pe succesiunea conþinuturilor ºi pe numãrul de ore alocat lor..

reducerea la o schemã sau model. competenþe specifice ºi conþinuturi. reprezentarea unor date. Algoritmizarea .concretizatã prin urmãtoarele concepte operaþionale: identificarea de termeni. stabilirea unor relaþii. sugestii metodologice. generarea de idei. explorarea. procese. anticiparea unor rezultate. culegerea de date din surse variate. Ele sunt derivate din competenþele generale. remarcarea unor invarianþi. Competenþelor specifice li se asociazã prin programã unitãþi de conþinut. fiind etape în dobândirea acestora. Receptarea .concretizatã prin urmatoarele concepte operaþionale: 4. Prelucrarea primarã (a datelor) . 2. experimentarea.concretizatã prin urmãtoarele concepte operaþionale: 3. demonstrarea. Structura programei ºcolare cuprinde: o notã de prezentare. conexiuni. definirea unor concepte. ce exprimã complexe de operaþii mentale: 1. perceperea unor relaþii. descoperirea. investigarea. valori ºi atitudini.Net Framework (Suport de curs) Fãrã a intra în detalii conceptuale. ♦ Competenþele specifice se definesc pe obiect de studiu ºi se formeazã pe parcursul unui an ºcolar. reprezentarea datelor rezolvarea de probleme prin modelare si algoritmizare. observarea unor fenomene. Definim competenþele ca fiind ansambluri structurate de cunoºtinþe ºi deprinderi dobândite prin învãþare. fenomene. argumentarea unor enunþuri. calcularea unor rezultate parþiale. ♦ Competenþele generale se definesc pe obiect de studiu ºi se formeazã pe durata învãþãmântului liceal. Acestora le corespund categorii de competenþe organizate în jurul câtorva verbe definitorii. acestea permit identificarea ºi rezolvarea în contexte diverse a unor probleme caracteristice unui anumit domeniu. relaþii. compararea unor date. formulãm câteva definiþii de lucru necesare pentru explicarea manierei în care au fost concepute programele ºcolare. s-a pornit de la o diferenþiere cât mai finã a etapelor unui proces de învãþare.110 Introducere în . sisteme. Exprimarea . clasificarea datelor. procese. competenþe generale. nominalizarea unor concepte. Pentru a asigura o marjã cât mai largã de acoperire a obiectelor de studiu. descrierea unor stãri. procese. sortarea-discriminarea.concretizata prin urmatoarele concepte operaþionale: . Ele au un grad ridicat de generalitate ºi complexitate ºi au rolul de a orienta demersul didactic cãtre achiziþiile finale ale elevului. Componenta fundamentalã a programei este cea referitoare la competenþe specifice ºi conþinuturi.

− dotãri/materiale necesare pentru aplicarea în condiþii optime a programei. integrarea unor domenii. optimizarea unor rezultate. date de ieºire. Prelucrarea secundarã (a rezultatelor) . calcularea. care poate fi concretizat prin urmatoarele concepte operaþionale: Competenþele generale ce se urmãresc a fi formate la elevi pe parcursul treptei liceale de ºcolarizare precum ºi competenþele specifice fiecãrui an de studiu. ce permite profesorului adaptarea cadrului formal la personalitatea sa ºi la specificul clasei de elevi cu care lucreazã. cu condiþia asigurãrii coerenþei tematice ºi a respectãrii logicii interne a domeniului. relaþionãri între diferite tipuri de reprezentãri. Valorile ºi atitudinile au o importanþã egalã în reglarea procesului educativ ca ºi competenþele . ♦ Sugestiile metodologice cuprind recomandãri generale privind metodologia de aplicare a programei. − evaluarea continuã. Realizarea lor concretã derivã din activitatea didacticã permanentã a profesorului. transpunerea într-o altã sferã. Aceste recomandãri se pot referi la: − desfãºurarea efectivã a procesului de predare/învãþare. concluzii. derivate din acestea. verificarea unor rezultate. constituind un implicit al acesteia. 6. între reprezentare ºi obiect.CAPITOLUL 7. Elementele care asigurã acest reglaj sunt: − posibilitatea intervenþiei profesorului în succesiunea elementelor de conþinut. evaluarea unor rezultate. se stabilesc pornind de la modelul de generare prin gruparea categoriilor de concepte operaþionale în funcþie de dominantele avute în vedere. MiniGhid Metodologic 111 5. analiza de situaþii.care acoperã dimensiunea cognitivã a personalitãþii . centrat pe formarea de competenþe: − identificarea celor mai adecvate metode ºi activitãþi de învãþare. Dincolo de structura unitarã a programelor ºcolare. aplicarea în alte domenii. . negocierea. realizarea de conexiuni între rezultate. adaptarea ºi adecvarea la context.concretizatã prin urmãtoarele concepte operaþionale: compararea unor rezultate. curriculumul naþional actual propune o ofertã flexibilã. elaborarea de strategii. Ele acoperã întreg parcursul învãþãmantului liceal ºi orienteazã dimensiunile axioiogicã si afectiv-atitudinalã aferente formãrii personalitãþii din perspective fiecãrei discipline. ♦ Valorile ºi atitudinile apar în mod explicit sub forma unei liste separate in programa fiecãrui obiect de studiu. Transferul. generalizarea ºi particularizarea. interpretarea rezultatelor.dar se supun altor criterii de organizare didactico-metodicã ºi de evaluare.

în cel de-al doilea). ci potrivit unor circumstanþe concrete. Rolul elevului Modul de realizare a învãþãrii Pune accent pe aspectul cantitativ Pune accent pe elementele de ordin (cât de multã informaþie deþine elevul). Învãþarea se realizeazã prin cooperare. calitativ (valori. Vizeazã mãsurarea ºi aprecierea competenþelor (ce poate sã facã elevul cu ceea ce ºtie). Rolul profesorului Impune puncte de vedere. þine prelegeri. Strategii didactice Orientare tradiþionalã Urmãreºte prelegerea. Lucreazã izolat. pune ºi îºi pune întrebãri cu scopul de a înþelege. cu scopul de ierarhizare Vizeazã mãsurarea ºi aprecierea cunoºtinþelor (ce ºtie elevul). Argumenteazã. Vizeazã clasificarea "staticã" a elevilor. Faciliteazã ºi modereazã învãþarea. Expune. Ajutã elevii sã înþeleagã ºi sã explice punctele de vedere proprii. − posibilitatea modificãrii. profesorul eficient este acela care ºtie: − sã selecþioneze − sã combine − sã varieze diferite metode − sã aleagã strategii adecvate. a completãrii sau a înlocuirii activitãþilor de învãþare. Vizeazã progresul în învãþare pentru fiecare elev. De fapt. Este partener în învãþare. o strategie este legitimã sau ilegitimã nu în general. Învãþarea are loc predominant prin memorare ºi reproducere de cunoºtinþe. Învãþarea conduce la competiþie între elevi. Tabelul de mai jos prezintã în antitezã caracteristici ale procesului de predare-învãþare din didactica tradiþionala ºi didactica actualã. explicaþia profesorului. Aplicarea programelor ºcolare Existenþa unor programe centrate pe achiziþiile elevilor determinã un anumit sens al schimbãrii în didactica fiecãrei discipline. Încearcã sa reþinã ºi sa reproducã ideile auzite Acceptã în mod pasiv ideile transmise. de a realiza sensul unor idei Coopereazã în rezolvarea problemelor ºi a sarcinilor de lucru. Învãþarea are loc predominant prin formare de competenþe ºi deprinderi practice. validate.112 Introducere în . expunerea. atitudini). . Altfel spus. Se considerã ºi se manifestã în permanenþã "ca un pãrinte"'. diferenþa dintre didactica tradiþionalã ºi cea actualã constã în modul de concepere ºi organizare a situaþiilor de învãþare (riguros dirijate în primul caz ºi având autonomie de diferite grade. Realizeazã un schimb de idei cu ceilalþi. II.Net Framework (Suport de curs) − lipsa prescrierii de la centru a intervalului de timp alocat elementelor de conþinut. Evaluarea Criterii Orientare modernã Exprimã puncte de vedere proprii. prin apel doar la exemple "clasice". astfel încât acestea sã permitã un demers didactic personalizat.

respectiv. în concordanþã cu competenþele specifice ºi conþinuturile vizate. conceptul central al proiectãrii didactice este demersul didactic personalizat. Planificarea calendaristicã În contextul noului curriculum.CAPITOLUL 7. Proiectarea demersului didactic este acea activitate desfãºuratã de profesor care constã în anticiparea etapelor ºi a acþiunilor concrete de realizare a predãrii. 3 Stabilirea succesiunii de parcurgere a unitãþilor de învãþare.1. rãspunderea personalã pentru a asigura elevilor un parcurs ºcolar individualizat. − proiectarea secvenþialã (a unitãþilor de învãþare). − planificarea calendaristicã. III. iar instrumentul acestuia este unitatea de învãþare.2. planificarea calendaristicã este un document administrativ care asociazã elemente ale programei cu alocarea de timp consideratã optimã de cãtre profesor pe parcursul unui an ºcolar. Demersul personalizat exprimã dreptul profesorului . LECTURAREA PROGRAMEI se realizeazã “pe orizontalã” în succesiunea urmãtoare: Competente Generale Competente Specifice Conþinuturi Activitãþi de învãþare III. În elaborarea planificãrilor calendaristice recomandãm parcurgerea urmãtoarelor etape: 1 Realizarea asocierilor dintre competenþele specifice ºi conþinuturi. Lectura personalizatã a programelor ºcolare În contextul noului curriculum. Proiectarea demersului didactic Predarea reprezintã activitatea profesorului de organizare ºi conducere a ofertelor de învãþare care are drept scop facilitarea ºi stimularea învãþãrii eficiente la elevi. Planificãrile pot fi întocmite pornind de la urmãtoarea rubricaþie: . Proiectarea demersului didactic presupune: − lectura personalizatã a programelor ºcolare. în funcþie de condiþii ºi cerinþe concrete. MiniGhid Metodologic 113 III. 4 Alocarea timpului considerat necesar pentru fiecare unitate de învãþare.ca ºi al autorului de manual de a lua decizii asupra modalitãþilor pe care le considerã optime în creºterea calitãþii procesului de învatamant. 2 Împãrþirea în unitãþi de învãþare.

III... Întregul cuprins al planificãrii are valoare orientativã. Se recomandã utilizarea urmãtorului format: . Detaliem în continuare elementele esenþiale ale proiectãrii unei unitãþi de învãþare. − se desfãºoarã în mod sistematic ºi continuu pe o perioadã de timp../ ………. generat prin integrarea unor competenþe specifice.care are urmãtoarele caracteristici: − determinã formarea la elevi a unui comportament specific. • Numarul de ore alocate se stabileºte de cãtre profesor în funcþie de experienþa acestuia ºi de nivelul de achiziþii ale elevilor clasei. − este unitarã din punct de vedere tematic.114 Introducere în . O planificare anualã corect întocmitã trebuie sã acopere integral programa ºcolarã la nivel de competenþe specifice ºi conþinuturi. • Conþinuturile selectate sunt cele extrase din lista de continuturi ale programei. Planificare calendaristicã Anul ºcolar………….……………………. de ore alocate Sãptãmâna Observatii În acest tabel: • Unitãþile de învãþare se indicã prin titluri (teme) stabilite de cãtre profesor. O unitate de învãþare reprezintã o structurã didacticã deschisã ºi flexibilã... Proiectarea unei unitãþi de învãþare Elementul generator al planificãrii calendaristice este unitatea de învãþare. Clasa/Nr.. − se finalizeazã prin evaluare.. ore pe sãpt. Unitãþi de învãþare Competenþe specifice Conþinuturi Nr. Profesor…….3..... eventualele modificãri determinate de aplicarea efectivã la clasã putând fi consemnate în rubrica Observaþii..Net Framework (Suport de curs) Unitatea ºcolarã………………… Disciplina………………………. • În rubrica Competenþe specifice se trec simbolurile competenþelor specifice din programa ºcolarã.

flexibilizâd proiectarea didacticã ºi definind în acest sens pentru . Nr. completate.ca ºi a lecþiei . Clasa/Nr. de loc../ ………. Deºi denumirea ºi alocarea de timp pentru unitãþile de învãþare se stabilesc la începutul anului ºcolar prin planificare.începe prin parcurgerea schemei urmãtoare: În ce scop voi face? Identificarea competenþelor Ce voi face? Selectarea conþinuturilor Cu ce voi face? Cum voi face? Determinarea activitãþilor de învãþare Cât s-a realizat? Stabilirea instrumentelor de evaluare Analiza resurselor ConceptuI de unitate de învãþare are rolul sã materializeze conceptul de demers didactic personalizat.. • Rubrica Resurse cuprinde specificãri de timp. Proiectul unitãþii de învãþare …………………………………. • În rubrica Competenþe specifice se trec simbolurile competenþelor specifice din programa ºcolarã • Activitãþile de învãþare pot fi cele din programa ºcolarã.. se urmãreºte corelarea elementelor celor cinci coloane.CAPITOLUL 7.. ordonând activitãþile în succesiunea derulãrii. modificate sau chiar înlocuite de altele..……………………. Finalul fiecãrei unitãþi de învãþare presupune Evaluare sumativã. Proiectarea unitãþii de învãþare .. În completarea rubricaþiei. respectiv în cuplarea lor la baza proprie de cunoaºtere a elevilor. forme de organizare a clasei.. MiniGhid Metodologic 115 Unitatea ºcolarã………………… Disciplina……………………….. Practic pe baza indicaþiilor din planificare se fac detalierile pe orizontalã. este recomandabil ca proiectele unitaþilor de învãþare sã se completeze ritmic pe parcursul anului... material didactic folosit etc.. de ore alocate ……………….. Profesor……. pe care profesorul le considerã adecvate pentru atingerea obiectivelor propuse. raportându-le la competenþe ºi specificând resursele necesare bunei desfãºurãri a procesului didactic. Conþinuturi Competenþe specifice Activitãþi de învãþare Resurse Evaluare Observatii • Conþinuturi: apar inclusiv detalieri de conþinut necesare în explicitarea anumitor parcursuri. având în avans un interval de timp optim pentru ca acestea sã reflecte cât mai bine realitatea. ore pe sãpt. • În rubrica Evaluare se menþioneazã instrumentele sau modalitaþile de evaluare aplicate la clasã..

respectiv.4. lectura programei ºi a manualelor nu mai este în mod obligatoriu liniarã. este primul pas în identificarea unitãþilor de învãþare în care va fi împarþitã materia anului ºcolar. în organizarea unui demers didactic personalizat. Într-o abordare pragmaticã. mijloace de învãþãmânt. Câteva întrebãri utile în proiectarea instrumentelor de evaluare sunt urmãtoarele: • Care sunt competenþele din programa ºcolarã. utilizând surse diverse. pentru a demonstra cã au atins aceste competenþe? • Care este specificul colectivului de elevi pentru care îmi propun evaluarea? • Când º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 cât mai variate astfel încât evaluarea sã fie cât mai obiectivã? • Cum voi folosi datele oferite de instrumentele de evaluare administrate. precum ºi orice alte elemente pe care le considerã utile în derularea scenariului didactic. fie preluate din lista de conþinuturi a programei sau din manual. creativitate. dar ea. ca ºi manualele. Temele sunt enunþuri complexe legate de analiza scopurilor învaþãrii. formulãri care reflectã din partea profesorului o înþelegere profundã a scopurilor activitãþii sale. pe care trebuie sã le dobândeascã elevii? • Care sunt performanþele minime. Activitãþile de învãþare se construiesc prin corelarea competenþelor cu conþinuturile ºi presupun orientarea cãtre un anumit scop. Asupra conþinuturilor programei profesorul poate interveni prin regruparea lor sub temele unitãþilor de învãþare pe care le-a stabilit.116 Introducere în . talent pedagogic. Identificarea unei unitãþi de învãþare se face prin tema acesteia. În condiþiile noului curriculum. redat prin tema activitãþii. resursele cuprind acele elemente care asigurã cadrul necesar pentru buna desfãºurare a activitãþilor de învãþare. formulãri fie originale. se pliazã unei citiri personale ºi adaptate. alocarea de timp. activitãþile de învãþare vor fi transpuse într-o anumitã formã de comunicare inteligibilã nivelului de vârstã. III. pentru a elimina eventualele blocaje constatate în formarea elevilor ºi pentru a asigura progresul scolar al fiecãruia dintre ei? . Programa trebuie parcursã în mod necesar de cãtre toþi . În momentul propunerii lor spre rezolvare elevilor. medii ºi superioare pe care le pot atinge elevii.Net Framework (Suport de curs) practica didacticã premise mai bine fundamentate din punct de vedere pedagogic. Proiectarea activitãþii de evaluare se realizeazã concomitent cu proiectarea demersului de predare/învãþare ºi în deplinã concordanþã cu acesta. Astfel. profesorul va menþiona în aceastã rubricã forme de organizare a clasei (tipuri de interacþiuni ale resurselor umane). inspiraþie. etc. Stabilirea temei de catre profesor pe baza lecturii programei.

fãrã interes în ceea ce priveºte nivelul cognitiv. psihomotor. deºi sunt. Ceea ce este generalizat în evaluarea curentã din ºcoli este stocarea în memorie a abstracþiilor ºi promptitudinea reproducerii acestora. Este important sã fie evaluatã nu numai cantitatea de informaþie de care dispune elevul. cum ar fi: atitudinea elevului faþã de învãþare. În acest sens. Multe cunoºtinþe ºi capacitãþi care necesitã evaluare sunt ignorate. deºi presupune un volum mare de timp pentru aprecierea tuturor . ci. pe drumul atingerii competenþelor prevãzute în programã. relaþional. O astfel de evaluare are în vedere doar unele tipuri de comportamente. constând în probe stereotipe precum dictãri. de obicei nerelevante pentru personalitatea elevului ºi neglijeazã aspecte importante ca: gândirea. variabile importante ale învãþãrii. în accepþiunea tradiþionalã de “notare ritmicã”. imaginaþia. faþã de educator ºi faþã de interrelaþiile din interiorul colectivului de elevi. evaluarea formativã este înlocuitã cu evaluarea curentã. − realizarea unui echilibru dinamic între evaluarea scrisã ºi evaluarea oralã: aceasta din urmã. competenþa de comunicare ºi de relaþionare etc. mai ales. diverse tipuri de exerciþii etc. afectiv. ce are drept scop valorificarea potenþialului de care dispun elevii ºi conduce la perfecþionarea continuã a stilului ºi a metodelor proprii de învãþare. specifice vieþii cotidiene etc. calcule. care inventariazã. MiniGhid Metodologic 117 PREDICTIVÃ (INIÞIALÃ) TIPURI DE EVALUARE FORMATIVÃ (CONTINUÃ) SUMATIVÃ (FINALÃ) • Probe scrise • Probe orale • Probe practice • • • • • • • Observarea sistematicã a elevilor Investigaþia Proiectul Portofoliul Tema pentru acasã Tema de lucru în clasã Autoevaluarea TRADIÞIONALE METODE ªI INSTRUMENTE DE EVALUARE COMPLEMENTARE Adeseori. care sunt apreciate prin note în mod aproximativ. modul în care elevul învaþã (sistematic sau sporadic).. câteva aspecte pot fi avute în vedere: − modificarea raportului dintre evaluarea sumativã. ceea ce poate el sã facã utilizând ceea ce ºtie sau ceea ce intuieºte. în egalã mãsurã. atitudinea de responsabilitate. evaluarea ar trebui sã asigure evidenþierea progresului înregistrat de elev în raport cu sine însuºi. modul cum abordeazã cunoºtinþele pentru a rezolva probleme practice. Focalizatã pe unitatea de învãþare.CAPITOLUL 7. faþã de disciplina de studiu. selecteazã ºi ierarhizeazã prin notã ºi evaluarea formativã. compuneri. adoptarea unor metode proprii de lucru.

itemii obiectivi ºi cei semiobiectivi repezentând instrumente de evaluare fracvent aplicate la aceste discipline. Tipuri de itemi Item = <întrebare> + <formatul acesteia> + <rãspunsul aºteptat> Teoria ºi practica evaluãrii evidenþiazã mai multe citerii pe baza cãrora pot fi clasificaþi itemii. itemii pot fi clasificaþi în trei mari categorii: a. Itemii subiectivi (cu rãspuns deschis) solicitã un rãspuns amplu. Rãspunsul aºteptat este bine determinat. prezintã avantaje deosebite. permiþând valorificarea capacitãþilor creative ale elevilor. Itemi obiectivi Fie cã este vorba de activitãþi de proiectare ºi programare (Informaticã). demonstrarea comportamentului comunicativ ºi de inter-relaþionare a elevului.118 Introducere în . − folosirea cu mai mare frecvenþã a metodelor de autoevaluare ºi evaluare prin consultare în grupuri mici. Itemii obiectivi asigurã un grad de obiectivitate ridicat în mãsurarea rezultatelor ºcolare ºi testeazã un numãr mare de elemente de conþinut într-un interval de timp relativ scurt. lipsite de echivoc. lucrul cu calculatorul implicã formulãri standardizate. ca ºi modalitatea de notare a acestuia. fie cã este vorba de activitãþi de utilizare ºi combinare a instrumentelor informatice (Tehnologia Informaþiei). În raport cu momentele realizãrii evaluãrii. oferind în acelaºi timp posibilitatea de a utiliza ºi materiale auxiliare în rezolvarea sarcinilor de lucru propuse. b.1. III. ca: realizarea interacþiunii elev-profesor.Net Framework (Suport de curs) elevilor ºi blocaje datorate emoþiei sau timiditãþii. d. formativã sau sumativã. principala problemã constituind-o modul de elaborare a schemei de notare astfel încât sã se poatã obþine unitate ºi uniformitate la nivelul corectãrii. Itemii obiectivi sunt caracterizaþi prin: . c. Aceºtia sunt relativ uºor de construit. Itemii semiobiectivi permit ca rãspunsul aºteptat sã nu fie totdeauna unic determinat. Aceºtia testeazã o gamã mai variatã de capacitãþi intelectuale. Unul dintre criteriile cel mai des utilizate este acela al gradului de obiectivitate oferit în corectare. activitatea de învãþare / formare a elevilor în mod diferenþiat. modalitatea de corectare ºi notare inducând uneori mici diferenþe de la un corector la altul. Fiecare activitate de evaluare a rezultatelor ºcolare trebuie însoþitã în mod sistematic de o autoevaluare a procesului pe care profesorul l-a desfãºurat cu toþi elevii ºi cu fiecare elev. În funcþie de acest criteriu.4. de la o etapã la alta. în proiectul unitãþii de învãþare apar specificaþii: evaluare iniþialã. Numai astfel pot fi stabilite modalitãþile prin care poate fi reglatã.

”. sau imagini. În aceste cazuri. efortul elevului reducându-se la identificarea unui rãspuns din douã posibile. Tot în categoria itemilor cu alegere dualã se pot realiza cerinþe care necesitã din partea elevului operaþii de anticipare a efectului unei operaþii prin aplicarea unui sistem riguros de cunoºtinþe într-un context nou. o parte din punctaj este alocatã justificãrii.”.. ♦ obiectivitate privind aprecierea rãspunsului.CAPITOLUL 7. definiþii. MiniGhid Metodologic 119 ♦ structurarea sarcinilor propuse ºi standardizarea formatului lor de prezentare. instrucþiuni. justificãri care necesitã achiziþii cognitive superioare. ºtiinþifice. neexersate. instrumente de prelucrare. Pentru proiectarea corectã a itemilor cu alegere dualã este necesarã respectarea urmãtoarelor cerinþe: ♦ formularea clarã a enunþului. ♦ rolul secundar pe care îl au de a obiºnui elevul cu formulãri standard. “Explicaþi în ce constã eroarea. ♦ posibilitatea asocierii cu un sistem de notare extrem de simplu: punctajul aferent se acordã integral. elemente utile în construirea rãspunsurilor pentru itemii semiobiectivi ºi subiectivi.1. itemii cu alegere dualã sunt formulaþi în combinaþie cu itemi subiectivi de tipul “Justificaþi. se acordã parþial conform unei reguli (formule) de calcul sau nu se acordã deloc (în funcþie de rãspunsul aºteptat). Fac excepþie enunþurile care pun în evidenþã justificãri ale unor proprietãþi. fãrã ambiguitãþi sau formulãri incomplete.. notaþii etc... De obicei. Se pot verifica prin intermediul itemilor cu alegere dualã: − cunoºtinþele legate de corectitudinea sintacticã a unor expresii (comenzi. Factorul de discriminare fiind însã extrem de mic. elevul va putea obþine un rezultat acceptabil la un test format numai din astfel de itemi alegând la întâmplare un rãspuns dintre cele douã admise pentru fiecare item în parte. Corect/Incorect etc. a. Achiziþiile evaluate prin itemii cu alegere dualã sunt de regulã rudimentare. ♦ corelarea strictã a sarcinilor cu obiectivele de evaluãrii. operaþii sau reguli.. dacã se solicitã aprecierea cu ADEVÃRAT/FALS. . ♦ capacitatea de a testa un numãr mare de elemente de conþinut într-un timp relativ scurt. − înþelegerea semnificaþiei unor noþiuni din terminologia de specialitate (denumiri. se vor evita enunþurile foarte generale. proprietãþi etc. Aceºtia sunt itemii cu cel mai înalt grad de dificultate. Da/Nu..). metode de rezolvare. Itemii de acest tip se prezintã sub forma unor întrebãri sau enunþuri.) − recunoaºterea unor explicaþii.).“ etc. Itemi cu alegere dualã Alegerea dualã presupune formularea unei cerinþe cu douã variante complementare de rãspuns (Adevãrat/Fals. “Scrieþi varianta corectã. Atragem atenþia asupra faptului cã lipsa “firului roºu“ care pune în evidenþã elementele sistematice întâlnite în utilizarea unui produs soft (chiar ºi în cazul unui soft de bazã) conduc la un experimentalism accentuat care împiedicã formarea capacitãþii elevului de a se adapta situaþiilor noi.

. ♦ se vor evita enunþurile lungi ºi complexe. − termeni ºi definiþii. dintr-o sferã relativ restrânsã. deoarece acesta ar putea constitui un indiciu dupã care elevul încearcã sã ghiceascã rãspunsul corect. sã nu rezulte automat rãspunsul pentru cel de-al n-lea enunþ. ♦ se va evita introducerea a douã idei într-un singur enunþ. inducând un grad înalt de ambiguitate.) ºi se precizeazã dacã un rãspuns poate fi folosit la mai mult de un enunþ (dacã funcþia de asociere este injectivã sau nu). dacã elevul asociazã corect n-1 enunþuri dintre cele n date. acestea conducând la raþionamente ce folosesc dubla negaþie. Pentru proiectarea corectã a itemilor de tip de pereche este necesarã respectarea urmãtoarelor cerinþe: ♦ utilizarea unui material omogen. dar nu exact egale. Itemii de acest tip permit abordarea unui volum mare de informaþie într-un interval de timp relativ redus. ♦ enunþurile adevãrate sau false sã fie aproximativ egale ca numãr. − probleme ºi metode de rezolvare.2. cea de-a doua coloanã conþinând informaþii de tip rãspuns. a. ♦ se va evita utilizarea unor enunþuri negative. − simboluri ºi concepte. strategia de asociere “la întâmplare” neconducând decât în situaþii foarte rare la un rezultat acceptabil privind rezultatul testului. Itemi de tip pereche Itemii de tip pereche solicitã stabilirea unor corespondenþe între informaþiile distribuite pe douã coloane. efortul de a realiza enunþuri fãrã echivoc duce la elaborarea de itemi nesemnificativi din punct de vedere educaþional sau ºtiinþific). nu se va folosi un limbaj academic.Net Framework (Suport de curs) ♦ selectarea unor enunþuri relevante pentru domeniul de cunoaºtere sau categoria de competenþe testatã (uneori. cu excepþia cazului în care se doreºte evidenþierea relaþiei dintre acestea. Cele douã coloane sunt precedate de instrucþiuni de asociere în care i se explicã elevului tehnica de formare a perechilor (sã uneascã printr-o linie. ♦ enunþurile vor fi aproximativ egale ca lungime. sã rescrie perechile asociate sau doar elementele lor de identificare etc. Elevului i se solicitã sã asocieze fiecare enunþ cu un unic rãspuns. ♦ utilizarea unui numãr inegal de premise ºi rãspunsuri. eventual dacã existã rãspunsuri care nu vor fi folosite niciodatã (dacã funcþia de asociere este surjectivã sau nu). astfel încât. prin eliminarea elementelor redundante inutile în raport cu ideea enunþului ºi cerinþa itemului. o terminologie foarte specializatã sau o construcþie lingvisticã stufoasã ºi greoaie. Prima coloanã conþine informaþii de tip enunþ (premise).120 Introducere în . Se verificã prin intermediul itemilor de tip pereche capacitatea elevului de a stabili corelaþii între: − funcþii ºi instrumente. Factorul de discriminare este ceva mai mare decât în cazul itemilor cu alegere dualã.

CAPITOLUL 7. oferind posibilitatea evaluãrii unor achiziþii cognitive complexe. ♦ construirea unor alternative plauzibile. care sã construiascã toate alternativele posibile de a greºi. În aceste cazuri trebuie manifestatã grijã la formularea cerinþei astfel încât criteriul de discriminare a “celui mai bun rãspuns” sã reiasã clar din enunþ. − secvenþe de program care realizeazã o anumitã prelucrare.3. Pentru proiectarea corectã a itemilor cu alegere multiplã este necesarã respectarea urmãtoarelor cerinþe: ♦ stabilirea clarã a cerinþei. . ♦ formularea premisei folosind afirmaþii sau întrebãri pozitive. deºi nu pot mãsura capacitatea elevului de a-ºi organiza ºi exprima ideile. − termeni ºi expresii de specialitate. neconforme cu cerinþa.) Un item cu alegere multiplã este format dintr-un enunþ numit premisã sau bazã ºi un numãr de opþiuni din care elevul trebuie sã aleagã un singur rãspuns numit cheie. în concordanþã cu obiectivul de evaluare. iar varianta cheie sã fie în mod cert “corectã” sau “cea mai bunã”. admitere etc. a. iar factorul de discriminare este mai mare decât în cazul celorlalþi itemi obiectivi. în timp ce alþi itemi solicitã cel mai bun rãspuns. Sunt forme de testare cu un grad mare de fidelitate. ♦ construirea itemului astfel încât sã existe o singurã alternativã “corectã” sau “cea mai bunã”. − expresii cu o valoare datã. O categorie de itemi cu alegere multiplã solicitã rãspunsul corect. Itemi cu alegere multiplã Itemii cu alegere multiplã sunt cele mai utilizate tipuri de itemi. ♦ furnizarea tuturor informaþiilor necesare în premisã. ♦ aranjarea enunþurilor în listã astfel încât sã nu se poatã intui o regulã de asociere (referinþele sã fie “încruciºate”). ♦ construirea unor alternative astfel încât distractorii sã fie în mod cert “greºiþi” sau “mai puþin buni”. − instrumentul adecvat unei prelucrãri. Se verificã prin intermediul itemilor de tip pereche capacitatea elevului de a identifica: − definiþii ºi notaþii. ♦ aranjarea coloanelor astfel încât acestea sã încapã în întregime pe aceeaºi paginã. în special în testele standardizate (bacalaureat. celelalte variante fiind greºite. pe baza unei discriminãri complexe. aflate în concordanþã cu premisa. astfel încât cãutarea rãspunsului în listã sã se realizeze cât mai comod. MiniGhid Metodologic 121 ♦ aranjarea listei de rãspunsuri (mai ales dacã sunt multe) într-o ordine logicã. dar plauzibile poartã numele de distractori. Celelalte rãspunsuri. Itemii de acest tip permit abordarea unui volum mare de informaþie într-un interval de timp relativ redus. eliminându-se materialul irelevant. contribuie la reuºita aplicãrii testelor cu alegere multiplã. Abilitatea profesorului de a elabora distractori cât mai plauzibili. Erorile comise de elevi oferã profesorului informaþii suplimentare necesare în autoreglarea procesului de învãþãmânt. − metode de rezolvare ºi tehnici de implementare.

simboluri. care comportã raportãri noi la barem). Ei solicitã gãsirea cuvîntului sau sintagmei care completeazã ºi dã sens enunþului respectiv. Ei solicitã un rãspuns sub o formã restrânsã (un numãr. o propoziþie sau frazã concisã). − capacitatea de integrare a unor elemente necesare din punct de vedere sintactic sau semantic într-un context dat. Itemii cu rãspuns scurt se prezintã cel mai des sub forma unor întrebãri..) ♦ posibilitatea asocierii unui sistem de notare în care pot sã intervinã situaþii neprevãzute (rãspunsuri neaºteptate. Pentru proiectarea corectã a itemilor cu rãspuns scurt / de completare este necesarã respectarea urmãtoarelor cerinþe: ♦ formularea enunþului astfel încât sã admitã un rãspus scurt.1. astfel încât cãutarea rãspunsului în listã sã se realizeze cât mai comod. − recunoaºterea ºi nominalizarea unor elemente vizuale specifice unui anumit mediu de lucru.Net Framework (Suport de curs) ♦ aranjarea listei de rãspunsuri într-o ordine logicã. exprimat cu precizie. ♦ crearea unor situaþii cognitive de nivel mai ridicat prin solicitarea de elaborare a rãspunsului ºi nu de alegere a lui dintr-o mulþime prestabilitã. expresii de specialitate. un cuvânt. formularea poate fi mai clarã sau mai neclarã. Se pot verifica prin intermediul itemilor cu rãspuns scurt ºi de completare: − cunoaºterea unor noþiuni. Itemi semiobiectivi Itemii semiobiectivi formeazã o categorie de instrumente de evaluare ce solicitã construirea parþialã sau totalã a unui rãspuns pe baza unei sarcini definite. ca în cazul itemilor obiectivi. Itemi cu rãspuns scurt / de completare Itemii cu rãspuns scurt solicitã ca elevul sã formuleze un rãspuns scurt sau sã completeze o afirmaþie astfel încât aceasta sã capete sens sau sã aibã valoare de adevãr. − schimbarea unor elemente dintr-un context dat astfel încât sã se realizeze o finalitate precizatã. b. Itemii de completarea se prezintã sub forma unui enunþ. termenii folosiþi se pot încadra în niºte standarde ºtiinþifice sau pot fi variante particulare ale acestora etc. ♦ construirea ansamblurilor de itemi cu alegere multiplã astfel încât rãspunsurile sã ocupe poziþii diferite în lista de variante (sã nu fie în mod constant al doilea rãspuns. de exemplu) b. un simbol. Itemii semiobiectivi sunt caracterizaþi prin: ♦ posibilitatea de a testa o gamã mai largã de capacitãþi intelectuale ºi rezultate ale învãþãrii. o expresie. notaþii etc. ♦ raportarea parþial subiectivã a profesorului în raport cu rãspunsul formulat (rãspunsul poate fi scris ordonat sau dezordonat.122 Introducere în . unei afirmaþii incomplete. .

dar ºi priceperi ºi deprinderi sporind gradul de obiectivitate în raport cu itemii cu rãspuns deschis. O întrebare structuratã poate sã conþinã materiale suport ºi informaþii suplimentare ce se adaugã treptat. itemii subiectivi ridicã probleme privind obiectivitatea evaluãrii. Itemii subiectivi sunt caracterizaþi prin: ♦ abordare globalã a unei sarcini asociate unui obiectiv ce nu poate fi evaluat prin intermediul itemilor obiectivi. adapta ºi construi un algoritm pe o temã datã sau un program într-un limbaj de programare. adicã rãspunsul la o întrebare sã nu depindã de rãspunsul la întrebãrile precedente.2. originalitatea ºi caracterul personal al rãspunsului. MiniGhid Metodologic 123 ♦ formularea enunþului astfel încât acesta sã admitã un singur rãspuns corect. abilitãþi ºi deprinderi. Subîntrebãrile ce formeazã itemul permit creºterea progresivã a dificultãþii cerinþelor.CAPITOLUL 7. dar este recomandat ca subîntrebãrile sã fie independente. Pentru proiectarea corectã a întrebãrilor strucutrate este necesarã respectarea urmãtoarelor cerinþe: ♦ redactarea subîntrebãrilor astfel încât acestea sã solicite rãspunsuri simple la început crescând pe parcurs dificultatea acestora. Proiectarea lor necesitã atenþie. c. ♦ rezervarea unor spaþii pentru rãspuns care sã sugereze numãrul de cuvinte aºteptate (dacã acest lucru nu reprezintã un indiciu). pricepere ºi timp. Deºi sunt uºor de formulat. Întrebãri structurate Întrebãrile structurate solicitã. complexitate ºi gradualitate. Se pot verifica totodatã cunoºtinþe. recunoaºte. pe cât posibil. − capacitatea de a realiza din aproape în aproape o prelucrare complexã utilizând un mediu de lucru informatic.realizarea concordanþei dintre enunþul general (tema întrebãrii) ºi subîntrebãrile formulate. nu ºi dimensiunea lor. Se pot verifica prin intermediul întrebãrilor structurate: − capacitatea de a urmãri. rãspunsuri scurte sau de completare prin care se pot evalua cunoºtinþele complexe referitoare la tema respectivã fãrã a solicita elaborarea unui rãspuns deschis (eseu). ♦ formularea unor subîntrebãri autoconþinute (al cãror rãspuns corect sã nu depindã de rãspunsul corect la una dintre întrebãrile precedente. b. . Itemi subiectivi (cu rãspuns deschis) Itemii subiectivi formeazã o categorie de instrumente de evaluare ce vizeazã creativitatea elevului. ♦ vizarea unui rãspuns care sã reprezinte o sintezã de cunoºtinþe sau un rezultat al înþelegerii unei situaþii ºi mai puþin o reproducere a unor informaþii. ♦ crearea unor situaþii cognitive de nivel foarte ridicat prin solicitarea de a realiza interacþiuni reale ºi complexe între cunoºtinþe. conferind procesului de evaluare varietate. printr-un sistem de subîntrebãri relative la o temã comunã. rãspunsuri de tip obiectiv.

124

Introducere în .Net Framework (Suport de curs)

♦ raportarea subiectivã a profesorului în raport cu rãspunsul 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 prevãzut toate situaþiile de interpretare ºi construire a rãspunsului, a unor elemente noi (rãspunsuri neaºteptate) care comportã reanalizarea baremului. În cazul informaticii ºi tehnologiei informaþiei se pot elabora itemi subiectivi de tip eseu (structurat sau liber) ºi itemi de tip problemã (care necesitã proiectare, redactare ºi uneori implementare a rezolvãrii).

c.1. Itemi de tip eseu
Itemii de tip eseu pot fi structuraþi sau liberi. Itemii structuraþi sunt construiþi astfel încât rãspunsul aºteptat sã fie “orientat” cu ajutorul unor elemente din enunþ (indicii privind ordinea de tratare, numãrul de linii, formularea rãspunsului, ideile care trebuie sã fie atinse etc.). Un eseu liber nu furnizeazã în enunþ nici un fel de indicaþii sau constrângeri, elevul având libertatea sã-ºi strucutreze cum considerã ºi cum poate materialul pe care-l solicitã enunþul. Acest tip de eseu comportã operaþii de maximã complexitate (analizã, sintezã, sistematizare ºi restructurare) lãsând frâu liber fanteziei ºi capacitãþilor creative ale elevului. Deoarece la informaticã elementele de creativitate se manifestã mai ales prin rezolvãri de probleme ºi proiecte, iar în cazul tehnologiei informaþiei prin teme practice ºi proiecte, itemii de tip eseu preferaþi sunt cei structuraþi, un eseu liber nefiind necesar decât rar, pentru anumite teme cu un volum mai mare de elemente “informative” în raport cu achiziþiile “operaþionale”. Se pot verifica prin intermediul itemilor de tip eseu: − cunoºtinþele globale legate de stuctura sistemelor de calcul, sisteme de operare, evoluþia istoricã a sitemelor hard ºi soft, principiile de utilizare a unei anumite aplicaþii, etapele conceptuale ale proiectãrii unei aplicaþii etc. − capacitãþile de sistematizare a unor elemente prin construirea unor scheme sau reprezentãri grafice. Itemii de tip eseu se prezintã sub forma unor cerinþe generale însoþite eventual (pentru eseurile structurate) de indicii privind tratarea cerinþei. Se pot adãuga restricþii privind întinderea în timp sau spaþiu (numãr rânduri, pagini, paragrafe etc.) sau privind forma de prezentare a rãspunsului. c.2. Itemi de tip problemã Rezolvarea unei probleme presupune soluþionarea unei situaþii conflictuale generatã de neconcordanþe ivite între sistemul de achiziþii ºi situaþiile concrete descrise de un enunþ. Aceste neconcordanþe sunt generate uneori de nepotrivirea între contextul general al cunoºtinþelor ºi situaþiile particulare în care acestea trebuie sã fie aplicate. Alteori achiziþiile sunt dobândite prin experimente (situaþii particulare) ºi, pentru a fi aplicate în cu totul alte situaþii, 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 gândirii algoritmice, metodele de rezolvare ºi tehnicile de implementare fiind supuse unui “tir” sistematic de probleme prin care acestea sã formeze competenþe reale de programare. Capacitãþile cognitive superioare legate de aplicare creativã, gândire divergentã, descoperirea condiþiilor interne, alegerea modelului adecvat etc. sunt verificate prin itemi de acest tip. Obiectivele urmãrite prin utilizarea rezolvãrii de probleme sunt:
− obþinerea informaþiilor necesare rezolvãrii problemei; − formularea ºi testarea ipotezelor; − descrierea metodei de rezolvare a problemei; − elaborarea unui raport despre rezultatele obþinute; − posibilitatea de generalizare ºi transfer a tehnicilor de rezolvare.

Cerinþe suplimentare asociate unei probleme pot pune în evidenþã capacitatea elevului de a estima eficienþa unei rezolvãri, de a construi un algoritm conform unor criterii (limita de memorie, numãr de instrucþiuni 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 prelucrãrile numerice întâlnite la matematicã, fizicã sau în alte domenii, o formulare a enunþului care sã se caracterizeze prin coerenþã. Enunþurile 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 cãreia se ascunde problema are de cele mai multe ori conotaþii practice, descriind situaþii concrete de prelucrare, amintind cã rolul programatorului este acela de a “ordona” iniþial informaþia ºi operaþiile specifice unui anumit context ºi abia dupã aceea de a elabora algoritmul, de a implementa ºi verifica programul corespunzãtor. Aspecte de aceeaºi naturã se întâlnesc ºi în domeniul utilizãrii calculatorului, la Tehnologia informaþiei, când beneficiarul formuleazã un enunþ ºi utilizatorul trebuie sã-ºi aleagã programul de aplicaþie adecvat, din cadrul programului sã-ºi aleagã obiectele ºi instrumentele potrivite, sã proiecteze, pe paºi, prelucrarea astfel încât “produsul” (documentul, prezentarea, raportul etc.) sã rãspundã cerinþelor ºi sã fie realizat în timp record. Aspectele reale de concepþie, de creativitate ºi gândire divergentã intervin la realizarea machetelor, a prezentãrilor etc. Evaluarea prin rezolvare de probleme la informaticã ridicã uneori probleme din punctul de vedere al întocmirii baremului de corectare. Unele tendinþe exagerate tind sã impunã o corectare pe principiul: problemã=program funcþional corect (pornind de la premisa cã “un program care aproape merge e ca un avion care aproape zboarã”). Se recomandã totuºi ca baremul de corectare sã cuprindã fracþiuni 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, eficienþa algoritmului, tratarea unor situaþii limitã, eventual explicarea metodei aplicate (chiar daca a fost aplicatã greºit) etc.

126

Introducere în .Net Framework (Suport de curs)

Se pot verifica prin intermediul itemilor de rezolvare de probleme: − concepþia unor algoritmi de rezolvare a problemelor elementare; − asimilarea unui algoritm general prin adaptarea lui astfel încât sã rezolve o problemã particularã; − capacitatea de a alege structurile de program ºi de date adecvate rezolvãrii unei probleme; − abilitatea de a implementa programul, de a-l depana, de a-l testa ºi, în funcþie de erorile apãrute, de a reconsidera elementele de sintaxã ale programului, strategiile de structurare a datelor sau însuºi algoritmul de rezolvare (în partea practicã a probei); − capacitatea de a organiza volume mari de date cu ajutorul bazelor de date; − discernãmântul în a alege un algoritm mai eficient (conform unuia dintre din criteriile studiate: numãr operaþii, spaþiu de memorie utilizat)

III.4.2. Metode complementare de evaluare
Metodele complementare de evaluare reprezintã instrumente suplimentare, nestandardizate, de evaluare dispunând de forme specifice cum ar fi: investigaþia, referatul, portofoliul, proiectul, observarea sistematicã a activitãþii elevului ºi autoevaluarea. Metodele complementare realizeazã actul evaluãrii în strînsã legãturã cu procesul educativ, prin întrepãtrundere cu etapele acestuia, urmãrind în special capacitãþile cognitive superioare, motivaþiile ºi atitudinea elevului în demersul educaþional. Metodele alternative de evaluare se caracterizeazã prin urmãtoarele: ♦ capacitatea de a transforma relaþia profesor-elev inducând un climat de colaborare ºi parteneriat; ♦ posibilitatea transformãrii procesului de evaluare prin înlocuirea tendinþei de a corecta ºi sancþiona prin aceea de a soluþiona 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 cunoºtinþelor, capacitãþilor º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 activitãþi de grup (investigaþii, proiecte); ♦ caracterul profund integrator realizat prin interdisciplinaritate, educare ºi instruire mutilateralã. 1. Investigaþia Investigaþia este o metodã de evaluare ºi învãþare utilizatã foarte des la disciplina Tehnologie informaþiei ºi numai ocazional la disciplina Informaticã.

informaþiile din Help.CAPITOLUL 7. a noutãþilor hardware etc. aplicaþia româneascã de tip agendã MyCount difuzatã pe Internet): citeºte explicaþiile asociate butoanelor. ♦ urmãrirea activitãþii elevului în sensul utilizãrii eficiente ºi creatoare a materialului de investigat. − solicitarea unor cunoºtinþe sau deprinderi dobândite la alte dicipline prin adaptarea creatoare a acestora la cerinþele temei de investigaþie.). compararea ºi generalizarea unor tehnici ºi metode utilizate în tehnologie prin cercetarea altor izvoare sau prin utilizarea altor instrumente echivalente.). Varietatea universului informatic (a limbajelor ºi tehnicilor de programare. În cele mai multe dintre cazuri investigaþia trebuie sã fie organizatã ca muncã independentã depusã de elev. ♦ încurajarea ºi evidenþierea activitãþilor creatoare desfãºurate de elevi. ♦ sprijinirea elevilor sau grupurilor de elevi care întâmpinã dificultãþi în înþelegerea temei sau a metodelor specifice de studiu. Investigaþii mai rafinate pot realiza elevii iniþiaþi în programare ºi în sisteme de operare care disting mult mai multe aspecte “în spatele“ produsului soft investigat (eficienþã. Pentru organizarea activitãþilor de investigaþie. configurare. experimentarea unor instrumente de prelucrare nestandard. însoþitã de bibliografie ºi alte surse de documentare (Internet. ♦ formularea unor indicaþii care sã direcþioneze activitatea elevilor. cu multitudinea de aplicaþii software din domenii atât de variate. atât la Tehnologia informaþiei cât ºi la Informaticã. spaþiul ocupat pe disc sau în memorie. opþiunile din meniuri. Referatul ºi proiectul Referatul reprezintã o formã de îmbinare a studiului individual cu activitate de prezentare ºi argumentare. calitatea graficã ºi funcþionalã a interfeþei). este un teren ideal pentru desfãºurarea investigaþiilor. spaþiul ocupat de produsele construite cu ajutorul lui. − extrapolarea cunoºtinþelor dobândite ºi verificarea ipotezelor formulate. profesorul va urmãri: ♦ formularea generalã a temei. MiniGhid Metodologic 127 Organizarea unei activitãþi de evaluare ºi învãþare prin metoda investigaþiei presupune: − valorificarea metodei de învãþare prin descoperire. Dacã studiul aferent ºi rezultatul studiului prezintã interes ºi din punct de vedre practic. a aplicaþiilor din domeniul TIC. posibilitate de dezvoltare. rezultatul fiind un program (o aplicaþie) sau un produs TI complex (rezultatul aplicãrii creatoare a instru- .) justificã utilizarea acestei forme de studiu ºi evaluare la clasã. Elevul cerceteazã “posibilitãþile” unei aplicaþii (de exemplu. a descoperirilor neaºteptate. vizite etc. ♦ asigurarea surselor bibliografice sau tehnice necesare. conflicte cu alte programe etc. − studiul unor documentaþii complementare. dirijatã ºi sprijinitã de profesor. experimenteazã operaþiile propuse de aplicaþie imaginând utilitatea practicã a acestora ºi formuleazã concluzii generale referitoare la acel soft (utilitate. Tema referatului. este tratatã în mod independent de cãtre elev ºi susþinutã apoi în faþa colegilor sau altui auditoriu mai larg. 2. Tehnologia informaþiei.

lucrarea poartã numele de proiect. Proiectul este o lucrare mai amplã a cãrei temã este comunicatã sau aleasã din timp. Pentru a realiza o evaluare pe bazã de proiecte. ♦ va supraveghea discuþiile purtate cu elevii asupra conþinutului referatului.Net Framework (Suport de curs) mentelor informatice). de complexitate sporitã. elaborarea unui proiect putând sã dureze de la 1-2 sãptãmîni pânã la 2-3 luni sau chiar un semestru. experimentare. ilustrat sau prezentat pe calculator. − studiul unor materiale suplimentare ºi izvoare de informare diverse în scopul îmbogãþirii ºi activizãrii cunoºtinþelor din domeniul studiat sau domenii conexe. dar mai structuratã ºi mai bogatã în informaþii decât o temã de muncã independentã aferentã lecþiei curente. ♦ îºi va rezerva suficient timp (în perioada de evaluare sau la sfârºitul unor unitãþi de învãþare) pentru ca elevii însãrcinaþi cu elaborarea referatelor sã-ºi poatã prezenta referatul. prin completãri de conþinut ale programei sau prin aducerea în atenþie a unei problematici complet noi. sã fie capabil sã dea explicaþii suplimentare. în cazul proiectului. Proiectul poate fi elaborat în grup. durata maximã necesarã prezentãrii etc. sã rãspundã la întrebãri etc. reproiectare (dacã este cazul).) ♦ va recomanda sau asigura sursele bibliografice ºi de informare necesare. − prezentarea referatului sau proiectului de cãtre elevul sau elevii care l-au elaborat. activitãþile de concepere. dezvoltare ºi elaborare a documentaþiei aferente necesitã planificarea unor etape de elaborare ºi o strategie de lucru. Referatul poate fi utilizat la Informaticã ºi în egalã mãsurã la Tehnologia informaþiei temele referatelor vizând cel mai des domenii de actualitate în producþia sofware sau în domeniul TIC. termene intermediare de raportare. implementare ºi testare necesitã un timp mai îndelungat. organizare. . precizînd pe cât posibil amploarea lucrãrii (câte pagini. Referatul este de regulã o lucrarea de mai micã amploare. de complexitate medie. profesorul: ♦ va formula teme clare. lãsând celor care elaboreazã proiectul multã libertate în a improviza. profesorul: ♦ va formula teme practice. ♦ va stabili un termen final ºi. − structurarea informaþiei corespunzãtoare unui referat într-un material ce poate fi scris. dacã bibliografia propusã este mai bogatã ºi etapele de proiectare (concepþie). acesta (sau un reprezentant al grupului) trebuind sã-l susþinã. Organizarea unei activitãþi de evaluare ºi învãþare prin intermediul referatelor ºi proiectelor presupune: − valorificarea metodei de învãþare prin descoperire. Pentru a realiza o evaluare pe bazã de referate. cu o distribuire judicioasã a sarcinilor între membrii grupului.128 Introducere în . adapta ºi interpreta cerinþa într-un mod personal. în funcþie de modul de evaluare.

♦ va evalua separat fiecare piesã a portofoliului în momentul realizãrii ei. teme pentru acasã. atitudinea elevului) sau chiar de cãtre elev (pe considerente de performanþã. 4. ♦ va alege componentele ce formeazã portofoliul. ♦ va integra rezultatul evaluãrii portofoliului în sistemul general de notare. autoevaluarea elevului. MiniGhid Metodologic 129 ♦ va recomanda sau asigura sursele bibliografice ºi de informare necesare. cât ºi pentru elev sau pãrinþii acestuia. sesizând elementele de progres sau regres. observarea sistematicã la clasã. un an. atât pentru profesor. ilustrând preocuparea pentru lãmurirea neclaritãþilor. investigaþii. pânã la un ciclu de învãþãmânt. fiecare vizând anumite aspecte de utilizare. ♦ va supraveghea discuþiile purtate cu elevii asupra proiectului.CAPITOLUL 7. Portofoliul Portofoliul reprezintã o metodã complexã de evaluare în care un rezultat al evaluãrii este elaborat pe baza aplicãrii unui ansamblu variat de probe ºi instrumente de evaluare. dar va asigura ºi un sistem de criterii pe baza cãrora sã realizeze evaluarea globalã ºi finalã a portofoliului. ♦ va pune în evidenþã evoluþia elevului. profesorul: ♦ va comunica elevilor intenþia de a realiza un portofoliu. 3. gradului de formare a abilitãþilor ºi gradului de raportare atitudinalã pe care acesta o are faþã de tema evaluatã. de la un semestru. ♦ îºi va rezerva suficient timp (în perioada de evaluare sau la sfîrºitul unor unitãþi de învãþare) pentru ca elevii însãrcinaþi cu elaborarea proiectelor sã-ºi poatã prezenta rezultatul proiectãrii. Pentru a realiza o evaluare pe bazã de potofoliu. Alegerea elementelor ce formeazã portofoliul este realizatã de cãtre profesor (astfel încât acestea sã ofere informaþii concludente privind pregãtirea. oferind o imagine de ansamblu asupra nivelului cunoºtinþelor. Prin multitudinea de forme ºi momente în care se desfãºoarã testarea elevului. particularitãþile de exprimare ºi de raportare a acestuia la aria vizatã. Conþinutul unui portofoliu este reprezentat de rezultatele la: lucrãri scrise sau practice. referate ºi proiecte. adaptând instrumentele de evaluare ce constituie “centrul de greutate” ale portofoliului la specificul disciplinei. Portofoliul este realizat pe o periadã mai îndelungatã. rezultatul final “converge” cãtre valoarea realã a acestuia. evoluþia. La Tehnologia informaþiei portofoliul se poate constitui dintr-o colecþie de lucrãri practice realizate pe calculator. dând ºi elevului posibilitatea de a adãuga piese pe care le considerã relevante pentru activitatea sa.) Structurarea evaluãrii sub forma de portofoliu se dovedeºte deosebit de utilã. preferinþe etc. Observarea sistematicã a activitãþii ºi comportamentului elevilor Fiºa de observare a activitãþii ºi comportamentului elevului înregistreazã informaþii legate de particularitãþile personalitãþii elevului manifestate în procesul didac- . chestionare de atitudini etc.

imaginaþie. de progresul înregistrat de acesta. în funcþie de secvenþa unitãþii de învãþare în care se aflã. parte dintre ele fiind comunicate elevului ºi pãrinþilor acestuia. Proiectul unitãþii de învãþare . Informaþiile din fiºa personalã au caracter parþial secret.proiect didactic” pe termen mediu ºi lung.130 Introducere în . dar ºi a celui de învãþare. de achiziþiile evaluate spontan (rãspunsuri sporadice. cu accent pe ritmurile de învãþare proprii ale elevilor. climat educativ. ♦ Particularitãþi afectiv-motivaþionale.). cu materia studiatã.proiectarea unitãþii de învãþare are urmatoarele avantaje: • creeazã un mediu de învãþare coerent în care aºteptãrile elevilor devin clare pe termen mediu ºi lung. Prin stabilirea copmpetenþelor generale ale disciplinei ºi achiziþiile cognitive ºi comportamentale vizate de aceasta. în tabelul care sintetizeaza proiectarea unitatii de învãþare se pot delimita prin linii orizontale (punctate) spaþiile corespunzatoare unei ore de curs. Completarea fiºei se realizeazã în timp într-un ritm adecvat specificului activitãþilor de la disciplina.Proiectul de lecþie? Faþã de proiectarea tradiþionalã centratã pe lecþie (ora de curs) . proiectul unitãþii de învãþare oferã date referitoare la elementele de conþinut ºi com- . atitudini semnificative etc. conferind acestora o structurã specificã. IV. Profesorul construieºte aceastã fiºã în vederea individualizãrii procesului sumativ de evaluare. Proiectul de lecþie .este recunoscut ca o formalitate consumatoare de timp ºi energie. Pe baza fiºei de evaluare se poate realiza ºi orientarea ºcolarã ºi profesionalã a elevului. limbaj. • dã perspectiva lecþiilor.conceput ca document separat . atenþie. Un model orientativ de fiºã de observare conþine: ♦ Date generale despre elev (nume. condiþii materiale.Net Framework (Suport de curs) tic. Proiectul unei unitãþi de învãþare conþine suficiente elemente pentru a oferi o imagine asupra fiecãrei ore. particularitãþi socio-comportamentale). prenume. fiºa de observare poate sã conþinã ºi considerente legate de atingerea ºi formarea competenþelor specifice. spirit de observaþie etc. memorie.). dar ºi în funcþie de implicarea ºi de ritmul individual al elevului. • implicã profesorul într-un . intereselor ºi nivelului de integrare.proiecte de învatare personale” pe termen mediu si lung rezolvare de probleme complexe. vârstã. Astfel. ♦ Aptitudini ºi interese manifestate. cu accent pe explorare ºi reflecþie. luare de decizii complexe.. pentru fiecare lecþie. Ca urmare. cu colegii) ♦ Consideraþii privind evoluþia aptitudinilor.. ♦ Trãsãturi de temperament. din anul ºi de la clasa respectivã. ♦ Atitudini ºi relaþionare (cu sine însuºi. atitudinilor. • implicã elevii în . ♦ Particularitãþi ale proceselor intelectuale (gîndire.

Acest mod de tratare orientatã cãtre scopuri precise caracterizeazã organizarea atât a unitãþii de învãþare cât ºi a lecþiei. forme de organizare a clasei etc. Planurile . în afara celor prevãzute în trunchiul comun la un anumit profil ºi specializare. 2 Opþionalul de extindere este derivat dintr-o disciplinã studiatã în trunchiul comun. Ca urmare. la toate profilurile ºi specializãrile. nu mai este necesarã detalierea la nivelul proiectului de lecþie. structuralã (Cu ce?) ºi operaþionalã (Cum?) a unitaþii de învãþare. pentru fiecare activitate precum ºi instrumente de evaluare necesare la nivelul lecþiei (orei).la o lecþie componentã trebuie sã permitã o . un numãr minim ºi un numãr maxim de ore pe sãptãmânã pentru CDª. sunt indicate resurse materiale. totodatã. Dacã unitatea de învãþare oferã întelegerea procesului din perspectivã strategicã. Curriculum la decizia ºcolii – CDª CDª – ul cuprinde orele alocate pentru dezvoltarea ofertei curriculare proprii fiecãrei unitãþi de învãþãmânt. care urmãreºte extinderea competenþelor generale din curriculumul nucleu prin noi competenþe specifice ºi noi conþinuturi.la nivelul uneia sau mai multor arii curriculare 5 ca disciplinã care apare în trunchiul comun la alte specializãri 1 Opþionalul de aprofundare este derivat dintr-o disciplinã studiatã în trunchiul comun. 3 Opþionalul ca disciplinã nouã introduce noi obiecte de studiu.replicare” în acelaºi timp functionalã (De ce?). sau teme noi care nu se regãsesc în programele naþionale. MiniGhid Metodologic 131 petenþele vizate. Schemele orare ale tuturor claselor vor cuprinde. lecþia oferã înþelegerea procesului din perspectiva operativã.. la o scarã temporalã mai micã ºi într-un mod subordonat. în mod obligatoriu. Lecþia este înþeleasã ca o componentã operaþionalã (Cum?) pe termen scurt a unitãþii de învãþare. trecerea de la unitatea de învãþare . V. tacticã.CAPITOLUL 7. cel puþin numãrul minim de ore pe sãptãmânã prevãzut pentru CDª în planul-cadru. dacã proiectul unitãþii de învãþare este bine construit.cadru de învãþãmânt pentru ciclul superior al liceului. Proiectul unitãþii de învãþare trebuie sã ofere o derivare simplã a lecþiilor componente. care urmãreºte aprofundarea competenþelor din curriculumul nucleu prin noi unitãþi de conþinut.o entitate supraordonatã . In consecinþã. Tipuri de CDª în învãþãmântul liceal Reglementãrile în vigoare menþioneazã urmãtoarele tipuri de opþionale: 1 de aprofundare 2 de extindere 3 ca disciplinã nouã 4 integrat . la care se raporteazã anumite activitãþi de învãþare. filierele teoreticã ºi vocaþionalã. prevãd la toate profilurile ºi specializãrile. 4 Opþionalul integrat introduce noi discipline structurate în jurul unei teme integratoare pentru o arie curricularã sau pentru mai multe arii curriculare ..

Conþinuturi Tabel sintetic care asociazã tipurilor de opþional caracteristici obligatorii ale programei ºi modalitatea de notare în catalog Tip de opþional Opþionalul de aprofundare Caracteristici ale programei Notare în catalog Aceeaºi rubricã în catalog cu disciplina sursã Aceeaºi rubricã în catalog • Aceleaºi competenþe • Noi conþinuturi • Noi competenþe specifice corelate cu • Noi conþinuturi corelate cu cele din programa de trunchi comun cele din programa de trunchi comun Opþionalul de extindere • Noi competenþe specifice diferite de Opþionalul ca disciplinã nouã • Noi conþinuturi diferite de cele din programa de trunchi comun cele din programa de trunchi comun Rubricã nouã în catalog Opþionalul integrat • Noi competenþe specifice complexe • Noi conþinuturi interdisciplinare Rubricã nouã în catalog Modulele din programa de clasa a XII-a. 3.Net Framework (Suport de curs) 5 Opþionalul ca disciplinã care apare în trunchiul comun la alte specialãzãri dis- pune de o programã deja elaboratã la nivel central. ca programã obligatorie în cadrul unei anumite specialãzãri. A. nevoile elevilor. Valori ºi atitudini E. …. opþional integrat sau Opþional ca disciplinã care apare în trunchiul comun la alte specializãri. Argument B. specializarea matematicã – informaticã pot constitui bazã pentru proiectarea unui opþional ca disciplinã nouã. 2. Sugestii metodologice C. ale comunitãþii locale.132 Introducere în . . D. Competenþe specifice 1. formarea unor competenþe de transfer. pentru alte specializãri din filiera teoreticã sau vocaþionalã. Structura programei de opþional este aproximativ aceeaºi cu cea a programelor de trunchi comun elaborate la nivel naþional. În plus apare un Argument care motiveazã cursul propus.

CAPITOLUL 7. MiniGhid Metodologic

133

VI.1. Anexa 1
a) Planificare calendaristicã Liceul........................... Disciplina INFORMATICÃ Profesor: ........................................... Clasa a XII-a , 3 ore/sãpt

Planificare calendaristicã
Anul ºcolar 2007-2008

Nr. Crt.

Unitãþi de învãþare

Competenþe Conþinuturi specifice

Nr. Ore

Sãptãmâna Observaþii

• Limbajul • •

1

Limbajul C#

1.3, 1.4, 3.1, 3.2

C# (structura unui proiect, declarãri de date, citiri/scrieri folosind dispozitive strandard, instrucþiuni, structuri de control, structuri de date) Interfaþa Visual Studio .Net, C# (meniuri, bare de instrumente, etapele realizãrii unei aplicaþii consolã, tehnici de depanare ºi autodocumentare) Programare proceduralã (subprograme, tehnici de transfer al parametrilor)

12

S1-S3

• Principiile programãrii orientate pe obiecte • Clase (structura clasei: date, metode ºi pro2 Programare Orientatã pe Obiecte

• Obiecte
1.1, 1.2, 1.3, 1.4, 3.1

• • •

prietãþi, constructori, destructor) (instanþiere, specificatori de acces, membri statici ai unei clase) Derivare (moºtenire, definire ºi redefinire de metode, clase ºi metode abstracte, clase ºi metode sigilate, polimorfism) Ierarhii de clase predefinite (using) Aplicaþii consolã cu clase de bazã ale programãrii vizuale (clase predefinite, interfaþã, evenimente, excepþii) Ferestre (crearea ºi particularizarea formularelor) Controale Standard, Container ºi Components (proprietãþi, evenimente specifice, metode asociate evenimentelor, Sender) Obiecte de tip dialog ºi obiecte grafice Tratarea excepþiilor (ierarhia claselor de erori, try-catch-finally-throw) Construirea unei aplicaþii vizuale (proiect, spaþiu de nume, bare de instrumente, moduri de vizualizare ºi instrumente de depanare)

21

S4-S10

• Elemente • •
3 Programare vizualã 1.1, 2.1, 2,2, 3.1,3.2

21

S11-S17

• • •

• Structuri de date înlãnþuite (liste, stive, cozi,
4 Structuri de date în mediu vizual

• Baze de date (conexiuni, tabele, relaþii, con1.1, 1.2, 1.3, 1.4, 3.1, 3.2

clase generice; foreach)

• •

troale de tip DataSet, DataGridView, TableAdapter) Operaþii cu baze de date (comenzi SQL, generarea ºi executarea comenzilor) Construirea unei aplicaþii cu liste ºi tabele de viaþã al unui produs software (alegerea temei, definirea cerinþelor utilizator, modelarea soluþiei, implementarea ºi testarea produsului) Modele arhitecturale Realizarea ºi documentarea proiectului Prezentarea proiectului

18

S18-S23

• Ciclul
5 Dezvoltarea ºi 2.1, 2.2, 2.3, prezentarea 3.1, 3.2, 3.3 unei aplicaþii vizuale

• • •

30

S24-S33

134

s1

b) Proiectarea unitãþii de învãþare Liceul ................................. INFORMATICÃ Sãptãmânile S1-S3, Clasa a XII-a , 3 ore/sãptãmânã

Proiectul unitãþii de învãþare
An ºcolar 2007-2008 Unitatea 1. Limbajul C# (12 ore)
Nr. Conþinuturi Crt. Limbajul C# - structura unui proiect - declarãri de dat - citiri/scrieri folosind dispozitive strandard - instrucþiuni ºi structuri de control - structuri de date C.S. Activitãþi de învãþare Resurse Evaluare Observaþii

• Familiarizare/repetare • Program C# pentru o prelu2.1 2.2 1.4 sintaxã C crare simplã (simplificare fracþie, termeni Fibonacci din interval, cifra de control etc.) Realizare aplicaþie consolã corespunzãtoare Tipuri de date noi în C#. ªiruri de caractere Conversaþia, modelarea, exerciþiul Observare Act.frontalã sistematicã 3 ore se preferã algoritmi din tematica de atestat ºi bacalaureat

1

• •

• Discutarea structurii unui •
proiect simplu ºi enumerarea etapelor de realizare a acestuia Exersarea principalelor opþiuni din meniuri, butoane ºi shorcut-uri pentru realizarea unei aplicaþii consolã Program de prelucrare stringuri (inversare numeprenume, criptãri sau codificãri etc.) Aplicaþie consolã cu tablouri (ordonare, diagonale matrice etc.) Exerciþiul, demonstrarea Act. frontalã ºi individualã Fiºa de activ. Practicã 3 ore

2

Interfaþa Visual Studio .Net (C#) - meniuri ºi bare de instrumente 3.1 - etapele realizãrii unei aplicaþii consolã - tehnici de depanare ºi autodocumentare

• •

Observare sistematicã Investigaþie

• Definire funcþie (prim, palin3 Programare proceduralã - subprograme - tehnici de transfer al parametrilor 2.1 drom etc.) ºi subprogram procedural (transformare, citire, afiºare matrice, ordonare vector etc.) Aplicaþie consolã care apeleazã funcþia ºi procedura definite

Exerciþiul Act.frontalã ºi individualã Test evaluare 3 ore

Fiºa de evaluare 1.1

• Realizarea unei aplicaþii-joc
4 Realizarea unor aplicaþii consolã cu algoritmi elementari, structuri de date ºi subprograme 3.1 3.2

simple (centrate ºi necentrate, X ºi O, corãbii etc.) Discutarea algoritmilor de prelucrare, implementarea ºi testarea subprogramelor, implementarea aplicaþiei consolã

Conversaþia, exerciþiul Act.frontalã Fiºa de ºi evaluare individualã 1.2 3 ore

CAPITOLUL 7. MiniGhid Metodologic

135

c) Instrumente de evaluare FIªA DE EVALUARE 1.1 Nr.1 1. (1p.) Care dintre urmãtoarele variante reprezintã antetul corect al unui subprogram cif1 care primeºte o valoare realã prin intermediul parametrului r ºi returneazã prin intermediul parametrului z numãrul 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 reþine o valoare realã oarecare ºi o variabila întreagã k ºi ea reþine valoarea 0. Care dintre urmãtoarele variante reprezintã un apel corect al subprogramului cif1 de la cerinþa 1? a) cif1(x,k) b) k=cif1(x,0) c) cif1(x,ref k) d) cif1(ref x, k) 3. (4p.) Scrieþi secvenþa de program ce realizeazã prelucrarea cerutã la 1. Valoarea variabilei reale x este consideratã cunoscutã, iar valoarea calculatã a lui z nu se va afiºa. 4. (3p.) Considerând implementat subprogramul cif1, scrieþi un program care citeºte de la tastaturã o valoare realã ºi, folosind apeluri ale subprogramului cif1, verificã dacã aceastã valoare are mai multe cifre la partea întreagã decât la cea zecimalã. Se va afiºa unul dintre mesajele DA sau NU.

1 Nr. (1p.136 ANEXA 1 FIªA DE EVALUARE 1. scrieþi un program care citeºte de la tastaturã o valoare realã ºi.ref k) 3. subprogramul va returna valoarea 4. Care dintre urmãtoarele variante reprezintã un apel corect al subprogramului cif2 de la cerinþa 1? a) cif2(x.) Scrieþi secvenþa de program ce realizeazã prelucrarea cerutã la 1.int z) b) static void cif2(float r.) Care dintre urmãtoarele variante reprezintã antetul corect al unui subprogram cif2 care are un singur parametru r prin intermediul cãruia primeºte o valoare realã cif2 va returna numãrul de cifre aflate la partea zecimalã semnificativã a lui r (de exemplu pentru r=5. (3p. (1p. folosind apeluri ale subprogramului cif2.k) b) k=cif2(x) c) cif2(x. Se va afiºa unul dintre mesajele DA sau NU.2 1.) Se ºtie cã sunt declarate o variabilã x ºi ea reþine o valoare realã oarecare ºi o variabilã întreagã k ºi ea reþine valoarea 0. iar pentru r=126.ref k) d) k=cif2(x. . va returna valoarea 0) a) static void cif2(ref float r. Valoarea variabilei reale x este consideratã cunoscutã.) Considerând implementat subprogramul cif2. ref int z) c) static int cif2(float r) d) static float cif2(ref float r) 2.120700. 4. (3p. iar valoarea determinatã se va afiºa. verificã dacã aceastã valoare are mai multe cifre la partea întreagã decât la cea zecimalã.

Delphi. 3 S23 2.2 Structura unei aplicaþii orientatã pe obiecte 1.5 Tratarea erorilor 1. folosind un mediu de programare specific C12) Prezentarea unei aplicaþii 2. Sãptãmânã Observatii ore 3 S1 12 S2-S5 33 6 3 3 S6-S16 S17-S18 S19 S20 1.6 Polimorfism Nr.7 Recapitulare 3 S21 2.2.Ore/sãpt 3 ore/sãpt Planificarea calendaristicã Anul ºcolar 2007-2008 MODUL Programare orientatã pe obiecte ºi programare vizualã (1 orã teorie + 2 ore activitaþi practice sau 3 ore activitãþi practice) Nr. Disciplina INFORMATICÃ Profesor………………………. C6 Exprimarea ºi redactarea coerentã în limbaj formal sau în limbaj cotidian.3 Elementele POO în context vizual 3 S24 2.CAPITOLUL 7. folosind un mediu de programare specific Conþinuturi 1.5 Accesarea ºi prelucrarea datelor 12 S30-S33 2. PROGRAMAREA ORIENTATÃ PE OBIECTE 1. Anexa 2 a) Planificare calendaristica Unitatea ºcolarã……………………………. Unitãþi de crt.2 Prezentarea unui mediu de programare vizual (Microsoft Visual C#.1 Concepte de bazã ale programãrii vizuale 3 S22 2. MiniGhid Metodologic 137 VI.4 Construirea interfeþei utilizator 15 S25-S29 2. învãþare Competenþe specifice C1 Insuºirea conceptelor de abstractizare a datelor C2 Folosirea terminologiei specifice POO în contexte variate de aplicare C3 Organizarea datelor ce intervin în rezolvarea unei probleme utilizând structuri de date adecvate C4 Utilizarea facilitãþilor oferite de POO C5 Elaborarea ºi realizarea unei aplicaþii. a rezolvãrii sau a strategiilor de rezolvare a unei probleme C7 Analiza de situaþiiproblemã în scopul descoperirii de strategii pentru optimizarea soluþiilor C8 Generalizarea unor proprietãþi prin moPROGRAMAREA dificarea contextului VIZUALÃ iniþial de definire a problemei sau prin generalizarea algoritmilor C9 Întelegerea principiilor de proiectare a interfetelor C10) Utilizarea instrumentelor de dezvoltare a unei aplicaþii C11) Elaborarea ºi realizarea unei aplicaþii. Microsoft Visual Basic etc.3 Clase ºi obiecte 1.6 Dezvoltarea ºi prezentarea unei aplicaþii în mediu vizual 6 S34-S35 .). Clasa/Nr.1 Principiile programãrii orientate pe obiecte 1..4 Derivarea claselor 1.

…. Activitãþi de învãþare Temporale Forme de (ore) organizare .. componente ale lui .3 Tipuri de date (predefinite. Ore /sãpt……… 3ore/sãpt. Disciplina INFORMATICÃ Profesor………………………….S.identificarea caracteristicilor fiecãrei componente ale platformei . .NET .NET Framework.exerciþii de descriere a metodei de rezolvare a unei probleme din perspectiva structurãrii datelor.pentru a ilustra principiile programãrii orientatã pe obiecte ºi modul de structurare a unei aplicaþii POO se va prezenta ºi analiza o aplicaþie gata implementatã..5 String-uri C2 C4 C5 .analiza arhitecturii platformei .I.formularea ºi rezolvarea unor probleme care necesitã utilizarea datelor structurate 3 Formativã/ Individualã R. Conþinuturi Crt Resurse C..val oare.A.2 Structura generalã a unei aplicaþii C# 2.exerciþii de identificare a tipurilor de date necesare în aplicaþii . iteraþiei ºi saltului .NET 2.. Principiile programãrii orientate pe obiecte C1 3 Frontalã Iniþialã/ Studiu de caz Anexa 1 Jurnal Reflexiv Anexa 2 Structura unei aplicaþii orientatã pe obiecte 2. 2.exerciþii de utilizare a selecþiei. trãsãturi ale platformei . Ore alocate: 63 Nr.1 Arhitectura platformei Microsoft . Clasa/Nr. discuþii preliminare ºi analiza problemei.NET . enumerare) C1 C2 C4 2. . Frontalã Anexa 3 Anexa 4 Pe grupe Anexa 5 6 Individualã Anexa 6 Formativã/ Frontalã Anexa 7 Exerciþiul Pe grupe C2 C4 C5 3 Individualã Formativã/ Frontalã Anexa 8 Exerciþiul Pe grupe ..………….formularea unor probleme simple. Sãptãmâna/ Anul…………. Tablouri multidimensionale 2. se va realiza o analizã comparativã între abordarea POO în raport cu abordarea specificã programãrii structurate. Proiectul unitatii de invatare Unitatea de învãþare PROGRAMAREA ORIENTATÃ PE OBIECTE Nr.formularea trãsãturilor platformei .NET.4 Tablouri Tablouri unidimensionale.NET .138 ANEXA 2 b) Proiectul unitãþii de învãþare Unitatea ºcolarã………………………. Materiale Evaluare Tip/ instrument Observaþii 1..

profesorul va stimula discuþiile critice ºi creative pe marginea aplicaþiilor elaborate de elevi. numere raþionale.2.S.1.se va analiza un exemplu de ierarhie de clase gata implementatã.). etc. care va fi analizatã din perspectiva POO.4. se va alege una dintre aplicaþiile familiare elevilor (de exemplu: numere complexe.Distrugerea obiectelor Destructori 3.6. elevii vor prezenta colegilor aplicaþiile create. Polimorfism 6 Funcþii virtuale Clase abstracte ºi funcþii virtuale pure 3 Frontalã Formativã/ Anexa 23 Individualã T 3-2-1 7 Recapitulare C1 C2 C3 C4 C5 .9.Specificatori de acces la membrii unei clase 3. exerciþii de utilizare a conversiilor -exerciþii care implicã boxing ºi unboxing -exerciþii de definire ºi apelare a metodelor -exerciþii de utilzare a delegãrilor Frontalã Anexa 9 Iniþialã/ Exerciþiul 3 6 Anexa Frontalã Anexa Individualã Anexa Frontalã Individualã Anexa Pe grupe 10 Formativã/ 11 Exerciþiul T 12 3-2-1 13 Formativã/ Exerciþii 3 3. .5. Conþinuturi Crt C. pentru a înþelege mecanismele care guverneazã derivarea claselor.Funcþii.A.Crearea obiectelor. Activitãþi de învãþare TempoForme de rale organizare (ore) Evaluare Tip/ instrument Materiale Observaþii Clase ºi obiecte 3.3. Transmiterea parametrilor 3. 3 Formativã/ Frontalã Anexa 22 Exerciþii Individualã R.CAPITOLUL 7. Frontalã Formativã/ Anexa 14 Individualã R.testarea ºi analizarea comportamentului aplicaþiilor pentru diferite date de intrare. liste. apoi se vor implementa clasele necesare ºi se va realiza o aplicaþie în care vor fi utilizate clasele create.I.Delegaþi 3. 4 6 Formativã Frontalã T 3-2-1 Individualã Anexa 21 Studiu de Pe grupe caz Exerciþiul Tratarea erorilor 5 Ce este o eroare Cum se genereazã Tratarea/propagarea erorilor Ierarhia claselor de erori C2 C3 C4 C5 C2 C3 C4 C5 . Frontalã Formativã Anexa 15 Individualã Exerciþiul Frontalã Formativã/ Individualã Anexa 16 Exerciþiul Pe grupe Frontalã Formativã Anexa 17 Individualã Exerciþiul Frontalã Formativã Anexa 18 Individualã Exerciþii Frontalã Formativã/ Anexa 19 Individualã Studiu de caz 3 3 3 3 6 Derivarea claselor Definirea noþiunii de moºtenire simplã ºi moºtenire multiplã Declararea unei clase derivate Drepturi de acces în clase derivate Constructori ºi destructor în clase derivate C2 C3 C4 C5 .Evenimente C2 C4 C2 C3 C4 C2 C5 C2 C5 C2 C4 C2 C4 C5 C2 C3 C3 C4 C2 C5 3 .7.I.8.fiecare elev va alege o problemã concretã.Definirea claselor ºi a obiectelor 3. în acest scop se poate folosi un mediu vizual. 3 Frontalã Individualã Pe grupe Sumativã/ Proiect .A.Operatori 3. va defini clasele/ierarhiile de clase necesare ºi va crea o aplicaþie în care sã fie utilizate clasele/ierarhiile de clase create.pentru ca elevii sã înþeleagã diferenþele specifice abordãrii POO.discuþii privind validitatea datelor. Constructori 3. polinoame.Utilizarea claselor ºi a obiectelor 3. MiniGhid Metodologic 139 Resurse Nr.

Evaluare sumativã 3.1 interfeþelor Web 3.1 3. 1 a unei aplicaþii Web 2.25 Utilizarea informaþiilor dintr-o bazã de date 3. ale stilurilor CSS în paginile HTML utilizând HTML 7h 2-4 4.ASP 5.140 ANEXA 3 VI. Server Web .1 2. Ore 2h Sãpt.server. Clasa/Nr. Interaþiunea cu baze de date Web 3. Modelul client . Unitãþi de învãþare Crt.3 Analiza comparativã a eficienþei diferitelor tehnici de rezolvare a problemei respective ºi alegerea celei mai eficiente variante 1.22 Elaborarea ºi realizarea unei aplicaþii folosind un mediu de programare specific 2. Evaluare sumativã 1h 1h 1h 13h 15h 3h 3h 6 7 7 7-11 12-16 17 18 3. Disciplina INFORMATICÃ Profesor………………………. Principii generale ale proiectãrii interfeþelor Web Competenþe specifice 1. Realizare interfeþelor Web 2h 1-2 2.1 Utilizarea instrumentelor de dezvoltare a unei aplicaþii 3.3. a principiilor de bazã ale structurii unei foi de stil 3.. Prezentarea limbajului de scripting . Lucrul cu baze de date 18h 19-24 3.1 Utilizarea instrumentelor de dezvoltare a unei aplicaþii Utilizarea instrumentelor de dezvoltare a unei aplicaþii Utilizarea instrumentelor de dezvoltare a unei aplicaþii 1.1 Analizarea unei probleme în scopul identificãrii ºi clasificãrii resurselor necesare Analizarea unei probleme în scopul identificãrii ºi clasificãrii resurselor necesare Conþinuturi 1.1 1. Identificare tehnicilor de programare adecvate rezolvãrii unei probleme ºi aplicarea creativã a acestora 3.24 Operarea cu baze de date 3. Anexa 3 a) Planificare calendaristicã PROGRAMARE WEB Unitatea ºcolarã……………………………. Aspecte generale ale proiectãrii 1. Definirea ºi gestionarea unei baze de date 2. Foi de stiluri (CSS) 6h 4-6 5. Mediul de lucru 3.29 Folosirea comenzilor asociate foilor de stil CSS.26 Aplicarea operaþiilor elementare pe o bazã de date 3.28 Utilizarea foilor de stil. Etapele procesului de dezvoltare Nr. Proiectarea ºi realizarea unei aplicaþii Web 33 h 25-35 TOTAL 105h . protocoale de comunicaþii 2.IIS 4.Ore/sãpt 3 ore/sãpt Planificarea calendaristicã Anul ºcolar 2007-2008 Nr.

Pappas.Tehnologia Informaþiei . ISBN-10: 0-7645-9927-5 • Bradley L.net resurse educaþionale gratuite sub forma de filme • Harris Andy. ISBN-10 (pbk): 1-59059-723-0 • Rasheed Faraz. Allen Jones. ISBN:0735621810 • Pelland Patrice. Synchron Data 2005-2006. Sams Teach Yourself the C# Language in 21 Days. ALL 2003 • Chris H.Liceu teoretic . Microsoft Press 2006. Dorin Mircea ºi colaboratorii . Elsevier. Wiley Publishing. ISBN: 1?931841?16?0 • Wright Peter. ISBN: 0-12-167451-7 • Christian Nagel.Ghid metodologic pentru aplicarea programelor ºcolare. Editura TEORA.csharp-station.com/2/CSharpBook • Schneider Robert. INFORMATICA ºi TEHNOLOGIA INFORMATIEI.I.NET http://www.com • M. C# School. 2004. Microsoft Visual C# 2005 Express Edition. O'REILLY 2002. Microsoft Corporation. Murray C# pentru programarea Web.BIBLIOGRAFIE • Marshall Donis. ISBN-10: 0-672-32776-7.Ghid metodologic pentru Educaþie Tehnologicã Informaticã . ISBN-13: 978-0-7645-7534-1 ISBN-10: 0-7645-7534-1 • Sharp John. Visual C# 2005. Apress 2006. Serviciul Naþional de Evaluare ºi Examinare .C. Morgan Skinner. Bucureºti. Patrik. Jay Glynn. Editura Aramis.0 Specification May 2004. ISBN-13: 978-0-672-32776-6 • Popovici. William H. DUNOD 2006 • Iulian Serban.E.Editura Aramis. ISBN-13: 978-0-7645-9927-9. 1999-2003 • C# Version 2. Microsoft® Visual C# 2005 Unleashed. ISBN 10: 0-596-00309-9. Karli Watson.E. 2005. 1998 • C# Language Specification. Visual Web Developer Server™ 2005 Express Edition For Dummies®. Sams 2006. ALL 2004 • MCAD/MCSD -Developing XML WEB SERVICES and SERVER COMPONENTS WITH MICROSOFT http://www.E. Consiliul Naþional pentru Curriculum . Bucureºti 2001 . Premier Press 2002. Build a Program NOW. Apress 2006. Tiberiu Radu. Microsoft Corporation. editura B.programmersheaven. Wiley Publishing 2006. 1999-2005 • David Conger. Microsoft® SQL Server™ 2005 Express Edition For Dummies®. C# 2.C. Programming Microsoft Visual C# 2005: The Language. Programming C#. Illustrated C# 2005. Beginning Visual C# 2005 Express Edition: From Novice to Professional. Bill Evjen.C. • LearnVisualStudio. ISBN-10 (pbk): 1-59059-549-1 • Liberty Jesse. http://www. editura B. PACKT Publishing 2006. Wiley Publishing 2006. ISBN-13: 978-0-7645-8360-5. ISBN-13 (pbk): 978-1-59059-723-1. Inc. Jones. ISBN 1-904811-60-4 • Simpson Alan. Microsoft C# Programming for the Absolute Beginner. Microsoft Press 2006.0: Practical Guide for Programmers.learnvisualstudio. GDI+ Custom Controls with Visual C# 2005.microsoft.C.I. Adam Ward.Proiectare ºi implementare software. Professional C# 2005. 2006.. Dragos Brezoi. Programarea în C#. ISBN-10: 0-7645-8360-3 • Hoffman Kevin. Bucureºti 2001 • M. Second Edition. ISBN-13 (pbk): 978-1-59059-549-7.C Consiliul Naþional pentru curriculum .com http://msdn2. ISBN 13:9780596003098 • Solis Daniel. Brian G.Ghid de evaluare. SAMS. International Standard Book Number: 0-672-32546-2 • Michel de Camplain. Bucureºti 2002 • M. Editura Aramis.

în ordine alfabetică: Adrian Niţă Suport de curs pentru profesori .Net Framework ISBN: 973-86699-6-0 Introducere în Ediţia 2008 .Autori.

Sign up to vote on this title
UsefulNot useful