Sunteți pe pagina 1din 136

Programarea Orientat pe Obiecte i Programarea Vizual cu C# .

Net

CUPRINS CUPRINS......................................................................... ........................................................................... 1 1. PROGRAMAREA ORIENTAT OBIECT (POO) .............................................. ....................... 3 1.1. 1.2. 1.3. 1.4. 1.5. 1.6. 1.7. 1.8. 1.9. 1.10. 1.1 1. 1.12. 1.13. 1.14. 2. 2.1. 2.2. 2.3. 3. 3.1. 3.2. 3.3. 3.4. 3.5. 3.6. 3.7. 3.8 . 3.9. 3.10. 3.11. 3.12. 3.13. 4. 4.1. 4.2. 4.3. 4.4. 4.5. 4.6. 5. 5.1. 5.2. 5.3 . 5.4. 5.5. 5.6. 5.7. EVOLUIA TEHNICILOR DE PROGRAMARE........................... ....................................................... 3 TIPURI DE DATE OBIECTU ALE. NCAPSULARE ................................................................. ........... 3 SUPRANCRCARE ....................................................... .............................................................. 4 MOTENIRE ....... ................................................................................ ........................................ 5 POLIMORFISM. METODE VIRTUALE ........ ................................................................................ ... 5 PROGRAMARE ORIENTAT OBIECT N C#............................................. ...................................... 6 DECLARAREA UNEI CLASE ................. ................................................................................ ........ 6 CONSTRUCTORI ........................................................ ................................................................. 7 DESTRUCTOR.. ................................................................................ ........................................... 7 METODE ........................... ................................................................................ ......................... 8 PROPRIETI ............................................ ................................................................................ . 9 EVENIMENTE I DELEGRI.......................................................... ............................................. 10 INTERFEE........................ ................................................................................ ....................... 11 FIRE DE EXECUIE ...................................... ............................................................................. 12 PREZENTARE .................................................................... ....................................................... 13 .NET FRAMEWORK ...... ................................................................................ ........................... 13 COMPILAREA PROGRAMELOR .......................... ........................................................................ 14 LIMB AJUL C#......................................................................... ..................................................... 14 CARACTERIZARE ......... ................................................................................ ............................ 14 COMPILAREA LA LINIA DE COMAND ................... ................................................................... 14 CREAREA A PLICAIILOR CONSOL ................................................................ .......................... 15 STRUCTURA UNUI PROGRAM C# ........................ ...................................................................... 16 SINTAX A LIMBAJULUI.................................................................... .......................................... 16 TIPURI DE DATE ................... ................................................................................ .................... 17 CONVERSII............................................... ................................................................................ 21 CONSTANTE................................................................... .......................................................... 22 VARIABILE ........ ................................................................................ ...................................... 22 EXPRESII I OPERATORI .................. ................................................................................ ......... 22 COLECII ............................................................ ..................................................................... 23 INSTRUCU NEA FOREACH .................................................................... ..................................... 23 INSTRUCIUNILE TRY-CATCH-FINALLY I THROW . .................................................................. 23 CONCEPTE D E BAZ ALE PROGRAMRII VIZUALE ..................................................... ............... 25 MEDIUL DE DEZVOLTARE VISUAL C#...............................

....................................................... 26 FERESTRE ............ ................................................................................ .................................... 27 CONTROALE .............................. ................................................................................ .............. 29 SYSTEM.DRAWING ............................................... ................................................................... 36 VALIDAREA INFORMAIILOR DE LA UTILIZATOR .................................................. ................... 37 APLICAII ORIENTATE PE DATE................................ ......................................................... 38 STRUCTURI DE DATE.. ................................................................................ .............................. 38 COLECII DE DATE................................ ................................................................................ ... 38 ADO.NET.................................................................. ............................................................. 39 CONECTAREA LA O SURS DE DATE.................................................................... ..................... 39 EXECUTAREA UNEI COMENZI SQL ........................... ............................................................... 41 SETURI DE DAT E .............................................................................. ........................................ 42 PROIECTAREA VIZUAL A SETURILOR DE DAT E ....................................................................... 43 PLATFORMA .NET ................................................................. .................................................... 13 PROGRAMARE VIZUAL ............................................................... ......................................... 25

Programarea Orientat Obiect (POO) 3

1. Programarea Orientat Obiect (POO) 1.1. Evoluia tehnicilor de programare Programarea nestructurat (un program simplu, ce utilizeaz numai variabile globale) ; complicaiile apar cnd prelucrarea devine mai ampl, iar datele se multiplic i se div ersific. Programarea procedural (program principal deservit de subprograme cu para metri formali, variabile locale i apeluri cu parametri efectivi); se obin avantaje privind depanarea i reutilizarea codului i se aplic noi tehnici privind transferul parametrilor i vizibilitatea variabilelor; complicaiile apar atunci cnd la program sunt asignai doi sau mai muli programatori care nu pot lucra simultan pe un acelai fiier ce conine codul surs. Programarea modular (gruparea subprogramelor cu program principal funcionaliti similare n module, implementate i depanate date separat); se obin avantaje privind independena i ncapsularea (prin separarea zonei de implementar e, pstrnd vizibilitatea numai asupra zonei de interfa a modul_2 modul_1 modulului) i se aplic tehnici de asociere a procedurilor cu (date+date2) (date+date1) datele p e care le manevreaz, stabilind i diferite reguli de subprog_1 subprog_1 acces la d ate i la subprograme. subprog_2 subprog_2 Se observ c modulele sunt centrate pe proc duri, subprog_3 acestea gestionnd i setul de date pe care le prelucreaz (date+date1 din figur). Daca, de exemplu, dorim s avem mai multe seturi diferite de date, toa te nzestrate comportamental cu procedurile din modulul module1, aceast arhitectur d e aplicaie nu este avantajoas. Programarea orientat obiect (programe cu noi tipuri ce obiect1 obiect4 integreaz att datele, ct i metodele asociate crerii, date1 date4 relucrrii i distrugerii acestor date); se obin avantaje prin met1 met4 abstractizar ea programrii (programul nu mai este o succesiune de prelucrri, ci un ansamblu de obiecte care prind via, au obiect3 diverse proprieti, sunt capabile de aciuni specifi ce i care date3 interacioneaz n cadrul programului); intervin tehnici noi privind ob iect2 met3 date2 instanierea, derivarea i polimorfismul tipurilor obiectuale. 1.2. Tipuri de date obiectuale. ncapsulare met2

Un tip de date abstract (ADT) este o entitate caracterizat printr-o structur de da te i un ansamblu de operaii aplicabile acestor date. Considernd, n rezolvarea unei p robleme de gestiune a accesului utilizatorilor la un anumit site, tipul abstract USER, vom obseva c sunt multe date ce caracterizeaz un utilizator Internet. Totui se va ine cont doar de datele semnificative pentru problema dat. Astfel, culoarea o chilor este irelevant n acest caz, n timp ce data naterii poate fi important. n acee e, operaii specifice ca se nregistreaz, comand on-line pot fi relevante, n timp ce o mannc nu este, n cazul nostru. Evident, nici nu se pun n discuie date sau operaii ne cifice (numrul de laturi sau aciunea zboar). Operaiile care sunt accesibile din afara titii formeaz interfaa acesteia. Astfel, operaii interne cum ar fi conversia datei de natere la un numr standard calculat de la 01.01.1900 nu fac parte din interfaa tip ului de date abstract, n timp ce operaia plaseaz o comand on-line face parte, deoarece permite interaciunea cu alte obiecte (SITE, STOC etc.) O instan a unui tip de date abstract este o concretizare a tipului respectiv, format din valori efective ale d atelor. Un tip de date obiectual este un tip de date care implementeaz un tip de date abstract. Vom numi operaiile implementate n cadrul tipului de date abstract m etode. Spunem c datele i metodele sunt membrii unui tip de date obiectual. Folosir ea unui astfel de tip presupune: existena definiiei acestuia, apelul metodelor i ac cesul la date.

4 POO i Programare vizual (suport de curs)

Un exemplu de-acum clasic de tip de date abstract este STIVA. Ea poate avea ca d ate: numerele naturale din stiv, capacitatea stivei, vrful etc. Iar operaiile speci fice pot fi: introducerea n stiv (push) i extragerea din stiv (pop). La implementare a tipului STIVA, vom defini o structura de date care s rein valorile memorate n stiv i cmpuri de date simple pentru: capacitate, numr de elemente etc. Vom mai defini me tode (subprograme) capabile s creeze o stiv vid, care s introduc o valoare n stiv, s rag valoarea din vrful stivei, s testeze dac stiva este vid sau dac stiva este plin et . Crearea unei instane noi a unui tip obiectual, presupune operaii specifice de con struire a noului obiect, metoda corespunztoare purtnd numele de constructor. Analog , la desfiinarea unei instane i eliberarea spaiului de memorie aferent datelor sale, se aplic o metod specific numit destructor1. O aplicaie ce utilizeaz tipul obiectual STIVA, va putea construi dou sau mai multe stive (de cri de joc, de exemplu), le va umple cu valori distincte, va muta valori dintr-o stiv n alta dup o anumit regul des fiinnd orice stiv golit, pn ce rmne o singur stiv. De observat c toate aceste prel rg la datele, constructorul, destructorul i la metodele din interfaa tipului STIVA descris mai sus. Principalul tip obiectual ntlnit n majoritatea mediilor de dezvol tare (Viisual Basic, Delphi, C++, Java, C#) poart numele de clas (class). Exist i al te tipuri obiectuale (struct, object). O instan a unui tip obiectual poart numele d e obiect. La implementare, datele i metodele asociate trebuie s fie complet i corec t definite, astfel nct utilizatorul s nu fie nevoit s in cont de detalii ale acestei i mplementri. El va accesa datele, prin intermediul proprietilor i va efectua operaiile , prin intermediul metodelor puse la dispoziie de tipul obiectual definit. Spunem c tipurile de date obiectuale respect principiul ncapsulrii. Astfel, programatorul ce utilizeaz un tip obiectual CONT (n banc) nu trebuie s poarte grija modului cum su nt reprezentate n memorie datele referitoare la un cont sau a algoritmului prin c are se realizeaz actualizarea soldului conform operaiilor de depunere, extragere i aplicare a dobnzilor. EL va utiliza unul sau mai multe conturi (instane ale tipulu i CONT), accesnd proprietile i metodele din interfa, realizatorul tipului obiectual as umndu-i acele griji n momentul definirii tipului CONT. Permind extensia tipurilor de date abstracte, clasele pot avea la implementare: date i metode caracterisitice f iecrui obiect din clas (membri de tip instan), date i metode specifice clasei (membri de tip clas). Astfel, clasa STIVA poate beneficia, n plus, i de date ale clasei cu m ar fi: numrul de stive generate, numrul maxim sau numrul minim de componente ale stivelor existente etc. Modificatorul static plasat la definirea unui membru al clasei face ca acela s fie un membru de clas, nu unul de tip instan. Dac n cazul membr ilor nestatici, exist cte un exemplar al membrului respectiv pentru fiecare instan a clasei, membrii statici sunt unici, fiind accesai n comun de toate instanele clase i. Mai mult, membrii statici pot fi referii fr a crea vreo instan a clasei respective .

1.3. Suprancrcare Dei nu este o tehnic specific programrii orientat obiect, ea creeaz un anumit context pentru metodele ce formeaz o clas i modul n care acestea pot fi (ca orice subprogram ) apelate. Prin suprancarcare se nelege posibilitatea de a defini n acelai domeniu de vizibilitate2 mai multe funcii cu acelai nume, dar cu parametri diferiti ca tip i/ sau ca numr. Astfel ansamblul format din numele funciei i lista sa de parametri rep rezint o modalitate unic de identificare numit semntur sau amprent. Suprancrcarea per e obinerea unor efecte diferite ale apelului n contexte diferite3. Datorit tehnicii de suprancrcare C++, Java i C# permit existena mai multor constructo ri Noiunile generale legate de vizibilitate se consider cunoscute din programarea procedural. Aspectele specifice i modificatorii de acces/vizibilitate pot fi studi ai din documentaiile de referin C#. 3 Capacitatea unor limbaje (este i cazul limbajul ui C#) de a folosi ca nume al unui subprogram un operator, reprezint suprancrcarea op eratorilor. Aceasta este o facilitate care 2 1

Programarea Orientat Obiect (POO) 5 Apelul unei funcii care beneficiaz, prin suprancrcare, de dou sau mai multe semnturi s e realizeaz prin selecia funciei a crei semntur se potrivete cel mai bine cu lista de arametri efectivi (de la apel). Astfel, poate fi definit metoda comand on-line cu tr ei semnturi diferite: comanda_online(cod_prod) cu un parametru ntreg (desemnnd coma nda unui singur produs identificat prin cod_prod. comanda_online(cod_prod,cantit ate) cu primul parametru ntreg i celalalt real comanda_online(cod_prod,calitate) c u primul parametru ntreg i al-II-ilea caracter.

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

1.5. Polimorfism. Metode virtuale Folosind o extensie a sensului etimologic, un obiect polimorfic este cel capabil s ia diferite forme, s se afle n diferite stri, s aib comportamente diferite. Polimor fismul obiectual5 se manifest n lucrul cu obiecte din clase aparinnd unei ierarhii d e clase, unde, prin redefinirea unor date sau metode, se obin membri diferii avnd ns acelai nume. Astfel, n cazul unei referiri obiectuale, se pune problema stabilirii datei sau metodei referite. Comportamentul polimorfic este un element de flexib ilitate care permite stabilirea contextual, n mod dinamic6, a membrului referit. D e exemplu, dac este definit clasa numit PIESA (de ah), cu metoda nestatic muta(poziti e_initiala,pozitie_finala), atunci subclasele TURN i PION trebuie s aib metoda muta definit n mod diferit (pentru a implementa maniera specific a pionului de a captur a o pies en passant7). Atunci, pentru un obiect T, aparinnd claselor reduce diferenele dintre operarea la nivel abstract (cu DTA) i apelul metodei ce rea lizeaz acest operaie la nivel de implementare obiectual. Dei ajut la sporirea expresiv itii codului, prin suprancrcarea operatorilor i metodelor se pot crea i confuzii. 4 ca re trebuie s fie i ea abstract (virtual pur, conform terminologiei din C++) 5 deoarec e tot aspecte polimorfice mbrac i unele tehnici din programarea clasic sau tehnica s uprancrcrcrii funciilor i operatorilor. 6 Este posibil doar n cazul limbajelor ce perm t legarea ntrziat. La limbajele cu "legare timpurie", adresa la care se face un apel al unui subprogram se stabilete la compilare. La limbajele cu legare ntrziat, aceast adresa se stabileste doar in momentul rulrii, putndu-se calcula distinct, n funcie d e contextul n care apare apelul. 7 ntr-o alt concepie, metoda muta poate fi implemen tat la nivelul clasei PIESA i redefinit la nivelul subclasei PION, pentru a particu lariza acest tip de deplasare care captureaz piesa peste care trece pionul n diago nal.

6 POO i Programare vizual (suport de curs) derivate din PIESA, referirea la metoda muta pare nedefinit. Totui mecanismele POO permit stabilirea, n momentul apelului, a clasei proxime creia i aparine obiectul T i apelarea metodei corespunztore (mutare de pion sau tur sau alt pies). Pentru a per mite acest mecanism, metodele care necesit o decizie contextual (n momentul apelulu i), se decalr ca metode virtuale (cu modificatorul virtual). n mod curent, n C# mod ificatorului virtual al funciei din clasa de baz, i corespunde un specificator over ride al funciei din clasa derivat ce redefinete funcia din clasa de baz. O metod ne-vi rtual nu este polimorfic i, indiferent de clasa creia i aparine obiectul, va fi invoca t metoda din clasa de baz.

1.6. Programare orientat obiect n C# C# permite utilizarea OOP respectnd toate principiile enunate anterior. Toate comp onentele limbajului sunt ntr-un fel sau altul, asociate noiunii de clas. Programul n sui este o clas avnd metoda static Main() ca punct de intrare, clas ce nu se instaniaz Chiar i tipurile predefinite byte, int sau bool sunt clase sigilate derivate din clasa ValueType din spaiul System. Pentru a evita unele tehnici de programare pe riculoase, limbajul ofer tipuri speciale cum ar fi: interfee i delegri. Versiunii 2. 0 a limbajului i s-a adugat un nou tip: clasele generice8, 1.7. Declararea unei clase Sintaxa9: [atrib]o [modificatori]o class [nume_clas] [:clasa_de_baz]o [corp_clas]o Atributele reprezint informaii declarative cu privire la entitatea definit. Modific atorii reprezint o secven de cuvinte cheie dintre: new public protected internal pr ivate (modificatori de acces) abstract sealed (modificatori de motenire) Clasa de baz este clasa de la care motenete clasa curent i poate exista o singur astfel de cla s de baz. Corpul clasei este un bloc de declarri ale membrilor clasei: constante (v alori asociate clasei), cmpuri (variabile), tipuri de date definite de utilizator , metode (subprograme), constructori, un destructor, proprieti (caracteristici ce pot fi consultate sau setate), evenimente (instrumente de semnalizare), indexato ri (ce permit indexarea instanelor din cadrul clasei respective) i operatori. cons tructorii i destructorul au ca nume numele clasei proxime din care fac parte10 me todele au nume care nu coincid cu numele clasei sau al altor membri (cu excepia m etodelor, conform mecanismului de suprancrcare) metodele sau constructorii care au acelai nume trebuie s difere prin semntur11 se pot defini date i metode statice (car acteristice clasei) i un constructor static care se execut la iniializarea clasei p ropriu-zise; ele formeaz un fel de context al clasei se pot defini date i metode nes tatice (de instan) care se multiplic pentru fiecare instan n parte n cadrul operaiei instaniere; ele formeaz contextele tuturor instanelor clasei respective Exemplul ur mtor definete o ierarhie de clase (conform figurii alturate) Copil public abstract class Copil public class Fetita: Copil { } Fetita Baiat public sealed class Baia t: Copil { } Modificatorul abstract este folosit pentru a desemna faptul c nu se pot obine obiecte din clasa Copil, ci numai din derivatele acesteia (Fetita, Baia t), iar modificatorul sealed a fost folosit pentru a desemna faptul c nu se mai p ot obtine clase derivate din clasa Baiat (de exemplu, subclasele Baiat_cuminte i Baiat_rau) 8 9

echivalentrul claselor template din C++ [] din definiia schematic semnific un neter minal, iar o semnific o component opional 10 avnd n vedere c ele pot s fac parte din clas interioar altei clase 11 din semntur nefcnd parte specificatorii ref i out asocia parametrilor

Programarea Orientat Obiect (POO) 7

1.8. Constructori Sintaxa: [atrib]o [modificatori]o [nume_clas] ([list_param_formali]o) [:iniializato r]o [corp_constr]o Modificatori: public protected internel private extern Iniiali zator: base([list_param]o), this([list_param]o) ce permite invocarea unui construc tor anume12 nainte de executarea instruciunilor ce formeaz corpul constructorului c urent. Dac nu este precizat niciun iniializator, se asociaz implicit iniializatorul base(). Corpul constructorului este format din instruciuni care se execut la crear ea unui nou obiect al clasei respective (sau la crearea clasei, n cazul construct orilor cu modificatorul static). pot exista mai muli constructori care se pot dif erenia prin lista lor de parametri constructorii nu pot fi motenii dac o clas nu are definit niciun constructor, se va asigna automat constructorul fr parametri al cla sei de baz (clasa object, dac nu este precizat clasa de baz) Instanierea presupune de clararea unei variabile de tipul clasei respective i iniializarea acesteia prin ap elul constructorului clasei (unul dintre ei, dac sunt definii mai muli) precedat de operatorul new. Acestea se pot realiza i simultan ntr-o instruciune de felul: [Num e_clas] [nume_obiect]=new [Nume_clas] ([list_param]o) Utilizarea unui constructor fr parametri i a constructorului implicit n clas derivat public abstract class Copil { protected string nume; public Copil() {nume = Cons ole.ReadLine();} //la iniializarea obiectului se citete //de la tastatur un ir de caractere ce va reprezenta numele copilului } class Fetita:Copil {} ... Fetita f=new Fetita(); Copil c= new Copil(); //Pentru clasa Copil abstract, s-ar fi obinut eroare aici Suprancrcarea constructorilor i definirea explicit a constructorilor n clase derivate public class Copil { protected string nume; //dat acceesibil numai n interiorul cla sei i claselor derivate public Copil() {nume = Console.ReadLine();} public Copil( string s) {nume=s;} } class Fetita:Copil { public Fetita(string s):base(s) {nume =Fetita +nume}13 public Fetita(){} //preia constructorul fr parametri din clasa de b az14 //public Fetita(string s):base() {nume=s} } ... Copil c1= new Copil(); //se citeste numele de la tastatur Copil c2= new Copil(Codrina); Fetita f1=new Fetita(); Fetita f2=new Fetita("Ioana); Exist dou motive pentru care definiia constructorului al treilea din clasa Fetita e ste greit i de aceea este comentat. Care sunt aceste motive? 1.9. Destructor Sintaxa: [atrib]o [extern]o ~[nume_clas] () [corp_destructor]o Corpul destructoru lui este format din instruciuni care se execut la distrugerea unui obiect al clase i respective. Pentru orice clas poate fi definit un singur constructor. Destructo rii 12 13 Din clasa de baz (base) sau din clasa insi (this) Preia i specializeaz constructorul al doilea din clasa de baz 14 Este echivalent cu public Fetita():base(){}

8 POO i Programare vizual (suport de curs) nu pot fi motenii. n mod normal, destructorul nu este apelat n mod explicit, deoarec e procesul de distrugere a unui obiect este invocat i gestionat automat de Garbag ge Collector. 1.10. Metode Sintaxa:[atrib]o[modificatori]o[tip_returnat] [nume] ([list_param_formali]o) [cor p_metoda]o Modificatori: new public protected internal private static virtual ab stract sealed override extern15 Tipul rezultat poate fi un tip definit sau void. Numele poate fi un simplu identificator sau, n cazul n care definete n mod explicit un membru al unei interfee, numele este de forma [nume_interfata].[nume_metoda] Lista de parametri formali este o succesiune de declarri desprite prin virgule, dec lararea unui parametru avnd sintaxa: [atrib]o [modificator]o [tip] [nume] Modific atorul unui parametru poate fi ref (parametru de intrare i ieire) sau out (paramet ru care este numai de ieire). Parametrii care nu au niciun modificator sunt param etri de intrare. Un parametru formal special este parametrul tablou cu sintaxa: [atrib]o params [tip][] [nume]. Pentru metodele abstracte i externe, corpul metod ei se reduce la un semn ; Semntura fiecrei metode este format din numele metodei, m odificatorii acesteia, numrul i tipul parametrilor16 Numele metodei trebuie s difer e de numele oricrui alt membru care nu este metod. La apelul metodei, orice parame tru trebuie s aib acelai modificator ca la definire Invocarea unei metode se realiz eaz prin sintagma [nume_obiect].[nume_metoda] (pentru metodele nestatice) i respec tiv [nume_clas].[nume_metoda] (pentru metodele statice). Definirea datelor i metod elor statice corespunztoare unei clase public class Copil { public const int nr_max = 5; //constant public static int nr _copii=0; //cmp simplu (variabil) static Copil[] copii=new Copil[nr_max]; //cmp de tip tablou (variabil) public static void adaug_copil(Copil c) //metod { copii[nr_c opii++] = c; if (nr_copii==nr_max) throw new Exception("Prea multi copii"); } // metod public static void afisare() { Console.WriteLine("Sunt {0} copii:", nr_copi i); for (int i = 0; i<nr_copii; i++) Console.WriteLine("Nr.{0}. {1}", i+1, copii [i].nume); } ...17 } ... Fetita c = new Fetita();Copil.adaug_copil(c); referina noului obiect se memoreaz n tabloul static copii (caracteristic clasei) i s e incrementeaz data static nr_copii Baiat c = new Baiat(); Copil.adaug_copil(c); Copil c = new Copil(); Copil.adaug_ copil(c); Copil.afisare();//se afieaz o list cu numele celor 3 copii Poate fi folosit cel mult unul dintre modificatorii static, virtual I override ; nu pot aprea mpreun new i override, abstract nu poate s apar cu niciunul dintre static , virtual, sealed, extern; private nu poate s apar cu niciunul dintre virtual, ove rride i abstract; seald oblig i la override 16 Din semntur (amprent) nu fac parte tipu l returnat, numele parametrilor formali i nici specificatorii ref i out. 17 Se are n vedere i constructorul fr parametri definit i preluat implicit n subclasele din cad rul primului exemplu din subcapitolul 1.8: public Copil() {nume = Console.ReadLi ne();} 15

Programarea Orientat Obiect (POO) 9 Definirea datelor i metodelor nestatice corespunztoare clasei Copil i claselor deri vate public class Copil { ... public string nume; public virtual void se_joaca() //vi rtual se poate suprascrie la derivare {Console.WriteLine("{0} se joaca.", this.n ume);} public void se_joaca(string jucaria) //nu permite redefinire18 {Console.W riteLine("{0} se joaca cu {1}.", this.nume, jucaria);} //suprancrcarea metodei se_ joaca } class Fetita:Copil { public override void se_joaca() //redefinire compor tament polimorfic {Console.WriteLine("{0} leagana papusa.",this.nume);} } class Baiat:Copil { public override void se_joaca() {Console.WriteLine("{0} chinuie pi sica.",this.nume);} } ... Fetita c = new Fetita();c.se_joaca("pisica");c.se_joac a(); //polimorfism Baiat c = new Baiat();c.se_joaca("calculatorul");c.se_joaca() ; //polimorfism Copil c = new Copil();c.se_joaca(); //polimorfism Pentru a evidenia mai bine comportamentul polimorfic, propunem secvena urmtoare n ca re nu se tie exact ce este obiectul copii[i] (de tip Copil, Fetita sau Baiat?): for (int i=0; i<nr_copii; i++) copii[i].se_joaca;

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

10 POO i Programare vizual (suport de curs) public Copil() {Nume = Console.ReadLine();} } class Fetita:Copil { public overri de void se_joaca() {Console.WriteLine("{0} leagana papusa.",this.Nume);} }20 //metoda set //metoda get

1.12. Evenimente i delegri Evenimentele sunt membri ai unei clase ce permit clasei sau obiectelor clasei s f ac notificri, adic s anune celelalte obiecte asupra unor schimbri petrecute la nivelul strii lor. Clasa furnizoare a unui eveniment public (pune la dispoziia altor clase ) acest lucru printr-o declarare event care asociaz evenimentului un delegat, adi c o referin ctre o funcie necunoscut creia i se precizeaz doar antetul, funcia urmn implementat la nivelul claselor interesate de evenimentul respectiv. Este modul p rin care se realizeaz comunicarea ntre obiecte. Tehnica prin care clasele implemen teaz metode (handler-e) ce rspund la evenimente generate de alte clase poart numele de tratare a evenimentelor. Sintaxa: [atrib]o [modificatori]o event [tip_delega t] [nume] Modificatorii permii sunt aceiai ca i la metode. Tipul delegat este un ti p de date ca oricare altul, derivat din clasa sigilat Delegate, din spaiul System. Definirea unui tip delegat se realizeaz prin declararea: [atrib]o [modificatori] o delegate [tip_rezultat] [nume_delegat] ([list_param_formali]o) Un delegat se po ate defini i n afara clasei generatoare de evenimente i poate servi i altor scopuri n afara tratrii evenimentelor. Prezentm n continuare un exemplu. De exemplu, dac dori m s definim o metod asociat unui vector de numere ntregi, metod ce verific dac vectoru este o succesiune bine aranjat (orice dou valori succesive respect o anumit regul), o implementare generic se poate realiza folosind delegri: public delegate bool pereche_ok(object t1, object t2); public class Vector { pub lic const int nmax = 4; public int[] v=new int[nmax]; public Vector() { Random r and = new Random(); for (int i = 0; i < nmax; i++) v[i] = rand.Next(0,5); } publ ic void scrie() { for (int i = 0; i < nmax; i++) Console.Write("{0}, ", v[i]); C onsole.WriteLine(); } public bool aranj(pereche_ok ok)//ok e o delegare ctre o fu ncie necunoscut { for (int i = 0; i < nmax-1; i++) if (!ok(v[i], v[i + 1])) return false; return true; } } Dac n clasa-program21 se adug funciile (exprimnd dou reguli de aranjare posibile) public static bool f1(object t1, object t2) {if ((int)t1 >= (int)t2) return true ;else return false;} public static bool f2(object t1, object t2) {if ((int)t1 <= (int)t2) return true;else return false;} atunci o secven de prelucrare aplicativ ar putea fi: De observat c n exemplul anterior (subcapitolul 1.10), cmpul nume era declarat publ ic, pentru a permite accesul general la cmpul respectiv de date. Iar metodele i cons tructorii foloseau identificatorul nume i nu proprietatea Nume. 21 Independent de definiia clasei Vector 20

Programarea Orientat Obiect (POO) static void Main(string[] args) { Vector x; do { x =new Vector();x.scrie(); if ( x.aranj(f1))Console.WriteLine("Monoton descrescator"); if (x.aranj(f2))Console.W riteLine("Monoton crescator"); } while (Console.ReadKey(true).KeyCar!=\x001B); //E scape } 11

Revenind la evenimente, descriem pe scurt un exemplu teoretic de declarare i trat are a unui eveniment. n clasa Vector se consider c interschimbarea valorilor a dou c omponente ale unui vector e un eveniment de interes pentru alte obiecte sau clas e ale aplicaiei. Se definete un tip delegat TD (s zicem) cu nite parametri de intere s22 i un eveniment care are ca asociat un delegat E (de tip TD)23. Orice obiect x din clasa Vector are un membru E (iniial null). O clas C interesat s fie ntiinat cn face vreo interschimbare ntr-un vector pentru a genera o animaie (de exemplu), va implementa o metod M ce realizeaz animaia i va aduga pe M (prin intermediul unui dele gat) la x.E24. Cumulnd mai multe astfel de referine, x.E ajunge un fel de list de m etode (handlere). n clasa Vector, n metoda sort, la interschimbarea valorilor a do u componente se invoc delegatul E. Invocarea lui E realizaez de fapt activearea tut uror metodelor adugate la E. Care credei c sunt motivele pentru care apelm la evenim ente n acest caz, cnd pare mult mai simplu s apelm direct metoda M la orice intersch imbare?

1.13. Interfee Interfeele sunt foarte importante n programarea orientat pe obiecte, deoarece permi t utilizarea polimorfismului ntr-un sens mai extins.O interfa este o component a apl icaiei, asemntoare unei clase, ce declar prin membrii si (metode, proprieti, eveniment i indexatori) un comportament unitar aplicabil mai multor clase, comportament care nu se poate defini prin ierarhia de clase a aplicaiei. De exemplu, dac vom consid era arborele din figura urmtoare, n care AVERE este o clas abstract, iar derivarea c laselor a fost conceput urmrind proprietile comune ale componentelor unei averi, atu nci o clas VENIT nu este posibil, deoarece ea ar moteni de la toate clasele evidenia te, iar motenirea multipl nu este admis n C#. AVERE Proprietate Imobiliara Teren Productiv Neproductiv Imobil De_folosin I_inchiriat Bani Bun Depunere B_inchiriat Mobilier Altul Investiie Credit_primit Actiune Cot Credit_acordat VENITURI (din produse, din chirii, din dobnzi, dividende) calc() 22 23 De exmplu indicii componentelor interschimbate A se observa c evenimentul n sine e ste anonim, doar delegatul asociat are nume 24 ntr-o atribuire de felul x.E+=new [tip_delegat](M)

12 POO i Programare vizual (suport de curs)

Pentru metodele din cadrul unei interfee nu se d nici o implementare, ci sunt pur i simplu specificate, implementarea lor fiind furnizat de unele dintre clasele apl icaiei25. Nu exist instaniere n cazul interfeelor, dar se admit derivri, inclusiv mote iri multiple. n exemplul nostru, se poate defini o interfa VENIT care s conin antetul unei metode calc (s zicem) pentru calculul venitului obinut, fiecare dintre clasel e care implementeaz interfaa VENIT fiind obligat s furnizeze o implementare (dup o fo rmul de calcul specific) pentru metoda calc din interfa. Orice clas care dorete s ader la interfa trebuie s implementeze toate metodele din interfa. Toate clasele care mote nesc dintr-o clas care implementeaz o interfa motenesc, evident, metodele respective, dar le pot i redefini (de exemplu, clasa Credit_acordat redefinete metoda calc di n clasa Investiie, deoarece formula de calcul implementat acolo nu i se potrivete i ei 26). De exemplu, dac presupunem c toate clasele subliniate implementeaz interfaa VEN IT, atunci pentru o avere cu aciuni la dou firme, un imobil nchiriat i o depunere la banc, putem determina venitul total: Actiune act1 = new Actiune();Actiune act2 = new Actiune(); I_inchiriat casa = ne w I_inchiriat();Depunere dep=new Depunere(); Venit[] venituri = new Venit()[4]; venituri[0] = act1; venituri[1] = act2; venituri[2] = casa; venituri[3] = dep; . .. int t=0; for(i=0;i<4;i++) t+=v[i].calc();

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

1.14. Fire de execuie Programarea prelucrrilor unei aplicaii pe mai multe fire de execuie (multithreading ) presupune descompunerea ansamblului de prelucrri n secvene, unele dintre ele planifi cndu-se a fi prelucrate paralel (cvasi-simultan) de ctre procesor n vederea utilizrii eficiente a acestuia. citire a citire b Schema alturat este o posibil Z a Y U Z-X planif icare a procesului de calcul al expresiei a (b+c)-b b, unde a, b i c sunt citire c X b b Y b+c nite matrice ptrate ale cror componente se gsesc n fiiere separate. n orice punc l prelucrrii de pe un fir de execuie se poate genera un nou fir (thread) cruia i se asociaz un subprogram cu ajutorul unui delegat. n exemplul urmtor, care utilizeaz s paiul System.Threading, afiarea succesiv a unor secvene de 1 i de 2 demonstraz comutar a executrii de pe un fir pe altul la intervale relativ constante de timp: static void scrie2() { for (int i = 1; i <=300; i++)Console.Write( 2 );} static void Main(string[] args) { ThreadStart delegat = new ThreadStart(scrie2); Thread fir = new Thread(delegat); fir.Start(); for (int i = 1; i <= 500; i++) Console. Write( 1 ); Console.ReadKey();}

Spaiul Threading mai ofer faciliti de schimbare a prioritilor prelucrrilor din fire pa alele, de delimitare a secvenelor critice, de ateptare i semnalizare folosind semaf oare etc. O clas sigilat folosit curent n aplicaii (Timer) permite implementarea unui ceas care funcioneaz pe un fir paralel cu aplicaia curent i care, la intervale de ti mp ce se pot seta, genereaz un eveniment (Tick) sesizat i exploatat de prelucrarea d in firul principal. Acele clase care ader la o interfa spunem c implementeaz interfaa respectiv Dac rfic spunem c Investiie este i de tip Bani i de tip Avere, tot aa putem spune c o clas care implementeaz interfaa VENIT i clasele derivate din ea sunt i de tip VENIT 26 25

Platforma .NET 13 2. Platforma .NET 2.1. Prezentare .NET este un cadru (framework) de dezvoltare software unitar care permite realiza rea, distribuirea i rularea aplicaiilor-desktop Windows i aplicaiilor WEB. Tehnologi a .NET pune laolalt mai multe tehnologii (ASP, XML, OOP, SOAP, WDSL, UDDI) i limba je de programare (VB, C++, C#, J#) asigurnd totodat att portabilitatea codului comp ilat ntre diferite calculatoare cu sistem Windows, ct i reutilizarea codului n progr ame, indiferent de limbajul de programare utilizat. .NET Framework este o compon ent livrat npreun cu sistemul de operare Windows. De fapt, .NET 2.0 vine cu Windows Server 2003 i Windows XP SP2 i se poate instala pe versiunile anterioare, pn la Wind ows 98 inclusiv; .NET 3.0 vine instalat pe Windows Vista i poate fi instalat pe v ersiunile Windows XP cu SP2 i Windows Server 2003 cu minimum SP1. Pentru a dezvol ta aplicatii pe platforma .NET este bine sa avem 3 componente eseniale: un set de limbaje (C#, Visual Basic .NET, J#, Managed C++, Smalltalk, Perl, Fortran, Cobo l, Lisp, Pascal etc), un set de medii de dezvoltare (Visual Studio .NET, Visio), i o bibliotec de clase pentru crearea serviciilor Web, aplicaiilor Web i aplicaiilor desktop Windows. Cnd dezvoltm aplicaii .NET, putem utiliza: Servere specializate un set de servere Enterprise .NET (din familia SQL Server 2000, Exchange 2000 e tc), care pun la dispoziie funcii de stocare a bazelor de date, email, aplicaii B2B (Bussiness to Bussiness comer electronic ntre partenerii unei afaceri). Servicii Web (n special comerciale), utile n aplicaii care necesit identificarea utilizatoril or (de exemplu, .NET Passport - un mod de autentificare folosind un singur nume i o parol pentru toate ste-urile vizitate) Servicii incluse pentru dispozitive non -PC (Pocket PC Phone Edition, Smartphone, Tablet PC, Smart Display, XBox, set-to p boxes, etc.)

2.2. .NET Framework Componenta .NET Framework st la baza tehnologiei .NET, este ultima interfa ntre apli caiile .NET i sistemul de operare i actualmente conine: Limbajele C#, VB.NET, C++ i J #. Pentru a fi integrate n platforma .NET toate aceste limbaje respect nite specifi caii OOP numite Common Type System (CTS). Ele au ca elemente de baz: clase, interf ee, delegri, tipuri valoare i referin, iar ca mecanisme: motenire, polimorfism i trata ea excepiilor. Platforma comun de executare a programelor numit Common Language Run time (CLR), utilizat de toate cele 4 limbaje. Ansamblul de biblioteci necesare n r ealizarea aplicaiilor desktop sau Web numit Framework Class Library (FCL). Arhite ctura ,NET Framework Servicii WEB Formulare

Componenta .NET Framework este format din compilatoare, biblioteci i alte executab ile utile n rularea aplicaiilor .NET. Fiierele corespunztoare se afl, n general, n dir ctorul WINDOWS\Microsoft. NET\Framework\V2.0. (corespunztor versiunii instalate) Data and XML classes (ADO.NET, SQL, XML etc.) Framework Base Classes (IO, securi tate, fire de execuie, colecii etc.) Common Language Runtime (execepii, validri de t ipuri,compilatoare JIT) CLR FCL

14 POO i Programare vizual (suport de curs)

2.3. Compilarea programelor Un program scris ntr-unul dintre limbajele .NET conform Common Language Specificat ion (CLS) este compilat n Microsoft Intermediate Language (MSIL sau IL). Codul as tfel obinut are extensia exe, dar nu este direct executabil, ci respect formatul u nic MSIL. CLR include o main virtual asemntoare cu o main Java, ce execut instruciun L rezultate n urma compilrii. Maina folosete un compilator special JIT (Just In Time ). Compilatorul JIT analizeaz codul IL corespunztor apelului unei metode i produce codul main adecvat i eficient. El recunoate secvenele de cod pentru care s-a obinut de ja codul main adecvat permind reutilizarea acestuia fr recompilare, ceea ce face ca, p e parcursul rulrii, aplicaiile .NET s fie din ce n ce mai rapide. Faptul c programul IL produs de diferitele limbaje este foarte asemntor are ca rezultat interoperabil itatea ntre aceste limbaje. Astfel, clasele i obiectele create ntr-un limbaj specif ic .NET pot fi utilizate cu succes ntr-un program scris n alt limbaj. n plus, CLR s e ocup de gestionarea automat a memoriei (un mecanism implementat n platforma .NET fiind acela de eliberare automat a zonelor de memorie asociate unor date devenite inutile Garbage Collection). Ca un element de portabilitate, trebuie spus c CTS are o arhitectur ce permite rularea aplicaiilor .NET, n afar de Windows, i pe unele t ipuri de Unix, Linux, Solaris, Mac OS X i alte sisteme de operare (http://www.mon o-project.com/Main_Page ). 3. Limbajul C# 3.1. Caracterizare Limbajul C# fost dezvoltat de o echip restrns de ingineri de la Microsoft, echip din care s-a evideniat Anders Hejlsberg (autorul limbajului Turbo Pascal i membru al echipei care a proiectat Borland Delphi). C# este un limbaj simplu, cu circa 80 de cuvinte cheie, i 12 tipuri de date predefinite. El permite programarea structu rat, modular i orientat obiectual, conform perceptelor moderne ale programrii profesi oniste. Principiile de baz ale programrii pe obiecte (INCAPSULARE, MOSTENIRE, POLI MORFISM) sunt elemente fundamentale ale programrii C#. n mare, limbajul motenete sin taxa i principiile de programare din C++. Sunt o serie de tipuri noi de date sau funciuni diferite ale datelor din C++, iar n spiritul realizrii unor secvene de cod sigure (safe), unele funciuni au fost adugate (de exemplu, interfee i delegri), diver sificate (tipul struct), modificate (tipul string) sau chiar eliminate (motenirea multipl i pointerii ctre funcii). Unele funciuni (cum ar fi accesul direct la memori e folosind pointeri) au fost pstrate, dar secvenele de cod corespunztoare se consid er nesigure. 3.2. Compilarea la linia de comand Se pot dezvolta aplicaii .NET i fr a dispune de mediul de dezvoltare Visual Studio, ci numai de .NET SDK (pentru 2.0 i pentru 3.0). n acest caz, codul se scrie n orice editor de text, fiierele se salveaz cu extensia cs, apoi se compileaz la linie de comand. Astfel, se scrie n Notepad programul: using System; class primul { static void Main() { Console.WriteLine("Primul prog ram"); Console.ReadKey(true); } }

Limbajul C# 15 Dac se salveaz fiierul primul.cs, n directorul WINDOWS\Microsoft.NET\Framework\V2.0, atunci scriind la linia de comand: csc primul.cs se va obine fiierul primul.exe di rect executabil pe o platform .NET. 3.3. Crearea aplicaiilor consol Pentru a realiza aplicaii n mediul de dezvoltare Visual Studio, trebuie s instalm o versiune a acestuia, eventual versiunea free Microsoft Visual C# 2005 Express Ed ition de la adresa http://msdn.microsoft.com/vstudio/express/downloads/default.a spx. Pentru nceput, putem realiza aplicaii consol (ca i cele din Borland Pascal sau Borland C). Dup lansare, alegem opiunea New Project din meniul File. n fereastra de dialog (vezi figura), selectm pictograma Console Application, dup care, la Name, introducem numele aplicaiei noastre. Fereastra n care scriem programul se numete im plicit Programs.cs i se poate modifica prin salvare explicit (Save As). Extensia c s provine de la C Sharp. n scrierea programului suntem asistati de IntelliSense, ajutorul contextual. Compilarea programului se realizeaz cu ajutorul opiunii Build Solution (F6) din meniul Build. Posibilele erori de compilare sunt listate n fer eastra Error List. Efectund dublu click pe fiecare eroare n parte, cursorul din pr ogram se poziioneaz pe linia coninnd eroarea. Rularea programului se poate realiza n mai multe moduri: rapid fr asisten de depanare (Start Without Debugging Shift+F5) , rapid cu asisten de depanare (Start Debugging F5 sau cu butonul din bara de instru mente), rulare pas cu pas (Step Into F11 i Step Over F12) sau rulare rapid pn la lin ia marcat ca punct de ntrerupere (Toggle Breakpoint F9 pe linia respectiv i apoi Sta rt Debugging F5). ncetarea urmririi pas cu pas (Stop Debugging Shift+F5) permite i eirea din modul depanare i revenirea la modul normal de lucru. Toate opiunile de ru lare i depanare se gsesc n meniul Debug al meniului. Fereastra de cod i ferestrele a uxiliare ce ne ajut n etapa de editare pot fi vizualizate alegnd opiunea corespunztoa re din meniul View. Ferestrele auxiliare utile n etapa de depanare se pot vizuali za alegnd opiunea corespunztoare din meniul Debug/Windows.

16 POO i Programare vizual (suport de curs) 3.4. Structura unui program C# S ncepem cu exemplul clasic Hello World adaptat la limbajul C#: 1 2 3 4 5 6 7 8 9 10 11 12 using System; namespace HelloWorld { class Program { static void Main() { Console.WriteLine("Hello World!"); } } }

O aplicatie C# este format din una sau mai multe clase, grupate n spaii de nume (na mespaces). Un spaiu de nume cuprinde mai multe clase cu nume diferite avnd funciona liti nrudite. Dou clase pot avea acelai nume cu condiia ca ele s fie definite n spai nume diferite. n cadrul aceluiai spaiu de nume poate aprea definiia unui alt spaiu de nume, caz n care avem de-a face cu spaii de nume imbricate. O clas poate fi identif icat prin numele complet (nume precedat de numele spaiului sau spaiilor de nume din care face parte clasa respectiv, cu separatorul punct). n exemplul nostru, HelloW orld.Program este numele cu specificaie complet al clasei Program. O clas este form at din date i metode (funcii). Apelarea unei metode n cadrul clasei n care a fost def init aceasta presupune specificarea numelui metodei. Apelul unei metode definite n interiorul unei clase poate fi invocat i din interiorul altei clase, caz n care es te necesar specificarea clasei i apoi a metodei separate prin punct. Dac n plus, cla sa aparine unui spaiu de nume neinclus n fiierul curent, atunci este necesar precizar ea tuturor componentelor numelui: spaiu.clas.metod sau spaiu.spaiu.clas.metod etc. n rul nostru se afl dou spaii de nume: unul definit (HelloWorld) i unul extern inclus prin directiva using (System). Console.Writeln reprezint apelul metodei Writeln d efinit n clasa Console. Cum n spaiul de nume curent este definit doar clasa Program, deducem c definiia clasei Console trebuie s se gseasc n spaiul System. Pentru a facili a cooperarea mai multor programatori la realizarea unei aplicaii complexe, exist p osibilitatea de a segmenta aplicaia n mai multe fiiere numite assemblies. ntr-un ass embly se pot implementa mai multe spaii de nume, iar pari ale unui aceeai spaiu de n ume se pot regsi n mai multe assembly-uri. Pentru o aplicaie consol, ca i pentru o ap licaie Windows de altfel, este obligatoriu ca una (i numai una) dintre clasele apl icaiei s conin un punct de intrare (entry point), i anume metoda (funcia) Main. S co programul de mai sus: linia 1: este o directiv care specific faptul c se vor folosi clase incluse n spaiul de nume System. n cazul nostru se va folosi clasa Console. linia 3: spaiul nostru de nume linia 5: orice program C# este alctuit din una sau mai multe clase linia 7: metoda Main, punctul de intrare n program linia 9: clasa C onsole, amintit mai sus, este folosit pentru operaiile de intrare/ieire. Aici se ape leaz metoda WriteLine din acest clas, pentru afiarea mesajului dorit pe ecran. 3.5. Sintaxa limbajului Ca i limbajul C++ cu care se nrudete, limbajul C# are un alfabet format din litere mari i mici ale alfabetului englez, cifre i alte semne. Vocabularul limbajului est e format din acele simboluri27 cu semnificaii lexicale n scrierea programelor: cuvin te (nume), expresii, separatori, delimitatori i comentarii. 27 Este un termen folosit un pic echivoc i provenit din traduceriea cuvntului token

Limbajul C# 17 Comentarii comentariu pe un rnd prin folosirea // Tot ce urmeaz dup caracterele // sunt considerate, din acel loc, pn la sfritul rndului drept comentariu // Acesta este un comentariu pe un singur rand comentariu pe mai multe rnduri prin folosirea /* i */ Orice text cuprins ntre simbo lurile menionate mai sus se consider a fi comentariu. Simbolurile /* reprezint ncepu tul comentariului, iar */ sfritul respectivului comentariu. /* Acesta este un comentariu care se intinde pe mai multe randuri */

Nume Prin nume dat unei variabile, clase, metode etc. nelegem o succesiune de cara ctere care ndeplinete urmtoarele reguli: numele trebuie s nceap cu o liter sau cu un dintre caracterele _ i @; primul caracter poate fi urmat numai de litere, cifre sau u n caracter de subliniere; numele care reprezint cuvinte cheie nu pot fi folosite n alt scop dect acela pentru care au fost definite cuvintele cheie pot fi folosite n alt scop numai dac sunt precedate de @ dou nume sunt distincte dac difer prin cel puin un caracter (fie el i liter mic ce difer de aceeai liter majuscul) Convenii pen ume: n cazul numelor claselor, metodelor, a proprietilor, enumerrilor, interfeelor, s paiilor de nume, fiecare cuvnt care compune numele ncepe cu majuscul n cazul numelor variabilelor dac numele este compus din mai multe cuvinte, primul ncepe cu minuscu l, celelalte cu majuscul Cuvinte cheie n C# abstract as base bool break byte case c atch char checked class const continue decimal default delegate do double else e num event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long namespace new null object operator out o verride params private protected public readonly ref return sbyte sealed short s izeof stackalloc static string struct switch this throw true try typeof uint ulo ng unchecked unsafe ushort using virtual void volatile while Simbolurile lexical e reprezentnd constante, regulile de formare a expresiilor, separatorii de liste, delimitatorii de instruciuni, de blocuri de instruciuni, de iruri de caractere etc . sunt n mare aceiai ca i n cazul limbajului C++. 3.6. Tipuri de date n C# exist dou categorii de tipuri de date: tipuri valoare tipul simple: byte, char , int, float etc. tipul enumerare - enum tipul structur - struct

18 POO i Programare vizual (suport de curs) tipuri referin tipul clas - class tipul interfa - interface tipul delegat - delegate tipul tablou - array Toate tipurile de date sunt derivate din tipul System.Objec t Toate tipurile valoare sunt derivate din clasa System.ValueType, derivat la rndu l ei din clasa Object (alias pentru System.Object). Limbajul C# conine un set de tipuri predefinite (int, bool etc.) i permite definirea unor tipuri proprii (enum , struct, class etc.). Tipuri simple predefinite Tip object string sbyte short i nt long Descriere rdcina oricrui tip secven de caractere Unicode tip ntreg cu semn, pe 8 bii tip ntreg cu semn, pe 16 bii tip ntreg cu semn pe, 32 bii tip ntreg cu semn, pe 64 de bii Domeniul de valori

-128; 127 -32768; 32767 -2147483648; 21447483647 -9223372036854775808; 922337203 6854775807 tip ntreg fr semn, pe 8 bii 0; 255 byte tip ntreg fr semn, pe 16 bii 0; 65 ushort tip ntreg fr semn, pe 32 bii 0; 4294967295 uint tip ntreg fr semn, pe 64 bii 18446744073709551615 ulong tip cu virgul mobil, simpl precizie, pe -3.402823E+38; 3 .402823E+38 float 32 bii (8 pentru exponent, 24 pentru mantis) double tip cu virgu l mobil, dubl precizie, pe -1.79769313486232E+308; 64 bii (11 pentru exponent, 53 -m antisa) 1.79769313486232E+308 tip boolean bool 79228162514264337593543950335; 79 228162514264337593543950335 tip caracter din setul Unicode, pe 16 bii char decima l tip zecimal, pe 128 bii (96 pentru mantis), 28 de cifre semnificative O valoare se asigneaz dup urmtoarele reguli: Sufix Tip int, uint, long, ulong nu are uint, ul ong u, U long, ulong L, L ul, lu, Ul, lU, UL, LU, Lu ulong Exemple: string s = Sa lut! long a = 10; long b = 13L; ulong c = 12; ulong d = 15U; ulong e = 16L; ulong f = 17UL; float g = 1.234F; double h = 1.234; double i = 1.234D; bool cond1 = t rue; bool cond2 = false; decimal j = 1.234M;

Limbajul C# 19 Tipul enumerare Tipul enumerare este un tip de finit de utilizator. Acest tip pe rmite utilizarea numelor care, sunt asociate unor valori numerice. Toate compone ntele enumerate au un acelai tip de baz ntreg. n cazul n care, la declarare, nu se sp ecific tipul de baz al enumerrii, atunci acesta este considerat implicit int. Decla rarea unui tip enumerare este de forma: enum [Nume_tip] [: Tip]o { [identificator1][=valoare]o, ... [identificatorn][=va loare]o } Observaii: n mod implicit valoarea primului membru al enumerrii este 0, iar fiecare variabil care urmeaz are valoarea (implicit) mai mare cu o unitate dect precedenta. Valorile folosite pentru iniializri trebuie s fac parte din domeniul de valori decl arat al tipului Nu se admit referine circulare: enum ValoriCirculare { a = b, b } Exemplu: using System; namespace tipulEnum { class Program { enum lunaAnului { Ianuarie = 1, Februarie, Martie, Aprilie, Mai, Iunie, Iulie, August, Septembrie, Octombrie , Noiembrie, Decembrie } static void Main(string[] args) { Console.WriteLine("Lu na Mai este a ", (int)lunaAnului.Mai + "a luna din an."); Console.ReadLine(); } } } n urma rulrii programului se afieaz mesajul : Luna Mai este a 5 a luna din an. Tablo uri Declararea unui tablou unidimensional: Tip[] nume; Prin aceasta, nu se aloc spaiu pentru memorare. Pentru a putea reine date n structur a de tip tablou, este necesar o operaie de instaniere: nume = new Tip[NumarElemente]; Declararea, instanierea i chiar iniializarea tabloului se pot face n aceeai instruciun e: Exemplu: int[] v = new int[] {1,2,3}; sau int[] v = {1,2,3}; //new este implicit

20 POO i Programare vizual (suport de curs) n cazul tablourilor cu mai multe dimensiuni facem distincie ntre tablouri regulate i tablouri neregulate (tablouri de tablouri) Declarare n cazul tablourilor regulat e bidimensionale: Tip[,] nume; Intaniere: nume = new Tip[Linii,Coloane]; Acces: nume[indice1,indice2] Exemple: int[,] mat = new int[,] {{1,2,3},{4,5,6},{7,8,9}}; sau int[,] mat = {{1,2,3},{4, 5,6},{7,8,9}}; Declarare n cazul tablourilor neregulate bidimensionale: Tip[][] nume; Intaniere: nume = new Tip[Linii],[]; nume[0]=new Tip[Coloane1] ... nume[Linii-1]=new Tip[Co loaneLinii-1] Acces: nume[indice1][indice2] Exemple: int[][] mat = new int[][] { new int[3] {1,2,3}, new int[2] {4,5}, new int[4] {7, 8,9,1} }; sau int[][] mat={new int[3] {1,2,3},new int[2] {4,5},new int[4] {7,8,9 ,1}};

iruri de caractere Se definesc dou tipuri de iruri: regulate de tip verbatim Tipul r gulat conine ntre ghilimele zero sau mai multe caractere, inclusiv secvene escape. Secvenele escape permit reprezentarea caracterelor care nu au reprezentare grafic precum i reprezentarea unor caractere speciale: backslash, caracterul apostrof, e tc. Secven escape \ \ \\ \0 \a \b \f \n \r \t \u \v \x Efect apostrof ghilimele back slash null alarm backspace form feed pagin nou new line linie nou carriage return put de rnd horizontal tab tab orizontal caracter unicode vertical tab tab vertica l caracter hexazecimal

Limbajul C# 21

n cazul n care folosim multe secvene escape, putem utiliza irurile verbatim. Aceste i ruri pot s conin orice fel de caractere, inclusiv caracterul EOLN. Ele se folosesc n special n cazul n care dorim s facem referiri la fiiere i la regitri. Un astfel de ir cepe ntotdeauna cu simbolul@ naintea ghilimelelor de nceput. Exemplu: using System; namespace SiruriDeCaractere { class Program { static void Main(str ing[] args) { string a = "un sir de caractere"; string b = "linia unu \nlinia do i"; string c = @"linia unu linia doi"; string d="c:\\exemple\\unu.cs"; string e = @"c:\exemple\unu.cs"; Console.WriteLine(a); Console.WriteLine(b); Console.Writ eLine(c); Console.WriteLine(d); Console.WriteLine(e); Console.ReadLine(); } } } Programul va avea ieirea un sir de caractere linia unu linia doi linia unu linia doi c:\exemple\unu.cs c: \exemple\unu.cs 3.7. Conversii Conversii numerice n C# exist dou tipuri de conversii numerice: implicite explicite . Conversia implicit se efectueaz (automat) doar dac nu este afectat valoarea conver tit. Regulile de conversie implicit sunt descrise de tabelul urmtor: din sbyte byte short ushort int uint long char float ulong n short, int, long, fl oat, double, decimal short, ushort, int, uint, long, ulong, float, double, decim al int, long, float, double, decimal int, uint, long, ulong, float, double, deci mal long, float, double, decimal long, ulong, float, double, decimal float, doub le, decimal ushort, int, uint, long, ulong, float, double, decimal double float, double, decimal Conversia explicit se realizeaz prin intermediul unei expresii cast, atunci cnd nu exist posibilitatea unei conversii implicite. Exemplu: int i=Console.Read(); char c; c=char(i);

22 POO i Programare vizual (suport de curs) Conversii boxing i unboxing Datorit faptului c n C# toate tipurile sunt derivate din clasa Object (System.Object), prin conversiile boxing (mpachetare) i unboxing (de spachetare) este permis tratarea tipurilor valoare drept obiecte i reciproc. Prin conversia boxing a unui tip valoare, care se pstreaz pe stiv, se produce ambalarea n interiorul unei instane de tip referin, care se pstraz n memoria heap, la clasa Objec t. Unboxing permite convertirea unui obiect ntr-un tipul valoare corespunztor. Exe mplu: Prin boxing variabila i este asignata unui obiect ob: int i = 13; object ob = (object)i; //boxing explicit sau int i = 13; object ob = i; int i=13; object ob = i; i = (int)ob; //boxing implic it Prin conversia de tip unboxing, obiectul ob poate fi asignat variabilei ntregi i: //boxing implicit //unboxing explicit 3.8. Constante n C# exist dou modaliti de declarare a constantelor: folosind const sau folosind modi ficatorul readonly. Constantele declarate cu const trebuie s fie iniializate la de clararea lor. Exemple: const int x; const int x = 13; //gresit, constanta nu a fost initializata //core ct 3.9. Variabile O variabil n C# poate s conin fie o valoare a unui tip elementar, fie o referin la un biect. Exemple: int Salut; int Azi_si _maine; char caracter;

3.10. Expresii i operatori Prin expresie se nelege o secven format din operatori i operanzi. Un operator este un simbol ce indic aciunea care se efectueaz, iar operandul este valoarea asupra creia se execut operaia. n C# sunt definii mai muli operatori. n cazul n care ntr-o expresi u intervin paranteze, operaiile se execut conform prioritii operatorilor. n cazul n ca re sunt mai muli operatori cu aceeai prioritate, evaluarea expresiei se realizeaz d e la stnga la dreapta. Prioritate 0 1 2 3 4 5 6 Tip Primar Unar Multiplicativ Adi tiv De deplasare Relaional De egalitate Operatori ( ) [ ] f() . x++ x-- new typeo f sizeof checked unchecked -> + - ! ~ ++x --x (tip) true false & sizeof */% +<< >> < > <= >= is as == != Asociativi-tate

Limbajul C# 7 8 9 10 11 12 13 AND (SI) logic XOR (SAU exclusiv) logic OR (SAU) l ogic AND (SI) condiional OR (SAU) condiional Condiional De atribuire & ^ | && || ?: = *= /= %= += -= ^= &= <<= >>= |= 23

3.11. Colecii O colecie n C# este o clas specializat pentru memorarea i regsirea rapid a informaiil Ea implementeaz metode specifice de actualizare dinamic coleciei, de cutare i de enu merare a datelor. Cel mai des folosite sunt coleciile de obiecte i coleciile generi ce (vezi capitolul 5.1) cum ar fi liste, stive, hash-uri. Aceste clase pot fi de rivate pentru a obine colecii specializate care se potrivesc cel mai bine necesitilo r de memorare a datelor specifice unei aplicaii. Coleciile sunt definite n spaiul Sy stem.Collection. Metodele uzuale ale claselor din spaiul Collection sunt: Add, Re move, IndexOf, Sort, Reverse, CopyToArray, Find, Foreach etc.

3.12. Instrucunea foreach Cum instruciunile de apel, atribuire, decizie, selecie i trei structuri repetitive coincid ca form i funcionalitate cu cele din C, ne oprim sumar numai unora dintre n oile structuri de control specifice limbajului C#. Instruciunea foreach enumer ele mentele dintr-o colecie sau dintr-un tablou, executnd un bloc de instruciuni pentru fiecare element al coleciei sau tabloului. La fiecare iteraie, elementul curent a l coleciei este de tip readonly, neputnd fi modificat. Amintim c n instruciunea repet itiv foreach se pot utiliza cu exact aceeai funcionalitate instruciunile de salt bre ak i continue. instruciunea se utilizeaz curent n aplicaii pentru tablouri i colecii d obiecte28. Pentru a vedea cum acioneaz o vom compara cu instruciunea cunoscut for. Fie vectorul nume format din iruri de caractere: string[] nume={Ana, Ionel, Maria}; S afiam acest ir folosind instruciunea for: for(int i=0; i<nume.Length; i++) { Console.Write({0} , nume[i]); } Acelai rezultat l obinem folosind instruciunea foreach: foreach (string copil in nume) { Console.Write({0} , copil); } 3.13. Instruciunile try-catch-finally i throw Prin excepie se nelege un obiect care ncapsuleaz informaii despre situaii anormale n cionarea unui program. Ea se folosete pentru a semnala contextul n care de exemplu, pentru prelucrarea sistematic a tuturor componentlelor unei ferestre (butoane, liste, casete de text etc.) 28

24 POO i Programare vizual (suport de curs)

apare o situaie special. De exemplu: erori la deschiderea unor fiiere, mprire la 0 etc . Aceste erori se pot manipula astfel nct programul s nu se termine abrupt. Sunt si tuaii n care prefigurm apariia unei erori ntr-o secven de prelucrare i atunci integr vena respectiv n blocul unei instruciuni try, preciznd una sau mai multe secvene de pr ogram pentru tratarea excepiilor aprute (blocuri catch) i eventual o secven comun care se execut dup terminarea normal sau dup recuperarea programului din starea de excepie (blocul finally). Exemplu: using System; using System.IO; class tryCatch { static void Main(string[] args) { string s; Console.Write("Numele fisierului:"); Console.Readln(s); try { File.O penRead(s); } catch (FileNotFoundException a) { Console.WriteLine(a.ToString()); } catch (PathTooLongException b) { Console.WriteLine(b.ToString()); } finally { Console.WriteLine("Programul s-a sfarsit"); Console.ReadLine(); } } Alteori putem simula prin program o stare de eroare aruncnd o excepie (instruciunea t hrow) sau putem profita de mecanismul de tratare a erorilor pentru a implementa un sistem de validare a datelor prin generarea unei excepii proprii pe care, de a semenea, o aruncm n momentul nendeplinirii unor condiii puse asupra datelor. Clasa Sys tem.Exception i derivate ale acesteia servesc la tratarea adecvat i diversificat a e xcepiilor. Exemplu: Considerm clasele Copil, Fetita, Baiat definite fragmentat n ca pitolul 1. O posibilitate de validare la adugara unui copil este aceea care gener eaz o excepie proprie la depirea dimensiunii vectorului static copii: public static void adaug_copil(Copil c) { if (nr_copii < nr_max) copii[nr_copii+ +] = c; else throw new Exception("Prea multi copii"); }

Programare vizual 25

4. Programare vizual 4.1. Concepte de baz ale programrii vizuale Programarea vizual trebuie privit ca un mod de proiectare a unui program prin oper are direct asupra unui set de elemente grafice (de aici vine denumirea de program are vizual). Aceast operare are ca efect scrierea automat a unor secvene de program, secvene care, mpreun cu secvenele scrise textual29, vor forma programul. Spunem c o aplicaie este vizual dac dispune de o interfa grafic sugestiv i pune la dispoziia ut torului instrumente specifice de utilizare (drag, click, hint etc.) Realizarea u nei aplicaii vizuale nu const doar n desenare i aranjare de controale, ci presupune n principal stabilirea unor decizii arhitecturale30, decizii ce au la baz unul din tre modelele arhitecturale de baz: a) Modelul arhitectural orientat pe date. Aces t model nu este orientat pe obiecte, timpul de dezvoltare al unei astfel de apli caii este foarte mic, o parte a codului este generat automat de Visual Stdio.Net, codul nu este foarte uor de ntreinut i este recomandat pentru aplicaii relativ mici s au cu multe operaii de acces (in/out) la o baz de date. b) Modelul arhitectural Mo del-view-controller Este caracterizat de cele trei concepte de baz : Model (repre zentarea datelor se realizeaz ntr-o manier specific aplicaiei: conine obiectele de bus ness, ncapsuleaz accesul la date), View (sunt utilizate elemente de interfa, este for mat din Form-uri), Controller( proceseaz i rspunde la evenimente iar SO, clasele Fo rm i Control din .Net ruteaz evenimentul ctre un handler, eveniment tratat n codul din spatele Form-urilor). c) Modelul arhitectural Multi-nivel Nivelul de prezentare ( interfaa) Se ocup numai de afiarea informaiilor ctre utilizator i captarea celor in troduse de acesta. Nu cuprinde detalii despre logica aplicaiei, i cu att mai mult d espre baza de date sau fiierele pe care aceasta le utilizeaz. Cu alte cuvinte, n ca drul interfeei cu utilizatorul, nu se vor folosi obiecte de tipuri definite de pr ogramator, ci numai baza din .NET. Nivelul de logic a aplicaiei Se ocup de tot ceea ce este specific aplicaiei care se dezvolt. Aici se efectueaz calculele i procesrile i se lucreaz cu obiecte de tipuri definite de programator. Nivelul de acces la da te Aici rezid codul care se ocup cu accesul la baza de date, la fiiere, la alte ser vicii. Aceast ultim structur este foarte bun pentru a organiza aplicaiile, dar nu est e uor de realizat. De exemplu, dac n interfaa cu utilizatorul prezentm date sub form L istView i la un moment dat clientul ne cere reprezentarea datelor ntr-un GridView, modificrile la nivel de cod nu se pot localiza doar n interfa deoarece cele dou cont roale au nevoie de modele de acces la date total diferite. Se utilizeaz ades antonimia dintre vizual (operaii asupra unor componente grafice) i textual (scriere de linii de cod); proiectarea oricrei aplicaii vizuale mbin ambele tehnici. 30 Deciziile arhitecturale stabilesc n principal cum se leag interfaa de r estul aplicaiei i ct de uor de ntreinut este codul rezultat. 29

26 POO i Programare vizual (suport de curs)

Indiferent de modelul arhitectural ales, n realizarea aplicaiei mai trebuie respec tate i principiile proiectrii interfeelor: Simplitatea Interfaa trebuie s fie ct mai r de neles31 i de nvat de ctre utilizator i s permit acestuia s efectueze operaii timp ct mai scurt. n acest sens, este vital culegerea de informaii despre utilizator ii finali ai aplicaiei i a modului n care acetia sunt obinuii s lucreze. Poziia con elor Locaia controalelor dintr-o fereastr trebuie s reflecte importana relativ i frecv ena de utilizare. Astfel, cnd un utilizator trebuie s introduc nite informaii unele o ligatorii i altele opionale este indicat s organizm controalele astfel nct primele s e cele care preiau informaii obligatorii. Consistena Ferestrele i controalele trebu ie s fie afiate dup un design asemntor (template) pe parcursul utilizrii aplicaiei. de a implementa interfaa, trebuie decidem cum va arta aceasta, s definim template-ul . Estetica Intefaa trebuie s fie pe ct posibil plcut i atrgtoare. 4.2. Mediul de dezvoltare Visual C# Mediul de dezvoltare Microsoft Visual C# dispune de instrumente specializate de proiectare, ceea ce permite crearea aplicaiilor n mod interactiv, rapid i uor. Pentr u a construi o aplicaie Windows (File New Project) se selecteaz ca template Window s Application. O aplicaie Windows conine cel puin o fereastr (Form) n care se poate c rea o interfa cu utilizatorul aplicaiei. Componentele vizuale ale aplicaiei pot fi p relucrate n modul Designer (Shift+F7) pentru a plasa noi obiecte, a le stabili pr oprietile etc. Codul din spatele unei componente vizuale este accesibil n modul Code (F7). n fereastra Solution Explorer sunt afiate toate fiierele pe care Visual Studi o.NET le-a inclus n proiect. Form1.cs este formularul creat implicit de Visual St udio.NET ca parte a proiectului. Fereastra Properties este utilizat pentru a vizu aliza i eventual schimba proprietile obiectelor. Toolbox conine controale standard d ragand-drop i componente utilizate n crearea aplicaiei Windows. Controalele sunt gr upate n categoriile logice din imaginea alturat. Designer, Code, Solution Explorer i celelalte se afl grupate n meniul View. La crearea unei noi aplicaii vizuale, Visu al Studio.NET genereaz un spaiu de nume ce conine clasa static Program, cu metoda st atic ce constituie punctul de intrare (de lansare) a aplicaiei: static void Main() { ... Application.Run(new Form1()); } Clasa Application este responsabil cu administrarea unei aplicaii Windows, punnd la dispoziie proprieti pentru a obine informaii despre aplicaie, metode de lucru cu apli caia i altele. Toate metodele i proprietile clasei Application sunt statice. Metoda R un invocat ntruct mintea uman poate s perceap la un moment dat aproximativ 5-9 obiecte, o fereas tr supra-ncrcat de controale o face greu de utilizat. 31

Programare vizual 27

mai sus creeaz un formular implicit, aplicaia rspunznd la mesajele utilizatorului pn c d formularul va fi nchis. Compilarea modulelor aplicaiei i asamblarea lor ntr-un sin gur fiier executabil se realizeaz cu ajutorul opiunilor din meniul Build, uzual fiind Build Solution (F6). Odat implementat, aplicaia poate fi lansat, cu asisten de depanar e sau nu (opiunile Start din meniul Debug). Alte faciliti de depanare pot fi folosi te prin umrirea pas cu pas, urmrirea pn la puncte de ntrerupere etc. (celelalte opiuni ale meniului Debug). Ferestre auxiliare de urmrire sunt vizualizate automat n tim pul procesului de depanare, sau pot fi activate din submeniul Windows al meniulu i Debug. 4.3. Ferestre Spaiul Forms ne ofer clase specializate pentru: creare de ferestre sau formulare ( System.Windows.Forms.Form), elemente specifice (controale) cum ar fi butoane (Sy stem.Windows.Forms.Button), casete de text (System.Windows.Forms.TextBox) etc. P roiectarea unei ferestre are la baz un cod complex, generat automat pe msur ce noi desemnm componentele i comportamentul acesteia. n fapt, acest cod realizeaz: derivar ea unei clase proprii din System.Windows.Forms.Form, clas care este nzestrat cu o c olecie de controale (iniial vid). Constructorul ferestrei realizaz instanieri ale cla selor Button, MenuStrip, Timer etc. (orice plasm noi n fereastr) i adaug referinele ac estor obiecte la colecia de controale ale ferestrei. Dac modelul de fereastr reprez int ferestra principal a aplicaiei, atunci ea este instaniat automat n programul princ ipal (metoda Main). Dac nu, trebuie s scriem noi codul ce realizeaz instanierea. Cla sele derivate din Form motenesc o serie de proprieti care determin atributele vizual e ale ferestrei (stilul marginilor, culoare de fundal, etc.), metode care implem enteaz anumite comportamente (Show, Hide, Focus etc.) i o serie de metode specific e (handlere) de tratare a evenimentelor (Load, Click etc.). O fereastr poate fi a ctivat cu form.Show() sau cu form.ShowDialog(), metoda a doua permind ca revenirea n fereastra din care a fost activat noul formular s se fac numai dup ce noul formula r a fost inchis (spunem c formularul nou este deschis modal). Un propietar este o fereastr care contribuie la comportarea formularului deinut. Activarea propietaru lui unui formular deschis modal va determina activarea formularului deschis moda l. Cnd un nou formular este activat folosind form.Show() nu va avea nici un deintor , acesta stabilindu-se direct : public Form Owner { get; set; } F_nou form=new F_nou(); form.Owner = this; form. Show(); Formularul deschis modal va avea un proprietar setat pe null. Deintorul se poate s tabili setnd proprietarul nainte s apelm Form.ShowDialog() sau apelnd From.ShowDialog () cu proprietarul ca argument. F_nou form = new F_nou();form.ShowDialog(this); Vizibilitatea unui formular poate fi setat folosind metodele Hide sau Show. Pentr u a ascunde un formular putem folosi : this.Hide(); // setarea propietatii Visible indirect sau this.Visible = false; / / setarea propietatii Visible direct Printre cele mai uzuale proprieti ale form-urilor, reamintim: StartPosition determ in poziia ferestrei atunci cnd aceasta apare prima dat, poziie ce poate fi setat Manua l sau poate fi centrat pe desktop (CenterScreen), stabilit de Windows, formularul avnd dimensiunile i locaia stabilite de programator (WindowsDefaultLocation) sau Wi ndows-ul va stabili dimensiunea iniial i locaia pentru formular (WindowsDefaultBound s) sau, centrat pe formularul care l-a afiat (CenterParent) atunci cnd formularul va fi afiat modal.

28 POO i Programare vizual (suport de curs) Location (X,Y) reprezint coordonatele colului din stnga sus al formularului relativ la colul stnga sus al containerului. (Aceast propietate e ignorat dac StartPosition = Manual). Micarea formularului ( i implicit schimbarea locaiei) poate fi tratat n ev enimentele Move i LocationChanged . Locaia formularului poate fi stabilit relativ l a desktop astfel: void Form_Load(object sender, EventArgs e) { this.Location = new Point(1, 1); th is.DesktopLocation = new Point(1, 1); } //formularul in desktop

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

IsMdiContainer precizeaz dac form-ul reprezint un container pentru alte form-uri. C ontrolBox precizeaz dac fereastra conine sau nu un icon, butonul de nchidere al fere strei i meniul System (Restore,Move,Size,Maximize,Minimize,Close). HelpButton-pre cizeaz dac butonul va aprea sau nu lng butonul de nchidere al formularului (doar dac M ximizeBox=false, MinimizeBox=false). Dac utilizatorul apas acest buton i apoi apas o riunde pe formular va aprea evenimentul HelpRequested (F1). Icon reprezint un obie ct de tip *.ico folosit ca icon pentru formular. MaximizeBox i MinimizeBox preciz eaz dac fereastra are sau nu butonul Maximize i respectiv Minimize Opacity indic pro centul de opacitate32 ShowInTaskbar precizeaz dac fereastra apare in TaskBar atunc i cnd formularul este minimizat. SizeGripStyle specific tipul pentru Size Grip (Auto , Show, Hide). Size grip (n colul din dreapta jos) indic faptul c aceast fereastr poat e fi redimensionat. TopMost precizeaz dac fereastra este afisat n faa tuturor celorlal te ferestre. TransparencyKey identific o culoare care va deveni transparent pe for m. Definirea unei funcii de tratare a unui eveniment asociat controlului se realiz eaz prin selectarea grupului Events din ferestra Properties a controlului respect iv i alegerea evenimentului dorit. Dac nu scriem nici un nume pentru funcia de trat are, ci efectum dublu click n csua respectiv, se genereaz automat un nume pentru aceas t funcie, innd cont de numele controlului i de numele evenimentului (de exemplu butto n1_Click). Dac n Designer efectum dublu click pe un control, se va genera automat o funcie de tratare pentru evenimentul implicit asociat controlului (pentru un but on evenimentul implicit este Click, pentru TextBox este TextChanged, pentru un f ormular Load etc.). Printre evenimentele cele mai des utilizate, se numr : Load ap are cnd formularul este pentru prima data ncrcat n memorie. 32 Dac va fi setat la 10% formularul i toate controalele sale vor fi aproape invizibil e.

Programare vizual 29 FormClosed apare cnd formularul este nchis. FormClosing apare cnd formularul se va inchide ca rezultat al aciunii utilizatorului asupra butonului Close (Dac se setea z CancelEventArgs.Cancel =True atunci se va opri nchiderea formularului). Activate d apare pentru formularul activ. Deactivate apare atunci cnd utilizatorul va da c lick pe alt formular al aplicatiei. 4.4. Controale Unitatea de baz a unei interfee Windows o reprezint un control. Acesta poate fi gzdui t de un container ce poate fi un formular sau un alt control. Un control este o i nstan a unei clase derivate din System.Windows.Forms i este reponsabil cu desenarea unei pri din container. Visual Studio .NET vine cu o serie de controale standard, disponibile n Toolbox. Aceste controale pot fi grupate astfel: Controale de acti une (de exemplu button) care, atunci cnd sunt acionate, se poate executa o prelucr are. De exemplu, cel mai important eveniment pentru Button este Click (desemnnd a ciunea click stnga pe buton).

n exemplul PV1 se adaug pe formular dou butoane i o caset text. Apsarea primului buton va determina afiarea textului din TextBox ntr-un MessageBox iar apsarea celui de-a l doilea buton va nchide nchide aplicaia. Dup adugarea celor dou butoane i a casetei t xt a fost schimbat textul afiat pe cele dou butoane au fost scrise funciile de trat are a evenimentului Click pentru cele dou butoane: private void button1_Click(object sender, System.EventArgs e) { MessageBox.Show( textBox1.Text);} private void button2_Click(object sender, System.EventArgs e) { Form1.ActiveForm.Dispose();} Controale valoare (label, textbox, picturebox) care arat utilizatorului o informai e (text, imagine). Label este folosit pentru plasarea de text pe un formular. Te xtul afiat este coninut n propietatea Text i este aliniat conform propietii TextAlign. TextBox - permite utilizatorului s introduc un text. Prevede, prin intermediul Co ntextMenu-ului asociat, un set de funcionaliti de baz, ca de exemplu (Cut, Copy, Pas te, Delete, SelectAll). PictureBox permite afiarea unei imagini. Exemplul PV2 afieaz un grup alctuit din 3 butoane, etichetate A,B respectiv C avnd i niial culoarea roie. Apsarea unui buton determin schimbarea culorii acestuia n galben . La o nou apsare butonul revine la culoare iniial. Acionarea butonului Starea butoane lor determin afiarea ntr-o caset text a etichetelor butoanelor galbene. Caseta text d evine vizibil atunci cnd apsm prima oar acest buton. Culoarea butonului mare (verde/p ortocaliu) se schimb atunci cnd mouse-ul este poziionat pe buton. Dup adugarea butoan elor i a casetei text pe formular, stabilim evenimentele care determin schimbarea culoriilor i completarea casetei text. private void button1_Click(object sender, System.EventArgs e) {if (button1.BackC olor== Color.IndianRed) button1.BackColor=Color.Yellow; else button1.BackColor= Color.IndianRed;}

30 POO i Programare vizual (suport de curs) private void button4_MouseEnter(object sender, System.EventArgs e) {button4.Back Color=Color.YellowGreen;button4.Text="Butoane apasate";} private void button4_Mo useLeave(object sender, System.EventArgs e) {textBox1.Visible=false;button4.Text ="Starea butoanelor"; button4.BackColor=Color.Orange;} private void button4_Clic k(object sender, System.EventArgs e) {textBox1.Visible=true;textBox1.Text=""; if ( button1.BackColor==Color.Yellow)textBox1.Text=textBox1.Text+ A ; if( button2.B ackColor==Color.Yellow)textBox1.Text=textBox1.Text+ B ; if( button3.BackColor==C olor.Yellow)textBox1.Text=textBox1.Text+ C ; }

Exerciiu Modificai aplicaia precedent astfel nct s avem un singur eveniment button_Cli k, diferenierea fiind fcut de parametrul sender. Exerciiu ( Password) Adugai pe un for mular o caset text n care s introducei un ir de caractere i apoi verificai dac acesta incide cu o parol dat. Textul introdus n caset nu este vizibil (fiecare caracter est e nlocuit cu*). Rezultatul va fi afiat ntr-un MessageBox. Controale de selecie (Chec kBox,RadioButton) au propietatea Checked care indic dac am selectat controlul. Dup schimbarea strii unui astfel de control, se declaneaz evenimentul Checked. Dac propi etatea ThreeState este setat, atunci se schimb funcionalitatea acestor controale, n sensul c acestea vor permite setarea unei alte stri. n acest caz, trebuie verificat propietatea CheckState(Checked, Unchecked,Indeterminate) pentru a vedea starea c ontrolului. Aplicaia PV3 este un exemplu de utilizare a acestor controale. Soluia unei problem e cu mai multe variante de rspuns este memorat cu ajutorul unor checkbox-uri cu pr oprietatea ThreeState. Apsarea butonului Verific determin afiarea unei etichete i a b utoanelor radio DA i NU. Rspunsul este afiat ntr-un MessageBox. Dup adugarea controale lor pe formular i setarea proprietilor Text i ThreeState n cazul checkbox-urilor stab ilim evenimentele click pentru butonul Verifica i pentru butonul radio cu etichet a DA: private void radioButton1_Click(object sender, System.EventArgs e) {if (checkBox 1.CheckState==CheckState.Checked && checkBox2.CheckState==CheckState.Checked && checkBox3.CheckState==CheckState.Checked && checkBox5.CheckState==CheckState.Che cked && checkBox4.CheckState==CheckState.Unchecked) MessageBox.Show("CORECT"); e lse MessageBox.Show("Indicatie> Daca punem un sac in altul...."); label2.Visible =false; radioButton1.Checked=false; radioButton2.Checked=false; radioButton1.Vis ible=false; radioButton2.Visible=false;} private void button1_Click(object sende r, System.EventArgs e) {label2.Visible=true;radioButton1.Visible=true;radioButto n2.Visible=true;}

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

Programare vizual 31 private void etichetaC_LinkClicked (object sender, LinkLabelLinkClickedEventArgs e ) { etichetaC.LinkVisited = true; System.Diagnostics.Process.Start( @"C:\" ); } private void etichetaI_LinkClicked( object sender, LinkLabelLinkClickedEventAr gs e ) {etichetaI.LinkVisited = true; System.Diagnostics.Process.Start("IExplore ", "http://www.microsoft.com/romania/" );} private void etichetaN_LinkClicked( o bject sender, LinkLabelLinkClickedEventArgs e ) {etichetaN.LinkVisited = true; S ystem.Diagnostics.Process.Start( "notepad" );} Exerciiu (Memorator) Construii o aplicaie care s conin patru legturi ctre cele patru re/ pagini care conin rezumatul capitolelor studiate. Controale pentru listare (L istBox, CheckedListBox, ComboBox, ImageList) ce pot fi legate de un DataSet, de un ArrayList sau de orice tablou (orice surs de date ce implementeaz interfaa IEnum erable).

n exemplul PV5 elementele selectate din CheckedListBox se adaug n ListBox. Dup adugar ea pe formular a CheckedListBox-ului, stabilim colecia de itemi (Properties-Items Collection), butonul Selecie i ListBox-ul. Evenimentul Click asociat butonului Set ectie golete mai nti listBox-ul (listBox1.Items.Clear();) i dup aceea adaug n ordine f ecare element selectat din CheckedListBox. Suplimentar se afieaz o etichet cu itemi i selectai. void button1_Click(object source, System.EventArgs e) { String s = "Am selectat si am adaugat itemii: "; listBox1.Items.Clear(); foreach ( object c in checkedLi stBox1.CheckedItems) {listBox1.Items.Add(c); s = s + c.ToString();s = s + " ";} label1.Text = s;}

Exerciiu ( Filtru) Construii o aplicaie care afieaz fiierele dintr-un folder ales care au un anumit tip ( tipul fiierelor este ales de utilizator pe baza unui CheckedL istBox) Aplicaia PV6 este un exemplu de utilizare a controlului ImageList. Apsarea butonului Desene va aduga fiierele *.gif din folderul C:\Imagini n list i va afia con nutul acesteia. Butonul Animate va determina afiarea fiierelor *.gif cu ajutorul P ictureBox.

32 POO i Programare vizual (suport de curs) ImageList desene_animate = new System.Windows.Forms.ImageList(); private void co ntruieste_lista_Click(object sender, System.EventArgs e) { // Configureaza lista desene_animate.ColorDepth =System.Windows.Forms.ColorDepth.Depth8Bit; desene_an imate.ImageSize = new System.Drawing.Size(60, 60); desene_animate.Images.Clear() ; string[] gif_uri = Directory.GetFiles("C:\\Imagini", "*.gif"); // se construie ste un obiect Imagine pentru fiecare fisier si se adauga la ImageList. foreach ( string fisier_gif in gif_uri) {Bitmap desen= new Bitmap (fisier_gif); desene_ani mate.Images.Add(desen);pictureBox2.Image=desen;} Graphics g = this.CreateGraphic s(); // Deseneaza fiecare imagine utilizand metoda ImageList.Draw() for (int i = 0; i < desene_animate.Images.Count; i++) desene_animate.Draw(g, 60 + i * 60, 60 , i); g.Dispose(); }

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

Formularul din aplicaia PV7 conine un calendar pentru care putem selecta un interv al de maximum 30 de zile, sunt afiate sptmnile i ziua curent. Intervalul selectat se a fieaz prin intermediul unei etichete. Dac se selecteaz o dat atunci aceasta va fi adug at ca item ntr-un ComboBox (orice dat poate aprea cel mult o dat n list). Dup adugar lor 3 controale pe formular, stabilim proprietile pentru monthCalendar1 (ShowWeekN umber-True, MaxSelectionCount-30, etc.) i precizm ce se execut atunci cnd selectm un interval de timp: private void monthCalendar1_DateSelected(object sender, System.Windows.Forms.Dat eRangeEventArgs e) { this.label1.Text = "Interval selectat: Start = " +e.Start.T oShortDateString() + " : End = " + e.End.ToShortDateString(); if (e.Start.ToShor tDateString()==e.End.ToShortDateString()) {String x=e.Start.ToShortDateString(); if(!(comboBox1.Items.Contains(x))) comboBox1.Items.Add(e.End.ToShortDateString( ));} } DateTimePicker este un control care (ca i MonthCalendar) se poate utiliza pentru a selecta o dat. La click se afieaz un control de tip MonthCalendar, prin care se p oate selecta data dorit. Fiind foarte asemntor cu MonthCalendar, proprietile prin car e se poate modifica comportamentul controlului sunt identice cu cele ale control ului MonthControl.

Programare vizual 33 Exerciiu (Formular) Contruii un formular de introducere a datelor necesare realizri i unei adrese de e-mail. Data naterii va fi selectat direct utiliznd MonthCalendar. ListView este folosit pentru a afia o colecie de elemente n unul din cele 4 moduri (Text, Text+Imagini mici, Imagini mari, Detalii). Acesta este similar grafic cu ferestrele n care se afieaz fiierele dintr-un anumit director din Windows Explorer. Fiind un control complex, conine foarte multe proprieti, printre care: View ( sele cteaz modul de afiare (LargeIcon, SmallIcon, Details, List)), LargeImageList, Smal lImageList (icon-urile de afiat n modurile LargeIcon, SmallIcon), Columns(utilizat doar n modul Details, pentru a defini coloanele de afiat), Items(elementele de af iat).

Aplicaia PV8 este un exemplu de utilizare ListView. Se pornete de la rdcin i se afieaz oninutul folder-ului selectat cu dublu click. La expandare se afieaz numele complet , data ultimei accesri i, n cazul fiierelor, dimensiunea. Controlul lista_fisiere es te de tip ListView. Funcia ConstruiesteHeader permite stabilirea celor trei coloa ne de afiat. private void ConstruiesteHeader() {ColumnHeader colHead;colHead = new ColumnHead er(); colHead.Text = "Nume fisier"; this.lista_fisiere.Columns.Add(colHead); col Head = new ColumnHeader();colHead.Text = "Dimensiune"; his.lista_fisiere.Columns .Add(colHead); colHead = new ColumnHeader();colHead.Text = "Ultima accesare"; th is.lista_fisiere.Columns.Add(colHead); }

Pentru item-ul selectat se afieaz mai nti folderele i dup aceea fiierele. Pentru aceas a trebuie s determinm coninutul acestuia: ListViewItem lvi; ListViewItem.ListViewSubItem lvsi; this.calea_curenta.Text = r adacina + "(Doublu Click pe folder)"; System.IO.DirectoryInfo dir = new System.I O.DirectoryInfo(radacina); DirectoryInfo[] dirs = dir.GetDirectories(); FileInfo [] files = dir.GetFiles(); s tergem vechiul coninut al listei: this.lista_fisiere.Items.Clear(); this.lista_fisiere.BeginUpdate(); i s adugm fiecare nou item ( coloana a doua este vid n cazul foldere-lor): foreach (System.IO.DirectoryInfo fi in dirs) { lvi = new ListViewItem();lvi.Text = fi.Name; lvi.ImageIndex = 1; lvi.Tag = fi.FullName; lvsi = new ListViewItem.L istViewSubItem(); lvsi.Text = "";lvi.SubItems.Add(lvsi); lvsi = new ListViewItem .ListViewSubItem(); lvsi.Text = fi.LastAccessTime.ToString(); lvi.SubItems.Add(l vsi); this.lista_fisiere.Items.Add(lvi); }

Exerciiu (Ordonare) Modificai aplicaia anterioar astfel nct apsarea pe numele unei col ane s determine afiarea informaiilor ordonate dup criteriul specificat (nume, dimens iune, data). Controale de control al executrii (Timer) sau de dialog (OpenFileDialo g, SaveFileDialog, ColorDialog, FontDialog, ContextMenu).

34 POO i Programare vizual (suport de curs) Grupuri de controale Toolbar (ToolStrip) afieaz o bar de butoane n partea de sus a u nui formular. Se pot introduce vizual butoane (printr-un designer, direct din Vi sual Studio.NET IDE), la care se pot seta att textul afiat sau imaginea. Eveniment ul cel mai util al acestui control este ButtonClick (care are ca parametru un ob iect de tip ToolBarButtonClickEventArgs, prin care programatorul are acces la bu tonul care a fost apasat).

n aplicaia urmtoare PV9 cele 3 butoane ale toolbar-ului permit modificarea proprietil or textului introdus n caset. Toolbar-ul se poate muta fr a depi spaiul ferestrei. Sch mbarea fontului se realizeaz cu ajutorul unui control FontDialog(),iar schimbarea culorii utilizeaz ColorDialog() FontDialog fd = new FontDialog(); fd.ShowColor = true;fd.Color = Color.IndianRed ; fd.ShowApply = true; fd.Apply += new EventHandler(ApplyFont); if(fd.ShowDialog () != System.Windows.Forms.DialogResult.Cancel) { this.richTextBox1.Font= fd.Fon t; this.richTextBox1.ForeColor=fd.Color; } ColorDialog cd = new ColorDialog(); c d.AllowFullOpen = true;cd.Color = Color.DarkBlue; if(cd.ShowDialog() == System.W indows.Forms.DialogResult.OK) this.richTextBox1.ForeColor = cd.Color; Mutarea toolbar-ul este dirijat de evenimentele produse atunci cnd apsm butonul de m ouse i/sau ne deplasm pe suprafaa ferestrei. private void toolBar1_MouseDown(object sender, MouseEventArgs e) { // am apasat butonul de mouse pe toolbar am_apasat = true; forma_deplasata = new Point(e.X, e .Y); toolBar1.Capture = true;} private void toolBar1_MouseUp(object sender, Mous eEventArgs e) { am_apasat = false;toolBar1.Capture = false;} private void toolBa r1_MouseMove(object sender, MouseEventArgs e) { if (am_apasat) { if(toolBar1.Doc k == DockStyle.Top || toolBar1.Dock == DockStyle.Left) { // daca depaseste atunc i duc in stanga sus if (forma_deplasata.X < (e.X-20) || forma_deplasata.Y < (e.Y -20)) { am_apasat = false;// Disconect toolbar toolBar1.Dock = DockStyle.None; t oolBar1.Location = new Point(10, 10); toolBar1.Size = new Size(200, 45); toolBar 1.BorderStyle = BorderStyle.FixedSingle; } } else if (toolBar1.Dock == DockStyle .None) {toolBar1.Left = e.X + toolBar1.Left - forma_deplasata.X; toolBar1.Top = e.Y + toolBar1.Top - forma_deplasata.Y; if (toolBar1.Top < 5 || toolBar1.Top>thi s.Size.Height-20) { am_apasat = false;toolBar1.Dock = DockStyle.Top; toolBar1.Bo rderStyle = BorderStyle.Fixed3D;} else if (toolBar1.Left < 5 || toolBar1.Left > this.Size.Width - 20) { am_apasat = false;toolBar1.Dock = DockStyle.Left; toolBa r1.BorderStyle = BorderStyle.Fixed3D; }}} } Exerciiu (Editor) Realizai un editor de texte care conin un control toolBar cu butoa nele uzuale.

Programare vizual 35 Controale container (GroupBox, Panel, TabControl) sunt controale ce pot conine al te controale.

Aplicaia PV10 simuleaz lansarea unei comenzi ctre un magazin de jucrii. Se utilizeaz 4 pagini de Tab pentru a simula selectarea unor opiuni ce se pot grupa pe categor ii. Exerciiu (Magazin) Dezvoltai aplicaia precedent astfel nct pe o pagin s se afiez elele disponibile (imagine+detalii) i s se permit selectarea mai multor obiecte. Ul tima pagin reprezint coul de cumprturi. Grupuri de controale tip Meniu (MenuStrip, Co ntextMenuStrip etc.) Un formular poate afia un singur meniu principal la un momen t dat, meniul asociat iniial fiind specificat prin propietatea Form.MainMenuStrip . Meniul care este afiat de ctre un formular poate fi schimbat dinamic la rulare : switch(cond) { case cond1:this.MainMenuStrip = this.mainMenu1;break; case cond2: this.MainMenuStrip = this.mainMenu2; } unde mainMenu1 i mainMenu2 sunt obiecte de tip MenuStrip. Editarea unui astfel de obiect se poate face utiliznd Menu Designer. Clasa MenuStrip are o colecie de Men uItem care conine 0 sau mai multe obiecte de tip MenuItem. Fiecare dintre aceste obiecte de tip MenuItem are 0 sau mai multe obiecte de tip MenuItem, care vor co nstitui noul nivel de itemi (Ex: File New,Save, Open, Close, Exit). Propietile Che cked si RadioCheck indic itemul selectat, Enabled and Visible determin dac un item poate fi sau nu selectat sau vizibil, Shortcut permite asignarea unei combinaii d e taste pentru selectarea unui item al meniului i Text memoreaz textul care va fi afiat pentru respectivul item al meniului. Evenimentul Click are loc cnd un utiliz ator apas un item al meniului. Exemplul PV11 permite, prin intermediul unui meniu , scrierea unui fisier Notpad, afiarea continutului acestuia ntro caset text, schim barea fontului i culorii de afiare, tergerea coninutului casetei, afiarea unor inform aii teoretice precum i Help dinamic. Au fost definite chei de acces rapid pentru a ccesarea componentelor meniului. File New permite scrierea unui fiier notepad nou System.Diagnostics.Process.Start( "notepad" ); File Open selecteaz i afieaz n caseta text coninutul unui fiier text. OpenFileDialog of = new OpenFileDialog(); of.Filter = "Text Files (*.txt)|*.txt" ; of.Title = "Fisiere Text"; if (of.ShowDialog() == DialogResult.Cancel)return; richTextBox1.Text="";richTextBox1.Visible=true; FileStream strm; try{strm = new FileStream (of.FileName, FileMode.Open, FileAccess.Read); StreamReader rdr = new StreamReader (strm); while (rdr.Peek() >= 0){string str = rdr.ReadLine (); rich TextBox1.Text=richTextBox1.Text+" "+str;} } catch (Exception){MessageBox.Show (" Error opening file", "File Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamat ion);} File Close terge coninutul casetei text, File Exit nchide aplicaia

36 POO i Programare vizual (suport de curs) Window Font i Window Color permit stabilirea fontului/culorii textului afiat. Help DinamicHelp acceseaz System.Diagnostics.Process.Start("IExplore", "http://msdn2.microsoft.com/en-us/default.aspx"); Help About PV afieaz n caseta text informaii despre implementarea unui menu. Exerciiu (Fisiere) Contruii un menu care s permit efectuarea operaiilor uzuale cu fiie re. 4.5. System.Drawing Spaiul System.Drawing conine tipuri care permit realizarea unor desene 2D i au rol deosebit n proiectarea interfeelor grafice. Un obiect de tip Point este reprezenta t prin coordonatele unui punct ntr-un spaiul bidimensional (exemplu: Point myPoint = new Point(1,2);) Point este utilizat frecvent nu numai pentru desene, ci i pen tru a identifica n program un punct dintr-un anumit spaiu. De exemplu, pentru a mo difica poziia unui buton n fereastr putem asigna un obiect de tip Point proprietii Lo cation indicnd astfel poziia colului din stnga-sus al butonului (button.Location = n ew Point(100, 30)). Putem construi un obiect de tip Point pentru a redimensiona un alt obiect. Size mySize = new Size(15, 100); Point myPoint = new Point(mySize ); System.Console.WriteLine("X: " + myPoint.X + ", Y: " + myPoint.Y);

Structura Color conine date, tipuri i metode utile n lucrul cu culori. Fiind un tip valoare (struct) i nu o clas, aceasta conine date i metode, ns nu permite instaniere, constructori, destructor, motenire. Color myColor = Color.Brown; button1.BackColor = myColor; Substructura FromArgb a structurii Color returneaz o culoare pe baza celor trei c omponente ale oricrei culori (red, green, blue). Clasa Graphics este o clas sigila t reprezentnd o arie rectangular care permite reprezentri grafice. De exemplu, o lin ie frnt se poate realiza astfel: Point[] points = new Point[4]; points[0] = new Point(0, 0);points[1] = new Point (0, 120); points[2] = new Point(20, 120);points[3] = new Point(20, 0); Graphics g = this.CreateGraphics(); Pen pen = new Pen(Color.Yellow, 2); g.DrawLines(pen, points); Aplicaia PV12 este un exerciiu care deseneaz cercuri de raze i culori aleatoare i emi te sunete cu frecven aleatoare. Random x = new Random(); Console.Beep(300 + x.Next(1000), 150); Graphics g = e.G raphics; i = 1 + x.Next(30); p=new Pen(System.Drawing.Color.FromArgb(x.Next(256) ,x.Next(256),x.Next(256))) g.DrawEllipse(p, x.Next(100), x.Next(100), i, i); Con sole.Sleep(200); n exemplul PV13 se construiete o pictogram pe baza unei imagini. Image thumbnail; private void Thumbnails_Load(object sender, EventArgs e) { try{ Image img = Image.FromFile("C:\\Imagini\\catel.jpg"); int latime=100, inaltime=1 00; thumbnail=img.GetThumbnailImage(latime, inaltime,null, IntPtr.Zero);} catch{ MessageBox.Show("Nu exista fisierul");} } private void Thumbnails_Paint(object s ender, PaintEventArgs e) {e.Graphics.DrawImage(thumbnail, 10, 10);}

Programare vizual 37 4.6. Validarea informaiilor de la utilizator nainte ca informaiile de la utilizator s fie preluate i transmise ctre alte clase, es te necesar s fie validate. Acest aspect este important, pentru a preveni posibile le erori. Astfel, dac utilizatorul introduce o valoare real (float) cnd aplicaia atea pt un ntreg (int), este posibil ca aceasta s se comporte neprevzut abia cteva secunde mai trziu, i dup multe apeluri de metode, fiind foarte greu de identificat cauza p rimar a problemei. Validarea la nivel de cmp Datele pot fi validate pe msur ce sunt introduse, asociind o prelucrare unuia dintre handlerele asociate evenimentelor la nivel de control (Leave, Textchanged, MouseUp etc.) private void textBox1_KeyUp(object sender, System.Windows.Forms.KeeyEventArgs e) {if(e.Alt==true) MessageBox.Show ("Tasta Alt e apasata"); // sau if(Char.IsDigi t(e.KeyChar)==true) MessageBox.Show("Ati apasat o cifra"); } Validarea la nivel de utilizator n unele situaii (de exemplu atunci cnd valorile in troduse trebuie s se afle ntr-o anumit relaie ntre ele), validarea se face la sfritul ntroducerii tuturor datelor la nivelul unui buton final sau la nchiderea ferestre i de date. private void btnValidate_Click(object sender, System.EventArgs e) { foreach(Syst em.Windows.Forms.Control a in this.Controls) { if( a is System.Windows.Forms.Tex tBox & a.Text=="") { a.Focus();return;} } } ErrorProvider O manier simpl de a semnala erori de validare este aceea de a seta u n mesaj de eroare pentru fiecare control . myErrorProvider.SetError(txtName," Numele nu are spatii in stanga"); Aplicatii recapitulative. Urmrii aplicaiile i precizai pentru fiecare dintre ele cont roalele utilizate, evenimentele tratate: Forma poloneza (PV14), Triunghi (PV15), Ordonare vector(PV16), Subsir cresctor de lungime maxim(PV17), Jocul de Nim (PV18 ) Exerciiu (Test grila) Realizai un generator de teste gril (ntrebrile sunt preluate dintr-un fisier text, pentru fiecare item se precizeaz punctajul, enunul, rspunsul corect, distractorii i o imagine asociat enunului (dac exist). Dup efectuarea testului se afieaz rezultatul obinut i statistica rspunsurilor.

38 POO i Programare vizual (suport de curs) 5. Aplicaii orientate pe date 5.1. Structuri de date Construirea unei aplicaii ce gestioneaz un volum mare de date necesit o atenie parti cular privind organizarea acestor date. Sursele de date trebuie i ele integrate co respunztor ntr-o aplicaie OOP. Faptul c o stiv din clasa Stack este implementat ca vec tor sau nu, este de mic importan pentru programatorul pe platform .NET. Dar pentru o peraiile executate de o aplicaie ce monitorizeaz traficul dintr-o gar de triaj, este important de tiut dac trebuie memorat sau nu un istoric al acestor operaii, dac sun t folosite informaiile de acest tip n prelucrri ulterioare sau sunt doar listate su b form de rapoarte periodice, etc. Dac datele trebuie exportate ctre alte aplicaii, atunci se pune problema formatului n care vor fi salvate. Pentru coleciile consist ente de date care sufer prelucrri ample i frecvente se pune problema suportului de memorare astfel nct s suporte tehnici de acces rapide etc.

5.2. Colecii de date Colecia, n general, reprezint un ansamblu bine structurat de componente de acelai ti p, ansamblu ce permite identificarea rapid a oricrei componente din colecie. Definii a este aplicabil i coleciilor de date. Uneori, cloeciile de date sunt percepute ca d ate externe (aflate pe harddisc sau alte suporturi de memorare), dar asta nu exc lude posibilitatea organizrii datelor interne sub forma unor colecii. n C#, coleciil e sunt clase specializate aparinnd spaiului System.Collection. Despre colecii am mai vorbit n cadrul capitolului 3.11. Aducem unele completri n cele ce urmeaz vorbind d espre structuri generice de date. Atributul generic se refer la proprietatea de a r eferi o ntreag categorie de obiecte. Clasele, structurile, metodele, interfeele, de legaii i metodele pot fi generice, adic pot fi concepute astfel nct s depind de unul s u mai multe tipuri de date pe care acestea le memoreaz sau manipuleaz. De exemplu, la declararea unei clase obinuite, noi stabilim elementele fixe ale acesteia: nu mele i tipurile datelor, numele metodelor33 i altor componente ce formeaz clasa res pectiv. Pentru o funcie (metod) obinuit sunt definite att numele, ct i tipul parametr r funciei34. C# introduce, ncepnd de la versiunea 2.0, parametrizarea tipurilor, ad ic posibilitatea declarrii unor clase, metode etc. n care tipul datelor manevrate n u este cunoscut dect la apel. Acest tip de date constituie un parametru al clasei , metodei etc. Vom defini n mod obinuit i, paralel, n mod generic clasa Stiva (amint it i n capitolul 1.1) pentru a pune n eviden diferenele induse de modul de lucru ... g neric: class Stiva { class Stiva<T> { int[] st = new int[10]; int vf; public Stiva() { vf = -1; } public void Push(int x) { st[++vf] = x; } public int Pop() { return st[vf--]; }35 public void scrie( ) {for (int i = 0; i <= vf; i++) Console.Write(st[i]); Console.WriteLine(); } } 33 T[] st = new T[10]; int vf; public Stiva() { vf = -1; } public void Push(T x) { st[++vf] = x; } public T Pop()35 { return st[vf--]; } public void scrie() {for ( int i = 0; i <= vf; i++) Console.Write(st[i]); Console.WriteLine(); } } A nu se confunda capacitatea de a defini mai multe metode cu acelai nume cu faptu l c numele este bine determinat. A spune c numele nu este definit ar presupune un fel de declarare cu numele ... i abia la apel s se stabileasc ce nume este scris n l oc de ... 34 Numrul parametrilor este i el bine definit, dei funciile care au defini

t un parametru de tip tablou, permit apelul cu un numr variabil de parametri efec tivi. 35 Versiuni mai vechi de C nu execut conform ateptrilor returul valorii cu po stincrementare.

Aplicaii orientate pe date ... static void Main(string[] args) { Stiva s = new Stiva(); s.Push(7);s.Push(5) ; s.scrie(); Console.WriteLine(Ex{0},s.Pop()); s.scrie(); s.Push(7); s.scrie(); C onsole.WriteLine("Ex{0}",s.Pop()); s.scrie(); } 39 ... static void Main(string[] args) { Stiva<int> s = new Stiva<int>(); s.Push(7) ; s.Push(5); s.scrie(); Console.WriteLine("Ex{0}",s.Pop()); s.scrie(); s.Push(7) ; s.scrie(); Console.WriteLine("Ex{0}",s.Pop()); s.scrie(); } Dintre clasele generice predefinite, cele mai des utilizate sunt coleciile generice . Astfel, clasele i interfeele din spaiul System.Collection.Generic permit organiza rea datelor proprii, indiferent de tipul acestora, n structuri specifice cum ar f i: liste (List), liste dublu nlnuite (LinkedList), stive (Stack), cozi (Queue), dici onare (Dictionary) etc. De exemplu, dorim s gestionm un ansamblu de ferestre asemnto are, instaniate dintr-o aceeai clas MyForm (s zicem) derivat din System.Windows.Forms .Form. Putem memora n program sau ca element static al clasei MyForm o structur de tip list: List<MyForm> fer=new List<MyForm>()

La crearea oricrei ferestre f de tipul MyForm (MyForm f=new MyForm(); f.Show();) se adaug referina ferestrei n lista fer (fer.Add(f)). Analog, la nchiderea ferestrei , se va elimina referina acesteia din list (fer.Remove(f)). Exerciiu: Presupunem c i mplementm o aplicaie n care se completeaz datele unui pacient ntr-o fereastr. Pentru a nu ncrca ferestra curent, aceasta este proiectat s conin butoane ce permit deschidere unor ferestre secundare pentru completarea unor subcategorii de date (istoricul suferinelor cronice, analize efectuate, adresa detaliat etc.). De exemplu, n ferea str se completeaz numele pacientului, iar apoi, apsnd pe butonul Adresa, se deschide o fereastr ce permite completarea cmpurilor ce formeaz adresa, la nchiderea ferestr ei revenind la fereastra principal. Desigur, i o fereastr secundar poate avea la rndu l ei butoane pentru alte ferestre secundare n raport cu aceasta. Stabilii ce tip d e structur generic se poate utiliza pentru gestiunea ferestrelor deschise la un mo ment dat36.

5.3. ADO.NET ADO.NET (ActiveX Data Objects) reprezint o parte component a nucleului .NET Framew ork ce permite accesarea i manipularea datelor. Amintim c o surs de date poate fi: un fiier text, un fiier Excel sau XML, o baz de date Dbase, Access, SQL etc. Lucrul cu o surs de date se poate face fie conectat, fie deconectat de la sursa de date . ADO.NET implementeaz clase ce ofer servicii att pentru lucrul n stil deconectat ct i conectat, ofer instrumentele de utilizare i reprezentare XML, de combinare a date lor din diferite surse i de diferite tipuri (pe baz mecanismenlor de reprezentare comun implementate de .NET. Maniera de lucru deconectat recomand metoda ca fiind ma i eficient n proiectarea aplicaiilor pentru Internet dect alte tehnologii cum ar fi ADO sau ODBC. Deoarece exist mai multe tipuri de baze de date e nevoie de cte o bi bliotec specializat de clase i interfee care s implementeze un protocol specific pentr fiecare.

5.4. Conectarea la o surs de date nainte de orice operaie cu o surs de date extern, trebuie realizat o conexiune (legtur cu acea surs. Clasele din categoria Connection (SQLConnection, OleDbConnection e tc.) conin date referitoare la sursa de date (locaia, numele i parola contului de a cces, etc.), metode pentru deschiderea/nchiderea conexiunii, pornirea unei tranza cii etc. Aceste clase se gsesc n subspaii (SqlClient, OleDb etc.) ale spaiului System .Data. n plus, ele implementeaz interfaa IDbConnection. 36 punem accentul pe faptul c ferestrele sunt modale

40 POO i Programare vizual (suport de curs) Pentru deschiderea unei conexiuni prin program se poate instania un obiect de tip conexiune, precizndu-i ca parametru un ir de caractere coninnd date despre conexiun e. Dm dou exemple de conectare la o surs de date SQL respectiv Access: using System.Data.SqlClient; ... SqlConnection co = new SqlConnection(@"Data Sou rce=serverBD; Database=scoala;User ID=elev;Password=madonna"); co.Open(); ... us ing System.Data.OleDb; ... OleDbConnection con = new OleDbConnection(@"Provider= Microsoft.Jet.OLEDB.4.0; Data Source=C:\Date\scoala.mdb"); cn.Open(); ... Proprietile unei conexiuni ConnectionString (String): conine un string cu o succesi une de parametri de forma parametru=valoare, desprii prin ;. Parametrii pot fi: pro vider: specific furnizorul de date pentru conectarea la sursa de date. Acest furn izor trebuie precizat doar dac se folosete OLE DB .NET Data Provider, i nu se speci fic pentru conectare la SQL Server Data Source: se specific numele serverului de b aze de date sau numele fiierului de date Initial Catalog (Database): specific nume le bazei de date. Baza de date trebuie s se gseasc pe serverul dat n Data Source. Us er ID: specifica un nume de cont de utilizator care are acces de logare la serve r. Password: specific parola contului de mai sus. ConnectionTimeout (int): specif ic numrul de secunde pentru care un obiect de conexiune poate s atepre pentru realiz area conectrii la server nainte de a se genera o excepie. (implicit 15). Se poate s pecifica o valoare diferit de 15 n ConnectionString folosind parametrul Connect Ti meout, Valoarea Timeout=0 specific ateptare nelimitat. SqlConnection cn = new SqlConnection("Data Source=serverBD; Database=scoala;User ID=elev;Password=madonna; Connect Timeout=30"); Database (string): returneaz numele bazei de date la care sa fcut conectarea. Este necesar pentru a arta unui utilizator care este baza de date pe care se face opera rea Provider (string): returneaz furnizorul ServerVersion (string): returneaz vers iunea de server la care sa fcut conectarea. State (enumerare de componente Connect ionState): returneaz starea curent a conexiunii. Valorile posibile: Broken, Closed , Connecting, Executing, Fetching, Open. Metodele unei conexiuni Open(): deschid e o conexiune la baza de date Close() i Dispose(): nchid conexiunea i elibereaz toat e resursele alocate pentru ea BeginTransaction(): pentru executarea unei tranzaci i pe baza de date; la sfrit se apeleaz Commit() sau Rollback(). ChangeDatabase(): s e modific baza de date la care se vor face conexiunile. Noua baz de date trebuie s existe pe acelai server ca i precedenta. CreateCommand(): creeaz o comand (un obiect de tip Command) valid asociat conexiunii curente. Evenimentele unei conexiuni Sta teChange: apare atunci cnd se schimb starea conexiunii. Handlerul corespunztor (de tipul delegat StateChangeEventHandler) spune ntre ce stri s-a fcut tranziia. InfoMes sage: apare cnd furnizorul trimite un avertisment sau un mesaj ctre client.

Aplicaii orientate pe date 41 5.5. Executarea unei comenzi SQL Clasele din categoria Command (SQLCommand, OleDbCommand etc.) conin date referito are la o comand SQL (SELECT, INSERT, DELETE, UPDATE) i metode pentru executarea un ei comenzi sau a unor proceduri stocate. Aceste clase implementeaz interfaa IDbCom mand. Ca urmare a interogrii unei baze de date se obin obiecte din categoriile Dat aReader sau DataSet. O comand se poate executa numai dup ce s-a stabilit o conxiun e cu baza de date corespunztoare. SqlConnection co = new SqlConnection(@"Data Source=serverBD; Database=scoala;Use r ID=elev;Password=madonna"); co.Open(); SqlCommand cmd = new SqlCommand("SELECT * FROM ELEVI", con); Proprietile unei come nzi CommandText (String): conine comanda SQL sau numele procedurii stocate care s e execut pe sursa de date. CommandTimeout (int): reprezint numrul de secunde care t rebuie s fie ateptat pentru executarea comenzii. Dac se depeste acest timp, atunci se genereaz o excepie. CommandType (enumerare de componente de tip CommandType): rep rezint tipul de comand care se execut pe sursa de date. Valorile pot fi: StoredProc edure (apel de procedur stocat), Text (comand SQL obinuit), TableDirect (numai pentru OleDb) Connection (System. Data. [Provider].PrefixConnection): conine obiectul d e tip conexiune folosit pentru legarea la sursa de date. Parameters (System.Data .[Provider].PrefixParameterCollection): returneaz o colecie de parametri care s-au transmis comenzii; Transaction (System.Data.[Provider].PrefixTransaction): perm ite accesul la obiectul de tip tranzacie care se cere a fi executat pe sursa de d ate. Metodele unei comenzi Constructori: SqlCommand() sau SqlCommand(string Comm andText) sau SqlCommand(string CommandText, SqlConnection con ) sau SqlCommand(s tring CommandText,SqlConnection con,SqlTransaction trans) Cancel() oprete o coman d aflat n executare. Dispose() distruge obiectul comand. ExecuteNonQuery()execut o co mand care nu returneaz un set de date din baza de date; dac comanda a fost de tip I NSERT, UPDATE, DELETE, se returneaz numrul de nregistrri afectate. SqlCommand cmd = new SqlCommand(); cmd.CommandText = "DELETE FROM elevi WHERE nu me = BARBU"; cmd.Connection = con; Console.WriteLine(cmd.ExecuteNonQuery().ToStrin g()); //cte nreg.s-au ters ExecuteReader() execut comanda i returneaz un obiect de tip DataReader SqlCommand cmd = new SqlCommand("SELECT * FROM elevi",con); SqlDataReader reader = cmd.ExecuteReader(); while(reader.Read()) { Console.WriteLine("{0} - {1}", re ader.GetString(0),reader.GetString(1)); } reader.Close(); Metoda ExecuteReader() mai are un argument opional, CommandBehavior care descrie rezultatele i efectul asupra bazei de date: CloseConnection (conexiunea este nchis atunci cnd obiectul DataReader este nchis), KeyInfo (returnez informaie despre coloa ne i cheia primar), SchemaOnly (returnez doar informaie despre coloane), SequentialA ccess (pentru manevrarea valorilor binare cu GetChars() sau GetBytes()), SingleR esult (se returneaz un singur set de rezultate), SingleRow (se returneaz o singur l inie).

42 POO i Programare vizual (suport de curs) ExecuteScalar() execut comanda i returneaz valoarea primei coloane de pe primul rnd a setului de date rezultat; folosit pentru obinerea unor rezultate statistice SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM elevi",con); SqlDataReader reader = cmd.ExecuteScalar(); Console.WriteLine(reader.GetString(0)); ExecuteXmlReader() returneaz un obiect de tipul XmlReader obinut prin interogare SqlCommand CMD= new SqlCommand("SELECT * FROM elevi FOR XML MATE,EXAMEN", con); System.Xml.XmlReader myXR = CMD.ExecuteXmlReader();

5.6. Seturi de date Datele pot fi explorate n mod conectat (cu ajutorul unor obiecte din categoria Da taReader), sau pot fi preluate de la surs (dintr-un obiect din categoria DataAdap ter) i nglobate n aplicaia curent (sub forma unui obiect din categoria DataSet). Clas ele DataReader permit parcurgerea ntr-un singur sens a sursei de date, fr posibilit ate de modificare a datelor la surs. Dac se dorete modificarea datelor la surs, se v a utiliza ansamblul DataAdapter + DataSet. Un obiect DeatReader nu are construct or, ci se obine cu ajutorul unui obiect de tip Command i prin apelul metodei Execu teReader() (vezi exemplul de la pagina 41, jos). Evident, pe toat durata lucrului cu un obiect de tip DataReader, conexiunea trebuie s fie activ. Toate clasele Dat aReader (SqlDataReader, OleDbDataReader etc.) implementeaz interfaa IDataReader. P roprieti: IsClosed, HasRows, Item (indexator de cmpuri) i FieldCount Metode: Close() nchidere obiectului i eliberarea resurselor; trebuie s precead nchiderea conxiunii G etBoolean(), GetByte(), GetChar(), GetDateTime(), GetDecimal(), GetDouble(), Get Float(), GetInt16(), GetInt32(), GetInt64(), GetValue(), GetString() returneaz va loarea unui cmp specificat, din nergistrarea curent GetBytes(), GetChars() citirea unor octei/caractere dintrun cmp de date binar GetDataTypeName(), GetName() returne az tipul/numele cmpului specificat IsDBNull() returneaz true dac n cmpul specificat pr in index este o valoare NULL NextResult()determin trecerea la urmtorul rezultat st ocat n obiect (vezi exemplul) Read() determin trecerea la urmtoarea nregistrare, ret urnnd false numai dac aceasta nu exist; de reinut c iniial poziia curent este nainte mei ntrgistrri. SqlCommand cmd=new SqlCommand("select * from elevi;select * from profi", conn ); conn.Open (); SqlDataReader reader = cmd.ExecuteReader (); do { while ( reader. Read () ) {Console.WriteLine ( "{0}\t\t{1}", reader[0], reader[1] );} } while ( reader.NextResult () );

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

Aplicaii orientate pe date 43

Proprietile unui DataAdapter DeleteCommand, InsertCommand, SelectCommand, UpdateCo mmand (Command), conin comenzile ce se execut pentru selectarea sau modificarea da telor n sursa de date. MissingSchemaAction (enumerare) determin ce se face atunci cnd datele aduse nu se potrivesc peste schema tablei n care sunt depuse. Poate ave a urmtoarele valori: Add - implicit, DataAdapter adaug coloana la schema tablei Ad dWithKey se adug coloana i informaii relativ la cheia primar Ignore - se ignor lipsa coloanei respective, ceea ce duce la pierdere de date Error - se genereaz o excepi e de tipul InvalidOperationException. Metodele unui DataAdapter Constructoril: S qlDataAdapter(); sau SqlDataAdapter(obiect_comanda); sau SqlDataAdapter(string_comanda, conexiune); Fill() permite umplerea unei tabele dintrun obiect DataSet cu date. Permite speci ficarea obiectului DataSet n care se depun datele, eventual a numelui tablei din acest DataSet, numrul de nregistrare cu care s se nceap popularea (prima avnd indicele 0) i numrul de nregistrri care urmeaz a fi aduse. Update() permite transmiterea modi ficrilor efectuate ntrun DataSet ctre baza de date. Structura unui DataSet Un DataSe t este format din Tables (colecie format din obiecte de tip DataTable; DataTable e ste compus la rndul lui dintr-o colecie de DataRow i DataColumn), Relations (colecie de obiecte de tip DataRelation pentru memorarea legturilor printecopil) i ExtendedP roperties ce conine proprieti definite de utilizator. Scenariul uzual de lucru cu d atele dintr-o tabel conine urmtoarele etape: popularea succesiv a unui DataSet prin intermediul unuia sau mai multor obiecte DataAdapter, apelnd metoda Fill (vezi ex emplul de mai sus) procesarea datelor din DataSet folosind numele tabelelor stab ilite la umplere, ds.Tables["elevi"], sau indexarea acestora, ds.Tables[0], ds.T ables[1] actualizarea datelor prin obiecte comand corespunztoare operaiilor INSERT, UPDATE i DELETE. Un obiect CommandBuilder poate construi automat o combinaie de c omenzi ce reflect modificrile efectuate.

5.7. Proiectarea vizual a seturilor de date Mediul de dezvoltare Visual Studio dispune de instrumente puternice i sugestive p entru utilizarea bazelor de date n aplicaii. Conceptual, n spatele unei ferestre n c are lucrm cu date preluate dintr-una sau mai mlte tabele ale unei baze de date se afl obiectele din categoriile Connection, Command, DataAdapter i DataSet prezenta te. La vedere se afl controale de tip DataGridView, sau TableGridView, BindingNavig ator etc. Meniul Data i fereastra auxiliar Data Sources ne sunt foarte utile n lucr ul cu surse de date externe. S urmrim un scenariu de realizare a unei aplicaii simp le cu o fereastr n care putem vizualiza date dintr-o tabel, putem naviga, putem mod ifica sau terge nregistrri. Iniiem adugarea unei surse de date (Add New Source) Conf gurm cu atenie (asistai de vrjitor) conexiunea cu o surs de tip SQL sau Access; figura surprinde elemente de conectare la o baz de date Access, numit Authors, baz stocat p e harddiscul local. Selectm tabelele care ne intereseaz din baza de date i cmpurile din cadrul tabelei ce vor fi reinute n TableAdapter (din categoria DataAdapter) Cnd operaiunea se ncheie, date relative la baza de date la care ne-am conectat sunt i ntegrate n proiect i pictograma, ca i structura bazei de date apar n fereastra Data Source

44 POO i Programare vizual (suport de curs)

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 obiecte le de tip Dataset, TableAdapter, BindingSource, BindingNavigator i, n fereastr, Tab leGridView BindingNavigator este un tip ce permite, prin instaniere, construirea barei de navigare ce permite operaii de deplasare, editare, tergere i adugare n tabel . S observm c reprezentarea vizual a fiecrui obiect este nzestrat cu o sget n parte s, n dreapta. Un click pe aceast sgeat activeaz un meniu contextual cu lista principa lelor operaii ce se pot efectua cu obiectul respectiv. Meniul contextual asociat grilei n care vor fi vizualizate datele permite configurarea modului de lucru cu grila (sursa de date, operaiile permise i altele). n timpul rulrii aplicaiei, bara de navigare i elementele vizuale ale grilei permit o peraiile de baz cu nregistrrile bazei de date. Operaiile care modific baza de date tre buie s fie definitivate prin salvarea noilor date .

Programarea Web cu ASP .Net 2.0

CUPRINS CUPRINS ........................................................................ ......................................................................... 49 1. 1.1. 1.2. 1.3. 2. 2.1. 2.2. 3. ARHITECTURI SOFTWARE ............................ ........................................................................ 51 MODE LUL CLIENT- SERVER.............................................................. ............................................ 51 MODELUL MULTI-STRAT............. ................................................................................ ................. 52 APLICAII ORIENTATE SPRE SERVICII ........................... ................................................................ 54 PROTOCOALE D E REEA .......................................................................... ............................. 57 MODELUL DE REFERIN TCP/IP ....................... ......................................................................... 57 PRO TOCOLUL HTTP ................................................................... ................................................. 58 PROGRAMAREA CLIENT - SIDE.. ................................................................................ .......... 62 3.1. ELEMENTE AVANSATE DE HTML ................................... ............................................................. 62 3.1.1. Tabele.. ................................................................................ ............................................... 62 3.1.2. Frames (cadre) n HTML . ................................................................................ .................. 65 3.1.3. Formulare ......................................... ................................................................................ . 68 3.2. XML .................................................................. ......................................................................... 72 3.3 . CSS - CASCADING STYLE SHEETS (FOI DE STIL IN CASCADA) ........................ .............................. 73 4. PROGRAMAREA SERVER SIDE CU ASP.NET......... ......................................................... 76 4.1. SERVERUL IIS.. ................................................................................ ............................................ 76 4.2. CARACTERISTICI ALE ASP SI A SP .NET ........................................................................ ............. 76 4.3. CREAREA DE APLICAII WEB FOLOSIND ASP.NET................... .................................................. 78 4.3.1. Configurarea masini i de lucru pentru proiecte ASP.NET.............................................. .... 78 4.3.2. Proiectele ASP.NET in Visual Studio .NET cu C# .................. ........................................... 78 4.3.3. Formulare n ASP.NET ....... ................................................................................ ............... 79 4.3.4. Controale n ASP.NET ................................... .................................................................... 80 4.3.5. P astrarea informatiilor ......................................................... ............................................. 81 4.3.6. Navigarea intre Forms cu pastrarea informatiilor ....................................................... ..... 81 4.3.7. Securitatea n ASP.NET ........................................... .......................................................... 82 4.4. ADO.NET...... ................................................................................ ............................................. 83 4.4.1. Obiectele ADO.Net....... ................................................................................ ...................... 85 4.4.2. Configurare, mentenanta ....................... ............................................................................ 86 5. REFERINTE ................................................................... .............................................................. 88

Arhitecturi Software 51 1. Arhitecturi Software Dezvoltarea de aplicatii / programe software implica mai multe etape, programare a (scrierea de cod propriu-zisa) fiind doar una dintre ele si poate s insemne doa r aproximatv 25% din timpul total de dezvoltare. Etapele sunt: Analiza cerintelo r Proiectarea de nivel inalt (arhitectura) Proiectarea componentelor Implementar ea Testarea si validarea Punerea in functiune Intretinerea Proiectarea la nivel inalt, sau stabilirea arhitecturii are o importanta deosebita in acest proces, d eoarece alegerile facute aici determina derularea viitoarelor etape, implicit li mitele intre care se va programa efectiv aplicatia. Arhitectura este un model sc ris al unui sistem, care poate fi utilizat la construirea sistemului propriu-zis , i este formata din: Definirea scopului sistemului. Modelul de date. Diagrame de flux de date. Fluxul interfetei cu utilizatorul. Exista mai multe modele arhite cturale, dintre care putem aminti: Modelul client-server Multi-strat Aplicatii o rientate pe servicii 1.1. Modelul client- server Termenul client-server este folosit prima data in 1980, legat de calculatoarele dntr-o reea. Arhitectura software client-server este o infrastructur modular, bazat p e mesaje. Un client este definit ca un solicitant de servicii, iar serverul ca u n prestator de servicii. O masin (un calculator) poate fi in acelai timp att client ct i server n funcie de aplicaiile rulate. Precursoare ale modelului client-server a u fost arhitecturile de tip mainframe si file sharing. Propozitia precedenta nu e prea corecta, pentru ca se refera strict la modul in care erau utilizate calcu latoarele in trecut. Urmatoarele paragrafe nu prea au legatura cu modelul arhite ctural client-server, ci tot cu modul in care erau utilizate calculatoarele. In plus, sunt si niste erori in exprimare, cum ar fi Comunicarea ntre client i server se realizeaz prin intermediul interogarilor SQL sau a RPC (Remote Procedure Calls ). Una este SQL si cu totul altceva este RPC nu prea au legatura. n arhitectura ma inframe aplicaiile rulau pe un computer principal, iar utilizatorii interacionau c u acesta prntr-un terminal (blind terminal) care trimitea informaiile tastate. Lim itarile acestui tip de arhitectur constau n faptul c nu asigurau o interfat grafica cu utilizatorul (GUI) si nu puteau accesa baze de date distribuite in diferite l ocaii. Reelele de calculatoare iniiale se bazau pe arhitectura de tip partajare de fisiere (file-sharing) , n care serverul download-a fisiere (dntr-o locaie partajat a) pe calculatorul gazda. Aici se rulau aplicaiile (datele si procesarea lor). Vi teza de lucru era scazut, iar numarul maxim de utilizatori, care accesa simultan resursele partajate, era mic. Ca urmare a limitrilor arhitecturii de tip file-sha ring, a aparut modelul client server, n care serverul de fisiere a fost inlocuit de un server de baze de date. Prin utilizarea unui sistem de gestiune a bazelor de date (SGBD) se raspundea in mod direct cererilor utilizatorului. De asemenea se reduce traficul in retea prin returnarea unui raspuns la o interogare, fa de re turnarea unui ntreg fisier. Apar si interfatele grafice (GUI) pentru

52 Programare Web (suport de curs) accesul la baza de date partajata (interfee numite i front-end). Comunicarea ntre c lient i server se realizeaz prin intermediul interogarilor SQL sau a RPC (Remote P rocedure Calls). Modelul clientserver

Mecanismul RPC a aparut cu mai bine de doua decenii in urma in lumea Unix si est e folosit in construcia de aplicaii distribuite pe sisteme eterogene, avand la baz a tehnologiile Internet. O aplicatie RPC va consta dintr-un client si un server, serverul fiind localizat pe maina care execut procedura. Aplicaia client comunica prin reea via TCP/IP cu procedura de pe calculatorul aflat la distan, transmind argu entele i recepionnd rezultatele. Clientul i serverul se execut ca dou procese separate care pot rula pe calculatoare diferite din reea. In loc de ultimele 4 paragrafe, as insista mai mult pe niste modele client-server foarte cunoscute, cum ar fi: Windows Live Messenger. In acest caz, clientul este programul pe care il avem in stalat pe calculatorul personal cei care dorim s comunicam prin acest serviciu. S erver-ul (in acest caz programul server este instalat de fapt mai multe masini) este programul central care: o Are baza de date a utilizatorilor, adica a celor ca re au conturi de Windows Live. o Primeste mesaje de la clienti si le ruteaza, adic a le trimite mai departe catre clientul / clientii (in cazul unei conferinte) de stinatari. o Tine evidenta sesiunilor clientilor, adica stie tot timpul cand cinev a este logged in, cu Live Messenger pornit, respectiv cand iese. o Etc. Solutiil e de email, cum ar fi de exemplu serverul Exchange + Outlook. 1.2. Modelul multi-strat Arhitecturile multi-strat sunt acelea in care fiecare strat logic: Are un scop p recis. Isi vede numai de propriile responsabilitati. Stie exact modul de comunic are / interactiune cu straturile adiacente. In astfel de arhitecturi, este usor de separat anumite functionalitati care nu ar trebui s depinda unele de altele. D e exemplu, interfata cu utilizatorul, sau mai bine spus clasele / paginile care formeaza aceasta interfata, nu trebuie s stie cum anume se realizeaza accesul la ba za de date. Cu alte cuvinte, in clasele / paginile in care se afiseaza informati i,

Arhitecturi Software 53 nu este nevoie s avem cod care lucreaza cu baza de date. Astfel, se realizeaza o separare logica benefica pentru intelegerea mai usoara si intretinerea mai efici enta a software-ului. De exemplu, putem avea arhitecturi multi-strat pe 2 nivele (two tier architecture), in care s spunem ca interfaa cu utilizatorul este situat pe calculatorul utilizatorului sub forma unei aplicatii Windows (deci instalata pe calculator), iar sistemul de gestiune a bazelor de date pe un calculator mai puternic (server) care deserveste mai multi clienti O alta arhitectura pe 2 nive le poate fi o aplicatie web in care interfata propriu-zisa (paginile, codul de a fisare a informatiilor si de captare a datelor introduse de utilizator) este ins talata pe un server, iar baza de date pe un alt server. n arhitectura multi-strat pe 3 nivele (three tier architecture) se introduce un nou strat intre interfa i SG BD. Interfaa cu utilizatorul , procesarea, stocarea si accesarea datelor sunt mod ule separate, care se pot situa pe platforme diferite. Acest model asigur o flexi bilitate sporita, fiecare modul putand fi modificat independent de celelalte. Sp re exemplu schimbarea sistemului de operare din Windows n Linux poate afecta doar modulul de interfa. De obicei, interfaa cu utilizatorul ruleaz pe un alt calculator i folosete o interfa grafica standard (GUI), procesarea logica poate consta din unu l sau mai multe module care ruleaza pe un server de aplicatii, iar SGBD-ul rulea za pe un server de baze de date sau mainframe. Stratul de mijloc poate fi format la randul lui din mai multe nivele, caz in care arhitectura este numit multi str at cu n nivele (n-tier architecture). Cele 3 nivele sunt:

54 Programare Web (suport de curs) Nivelul de prezentare (presentation tier) sau interfaa cu utilizatorul: prezentar ea rezultatelor sistemului catre utilizator si preluarea de informatii de la uti lizator Nivelul logic de procesare (logic tier / business logic tier/ transactio n tier) : funcionalitatea specific aplicaiei. Nivelul de date (data tier): Interact iunea cu suportul datelor (baze de date, fisiere, servicii web, etc). 1.3. Aplicaii orientate spre servicii Pentru a discuta despre Arhitecturi Orientate pe Servicii (SOA), ar trebui s plec am mai intai de la definitia acestora. Din pacate nu exista o definitie universa l acceptat pentru SOA. Ceea ce se poate spune in schimb despre acest mode este c a prin intermediul lui se incearca descrierea unor arhitecturi bazate pe servici i slab interconectate care suporta modelarea proceselor de business si a necesit atilor utilizatorilor. Resursele aflate ntr-o retea sunt expuse ca servicii indepen dente care pot fi accesate fara cunostiinte apriori despre ceea ce rezida in spa tele lor: platforma, implementare, algoritmi, etc. Aceste concepte generice sunt valabile fie ca se vorbeste despre business-uri, software sau alte tipuri de si steme de tip consumator-producator. Dupa cum mentionam anterior, arhitecturile d e tip SOA nu impun utilizare unei anumite tehnologii [precum REST, RPC, DCOM, CO RBA sau Servicii Web]. Conceptul cheie care permite acest lucru este faptul ca s erviciile sunt independente, si pot fi apelate ntr-un mod standardizat pentru a-s i indeplini sarcinile pentru care au fost proiectate si implementate, fara ca se rviciul s fie nevoit s stie in prealabil nimic despre aplicatia care il invoca, sa u ca aplicatia care invoca serviciul s aib nevoie s inteleaga mecanismele interne p rin care serviciul isi duce la bun sfarsit rolul pentru care a fost definit. Put em astfel incerca s definim SOA ca fiind: o paradigma pentru organizarea si utili zarea capabilitatilor distribuite care pot s fie sub controlul unor entitati dife rite. Aceasta paradigma ofera o modalitate uniforma de descoperire si interactio anre. Conceptul de baza al SOA este aceala de interconectare slaba, realizat pri n constrangeri arhitecturale precum: - Fiecare serviciu ofera un set de interfet e simple si care ofera doar o semantica generala, si care este accesibila de cat re orice producator sau consumator interesat. - Intre interfetele diferitelor se rvicii se schimba doar mesaje care respecta o schema predefinita, dar extensibil a, prin intermediul carora se trimite doar continut si nu descriere comportament ala a sistemului. Cu alte cuvinte mesajul trebuie s aib o mare putere de descriere si nu una de comanda/instruire. Pe langa conceptul de interconectare slaba, mai e xista si urmatorele concepte referitoare la principiile unei arhitecturi de tip SOA: - Incapsularea Serviciului - Contractul Serviciului se refera la faptul ca serviciile sunt de acord s comunice pe baza unui agreement stipulat de catre unul sau mai multe servicii prin intermediul unor documente descriptive - Abstractiz area Serviciului un serviciu expune ceea ce face si nu cum o face - Refolosirea Serviciului in sine conceptul se serviciu implica reutilizare. Serviciile au fos t concepte pentru a putea s fie reutilizate. - Compunerea Serviciilor colectii de servicii pot s fie coordonate si asambalte astfel in cat s formeza un nou servici u, numit un serviciu compus. - Autonomia Serviciului un serviciu are control tot al asupra logicii pe care o incapsuleaza - Descoperirea Serviciilor serviciile s unt concepute astfel incat s isi descrie functionalitatea catre exterior, astfel in cat s poata fi gasite si folosite prin intermediul unor mecanisme de descoperire. Avand bazele puse pentru conceptul de SOA, in cele ce urmeaza se va incerca def inirea Serviciilor Web pe baza acestor concepte. Serviciile Web nu sunt altceva dect o

Arhitecturi Software 55 modalitate prin care o arhitectura SOA este realizate, folosind un anumit set de protocoale si restrictii. In cazul concret al Serviciilor Web, urmatoarele doua restrictii sunt impuse: - Interfetele serviciilor trebuie s fie construite peste protocoale din Internet, precum HTTP, FTP sau SMTP. - Exceptand atasamentele bi nare alea unor mesaje, toata comunicarea intre servicii trebuie s fie fcut prin mes aje in format XML. In momentul de fata exista doua mari clase de Servicii Web, s i anume: SOAP si REST. In cele ce urmeaza vom discuta despre Servicii Web de tip SOAP si infrastructuri oferite de platforma .NET pentru implementarea/dezvoltar ea, gazduira, rularea si mentenanta unor Servicii Web de tip SOAP. Decizia de a descrie mai indetaliu Serviciile Web de tip SOAP este aceea ca ele sunt recunosc ute de piata ca un standard defacto, fapt vizibil si prin adoptia majoritara a a cestora. SOAP este un acronim pentru Simple Object Access Protocol. Clasa de Ser vicii Web de tip SOAP aduce urmatoarele constrangeri fata de cele mentionate mai sus: - Cu exceptia atasamentelor binare, toate mesajele trebuie s fie transporta te prin intermediul SOAP. - Descrierea unui Serviciu Web se va face folosind un limbaj de markup numit WSDL Web Service Description Language. - Existenta regist relor UDDI (Universal Description Discovery and Integration) care au ca scop ind exarea Serviciilor Web. UDDI-ul permite interogarea s prin intermediul SOAP si fa ciliteaza accesul la WSDL-ul Serviciilor Web pe care le indexeaza. SOAP nu face altceva dect s defineasca un format pentru mesaje care pot fi trimise intre servic ii web deasupra unui numar de protocoale internet. Cu alte cuvinte, SOAP se comp orta ca un plic care muta continut dintr-un punct in altul. Pentru exemplificare , mai jos este un mesaj SOAP: <soap:Envelope xmlns:soap="http://schemas.xmlsoap. org/soap/envelope/"> <soap:Body> <obtineDetaliiCursant xmlns="http://www.example .com/WebService"> <IDCursant>C010030</IDCursant > </obtineDetaliiCursant > </soa p:Body> </soap:Envelope> Se poate observa in exemplul de mai sus structura unui mesaj de tip SOAP: Plicul: <soap:Envelope> Continutul acestui delimitat de: <soa p:Body> Odata cu dezvoltarea standardelor pentru Servicii Web de tip SOAP (de ac um incolo numit simplu Servicii Web) si cu adoptia lor pe piata, s-a facut simti ta nevoia unor standarde suplimentare pentru a putea exprima concepte precum sec uritatea, increderea si tranzactiile. O serie de firme din industria software au dezvoltat in consecinta o suita de standarde numite colectiv WS-* care trateaza aceste probleme. Telul acestor specificatii este acela de a oferi sabloane pent ru functionalitati avansate ale Serviciilor Web, totodata pastrand simplitatea n ativa a Serviciilor Web. Cea mai importanta trasatura a specificatiilor WS-* est e posibilitatea lor de a fi compuse. Compunearea protocoalelor asociate acestor specificatii permite o dezvoltare incrementala a Serviciilor Web, pe masura ce f unctionalitatea lor o cere (securitate, incredere, atasamente, tranzactii, desco perire, etc.). Individual fiecare specificatie rezolva o problema izolta, dar ca un compus, ele rezolva probleme de functionalitate ridicata adesea intalnite in aplicatii distribuite. Modelul acesta poate fi exprimat schematic astfel: -

56 Programare Web (suport de curs) In cele ce urmeaza se vor prezenta succint produsele din platforma Microsoft car e compun ecosistemul pentru construirea si mentenanta sistemlor distribuite impl ementate folosing Servicii Web. Constructia de Servicii Web se poate realiza - f olosind Microsoft Visual Studio 2005 in colaborare cu platforma .NET 2.0, prin i ntermediul carora se pot implementa servicii web care sunt in conformitate cu st andardul WS-Interoperability [WS-I]. Crearea serviciului este facila, partea de contract fiind generata automat pe partea serviciului, iar partea de proxy fiind deasemenea generata automat pe partea de client. Suportul pentru descoperire es te deasemenea integrat prin suportarea protocolului UDDI. - folosind Web Service Enhancements 3.0 [WSE 3.0] in colaborare cu VS2005 si .NET 2.0, se pot realiza Servicii Web care sunt in conformitate cu ultimele specificatii ale WS-*. WSE 3. 0 este oferit ca un pachet care se integreaza perfect cu suita de dezvoltare VS 2005. WSE 3.0 aduce suport in cadrul platformei .NET 2.0 pentru XML, SOAP, WSDL, WS-Security, WS-Trust, WS-SecureConversation, WSAddressing si MTOM - folosind p latforma .NET 3.0 care aduce un set nou de API-uri printre care si Windows Commu nication Foundation, API care permite un model unificat de programare si rulare a Serviciilor Web folosind limbaje managed, precum C#. WCF aduce suport integral pentru toate standardele recunoscute cat si cele mai populare adoptate de piata , numarand astfel urmatoarele: o pentru trimiterea mesajelor: XML, SOAP, WS-Addr essing o pentru descrierea interfetelor (asa numita MetaData): WSDL, WSMetadataE xchange, WS-Policy, WS-SecurityPolicy o pentru securitate: WS-Trust, WS-Security , WS-SecureConversation o pentru incredere: WS-ReliableMessaging pentru tranzact ii: WS-Coordination si WS-AtomicTransactions

Protocoale de reea 57

2. Protocoale de reea 2.1. Modelul de referin TCP/IP Pana n anii 60, comunicarea ntre computere se realiza greoi prin intermediul linii lor telefonice. n 1962 Paul Baran i Donald Davies propun independent ideea unui si stem de comunicare ntre reele bazat pe comutarea de pachete packet switching. Acea st arhitectura a fost implementat de ARPANET, o reea de calculatoare sponsorizat de DoD (Department of Defence). Arhitectura a devenit cuoscut mai trziu sub denumirea de modelul de referin TCP/IP, dup numele celor dou protocoale fundamentale utilizat e. Protocolul TCP (Transfer Control Protocol) se refera la modalitatea de transm itere a informatiei, iar protocolul IP (Internet Protocol) se refera la modealit atea de adresare. Dat fiind ngrijorarea DoD c o parte din gazde, routere i pori de in terconectare ar putea fi distruse la un moment dat, un obiectiv major a fost ca reeaua s poat supravieui pierderii echipamentelor din subreea, fr a ntrerupe conversa existente. Cu alte cuvinte, DoD dorea ca, atta timp ct funcionau maina surs i maina d stinaie, conexiunile s rmn intacte, chiar dac o parte din maini sau din liniile de tra smisie erau brusc scoase din funciune. Mai mult, era nevoie de o arhitectur flexib il, deoarece se aveau n vedere aplicaii cu cerine divergente, mergnd de la transferul de fiiere pn la transmiterea vorbirii n timp real. Toate aceste cerine au condus la alegerea unei reele cu comutare de pachete bazat pe un nivel inter-reea fr conexiuni. Acest nivel, numit nivelul internet (IP), este axul pe care se centreaz ntreaga a rhitectur. Rolul su este de a permite gazdelor s emit pachete n orice reea i face ca p chetele s circule independent pn la destinaie. Pachetele pot chiar s soseasc ntr-o ord ne diferit fa de cea n care au fost trimise, caz n care rearanjarea cade n sarcina niv elurilor de mai sus (acele nivele ce urmeaza s proceseze pachetele primite). Fiecare computer conectat la internet are o adresa de IP unic. Adresele IP sunt s ub forma nnn.nnn.nnn.nnn, unde nnn trebuie s fie un numr ntre 0 i 255. Spre exemplu, la momentul redactarii acestui document, www.microsoft.com are ip-ul 207.46.192 .254. Fiecarui calculator i este asociat o adres de loopback 127.0.0.1, care nseamna acest calculator. 127.0.0.1 se mai numete i localhost. n anii 80 au fost conectate la Arpanet un numr foarte mare de reele. Aceast situaie a determinat, n 1984, crearea sistemului DNS (Domain Name System), prin intermediul cruia calculatoarele erau organizate n domenii, punndu-se n coresponden adresele IP cu numele gazdelor. Nivelul de transport sau TCP ataeaz pachetelor trimise un numr de port al serviciului dest inatar i direcioneaz pachetele care ajung, ctre o anumit aplicaie. Fiecare serviciu co munic pe un anumit port. Porturile sunt numere ntregi care permit unui computer s f ac diferena ntre comunicaiile internet ce au loc la un anumit moment dat. Numerele p orturilor sunt cuprinse intre 0 si 65535 si sunt impartite in doua clase: cele p ana la 1024 sunt rezervate pentru sistemul de operare, iar cele peste 1024 sunt disponibile dezvoltatorilor. Prin prezenta porturilor si deoarece aplicatiile ca re deservesc diferite servicii pe un sistem ruleaza pe porturi diferite, putem a vea servicii care ruleaza concomitent pe

58 Programare Web (suport de curs) acelasi calculator. Astfel, pe un sistem (server) pot rula concomitent aplicatii server si pentru protocolul HTTP cat si pentru protocolul FTP. Un server poate deservi clienti atat ai serviciului sau HTTP cat si a celui FTP, deoarece poate deosebi pachetele adresate celor doua servicii pe baza portului catre care sunt trimise. Cele mai comune porturi sunt: FTP : 20/21, Telnet: 23, HTTP: 80, Micros oft SQL Server:1433. Printre protocoalele de nivel aplicatie, enumeram cateva di n cele mai cunoscute: HTTP, FTP, Telnet, SMTP, SSL, POP3, IMAP, SSH etc. HTTP (H yper Text Transfer Protocol) este un protocol client - server n care clienii (brow serele web) trimit o cerere unui server web. Dup ce serverul returneaz elementele cerute (imagini, text etc.) conexiunea dintre client i server este ntrerupt. Acest lucru nseamn c dup ce elementele cerute sunt descarcate pe calculatorul utilizatorul ui, iar browserul descoper ca are nevoie de o alta resursa de pe server, se reali zeaz o nou cerere ctre acesta. Acest lucru nseamn c HTTP nu este orientate pe conexiun e (connection-oriented). FTP (File Transfer Protocol) faciliteaz transferul de fii ere ntre dou calculatoare din internet. SMTP (Simple Mail Transfer Protocol) este un protocol folosit pentru schimbul de mesaje de pot electronic. Telnet este un pro tocol care permite unui utilizator s se conecteze de la un calculator la altul. S SL (Secure Socket Layer) este un protocol folosit pentru transmiterea de date te xt criptate in internet. Modelul TCP/IP este nrudit cu modelul de referin OSI (Open Systems Interconnection). Modelul OSI este format din 7 straturi asigurnd astfel mai mult flexibilitate. Acest model nu este folosit nsa n practic, rmnnd mai mult un odel teoretic. In figura de mai jos se poate vedea sitva de comunicare propusa d e modelul ISO/OSI cu cele 7 nivele ale sale. Nivelul cel mai de jos reprezinta n ivelul fizic al retelei, iar nivelul cel mai de sus reprezinta nivelul aplicatie . In aceasta arhitectura multi-nivel, fiecare nivel comunica doar cu nivelele ad iacente: la transmiterea de date, datele pleaca din nivelul aplicatiei, iar fiec are nivel comunica doar cu nivelul imediat de sub el; la primirea de date, fieca re nivel comunica doar cu nivelul imediat de deasupra lui. 2.2. Protocolul HTTP Unul dintre cele mai importante i de succes servicii ale Internetului, World-Wide Web-ul mai pe scurt Web sau spaiul WWW, a fost instituit la CERN (Centre Europen

Protocoale de reea 59 pour la Recherche Nuclaire Centrul European de Cercetri Nucleare de la Geneva) n an ul 1989. Web ul a aprut din necesitatea de a permite cercettorilor rspndii n lume s aboreze utiliznd colecii de rapoarte, planuri, desene, fotografii i alte tipuri de documente aflate ntr-o continu dezvoltare. Comunicaia dintre clientul web (browseru l) i serverul web are loc n felul urmtor: procesul server Web (spre exemplu Microso ft IIS Internet Information Services) ascult portul TCP 80 al mainii gazde pentru a rspunde eventualelor cereri de conexiune venite de la clieni. Dup stabilirea conexi unii TCP, clientul care a iniiat conexiunea trimite o cerere (de exemplu un docum ent HTML), la care serverul trimite un rspuns (documentul cerut sau un mesaj de e roare). Dup trimiterea rspunsului conexiunea dintre client i server se ncheie. Cerer ile clientului i rspunsurile serverului Web sunt descrise de protocolul HTTP (Hype r Text Transfer Protocol). Etapele care se parcurg ntre cerere i rspuns sunt: 1. Br owserul determina URL ul cerut de utilizator. 2. Browserul ntreab serverul local D NS adresa IP a mainii pe care se afl pagina cu URL-ul selectat. 3. Serverul DNS co munic browserului adresa IP cerut. 4. Browserul stabilete o conexiune TCP cu portul 80 al serverului cu IP ul obinut anterior. 5. Utiliznd conexiunea TCP, browserul trimite o comand GET. 6. Serverul web rspunde trimind un fiier HTML. 7. Serverul Web n chide conexiunea TCP. 8. Browserul afieaz textul din fiierul HTML trimis. 9. Browse rul cere i afieaz i celelalte elemente necesare n pagin (de exemplu imaginile). Exempl u de cerere din partea clientului: GET / HTTP/1.1 Host: www.live.com Exemplu de rspuns al serverului: HTTP/1.1 200 OK Date: Wed, 15 Aug 2007 09:49:56 GMT Server: Microsoft-IIS/6.0 P3 P:CP="BUS CUR CONo FIN IVDo ONL OUR PHY SAMo TELo" S:WEBA12 X-Powered-By: ASP.NE T X-AspNet-Version: 2.0.50727 Set-Cookie: mktstate=E=&P=&B=; domain=live.com; pa th=/ Set-Cookie: mkt1=norm=-ro; domain=live.com; path=/ Set-Cookie: mkt2=ui=ro-r o; domain=www.live.com; path=/ Set-Cookie: lastMarket=ro-ro; domain=.live.com; p ath=/ Set-Cookie: lastMktPath=ro/ro; domain=.live.com; path=/ Set-Cookie: frm=tr ue; domain=.live.com; expires=Mon, 04-Oct-2021 19:00:00 GMT; path=/ Set-Cookie: frm=true; domain=.live.com; expires=Mon, 04-Oct-2021 19:00:00 GMT; path=/ CacheControl: no-cache Pragma: no-cache Expires: -1 Content-Type: text/html; charset= utf-8 Content-Length: 5939 Metodele puse la dispoziie de protocolul HTTP sunt: HEAD clientul cere numai ante tul paginii

60 Programare Web (suport de curs) GET - clientul cere serverului s trimit pagina specificat POST - trimite date pentr u a fi procesate pe server PUT inlocuiete coninutul paginii specificate cu datele trimise de client DELETE solicit tergerea paginii specificate TRACE permite client ului s vad cum sunt prelucrate mesajele OPTIONS returneaz metodele HTTP suportate d e server CONNECT - convertete conexiunea de tip cerere ntr-un tunel TCP/IP , de ob icei pentru a facilita comunicaii securizate prin SSL (HTTPS).

Formularele HTML sunt folosite pentru ca utilizatorii s introduc date n cmpurile ace stora i s le transmit serverului Web (utiliznd browserul, o conexiune TCP i protocolu l HTTP). Cele mai rspndite servere Web sunt : IIS (Internet Information Server) de la Microsoft. Este inclus ca parte component a sistemelor de operare Microsoft ( Windows NT Server, Windows 2000 Server i Windows Server 2003). Apache (open sourc e). Pentru a transmite date serverului se poate folosi metoda GET sau metoda POS T. Metoda implicit este GET. Dac se utilizeaz GET, datele transmise serverului pot fi vizualizate n bara de adrese a browserului, ele urmnd dup URL-ul fiierului ce coni ne scriptul care le va prelucra. Datele introduse de utilizator vor fi sub forma de perechi nume=valoare. Caracterul ? semnific faptul c se transmit date ctre serv er, iar perechile nume=valoare pot fi separate prin caracterul &. De exemplu pen tru a cauta informaii referitoare la ASP.NET n Live Search, se poate folosi url-ul : http://search.live.com/results.aspx?q=ASP.NET. Metoda POST permite ca transmit erea datelor ctre server s se fac n flux, putndu-se transmite cantiti mari de date. De asemenea, datele trimise nu mai sunt afiate n bara de adrese a browserului, lucru util cnd se transmit informaii confideniale. La nivelul serverului, datele primite de la browser (via HTTP) sunt prelucrate de un script, o aplicatie sau chiar un framework: CGI (Common Gateway Interface). Reprezinta o serie de script-uri exec utate pe serverul web. Acestea pot fi scrise in orice limbaj de programare (inte rpretat sau compilat) cu respectarea urmatoarelor restrictii: programul scrie da tele la iesirea standard si genereaza antete care permit serverului Web s interpr eteze corect iesirea scriptului, conform specificatiilor HTTP. PHP (iniial Person al Home Page apoi PHP: Hypertext Preprocessor) i ASP (Active Server Pages). ASP ( Active Server Pages) este o platform de programare Web creat de Miscrosoft. Lucrea z bine cu serverul IIS, dar exist versiuni i pentru alte servere Web. Desi difera d in punct de vedere al sintaxei, atat PHP cat si ASP sunt interpretate, codul lor fiind stocat in fisiere externe cu extensia .php/.asp. De fapt, ASP nu ofera un limbaj nou, ci se bazeaza pe limbajele VBScript si JScript. Un fisier PHP/ASP p oate fi combinat cu date de tip text, marcatori HTML si comenzi script. in momen tul executiei, in urma cererii unui client Web, fisierul este procesat, fiecare script din cadrul lui este interpretat si rezultatul executiei este introdus ina poi in fisierul static HTML inainte ca rezultatul s fie trimis catre client (brow ser web). Aceste modele completeaza destul de bine suportul dezvoltarii aplicati ilor Web, insa aduc unele limitari: sunt lente deoarece la fiecare accesare fisi erele sunt procesate si interpretate (in loc s fie compilate), nu sunt capabile s construiasca controale reutilizabile care s incapsuleze functionalitati complexe pentru interactiunea cu utilizatorul Perl (Practical Extraction and Report Langu age) este un limbaj de programare complex, precursor al PHP JSP (JavaServer Page s) este o platform de programare Web creat de Sun Microsystems i face parte din spe cificaia Java 2 Entreprise Edition (J2EE).

Protocoale de reea 61 JSP utilizeaz sintaxa XML i o serie de clase i funcii Java. Codul JSP este compilat de servlet-uri binare pentru o procesare rapid. Server-side scripting reprezint pro gramarea comportamentului serverului, iar client-side scripting se refera la progr amarea comportamentului browserului de pe client. Programarea la nivel de client se realizeaz n special prin JavaScript.

62 Programare Web (suport de curs) 3. Programarea client - side Unul din primele elemente fundamentale ale WWW ( World Wide Web ) este HTML (Hyp ertext Markup Language), care descrie formatul primar in care documentele sint d istribuite si vazute pe Web. Multe din trasaturile lui, cum ar fi independenta f ata de platforma, structurarea formatarii si legaturile hipertext, fac din el un foarte bun format pentru documentele Internet si Web. Standardul oficial HTML e ste stabilit de World Wide Web Consortium (W3C), care este afiliat la Internet E ngineering Task Force (IETF). W3C a enuntat cateva versiuni ale specificatiei HT ML, printre care si HTML 2.0, HTML 3.0,HTML 3.2, HTML 4.0 si, cel mai recent, HT ML 4.01. In acelasi timp, autorii de browsere, cum ar fi Netscape si Microsoft, au dezvoltat adesea propriile "extensii" HTML in afara procesului standard si le -au incorporat in browserele lor. In unele cazuri, cum ar fi tagul Netscape , ac este extensii au devenit standarde de facto adoptate de autorii de browsere. 3.1. Elemente avansate de HTML 3.1.1. Tabele Tabelele ne permit s cream o retea dreptunghiulara de domenii, fiecare domeniu av and propriile optiuni pentru culoarea fondului, culoarea textului, alinierea tex tului etc. Pentru a insera un tabel se folosesc etichetele corespondente <table> ...</table>. Un tabel este format din randuri. Pentru a insera un rand ntr-un tab el se folosesc etichetele <tr>...</tr> ("table row "= rand de tabel ). Un rand e ste format din mai multe celule ce contin date. O celula de date se introduce cu eticheta <td>..</td>. <html> <head> <title>tabel</title> </head> <body> <h1 align=center>Un tabel simp lu format din 4 linii si 2 coloane</h1> <hr> <table> <tr> <td>c11</td> <td>c11</ td> </tr> <tr> <td>c21</td> <td>c22</td> </tr> <tr> <td>c31</td> <td>c32</td> </ tr> <tr> <td>c41</td> <td>c42</td> </tr> </table> </body> </html>

Programarea client - side 63 In mod prestabilit, un tabel nu are chenar. Pentru a adauga un chenar unui tabel , se utilizeaza un atribut al etichetei <tabel> numit border. Acest atribut poat e primi ca valoare orice numar intreg ( inclusiv 0 ) si reprezinta grosimea in p ixeli a chenarului tabelului. Daca atributul border nu este urmata de o valoare atunci tabelul va avea o grosime prestabilita egala cu 1 pixel, o valoare egala cu 0 a grosimii semnifica absenta chenarului. Cand atributul border are o valoar e nenula chenarul unui tabel are un aspect tridimensional. <table border="2"> <tr> <td>c11</td> <td>c11</td> </tr> </table> Pentru a alinia un tabel ntr-o pagina Web se utilizeaza atributul align al etiche tei <table>, cu urmatoarele valori posibile: " left " ( valoarea prestabilita ), " center " si "right ". Alinierea este importanta pentru textul ce inconjoara t abelul. Astfel : daca tabelul este aliniat stanga ( <table align="left"> ), atun ci textul care urmeaza dupa punctul de inserare al tabelului va fi dispus in par tea dreapta a tabelului. daca tabelul este aliniat dreapta ( <table align="right "> ), atunci textul care urmeaza dupa punctul de inserare al tabelului va fi dis pus in partea stanga a tabelului. daca tabelul este aliniat pe centru ( <table a lign="center"> ), atunci textul care urmeaza dupa punctul de inserare al tabelul ui va fi afisat pe toata latimea paginii, imediat sub tabel. Culoarea de fond se stabileste cu ajutorul atributului bgcolor, care poate fi atasat intregului tab el prin eticheta <table>, unei linii prin eticheta <tr> sau celule de date prin eticheta <td>. Valorile pe care le poate primi bgcolor sunt cele cunoscute pentr u o culoare. Daca in tabel sunt definite mai multe atribute bgcolor, atunci prio ritatea este urmatoarea: <td>, <tr>, <table> ( cu prioritate cea mai mica ). <html> <head> <title>tabel</title> </head> <body> <h1 align=center>Un tabel simp lu colorat</h1> <hr> <table border="3" bgcolor="green"> <tr> <td>verde 11</td> < td bgcolor="red">rosu 11</td> </tr> <tr bgcolor="blue"> <td>albastru 21</td> <td bgcolor="yellow">galben 22</td> </tr> <tr bgcolor="cyan"> <td>c31</td> <td>c32< /td> </tr> <tr> <td>c41</td> <td bgcolor="white">c42</td> </tr> </table>

64 </body> </html> Programare Web (suport de curs) Culoarea textului din fiecare celula se pote stabili cu ajutorul expresiei: <fon t color="valoare">...</font>. Distanta dintre doua celule vecine se defineste cu ajutorul atributului cellspacing al etichetei <table>.Valorile acestui atribut pot fi numere intregi pozitive, inclusiv 0, si reprezinta distanta in pixeli din tre doua celule vecine. Valorea prestabilita a atributului cellspacing este 2. D istanta dintre marginea unei celule si continutul ei poate fi definita cu ajutor ul atributului cellpadding al etichetei <table>.Valorile acestui atribut pot fi numere intregi pozitive, si reprezinta distanta in pixeli dintre celule si conti nutul ei. Valorea prestabilita a atributului cellpadding este 1. Dimensiunile un ui tabel - latimea si inaltimea - pot fi stabilite exact prin intermediul a doua atribute, width si height, ale etichetei <table>.Valorile acestor atribute pot fi: numere intregi pozitive reprezentand latimea respectiv inaltimea in pixeli a tabelului; numere intregi intre 1 si 100, urmate de semnul %, reprezentand frac tiunea din latimea si inaltimea totala a paginii. <html> <head> <title>tabel</title> </head> <body> <h1 align=center>Text</h1> <ta ble width="100%" height="100%"> <tr> <td align="center"> <h2>Text centrat.</h2> </td> </tr> </table> </body> </html> Un tabel poate avea celule cu semnificatia de cap de tabel. Aceste celule sunt i ntroduse de eticheta <th> ( de la " tabel header " = cap de tabel ) in loc de <t d>. Toate atribute care pot fi atasate etichetei <td> pot fi de asemenea atasate etichetei <th>. Continutul celulelor definite cu <th> este scris cu caractere a ldine si centrat. Alinierea pe orizontala a continutului unei celule se face cu ajutorul atributului align care poate lua valorile: left ( la stanga ); center ( centrat , valoarea prestabilita ); right ( la dreapta ); char ( alinierea se fa ce fata de un caracter ). Alinierea pe verticala a continutului unei celule se f ace cu ajutorul atributului valign care poate lua valorile: baseline ( la baza ) ; bottom ( jos ); middle ( la mijloc, valoarea prestabilita ); top ( sus ). Aces te atribute pot fi atasate atat etichetei <tr> pentru a defini tuturor elementel or celulelor unui rand, cat si etichetelor <td> si <th> pentru a stabili alinier ea textului ntr-o singura celula.

Programarea client - side 65 Un tabel trebuie privit ca o retea dreptunghiulara de celule.Cu ajutorul a doua atribute ale etichetelor <td> si <th>, o celula se poate extinde peste celule ve cine. Astfel: extinderea unei celule peste celulele din dreapta ei se face cu aj utorul atributului colspan, a carui valoare determina numarul de celule care se unifica. extinderea unei celule peste celulele dedesubt se face cu ajutorul atri butului rowspan, a carui valoare determina numarul de celule care se unifica. Su nt posibile extinderi simultane ale unei celule pe orizontala si pe verticala. I n acest caz , in etichetele <td> si <th> vor fi prezente ambele atribute colspan si rowspan. <html> <head> <title>table</title> </head> <body> <h1 align=center>Un tabel simp lu cu chenar</h1> <hr> <table border="0"> <tr> <td rowspan="3">c11</td> <br>c21< br>c31</td> <td>c12</td> <td colspan="2" rowspan="3">c13 , c4</td> <br>c23, c24< br>c33, c34</td> </tr> <tr> <td>c22</td> </tr> <tr> <td>c32</td> </tr> <tr> <td> c41</td> <td colspan="3">c42, c43, c44</td> </tr> </table> </body> </html> Daca un tabel are celule vide, atunci aceste celule vor aparea in tabel fara un chenar de delimitare. In scopul de a afisa un chenar pentru celule vide se utili zeaza &nbsp n interiorul unei celule: dupa <td> se pune &nbsp;; dupa <td> se pune <br>. Caracterul &nbsp; ( no breakable space ) este de fapt caracterul spatiu.U n spatiu introdus prin intermediul acestui caracter nu va fi ignorat de browser. 3.1.2. Frames (cadre) n HTML Ferestrele sau (cadrele) ne permit s definim in fereastra browserului subferestre in care s fie incarcate documente HTML diferite.Ferestrele sunt definite ntr-un f isier HTML special , in care blocul <body>...</body> este inlocuit de blocul <fr ameset>...</frameset>. In interiorul acestui bloc, fiecare cadru este introdus p rin eticheta <frame>.

66 Programare Web (suport de curs) Un atribut obligatoriu al etichetei <frame> este src, care primeste ca valoare a dresa URL a documentului HTML care va fi incarcat in acel frame. Definirea cadre lor se face prin impartirea ferstrelor (si a subferestrelor) in linii si coloane : impartirea unei ferstre ntr-un numar de subferestre de tip coloana se face cu a jutorul atributului cols al etichetei <frameset> ce descrie acea fereastra; impa rtirae unei ferestre ntr-un numar de subferestre de tip linie se face cu ajutorul atributului rows al etichetei <frameset> ce descrie acea fereastra; valoare atr ibutelor cols si rows este o lista de elmente separate prin virgula , care descr iu modul in care se face impartirea. Elementele listei pot fi: un numar intreg d e pixeli; procente din dimensiunea ferestrei (numar intre 1 si 99 terminat cu %) ; n* care inseamna n parti din spatiul ramas; Exemplu 1: cols=200,*,50%,* inseam na o impartire in 4 subferestre, dintre care prima are 200 pixeli, a treia ocupa jumatate din spatiul total disponibil , iar a doua si a patra ocupa in mod egal restul de spatiu ramas disponibil. Exemplu 2: cols=200,1*,50%,2* inseamna o imp artire in 4 subferestre , dintre care prima are 200 pixeli , a treia ocupa jumat ate din spatiul total disponibil iar a doua si a patra ocupa in mod egal restul de spatiu ramas disponibil, care se imparte in trei parti egale , a doua fereast ra ocupand o parte , iar a patra ocupand 2 parti. Observatii: daca mai multe ele mente din lista sunt configurate cu * , atunci spatiul disponibil ramas pentru e le se va imparti in mod egal. o subfereastra poate fi un cadru (folosind <frame> )in care se va incarca un document HTML sau poate fi impartita la randul ei la a lte subfereste (folosind <frameset>). <html> <head> <title>frames</title> </head> <frameset cols="*,*"> <frame src="f1 .html"> <frame src="f2.html"> </frameset> </html> In exemplul urmator este creata o pagina Web cu trei cadre mixte.Pentru a o crea se procedeaza din aproape in aproape. Mai intai, pagina este impartita in doua subferestre de tip coloana, dupa care a doua subfereastra este impartita in doua subferestre de tip linie. <html> <head> <title>frames</title> </head> <frameset cols="20%,*"> <frame src=" p1.html"> <frameset rows="*,*"> <frame src="p2.html"> <frame src="p3.html"> </fr ameset> </frameset> </html> Pentru a stabili culoarea chenarului unui cadru se utilizeaza atributul borderco lor. Acest atribut primeste ca valoare un nume de culoare sau o culoare definita in conformitate

Programarea client - side 67 cu modelul de culoare RGB.Atributul bordercolor poate fi atasat atat etichetei < frameset> pentru a stabili culoarea tuturor chenarelor cadrelor incluse,cat si e tichetei <frame> pentru a stabili culoarea chenarului pentru un cadru individual . Atributul border al etichetei <frameset> permite configurarea latimii chenarel or tuturor cadrelor la un numar dorit de pixeli. Valoarea prestabilita a atribut ului border este de 5 pixeli. O valoare de 0 pixeli va defini un cadru fara chen ar. <html> <head><title>frames</title></head> <frameset cols="20%,*" bordercolor="green" bo rder="15"> <frame src="p1.html"> <frameset rows="*,*"> <frame src="p2.html" bord ercolor="blue"> <frame src="p3.html"> </frameset> </html> Pentru a obtine cadre fara chenar se utilizeaza border="0". In mod prestabilit, chenarul unui cadru este afisat si are aspect tridimensional. Afisarea chenarulu i unui cadru se poate dezactivata daca se utilizeaza atributul frameborder cu va loare "no". Acest atribut poate fi atasat atat etichetei <frameset> (dezactivare a fiind valabila pentru toate cadrele incluse) cat si etichetei <frame> (dezacti varea fiind valabila numai pentru un singur cadru). Valorile posibile ale atribu tului frameborder sunt: "yes" -echivalent cu 1; "no" echivalent cu 0; <html> <head><title>frames</title></head> <frameset cols="20%,*" border="0"> <fr ame src="p1.html"> <frameset rows="*,*"> <frame src="p2.html"> <frame src="p3.ht ml"> </frameset> </html> Atributul scrolling al etichetei <frame> este utilizat pentru a adauga unui cadr u o bara de derulare care permite navigarea in interiorul documentului afisat in interiorul cadrului. Valorile posibile sunt: yes - barele de derulare sunt adau gate intotdeauna; no - barele de derulare nu sunt utilizabile; auto - barele de derulare sunt vizibile atunci cand este necesar <html> <head><title>frames</title></head> <frameset cols="*,*,*"> <frame src="p. html" scrolling="yes" noresize> <frame src="p.html" scrolling="no" noresize> <fr ame src="p.html" scrolling="auto" noresize> </frameset> </html> Atributul noresize al etichetei <frame> (fara nici o valoare suplimentara) daca este prezent, inhiba posibilitatea prestabilita a utilizatorului de a redimensio na cadrul cu ajutorul mouse-ului. Un cadru intern este specificat prin intermedi ul blocului <iframe>...</iframe>. Un cadru intern se insereaza ntr-o pagina Web i n mod asemanator cu o imagine sau in modul in care se specifica marcajul <frame> , asa cum rezulta din urmatorul exemplu: <iframe src="iframes_ex.html" height=40% width=50%> </iframe> In acest caz fereastra de cadru intern care are 40%din inaltimea si 50% din lati mea paginii curente.

68 Programare Web (suport de curs) Atributele aceptate de eticheta <iframe> sunt in parte preluate de la etichetele <frame> si <frameset>, cum ar fi:src,border,frameborder,bordercolor,marginheigh t,marginwidth,scrolling,name,noresize; sau de la eticheta <img> vspace,hspace,al ign,width,height; In mod prestabilit, la efectuarea unui clic pe o legatura noua pagina (catre care indica legatura) o inlocuieste pe cea curenta in aceeasi fer eastra (acelasi cadru). Acest comportament se poate schimba in doua moduri: prin plasarea in blocul <head>...</head> a unui element <base> care precizeaza,prin atributul target numele ferestrei (cadrului) in care se vor incarca toate pagini le noi referite de legaturile din pagina curenta conform sintaxei: <base target= "nume_ferastra/frame_de_baza"> prin plasarea in eticheta <a> a atributului targe t, care precizeaza numele ferestrei (cadrului) in care se va incarca pagina nou referita de legatura, conform sintaxei: <a href="legatura" target="nume_fereastr a/frame">...</a> Daca este prezent atat un atribut target in <base> cat si un at ribut target in <a>, atunci cele precizate de atributul target din <a> sunt prio ritare. Numele unui cadru este stabilit prin atributul name al etichetei <frame> conform sintaxei: <farme name="nume_frame"> In exemplul urmator este prezentata o pagina Web cu doua cadre. Toate legaturile din cadrul 1 incarca paginile in c adrul 2. <html> <head><title>frames</title></head> <frameset cols="20%,*"> <frame src="le ft.html" name="left"> <frame src="p.html" name="main"> </frameset> </html> <html > <head><title>frame_left</title> </head> <body> <a href="p1.html" target="main" > Fisierul1</a><br> <a href="p2.html" target="main"> Fisierul2</a><br> <a href=" p3.html" target="main"> Fisierul3</a><br><br> <a href="p1.html" target="_blank"> Fis1 ntr-o fereastra noua</a><br><br> <a href="p1.html" target="_self"> Fis1 in fereastra curenta</a><br><br> <a href="p.html" target="main"> Home</a><br> </body> </html> Atributul target al etichetei<frame> accepta anumite valori : "_self" (incarcare a noii pagini are loc in cadrul curent); "_blank" (incarcarea noii pagini are lo c ntr-o fereastra noua anonima); "_parent" (incarcarea noii pagini are loc in cad rul parinte al cadrului curent daca acesta exista, altfel are loc in fereastra b rowserului curent); "_top" (incarcarea noii pagini are loc in fereastra browseru lui ce contine cadrul curent); 3.1.3. Formulare Un formular este un ansamblu de zone active alcatuit din butoane, casete de sele ctie, campuri de editare etc. Formularele asigura construirea unor pagini Web ca re permit utilizatorilor s introduca informatii si s le transmita serverului. Form ularele pot varia de la o simpla caseta de text , pentru introducerea unui sir d e caractere pe post de cheie de

Programarea client - side 69 cautare, pana la o structura complexa, cu multiple sectiuni, care ofera facilita ti puternice de transmisie a datelor. Un formular este definit ntr-un bloc delimitat de etichetele corespondente <form> si </form>. Exista doua atribute importante ale elementului <form>. 1. Atributul action prec izeaza ce se va intampla cu datele formularului odata ce acestea ajung la destin atie. De regula , valoarea atributului action este adresa URL a unui script afla t pe un server WWW care primeste datele formularului , efectueaza o prelucrare a lor si expedieaza catre utilizator un raspuns. <form action="http://www.yahoo.c om/cgi-bin/nume_fis.cgi">. Script-urile pot fi scrise in limbajele Perl, C, PHP, Unix shell. etc 2. Atributul method precizeaza metoda utilizata de browser pent ru expedierea datelor formularului. Sunt posibile urmatoarele valori: get (valoa rea implicita). In acest caz , datele din formular sunt adaugate la adresa URL p recizata de atributul action; (nu sunt permise cantitati mari de date - maxim 1 Kb ) post In acest caz datele sunt expediate separat. Sunt permise cantitati mar i de date (ordinul MB) Majoritatea elementelor unui formular sunt definite cu aj utorul etichetei <input>. Pentru a preciza tipul elementului se foloseste atribu tul type al etichetei <input>. Pentru un camp de editare, acest atribut primeste valoarea "text". Alte atribute pentru un element <input> sunt: atributul name , permite atasarea unui nume fiecarui element al formularului. atributul value ,ca re permite atribuirea unei valori initiale unui element al formularului. Un buto n de expediere al unui formular se introduce cu ajutorul etichetei <input>, in c are atributul type este configurat la valoarea "submit".Acest element poate prim i un nume prin atributul name. Pe buton apare scris "Submit Query" sau valoarea atributului value, daca aceasta valoare a fost stabilita. <form method="post" ac tion="mailto:youremail@youremail.com" > First:<input type="text" name="First" si ze="12 maxlength="12" /> Last:<input type="text" name="Last" size="24" maxlength ="24" /> <input type="submit" value="Send Email" /> </form> Pentru elementul <input> de tipul camp de editare (type = "text") , alte doua at ribute pot fi utile: atributul size specifica latimea campului de editare depase ste aceasta latime, atunci se executa automat o derulare acestui camp; atributul maxlength specifica numarul maxim de caractere pe care le poate primi un camp d e editare; caracterele tastate peste numarul maxim sunt ignorate. Daca se utilizeaza eticheta <input> avand atributul type configurat la valoarea "password" , atunci in formular se introduce un element asemanator cu un camp de editare obisnuit (introdus prin type="text"). Toate atributele unui camp de edi tare raman valabile. Singura deosebire consta in faptul ca acest camp de editare nu afiseaza caracterele in clar, ci numai caractere *, care ascund de privirile altui utilizator aflat in apropiere valoarea introdusa ntr-un asemenea camp. La expedierea formularului insa, valoarea tastata ntr-un camp de tip "password" se t ransmite in clar.

70 Programare Web (suport de curs) <html> <head><title>forms</title></head> <body><h1>Un formular cu un buton reset </h1> <hr> <form action=mailto:test@yahoo.com" method="post"> Nume:<input type=" text" name="nume" value="Numele"><br> Prenume:<input type="text" name="prenume" value="Prenumele"><br> Password:<input type="password" name="parola" ><br> <inpu t type="reset" value="sterge"> <input type="submit" value="trimite"> </form></bo dy> </html> Butoanele radio permit alegerea , la un moment dat , a unei singure variante din mai multe posibile. Butoanele radio se introduc prin eticheta <input> cu atribu tul type avand valoarea "radio". Italian: <input type="radio" name="food" /> Greek: <input type="radio" name="foo d" /> Chinese: <input type="radio" name="food" /> O caseta de validare (checkbox) permite selectarea sau deselectarea unei optiuni . Pentru inserarea unei casete de validare se utilizeaza eticheta <input> cu atr ibutul type configurat la valoarea "checkbox". Fiecare caseta poate avea un nume definit prin atributul name.fiecare caseta poate avea valoarea prestabilita "se lectat" definita prin atributul checked. <p>Please select every sport that you play.</p> Soccer: <input type="checkbox" c hecked="yes" name="sports" value="soccer" /> <br /> Football: <input type="check box" name="sports" value="football" /> <br /> Baseball: <input type="checkbox" n ame="sports" value="baseball" /> <br /> Basketball: <input type="checkbox" check ed="yes" name="sports" value="basketball" /> Intr-o pereche "name = value" a unui formular se poate folosi intregul continut al unui fisier pe post de valoare. Pentru aceasta se insereaza un element <input > ntr-un formular , cu atributul type avand valoarea "file" (fisier). Atributele pentru un element de tip caseta de fisiere: atributul name permite atasarea unui nume atributul value primeste ca valoare ad resa URL a fisierului care va fi expediat o data cu formularul. Aceasta valoare poate fi atribuita direct atributului value, se poate fi tastata ntr-un camp de e ditare ce apare o data cu formularul sau poate fi selectata prin intermediul une i casete de tip File Upload sau Choose File care apare la apasarea butonului Bro wse... din formular; atributul enctype precizeaza metoda utilizata la criptarea fisierului de expediat.Valoarea acestui atribut este "multipart/form-data". O lista de selectie permite utilizatorului s aleaga unul sau mai multe elemente dn tr-o lista finita. Lista de selectie este inclusa in formular cu ajutorul etiche telor corespondente <select>si </select>. O lista de selectie poate avea urmatoa rele atribute:

Programarea client - side 71 atributul name, care ataseaza listei un nume (utilizat in perechile "name=value" expediat serverului); atributul size, care precizeaza (prntr-un numar intreg poz itiv , valoarea prestabilita fiind 1) cate elemente din lista sunt vizibile la u n moment dat pe ecran (celelalte devenind vizibile prin actionarea barei de deru lare atasate automat listei). Elementele unei liste de selectie sunt incluse in lista cu ajutorul etichetei <o ption>. Doua atribute ale etichetei option se dovedesc utile: atributul value primeste ca valore un text care va fi expediat serverului in per echea "name=value"; daca acest atribut lipseste , atunci catre server va fi expe diat textul ce urmeaza dupa <option>; atributul selected (fara alte valori) perm ite selectarea prestabilita a unui elemment al listei. <select> <option>Bucuresti -- B</option> <option>Craiova -- DJ</option> <option selected="yes">Iasi -- IS</option> </select> O lista de selectie ce permite selectii multiple se creeaza intocmai ca o lista de selectie obisnuita. In plus, eticheta <select> are un atribut multiple (fara alte valori). Cand formularul este expediat catre server pentru fiecare element selectat al listei care este se insereaza cate o pereche "name=value" unde name este numele listei. <select multiple=yes size=3 name=orase> <option>Bucuresti -- B</option> <option>Craiov a -- DJ</option> <option selected="yes">Iasi -- IS</option> </select> Intr-un formular campuri de editare multilinie pot fi incluse cu ajutorul etiche tei <textarea>. Eticheta are urmatoarele atribute: atributul cols, care specifica numarul de caractere afisate ntr-o linie; atributu l rows, care specifica numarul de linii afisate simultan; atributul name, care p ermite atasarea unui nume campului de editare multilinie; atributul wrap, (de la "word wrap"=trecerea cuvintelor pe randul urmator0, care determina comportament ul campului de editare fata de sfarsitul de linie. Acest atribut poate primi urm atoarele valori: a) " off "; in acest caz: intreruperea cuvintelor la marginea d reapta a editorului se produce numai cand doreste utilizatorul; caracterul de sf arsit de linie este inclus in textul transmis serverului o data cu formularul; b ) " hard "; in acest caz: se produce intreruperea cuvintelor la marginea dreapta a editorului ; caracterul de sfarsit de linie este inclus in textul transmis se rverului o data cu formularul; c) " soft "; in acest caz: se produce intrerupere a cuvintelor la marginea dreapta a editorului ; nu se include caracterul de sfar sit de linie in textul transmis serverului o data cu formularul;

72 Programare Web (suport de curs) <textarea cols="20" rows="5" wrap="hard"> As you can see many times word wrappin g is often the desired look for your textareas. Since it makes everything nice a nd easy to read. </textarea> <textarea cols="20" rows="5" wrap="hard" readonly=" yes"> As you can see many times word wrapping is often the desired look for your text areas. Since it makes everything nice and easy to read. </textarea> Intr-u n formular pot fi afisate butoane.Cand utilizatorul apasa un buton, se lanseaza in executie o functie de tratare a acestui eveniment. Limbajul HTML nu permite s crierea unor astfel de functii (acest lucru este posibil daca se utilizeaza limb ajele Javascript sau Java). Pentru a insera un buton ntr-un formular, se utilizea za eticheta <input> avand atributul type configurat la valoarea "button".Alte do ua atribute ale elementului "button" sunt: atributul name, care permite atasarea unui nume butonului atributul value, care primeste ca valoare textul ce va fi a fisat pe buton. Toate elementele cuprinse ntr-un formular pot avea un atribut dis abled care permite dezactivarea respectivului element si un atribut readonly car e interzice modificarea continutului acestor elemente. 3.2. XML Xml (eXtensible Markup Language) este un limbaj care permite definirea documente lor ce contin informatii ntr-un mod structurat. Informatia structurata dintr-un d ocument xml are atat continut (cuvinte, imagini, etc.), cat si o indicatie despr e rolul pe care il are acel continut (de exemplu continutul din sectiunea header are alt rol fata de cel din footer, care la randul lui e diferit de continutul dintr-un tabel al unei baze de date). Toate documentele au o anumita structura. Aceste structuri se construiesc utilizand marcatori. W3.org se ocupa de standard izarea XML-ului, si specificatiile complete ale acestui limbaj se afla la adresa http://www.w3.org/TR/WD-xml . In HTML, atat multimea de tag-uri (marcatori), ca t si semantica asociata fiecarui tag sunt predefinite. Spre exemplu <H1> va repr ezenta intotdeauna un header de nivel 1, iar tagul <documentHTML> nu are nici un sens (nu are asociata nici o valoare semantica). Standardul XML nu specifica ni ci semantica si nici multimea de tag-uri ale limbajului. De fapt XML este un met alimbaj pentru definirea limbajelor bazate pe marcatori (markup language). Cu al te cuvinte XML permite definirea de tag-uri precum si relatia dintre acestea. De oarece nu exista o multime de tag-uri predefinita, nu exista nici o semantica as ociata cu acestea. Definirea semantica documentelor XML este o sarcina a aplicat iilor care folosesc documentelor respective sau a foilor de stiluri Avantaje XML : XML descrie continutul si modul de afisare al continutului; informatia este ma i usor de gasit si manipulat daca este in format XML; XML ofera facilitati multi ple si imbunatatite de prezentare (de exemplu folosind browserele) Structura unui document XML este arborescent: <book> <title>My First XML</title> <prod id="33-657" media="paper"></prod> <chap ter>Introduction to XML <para>What is HTML</para> <para>What is XML</para> </cha pter> <chapter>XML Syntax <para>Elements must have a closing tag</para> <para>El ements must be properly nested</para> </chapter> </book>

Programarea client - side 73 <book> este elementul rdcin (root), title, prod i chapter sunt frai (siblings) i sunt copii (child) lui book. 3.3. CSS - Cascading Style Sheets (foi de stil in cascada) Stilurile pun la dispozitia creatorilor de site-uri noi posibilitati de personal izare a paginilor Web. Un stil reprezinta un mod de a scrie un bloc de text ( ad ica anumite valori pentru font, marime culoare, aliniere, distante fata de margi ni etc). Exista doua modalitati de a defini un stil: sintaxa CSS (Cascading Styl e Sheets); sintaxa Javascript. O foaie este construit din reguli de stil care spu n unui browser cum s arate un document. Regulile de stil sunt formate dup cum urme az: selector { property: value } Declaraiile de stil multiple pentru un singur sel ector pot fi desprite de punct i virgul: selector { property1: value1; property2: va lue2 } Ca exemplu, urmtorul segment de cod definete proprietile culoare (color) i mrim e-font (font-size) pentru elementele H1 i H2: <head> <title>exemplu css</title> < style> h1 { font-size: x-large; color: red } h2 { font-size: large; color: blue } </style> </head> Orice element HTML este un posibil selector CSS1. Selectorul este elementul care este legatla un stil particular. De exemplu, selectorul n declaraia CSS: P { text indent: 3em }, este P. Declaraiile CSS pot fi introduse ntr-o pagina HTML n 3 modur i: inline, intern i extern. 1) Declaraia inline se realizez cu ajutorul tag-ului st yle. De exemplu: <p style="background: blue; color: white;">A new background and font color with inline CSS</p> La modul general declaraia este de forma: <htmlta g style="cssproperty1: value; cssproperty2: value;"> </htmltag> O eroare des ntlni t este folosirea n interiorul declaraiei de mai sus: <p style="background: url("yellow_rock.gif");">Greit</p> <p style="background: ur l(yellow_rock.gif);">Corect</p> 2) Declaraia intern se realizeaz cu ajutorul tag-ul ui <style> ... </style> <html> <head> <style type="text/css"> p {color: white; } body {background-color: black; } </style> </head> <body> <p>White text on a bla ck background!</p> </body> </html>

74 Programare Web (suport de curs) 3) Declaraia extern. Atunci cnd se folosete CSS este de preferat s se separe codul HT ML de cosdul CSS. De aceea, declaraiile CSS se pun de obicei ntr-un fiier separat, cu extensia .css . Avantajele unei asemenea abordari sunt: separarea coninutului paginii de design, crescnd lizibilitatea codului html modificarea uoar a design-ulu i unui site prin modificarea ntr-un singur fiier css dect in mai multe pagini html reutilizarea uoar a codului css Declaraia extern se realizeaz prin intermediul tag-ul ui <link></link>: <html> <head> <link rel="stylesheet" type="text/css" href="tes t.css" /> </head> <body> <h3> A White Header </h3> <p> This paragraph has a blue font. The background color of this page is gray because we changed it with CSS! </p> </body> </html> Fiierul test.css trebuie s se afle n acelai director cu pagina html. n CSS se pot def ini aa numitele clase. Un simplu selector poate avea diferite clase, astfel permind u-i aceluiai element s aib diferite stiluri. Toate tagurile din pagina HTML cu acee ai clas vor fi formatate identic. p.html { color: #191970 } p.css { color: #4b0082 } Exemplul de mai sus a creat dou clase, css i html pentru folosirea cu tag-ul P al HTML. Caracteristica CLASS (clas) este folosit n HTML pentru a indica clasa unui element, ca de exemplu, <P CLASS = html>Doar o clas este permis pentru un selecto r. </P> <P CLASS = css> De exemplu, p.html.css este invalid.</P> <P CLASS = html >Acest rnd are aceeai culoare cu primul. </P> Clasele pot fi declarate fr un element asociat: .note { font-size: small } n acest caz, clasa note poate fi folosit cu orice element.

Selectorii ID sunt sunt desemnai cu scopul de a defini elemente n mod individual i nu mai multe elemente o dat ca n cazul claselor. Un selector ID este desemnat folo sind indicatorul "#" care precede un nume. De exemplu, un selector ID ar putea f i desemnat astfel: #text3M { text-indent: 3em } La acest selector se va face ref erin n HTML folosind caracteristica ID: <P ID=text3M>Textul are n fa un spaiu de mrim a trei litere m </P> O proprietate este desemnat unui selector pentru a-i manipula stilul. Exemplele d e proprieti includ color, margin, i font.

Programarea client - side 75

Pentru a descrie formatrile repetate ntr-o foaie de stil, gruparea selectorilor i a declaraiilor este permis. De exemplu, toate titlurile dintr-un document ar putea primi declaraii identice prntr-o grupare: H1, H2, H3, H4, H5, H6 {color: red; font -family: sans-serif } Toi selectorii care sunt interpui n cadrul altor selectori vo r moteni valorile proprietilor selectorilor n cadrul crora sunt interpui, dac nu se sp cific altfel. De exemplu, o culoare definit pentru BODY va fi aplicat i textului din tr-un paragraf. Exist i cazuri n care selectorul coninut nu motenete valorile selector ului care l conine, dar acestea ar trebui s se evidenieze n mod logic. De exemplu, pr oprietatea margin-top nu este motenit; n mod intuitiv, un paragraf nu va avea aceeai margine de sus cum o va avea tot documentul (prin selectorul body). O list compl et a selectorilor CSS putei gsi la http://www.w3schools.com/css/default.asp

76 Programare Web (suport de curs) 4. Programarea server side cu ASP.NET 4.1. Serverul IIS Microsoft Internet Information Services (IIS) este serverul de aplicatii web al Microsoft. El este o componenta a Windows XP: Add/Remove Programs -> Add/Remove Windows Components. 4.2. Caracteristici ale ASP si ASP .NET ASP (Active Server Pages) reprezint o tehnologie creat de Microsoft pentru a crea pagini web dinamice, ce are la baz stocarea si execuia scripturilor pe serverul We b. Serverele Web care suporta tehnologia ASP sunt n numr de dou: PWS - Personal Web Server (Windows 98, Me) si IIS Internet Information Server (Windows NT, 2000 si ulterior). Principalele caracteristici ale tehnologiei ASP sunt: Permite accesa rea si actualizarea usoar a bazelor de date; Vitez mare de execuie; Securitate ridi cat, datorit faptului c scriptul nu poate fi vizualizat n browser; Generarea dinamic a rspunsurilor ctre clienii WEB, etc. Microsoft .NET este o platforma de dezvoltare software, care are menirea de a oferi programatorilor un mediu in care sunt pus e la dispozitie diverse servicii cum sunt: managementul firelor de executie, man agementul duratei de viata a obiectelor (Garbage Collection), tratarea exceptiil or, etc; si care determina o viteza mult mai mare a dezvoltarii aplicatiilor dect direct pe platforma Win32, adica direct pe sistemul de operare Windows. Inovaia adus de Microsoft, const n dezvoltarea unei platforme comune pentru mai multe limba je de programare, platform care permite dezvoltarea unei aplicaii n orice limbaj do reste programatorul. Acest lucru este posibil prin dezvoltarea unui interpretor Comon Language Runtime care transform codul de program dintr-un limbaj oarecare, compatibil cu platforma .NET, n limbajul Microsoft Intermediate Language. Codul r ezultat n limbajul Microsoft Intermediate Language, se poate apoi compila pentru orice sistem de operare care are instalat .NET Framework. Paginile web dinamice create cu ajutorul ASP pot ngloba mai multe tipuri de tehnologii Web existente. D e asemenea, scripturile din fisierele ASP pot fi si ele de mai multe tipuri :vbs cript, javascript, active server) Caracteristicile principale ale platformei .NET, sunt: Permite integrarea usoar a aplicaiilor Windows cu cele de WEB;

Programarea server side cu ASP.NET 77 Faciliteaz interoperabilitatea ntre aplicaii, indiferent de platforma pentru care s unt create; Asigur serializarea/deserializarea obiectelor; Asigur un mediu stabil de programare obiectual; Instalare simplificat, fr conflicte ntre versiuni; Execuia se curizat a codurilor; Utilizeaz standardele existente pentru comunicare; nlocuirea m ediului script cu cel compilat, n cazul aplicaiilor ASP Codul de program al unei a plicaii, scris ntr-un anumit limbaj de programare, poate fi integrat fr probleme n al t aplicaie, scris n alt limbaj de programare, etc.;

Printre limbajele care suport .NET, n primul rnd trebuie amintite cele dezvoltate d e Microsoft VB .NET, C# .NET, Visual C++ .NET, ct si limbaje dezvoltate de alte f irme: Borland C#, Cobol, Eiffel, Perl, Phython, Smalltalk, Pascal, Fortran, etc. Limbajele de programare dezvoltate de Microsoft, desi au toate la baz aceeasi pl atform, pot fi clasificate n funcie de gradul de complexitate: VB .NET, este cel ma i accesibil, fiind o evoluie a mediului Visual Basic 6.0; C# .NET, este un limbaj hibrid ntre complexitatea limbajului C++ si accesibilitatea oferit de limbajul VB . NET; VC ++ .NET este cel mai complex, fiind o evoluie a mediului VC++ 6.0. ASP .N ET reprezint o evoluie a ASP bazat pe o nou tehnologie dezvoltat de Microsoft, si anu me platforma: .NET Framework. Tehnologia ASP .NET, aduce mbuntiri semnificative fa de ASP, cele mai evidente fiind urmtoarele: Execuia este mai rapid; Este independent d e programul de navigare pe Internet; Codul aplicaiei este compilat si executat de server; acesta, n cazul ASP, este interpretat pe msura parcurgerii scripturilor; Utilizeaz noiunea de code behind, adic separ partea de prezentare de partea de execui e a unei aplicaii WEB; Favorizeaz reutilizarea codului, ceea ce n cazul ASP simplu, era o problem, singura reutilizare care se fcea n ASP, fiind aceea de copiere a codu lui; Serializarea/deserializarea cu usurin a obiectelor; Asigur interoperabilitatea ntre aplicaii WEB, ntre aplicaii WEB si alte categorii de aplicaii; Securitate cresc ut; Datorit platformei .NET, pot fi nglobate cu usurin n aplicaiile WEB toate componen ele care erau pn acum caracteristice doar mediului Windows. Microsoft ASP .NET est e urmtoarea generaie a tehnologiei de dezvoltare a aplicaiilor Web. Ea preia tot ce este mai bun de la Active Server Pages (ASP) la fel ca si serviciile bogate si facilitile oferite de Common Language Runtime (CLR) si multe alte faciliti noi. Rezu ltatul este o nou modalitate de dezvoltare web rapid, scalabil si robust care permit e o mare flexibilitate cu foarte puine linii de cod scrise. Web Forms reprezint pa rtea central pe care se bazeaz ASP .NET. Acestea reprezint elementele de interfa cu u tilizatorul care dau aplicaiilor web aspectul si comportamentul dorit. Formularel e Web sunt similare formularelor Windows prin faptul c ofer proprieti, metode si eve nimente controalelor plasate pe ele. Totusi, aceste elemente de interfa sunt afisa te prin intermediul limbajului HTML, iar n cazul utilizrii Microsoft Visual Studio .NET poate fi folosit interfaa familiar de tip drag-and-drop pentru crearea aspect ului formularelor Web. Formularele Web sunt constituite din dou componente: parte a vizual (fisierul .ASPX) si codul din spatele formularului, care este stocat n fi siere separate.

78 Programare Web (suport de curs) 4.3. Crearea de aplicaii WEB folosind ASP.NET Pentru a crea aplicaii web cu ASP.NET avem nevoie de urmtoarele instrumente softwa re: Microsoft Internet Information Services (IIS) este serverul de aplicatii web al Microsoft. El este o componenta a Windows XP: Add/Remove Programs -> Add/Rem ove Windows Components. Visual WebDeveloper 2005 Express Edition - este un mediu integrat de dezvoltare, care cuprinde inclusiv unelte de design al Form-urilor web, unelte de debug si deployment. Colectia de namespaces System.Web. Acestea s unt parte integranta a .NET Framework si include clase predefinite care se ocupa de chestiuni specifice aplicatiilor web. Controalele HTML si server sunt compon ente ale interfetei cu utilizatorul care sunt folosite pentru a afisa respectiv colecta informatii catre / dinspre utilizatori. Limbajul de programare C#. ADO.N ET sunt clase predefinite care se ocupa de managementul datelor accesul la date in baze de date ODBC si Microsoft SQL Server. 4.3.1. Configurarea masinii de lucru pentru proiecte ASP.NET Va trebui s aveti instalate IIS si Visual WebDeveloper 2005 Express Edition, care instaleaza automat si .NET Framework si inregistreaza ASP.NET in IIS. Atentie: daca ati instalat IIS dupa .NET Framework, nu veti putea rula aplicatii ASP.NET. Pentru a face totusi asta, trebuie s rulati din linia de comanda fisierul aspnet _regiis.exe cu optiunea i, din directorul C:\WINDOWS\Microsoft.NET\Framework\v1.1 .4322. 4.3.2. Proiectele ASP.NET in Visual Studio .NET cu C# Un proiect ASP.NET poate fi creat cu ajutorul Visual WebDeveloper 2005 Express E dition: File -> New Web Site -> ASP.NET Web Site. Se alege la opiunea Language li mbajul C#. Se creaza automat de catre IDE urmatoarele fisiere: Un Form care este de fapt un fisier Default.aspx, care poate fi vizualizat in doua moduri: Design si HTML. Acesta contine cod HTML si aici pot fi asezate prin design contoalele care ruleaza la nivel de server. Fiecare fisier .aspx are asociat unul de tip .c s, unde este codul din spatele Form-ului, adica codul care este executat la nive l de server. Se poate ajunge la acel fisier cu click dreapta pe Form si View Cod e. Acest fisier are atasate automat cateva namespaces (folosind cuvantul cheie d in limbajul C# using), printre care se pot observa si cele din familia System.We b. Web.config acesta este un fisier XML in care se pot seta mai multe informatii de configurare a aplicatiei web. In general, el este folosit pentru securitate (autentificare), dar si pentru stocarea unor informatii gen constante care s poat a fi regasite din codul executabil. Avantajele stocatii unor astfel de constante in web.config sunt: modificarile in acest fiser nu atrag dupa sine necesitatea de recompilare a aplicatiei, respectiv informatiile sunt ntr-un singur loc si pot fi modificate cu usurinta. (n fereastra soluion explorer, click dreapta pe websit e1, add existing item i apoi web.config) In general, se recomanda ca designul apl icatiilor (din punct de vedere al ingineriei software si nu vizual) s respecte an umite criterii. Astfel, daca ne gandim la modelul arhitectural pe mai multe nive le: User Interface Layer Form-uri web, in care se fac afisari si de unde se prei au informatii de la utilizator. Business Layer clase in care se efectueaza opera tiile specifice aplicatiei.

Programarea server side cu ASP.NET 79 Data Access Layer clase care se ocupa cu accesul la baza de date si trimiterea i nformatiilor in nivelele superioare. ASP.NET vine cu cateva controale predefinit e, in plus fata de cele HTML, numite si controale server, numite asa deoarece tr atarea evenimentelor la care acestea raspund se executa pe server. Visual Studio .NET 2005 are o interfat care permite manipularea facila a acestora din Toolbox. ASP.NET 2.0 vine cu peste 50 de noi astfel de controale. Toolbox-ul este alcatu it din tab-urile Standard, Data, Validation, Navigation, Login, WebParts, HTML s i General. Fiecare tab contine controale specifice. In ASP.NET 2.0, majoritatea controalelor dispun de Smart Tasks (sau Common Tasks). Acestea, in functie de co ntrolul in cauza, permit formatarea controalelor cu stiluri predefinite, atasare a de date, setarea modului de vizualizare etc. Observati ca atunci cand introduc eti controale ntr-un Form web, in codul "din spatele acestuia", adica in fisierul .cs asociat, se produc niste modificari: se creaza un nou obiect, in functie de ce anume ati adaugat, ca instanta al uneia dintre clasele din spatiul de nume S ystem.Web.UI.WebControls. Exista controale folosite la afisare de date: Labels, TextBoxes; dar in mod curent se folosesc si unele pentru afisarea unor colectii de informatii, cum ar fi: ListBoxes, DropDownLists si GridViews. Acestea din urm a se folosesc foarte mult in aplicatii de management al informatiilor, cum ar fi de exemplu una de biblioteca, unde se poate dori afisarea tuturor cartilor dint r-un anumit domeniu, etc. Controalele sunt caracterizate prin: Proprietati (ID-u l controlului, Text, Font, Activare etc.) Evenimente predefinite la care stiu s r aspunda (de exemplu, butoanele au Click, textbox-urile au TextChanged, etc.) In momentul in care doriti s tratati un eveniment, s spunem apasarea unui buton de ca tre utilizator, trebuie s asociati un handler evenimentului predefinit Click al b utonului respectiv. Un handler nu este altceva dect o functie, iar asocierea resp ectiva se poate face foarte usor din Visual Studio. Pentru cazul anterior, este suficient dublu-click pe buton, pentru ca s se creeze automat o metoda de tipul protected void ButtonX_Click(object sender, EventArgs e){} 4.3.3. Formulare n ASP.NET Pentru a prezenta informatii in navigatorul clientului folosim formularele Web A SP.NET care ofera o abstractizare in modelul de programare, un model orientat ob iect si bazat pe evenimente. Acest mediu de lucru beneficiaza de toate facilitat ile oferite de platforma .NET (siguranta tipurilor, mediu de executie controlat, mostenire) si reprezinta o inlocuire a clasicelor formulare HTML Componenta viz uala este reprezentata de un fisier cu extensia .aspx-actionand ca un container pentru HTML, text static si controale server care pot fi afisate in browser, iar logica aplicatiei este reprezentata de un fisier cu extensia .cs (pentru limbaj ul Visual C#) sau .vb (pentru Visual Basic.NET). Fisierele .aspx mai sunt referi te ca pagini ASP.NET. Aceasta tehnica de separare a codului de partea de prezent are este numita"code-behind programming" Formularele Web si ASP .NET au fost cre ate pentru a depsi cteva dintre limitrile ASP. Principalele faciliti noi sunt redate n continuare: Separarea interfeei HTML de logica aplicaiei Un set bogat de controal e pentru server ce detecteaz tipul browserului si genereaz limbaj HTML corespunztor acestuia Mai puin cod de scris din cauza modului n care sunt construite noile con troale server Model de programare bazat pe evenimente

80 Programare Web (suport de curs) Cod compilat si suport pentru mai multe limbaje de programare, fat de ASP care er a interpretat ori ca VBScript ori ca Jscript Permite crearea de controale de ctre teri care s aduc noi funcionaliti. Logica aplicatiei reprezinta in fapt o clasa care extinde functionalitatea clasei System.Web.UI.Page. Aceasta clasa contine metode care trateaza diferite evenimente ce apar in timpul executiei formularului Web la server (de exemplu, daca metoda Page_Load este conectata la evenimentul Load al clasei de baza Page, atunci aceasta este apelata la fiecare acces al unui for mular Web), proprietati (de exemplu, prin proprietatea IsPostBack putem afla dac a o pagina Web este la primul acces sau la accesari ulterioare), atribute coresp unzatoare unor controale din pagina WebForms si alte date membre necesare implem entarii aplicatiei. O pagina WebForms, la procesarea pe serverul Web, poate fi p rivita ca un program executabil pentru care iesirea standard o reprezinta browse rul sau dispozitivul client. In acest model, pagina trece prntr-o serie de stagii de procesare: initializare, procesare si eliberare. In ordinea aparitiei, acest ea sunt: Init, eveniment care initializeaza pagina si in care proprietatile cont roalelor sunt actualizate. Aici este corect s initializam controale care se adaug a dinamic la pagina sau variabile necesare inainte de initializarea paginii; Loa d poate fi numit locul in care utilizatorul isi initializeaza codul. Evenimentul este generat de fiecare data cand pagina este incarcata dupa ce controalele au fost initializate la pasul anterior; Tratarea evenimentelor utilizator, reprezin ta stagiul in care sunt tratate evenimentele generate de client cum ar fi: schim barea unui text ntr-un control, apasarea unui buton etc. Trebuie retinut ca acest e evenimente nu sunt tratate ntr-o anumita ordine pe server, iar tratarea lor are loc dupa aparitia unui eveniment Click care trimite formularul la server (a unu i submit); PreRender, eveniment care poate fi folosit pentru a face ultimile act ualizari asupra paginii Web inainte ca aceasta s fie generata la client; Render, eveniment care genereaza la client reprezentarea HTML a paginii Web ASP.NET inca rcata la server; Unload este ultimul eveniment care se executa inainte ca pagina s fie eliberata. Evenimentul este util de folosit atunci cand dorim s efectuam ul timele operatii de eliberare a resurselor: inchiderea fisierelor, a conexiunilor la baza de date si eliberarea obiectelor din memorie. 4.3.4. Controale n ASP.NET Exista doua tipuri de baza in care pot fi impartite controalele: HTML Controls, reprezinta elemente HTML care pot fi programate la nivelul serverului si expun u n model obiectual restrictionat la capabilitatile elementelor HTML pe care le af iseaza; Web Controls, aduc facilitati superioare controalelor HTML incluzand con troale mult mai complexe, cum ar fi controlul calendar, iar modelul obiect nu re flecta neaparat sintaxa HTML. Controalele HTML sunt asemenea elementelor HTML fo losite cu ajutorul Frontpage sau al oricrui alt editor HTML. Pot fi folosite si e lementele standard HTML ntr-un Formular Web, de exemplu pentru a crea o caset de t ext: <input type="text" id=txtFirstName size=25> Orice element poate fi ns marcat s ruleze ca si un control HTML atunci cnd formularul este procesat de server prin adugarea textului "runat=server" n interiorul tagului. <input type="text" id=txtFi rstName size=25 runat=server>

Programarea server side cu ASP.NET 81 n cazul folosirii Visual Studio .NET, adugarea acestui text ce permite procesarea controlului de ctre server se poate face foarte simplu dnd clic dreapta pe element al HTML n Design View si selectnd Run as Server Control din meniul contextual. Con troalele HTML permit de asemenea tratarea evenimentelor asociate cu tagul HTML ( clic pe un buton, de exemplu) si manipularea n mod programatic a tagului prin cod ul din Formularul Web. In momentul n care controlul este afisat n browser, tagul e ste afisat exact asa cum a fost salvat ca si cum a fost salvat pe Formularul Web , mai puin textul runat=server, ceea ce ofer un control foarte precis a ceea ce va f i trimis ctre browser. ASP.NET defineste un al doilea tip de controale - Web Cont rols. Numite si controale inteligente, ele pot fi caracterizate prin: ofera un b ogat si consistent model obiectual de programare; detecteaza automat tipul navig atorului, iar afisarea la client va fi optimizata in functie de capabilitatile a cestuia; pentru unele controale se pot defini sabloane (template-uri) de afisare ; posibilitatea de a controla generarea evenimentelor pe server; posibilitatea d e a trimite evenimente unui container din interiorul acestuia (de exemplu, un co ntrol de tip buton in interiorul unui tabel); legarea la surse de date a tuturor proprietatilor controalelor pentru a influenta afisarea la executie. Sunt defin ite in spatiul de nume System.Web.UI.WebControls si mostenesc, direct sau indire ct, clasa de baza WebControl. 4.3.5. Pastrarea informatiilor Avand in vedere ca ne referim la aplicatii ASP.NET, trebuie s tinem cont de faptu l ca fiecare Form se executa pe server si la fiecare incarcare a sa, obiectele p e care le contine acesta, si pe care noi dorim s le folosim, nu isi pastreaza val oarea, adica sunt setate pe null. Deci la navigarea ntr-un Form nou si incarcarea acestuia, in mod normal nu se retin obiectele folosite in cel anterior. Mai tre buie observat faptul ca fiecare Form se reincarca (se executa Page_Load) la fiec are raspuns al serverului pentru un eveniment (cum ar fi apasarea unui buton). S e impune deci s pastram starea obiectelor pe care dorim s le folosim, chiar daca n u parasim Form-ul curent. Exista urmatoarele modalitati de a pastra informatii u tile: Query Strings, Cookies, View State, Session State, Application State. Sess ion State: Variabilele din Session pot fi create in timpul executiei, iar acesta poate fi imaginat ca un cos in care depunem obiecte pe care dorim s le pastram p e durata intregii executii a aplicatiei de catre utilizatorul curent. Astfel ar arata crearea unui nou obiect in Session: Session["Feedback"] = objFeedback; Iar luarea lui din Session: objFeedback = (Feedback)Session["Feedback"]; Se observa c a s-a facut o conversie de tip. n Session, toate variabilele sunt de tip object, iar atribuirea se face unui obiect de tip Feedback (o clasa definit de utilizator ). 4.3.6. Navigarea intre Forms cu pastrarea informatiilor Exista mai multe posibilitati de a naviga intre Form-urile unei aplicatii ASP.NE T. Controlul Hyperlink si metoda Response.Redirect() fac acelasi lucru, diferena fiind ca primul este un control care rezida in .aspx, iar metoda se apeleaza din cod (.aspx.cs). Medoda Server.Transfer(), face acelasi lucru doar ca asa se pot retine informatii din Form-ul sursa si folosite in cel destinatie. Daca setam p arametrul preserveForm al metodei la valoarea true, atunci QueryString si ViewSt ate din sursa vor fi vizibile in destinatie. Totusi, pentru a le folosi, va treb ui s setam atributul EnableViewStateMac din directiva Page

82 Programare Web (suport de curs) (fisierul .aspx) pe valoarea false. Deoarece in mod normal informatia din ViewSt ate este hash-uita, iar asa nu va mai fi, deci se va putea citi la nevoie 4.3.7. Securitatea n ASP.NET Exista mai multe moduri de a securiza o aplicatie ASP.NET. In general, se poate face acest lucru atat din IIS Management Console (click dreapta pe un director v irtual din IIS, Properties, Directory Security, Edit) unde se pot alege mai mult e tipuri de autentificare {Anonymous, Windows Integrated, Digest for Windows dom ain servers, Basic}. Pe de alta parte, securizarea aplicatiei se poate face din ASP.NET. Pentru asta se foloseste fisierul de configurare web.config, dupa cum s e vede mai jos. Forms poate fi inlocuit cu Windows sau Passport. <authentication mode="Forms"> In primul rand, trebuie totusi s vorbim de aplicatii publice care nu necesita nici un fel de autentificare. Trebuie s fiti atenti, acesta este modu l implicit in care este creata o noua aplicatie ASP.NET. Atunci cand se creeaz un proiect ASP.NET cu Visual Studio, se creaza o aplicatie web accesibila anonim. In momentul in care in IIS se activeaz Anonymous Access pe un director virtual (a dica pe o aplicatie web), atunci cand un utilizator acceseaza aplicatia, el ia a utomat contul IUSR_<numele_masinii>, care in mod normal se afla in grupul de uti lizatori Guest pe orice masina. Acest cont trebuie s aib dreptul de a citi fisiere le care sunt necesare aplicatiei. De exemplu, daca aplicatia foloseste la un mom ent dat Form-ul Student.aspx, atunci IUSR_<numele_masinii> trebuie s aib dreptul de a citi fisierul de pe hard-disk corespunzator, s spunem c:\Inetpub\wwwroot\library \student.aspx. Pentru o aplicatie securizata, avem mai multe posibilitati de aute ntificare, cele mai des intalnite fiind sintetizate in tabelul de pe slide. Impl ementarea politicii de securitate se poate face atat din IIS cat si din aplicati a ASP.NET. Tipul aplicatiei Modul de autentificare Descriere Aplicatie web Anonim Nu avem nevoie de publica pe Internet. securizare. Aplicati e web Windows Acest mod autentifca pentru Intranet. Integrated utilizatorii folo sind lista de useri de pe server (Domain Controller). Drepturile userilor in apl icatia web este dat de nivelul de privilegii al contului respectiv. Aplicatie we b Windows Utilizatorii companiei disponibila pe Integrated pot accesa aplicatia din afara Internet, dar cu Intranetului, folosind conturi din acces privat. list a serverului (Domain Controller). Aplicatii web Forms Aplicatii care au nevoie c omerciale. Authentication de informatii confidentiale si eventual in care sunt m ai multe tipuri de utilizatori.

Programarea server side cu ASP.NET 83 4.3.7.1.1 Windows Authentication n acest mod de autentificare, aplicaia ASP .NET are ncorporate procedurile de auten tificare, dar se bazeaz pe sistemul de operare Windows pentru autentificarea util izatorului. 1. Utilizatorul solicit o pagin securizat de la aplicaia Web. 2. Cererea ajunge la Serverul Web IIS care compar datele de autentificare ale utilizatorulu i cu cele ale aplicaiei (sau ale domeniului) 3. Dac acestea dou nu corespund, IIS r efuz cererea utilizatorului. 4. Calculatorul clientului genereaz o fereastr de aute ntificare, 5. Clientul introduce datele de autentificare, dup care retrimite cere rea ctre IIS 6. IIS verific datele de autentificare, si n cazul n care sunt corecte, direcioneaz cererea ctre aplicaia Web. 7. Pagina securizat este returnat utilizatorul ui. 4.3.7.1.2 Forms-Based Authentication Atunci cnd se utilizeaz autentificarea bazat pe formulare, IIS nu realizeaz autentif icarea, deci este necesar ca n setrile acestuia s fie permis accesul anonim. 1. n mo mentul n care un utilizator solicit o pagin securizat, IIS autentific clientul ca fii nd un utilizator anonim, dup care trimite cererea ctre ASP.NET. 2. Acesta verific p e calculatorul clientului prezena unui anumit cookie1 3. Dac cookie-ul nu este pre zent sau este invalid, ASP .NET refuz cererea clientului si returneaz o pagin de au tentificare (Login.aspx). 4. Clientul completeaz informaiile cerute n pagina de aut entificare si apoi trimite informaiile 5. Din nou, IIS autentific clientul ca fiin d un utilizator anonim si trimite cererea ctre ASP .NET 6. ASP .NET autentific cli entul pe baza informaiilor furnizate. De asemenea genereaz si un cookie. Cookie re prezint un mic fisier text ce pstreaz diverse informaii despre utilizatorul respecti v, informaii folosite la urmtoarea vizit a s pe site-ul respectiv, la autentificare, sau n diverse alte scopuri. 7. Pagina securizat cerut si noul cookie sunt returnat e clientului. Atta timp ct acest cookie rmne valid, clientul poate solicita si vizua liza orice pagin securizat ce utilizeaz aceleasi informaii de autentificare. 4.3.7.1.3 Passport Authentication La utilizarea Serviciului Web Microsoft Passport, nici IIS nici aplicaia Web nu s e ocup de autentificarea clientului. Atunci cnd utilizatorul cere o pagin securizat, cererea este trimis mai nti serverului IIS. 1. IIS autentific clientul ca utilizato r anonim si trimite cererea ctre ASP .NET. 2. Acesta verific prezena unui anumit co okie pe calculatorul clientului. 3. Dac cookie-ul nu exist, cererea este refuzat si clientul este direcionat ctre site-ul Web Passport.com pentru autentificare. 4. S ite-ul Passport.com genereaz un formular de Login pe care l trimite utilizatorului 5. Utilizatorul completeaz cu datele corespunztoare si le trimite napoi ctre Passpo rt.com. 6. Dac informaiile introduse se potrivesc cu cele din baza de date Passpor t.com, clientul este autentificat si primeste un cookie corespunztor informaiilor introduse. 4.4. ADO.NET ADO.NET este componenta din .NET Framework care se ocupa cu accesul la baze de d ate ; este standardizata in sensul ca se pot folosi aceleasi obiecte pentru acce sarea

84 Programare Web (suport de curs) diferitelor tipuri de baze de date : Access, MS SQL Server, Oracle, etc. Sunt ne cesare la referinte doua namespaces : System.Data si System.Data.SqlClient pentr u MS SQL sau System.Data.OleDb pentru Access. Mecanismul accesarii bazelor de da te in ADO.NET este urmatorul: un obiect Connection stabileste o conexiune intre aplicatie si baza de date. Aceasta conexiune poate fi accesata direct de un obie ct Command sau de un obiect DataAdapter. Obiectul Command executa o comanda asup ra bazei de date. Daca se returneaza valori multiple, se utilizeaza un obiect Da taReader care va contine datele returnate. Aceste date pot fi procesate direct d e de aplicatie. Alternativ, se poate utiliza un DataAdapter pentru a popula un o biect DataSet. Modificarile asupra bazei de date se pot efectua prin intermediul unui obiect Command sau unui obiect DataAdapter. Connection reprezinta conexiun ea curenta la baza de date. Tipuri de conexiuni: SqlConnection - pentru conectar ea la SQL Server 7 sau versiuni ulterioare OleDbConnection - conexiuni la divers e tipuri de baze de date ODBCConnection OracleConnection Un obiect Connection co ntine toate informatiile necesare deschiderii unui canal de comunicatie cu baza de date in cadrul proprietatii ConnectionString. Sunt incorporate, de asemenea, metode pentru facilitarea tranzactiiilor. Command este reprezentat de doua clase : SqlCommand si OleDbCommand Utilizat pentru a efectua apeluri de proceduri stoc ate sau de comenzi SQL asupra bazei de date sau pentru a returna tabele. Metode: ExecuteNonQuery - executa comenzi care nu returneaza inregistrari INSERT, UPDAT E, DELETE ExecuteScalar - returneaza o singura valoare dntr-o interogare ExecuteR eader - returneaza o multime rezultat, sub forma unui obiect DataReader DataRead er contine un recordset bazat pe conexiune, forward-only, read-only obiectele Da taReader nu pot fi instantiate direct, sunt returnate ca rezultat al metodei Exe cuteReader a unui obiect Command (SqlCommand SqlDataReader etc) o singura linie din recordset este in memorie la un moment dat, deci se foloseste un minim de re surse, dar este necesara mentinerea activa a unui obiect Connection pe durata de viata a obiectului DataReader DataAdapter este clasa din nucleul tehnologiei AD O.NET, bazata pe mecanismul non-conexiune. faciliteaza comunicarea intre baza de date si DataSet populeaza obiectele DataTable sau DataSet ori de cate ori se ap eleaza metoda Fill metoda Update inregistreaza modificarile, efectuate local, in baza de date La apelul metodei Update, se copie modificarile din DataSet in baz a de date, executandu-se una din comenzile reprezentate de InsertCommand, Delete Command sau UpdateCommand. Exista controale folosite la afisare de date: Labels, TextBoxes informatii unicate; dar in mod curent se folosesc si unele pentru afi sarea unor colectii de informatii, cum ar fi: ListBoxes, DropDownLists si GridVi ews. Acestea din urma se folosesc foarte mult in aplicatii de management al info rmatiilor, cum ar fi de exemplu una de biblioteca, unde se poate dori afisarea t uturor cartilor dintr-un anumit domeniu, etc.

Programarea server side cu ASP.NET 85 4.4.1. Obiectele ADO.Net 4.4.1.1.1 SqlConnection Un obiect SqlConnection este la fel ca orice alt obiect C#. de cele mai multe or i declararea si instantierea se face in acelasi timp: SqlConnection sqlConn = new SqlConnection( "Data Source=(local);Initial Catalog= Northwind;Integrated Security=SSPI"); SqlConnection sqlConn1 = new SqlConnection ("Data Source=DatabaseServer;Initial Catalog=Northwind;User ID=YourUserID;Passwo rd=YourPassword"); OleDbConnection oleDbConn = new OleDbConnection("Provider=Mic rosoft.Jet.OLEDB.4.0;Data Source=MyDatabase.mdb"); Obiectul SqlConnection de mai sus este instantiat folosind un constructor care primeste ca parametru un strin g. Acest argument este stringul de conectare. Scopul instantierii unui obiect de tip SqlConnection este ca alte obiecte ADO.Net s poata lucra cu baza de date. Al te obiecte, cum ar fi SqlDataAdapter si SqlCommand, au constructori care primesc obiectul conexiune ca parametru. Atunci cand se lucreaza cu o baza de date treb uie urmati pasii: 1. Instantierea unui obiect SqlConnection; 2. Deschiderea cone xiunii; 3. Trimiterea conexiunii ca parametru altor obiecte ADO.Net; 4. Realizar ea operatiunilor asupra bazei de date; 5. Inchiderea conexiunii. 4.4.1.1.2 SqlCommand Obiectele de tipul SqlCommand permit specificare tipului de actiune asupra bazei de date. De exemplu se poate face o interogare, inserare, modificare sau sterge re. Atunci cand se realizeaz o interogare in baza de date, se obine un tabel rezul tat care trebuie s poata fi vizualizat. Pentru a obtine acest lucru folosind obie cte SqlCommand este folosita metoda ExecuteReader care intoarce un obiect de tip ul SqlDataReader. Exemplul de mai jos arata modul de obtinere a unei instante Sq lDataReader. SqlCommand cmd = new SqlCommand ("SELECT CategoryName FROM Categori es", conn); SqlDataReader rdr = cmd.ExecuteReader(); Pentru a insera valori ntr-o baza de date trebuie apelata functia ExecuteNonQuery pe un obiect SqlCommand. E xemplul urmator arata modul de inserare ntr-o baza de date. string insertString = @"INSERT INTO Categories (CategoryName, Description) VALUES ( Miscellaneous , Whatever doesn t fit elsewhere )"; SqlCommand cmd = new SqlCommand (insertStrin g, conn); cmd.ExecuteNonQuery(); Modificarea si stergerea datelor dntr-o baza de date se face la fel ca si inserarea, dar ca punem primul parametru al constructo rului SqlCommand pe valoarea corespunzatoare. Uneori avem nevoie dntr-o baza de d ate doar de o singura valoare, care poate fi suma, media, etc. inregistrarilor d intr-un tabel. Apeland ExecuteReader si apoi calculand acea valoare in program n u este cea mai eficienta metoda de a ajunge la rezultat. Cea mai buna metoda est e s lasam baa de date s faca ceea ce este necesar si s intoarca o singura valoare. Acest lucru il face metoda ExecuteScalar: SqlCommand cmd = new SqlCommand ("SELE CT count(*) FROM Categories", conn);

86 Programare Web (suport de curs) int count = (int) cmd.ExecuteScalar(); 4.4.1.1.3 SqlDataReader Tipul SqlDataReader este folosit pentru a citi date in cea mai eficienta metoda posibila. NU poate fi folosit pentru scriere. O data citita o informatie nu mai poate fi citita inca o data. SqlDataReader citeste secvential date. Datprita fap tului ca citeste doar inainte (forward-only) permite acestui tip de date s fie fo arte rapid in citire. Overhead-ul asociat este foarte mic (overhead generat cu i nspectarea rezultatului si a scrierii in baza de date). Daca ntr-o aplicatie este nevoie doar de informatii care vor fi citite o singura data, sau rezultatul une i interogari este prea mare ca s fie retinut in memorie (caching) SqlDataReader e ste solutia cea mai buna. Obtinerea unei instante de tipul SqlDataReader este pu tin diferita de instantierea normala - trebuie apelata metoda ExecuteDataReader. Daca pentru instantiere este folosit operatorul new veti obtine un obiect cu ca re nu puteti face nimic pentru ca nu are o conexiune si o comanda atasate. SqlDa taReader obtine datele ntr-un stream secvential. Pentru a citi aceste informatii trebuie apelata metoda Read; aceasta citeste un singur rand din tabelul rezultat . Metoda clasica de a citi informatia dintr-un SqlDataReader este de a itera ntro bucla while asa cum se vede in figura 4 la liniile 32-35. Metoda Read intoarce true cat timp mai este ceva de citit din stream. 4.4.1.1.4 4.4.1.1.5 Instalarea unei aplicaii web pe serverul IIS Evident ca dupa dezvoltarea unei aplicatii, ea trebuie livrata beneficiarului. P entru ca ea s mearga, este nevoie s fie depusa pe serverul acestuia de web. In primu l rand, fisierele trebuie copiate undeva pe hard-disk-ul serverului web (nu neap arat in calea predefinita \Inetpub\wwwroot\). Dupa aceea, in IIS-ul server-ului w eb, trebuie creat un nou director virtual, care s indice catre calea directorului fizic unde se afla de fapt aplicatia. Deci, dupa ce ati depus proiectul ASP.NET pe serverul web (asta se face prin simpla copiere), mergeti in IIS, click dreap ta pe Default Web Site, New -> Virtual Directory, alegeti un Alias (acesta va fi de fapt numele aplicatiei asa cum va fi ea vazuta din afara), navigati la calea directorului propriu-zis si gata. Acum, aplicatia va putea fi referita din exte rior cu numele: http://<nume_server>/<alias> ; unde <nume_server> este de fapt s itul principal expus de serverul web, iar <alias> este ce ati ales voi la creare a directorului virtual in IIS. Evident, trebuie neaparat s aveti grija de securiz area aplicatiei daca este cazul, dupa cum se vede si in paragraful precedent. 4.4.2. Configurare, mentenanta Avantajele folosirii unui fisier web.config. In primul si in primul rand, s ne im aginam o aplicatie de E-Commerce care lucreaza cu un server de baze de date si s ne imaginam ca noi facem aplicatia si o dam la mai multi clienti. In mod evident , serverul de baze de date se va numi in mod diferit la fiecare client. Cum face m deci s putem livra aplicatia clientilor, fara a recompila codul la fiecare ? Cu m facem conexiunea la baza de date pentru fiecare client ? Ei bine, folosim web. config : <appSettings> <add key="Database" value="Data Source=MISHU\MISHUSQL;Ini tial Catalog=elearning;User Id=***;Password=***" /> </appSettings> Dupa cum se p oate vedea aici, am pus o inregistrare care contine chiar un string de conexiune la baza de date. Cum fac conexiunea in aplicatia mea ? Caut in web.config o che ie cu numele Database . Iata:

Programarea server side cu ASP.NET 87 public static SqlConnection ConnectToDB() { string strParameters; System.Configu ration.AppSettingsReader apsr = System.Configuration.AppSettingsReader(); strPar ameters = (string)apsr.GetValue("Database",typeof(string)); SqlConnection sqlCon n = new SqlConnection(strParameters); return sqlConn; } new

88 Programare Web (suport de curs) 5. Referinte http://www.sei.cmu.edu/str/descriptions/clientserver_body.html http://en.wikiped ia.org/wiki/Multitier_architecture http://en.wikipedia.org/wiki/Service-oriented _architecture http://en.wikipedia.org/wiki/Model-view-controller http://en.wikip edia.org/wiki/OSI_Model http://en.wikipedia.org/wiki/Internet_protocol_suite htt p://www.w3schools.com/web/web_scripting.asp http://en.wikipedia.org/wiki/HTTP ht tp://www.w3.org/TR/html401/ http://www.w3schools.com/html/default.asp http://www .w3.org/Style/CSS/ http://www.w3schools.com/css/default.asp http://en.wikipedia. org/wiki/.NET_Framework http://www.charlespetzold.com/dotnet/

Proiectarea, organizarea i evaluarea activitilor didactice

MiniGhid Metodologic Informatic & TIC

Cuprins I.Programa colar reper obligatoriu pentru un demers flexibil...93 II.Aplicarea progra or colare........................................................................ ....94 III.Proiectarea demersului didactic...................................... ..................................95 III.1. Lectura personalizat a programelor col are III.2. Planificarea calendaristic III.3. Proiectarea unei uniti de nvare III.4. Pr oiectarea activitii de evaluare III.4.1. Tipuri de itemi III.4.2. Metode complemen tare de evaluare IV. Proiectul unitii de nvare - Proiectul de lecie ?................. ...................107 V. Anexe 108 1. Planificri calendaristice 91

MiniGhid Metodologic Informatic & TIC

I.Programa colar reper obligatoriu pentru un demers flexibil Programa colar este par te a Curriculumului national. Termenul de curriculum deriv din limba latin unde, p rintre altele nseamna drum ctre. Programa colar descrie oferta educaional a unei anumi te discipline pentru un parcurs colar determinat Filosofia contemporan a educaiei a evideniat diferena dintre o educaie bazat pe curriculum, adic avnd ca element central la toate etajele sale activiatea de proiectare i programa analitic, care are n cen trul activitii didactice ideea de programare a traseului elevului ctre un el cunoscu t i impus doar de ctre aduli. Conceptual, programele colare actuale, se difereniaz de ,,programele analitice" prin accentul pe care l pun pe interiorizarea unui mod de gndire specific fiecrui domeniu transpus n coal prin intermediul unui obiect de stud iu, nu pe succesiunea coninuturilor i pe numrul de ore alocat lor. Actualele progra me colare subliniaz importana rolului reglator al achiziiilor elevilor n plan formati v. Centrarea pe competene reprezint modalitatea care face ca sintagma centrarea pe elev s nu rmn o lozinc fr coninut. Proiectarea curriculumului pe competene vine n a cercetrilor din psihologia cognitiv, conform crora prin competen se realizeaz n mod xemplar tranferul i mobilizarea cunotinelor i a depriderilor n situaii/contexte noi i inamice. Modelul de proiectare curricular centrat pe competene simplific structura curriculumului i asigur o mai mare eficien a proceselor de predare/nvare i evaluare. sta permite operarea la toate nivelurile cu aceeai unitate: competena, n msur s orient eze demersurile agenilor implicai n procesul de educaie: conceptorii de curriculum; inspectorii; specialitii n evaluare; elevii; profesorii; prinii. Fr a intra n onceptuale, formulm cteva definiii de lucru necesare pentru explicarea manierei n ca re au fost concepute programele colare. Definim competenele ca fiind ansambluri st ructurate de cunotine i deprinderi dobndite prin nvare; acestea permit identificarea ezolvarea n contexte diverse a unor probleme caracteristice unui anumit domeniu. Structura programei colare cuprinde: o not de prezentare, competene generale, compe tene specifice i coninuturi, valori i atitudini, sugestii metodologice. Competenele g enerale se definesc pe obiect de studiu i se formeaz pe durata nvmntului liceal. Ele a un grad ridicat de generalitate i complexitate i au rolul de a orienta demersul d idactic ctre achiziiile finale ale elevului. Competenele specifice se definesc pe o biect de studiu i se formeaz pe parcursul unui an colar. Ele sunt derivate din comp etenele generale, fiind etape n dobndirea acestora. Competenelor specifice li se aso ciaz prin program uniti de coninut. Componenta fundamental a programei este cea referi toare la competene specifice i coninuturi. Pentru a asigura o marj ct mai larg de acop erire a obiectelor de studiu, s-a pornit de la o difereniere ct mai fin a etapelor unui proces de nvare. Acestora le corespund categorii de competene organizate n jurul ctorva verbe definitorii, ce exprim complexe de operaii mentale: 1. Receptarea - c oncretizat prin urmtoarele concepte operaionale: -identificarea de termeni, relaii, procese; - nominalizarea unor concepte; - observarea unor fenomene, procese; - c ulegerea de date din surse variate; - perceperea unor relaii, conexiuni; - defini rea unor concepte. 2. Prelucrarea primar (a datelor) - concretizat prin urmtoarele concepte operaionale: - compararea unor date, stabilirea unor relaii; - sortarea-d iscriminarea; - calcularea unor rezultate pariale; - investigarea, descoperirea, explorarea; - clasificarea datelor; - experimentarea. - reprezentarea unor date; 3.Algoritmizarea - concretizat prin urmatoarele concepte operaionale: -reducerea la o schem sau model; -anticiparea unor rezultate; 93

MiniGhid Metodologic Informatic & TIC

-remarcarea unor invariani; -rezolvarea de probleme prin modelare si -reprezentar ea datelor algoritmizare. 4.Exprimarea - concretizata prin urmatoarele concepte operaionale: -descrierea unor stri, sisteme, procese, fenomene; -argumentarea unor enunuri; -generarea de idei; -demonstrarea. 5.Prelucrarea secundar (a rezultatelo r) concretizat prin urmatoarele concepte operaionale: -elaborarea de strategii; -c ompararea unor rezultate, date de ieire, concluzii; -relaionri ntre diferite tipuri de reprezentri, -calcularea, evaluarea unor rezultate; ntre reprezentare i obiect. -interpretarea rezultatelor; -analiza de situaii; 6.Transferul, care poate fi con cretizat prin urmatoarele concepte operaionale: -aplicarea n alte domenii; -transp unerea ntr-o alt sfer; -negocierea; -generalizarea i particularizarea; -integrarea u nor domenii; -realizarea de conexiuni ntre rezultate; -verificarea unor rezultate ; -adaptarea i adecvarea la context. i: -optimizarea unor rezultate; Competenele g enerale ce se urmresc a fi formate la elevi pe parcursul treptei liceale de colari zare precum i competenele specifice fiecrui an de studiu, derivate din acestea, se stabilesc pornind de la modelul de generare prin gruparea categoriilor de concep te operaionale in funcie de dominantele avute in vedere. Valorile i atitudinile apa r n mod explicit sub forma unei liste separate in programa fiecrui obiect de studi u. Ele acoper ntreg parcursul nvmantului liceal i orienteaz dimensiunile axioiogic s ctiv-atitudinal aferente formrii personalitaiii din perspective fiecrei discipline. Realizarea lor concret deriv din activitatea didactic permanent a profesorului, con stituind un implicit al acesteia. Valorile si atitudinile au o importan egal n regla rea procesului educativ ca i competenele - care acoper dimensiunea cognitiva a pers onalitii - dar se supun altor criterii de organizare didacticometodic i de evaluare. Sugestiile metodologice cuprind recomandri generale privind metodologia de aplic are a programei. Aceste recomandari se pot referi la: desfasurarea efectiv a proc esului de predare/nvare, centrat pe formarea de competene: identificarea celor mai a decvate metode i activiti de nvare; dotri/materiale necesare pentru aplicarea n condi ptime a programei; evaluarea continu. -

Dincolo de structura unitar a programelor colare, curriculumul naional actual propu ne o ofert flexibil, ce permite profesorului adaptarea cadrului formal la personal itatea sa i la specificul clasei de elevi cu care lucreaz. Elementele care asigur a cest reglaj sunt: - posibilitatea interveniei profesorului n succesiunea elementel or de coninut, cu condiia asigurrii coerenei tematice i a respectrii logicii interne a domeniului; - lipsa prescrierii de la centru a intervalului de timp alocat elem entelor de coninut; - posibilitatea modificrii, a completrii sau a nlocuirii activitil or de nvare, astfel nct acestea s permit un demers didactic personalizat. II.Aplicarea programelor colare Existena unor programe centrate pe achiziiile elevilor determin u n anumit sens al schimbrii n didactica fiecrei discipline. Tabelul de mai jos prezi nt n antitez caracteristici ale procesului de predare-nvare din didactica tradiionala didactica actual. Criterii Strategii didactice Orientare tradiional Orientare moder n Rolul elevului Urmrete prelegerea, expunerea, explicaia Exprim puncte de vedere pro prii. profesorului. ncearc sa rein i sa reproduc ideile auzite Realizeaz un schimb de dei cu ceilali. Accept n mod pasiv ideile transmise. Argumenteaz; pune i i pune ntreb u scopul de a nelege, de a realiza sensul unor idei 94

MiniGhid Metodologic Lucreaz izolat. Rolul profesorului Expune, ine prelegeri. Impune puncte de vedere. Se consider i se manifest n permanen ca un printe" . nvarea are loc predominant p are i reproducere de cunotine, prin apel doar la exemple clasice", validate. nvarea co duce la competiie ntre elevi, cu scopul de ierarhizare Vizeaz msurarea i aprecierea c unotinelor (ce tie elevul). Pune accent pe aspectul cantitativ (ct de mult informaie d eine elevul). Vizeaz clasificarea static" a elevilor,

Informatic & TIC Coopereaz n rezolvarea problemelor i a sarcinilor de lucru. Faciliteaz i modereaz nv Ajut elevii s neleag i s explice punctele de vedere proprii. Este partener n nvar e loc predominant prin formare de competene i deprinderi practice. nvarea se realizea z prin cooperare. Vizeaz msurarea i aprecierea competenelor (ce poate s fac elevul cu eea ce tie). Pune accent pe elementele de ordin calitativ (valori, atitudini). Vi zeaz progresul n nvare pentru fiecare elev. Modul de realizare a nvrii Evaluarea

De fapt, diferena dintre didactica tradiional i cea actual const n modul de concepere organizare a situaiilor de nvare (riguros dirijate n primul caz i avnd autonomie de di erite grade, n cel de-al doilea). Altfel spus, o strategie este legitim sau ilegit im nu n general, ci potrivit unor circumstane concrete; profesorul eficient este ac ela care tie: s selecioneze o s combine o s varieze diferite metode o o s aleag strate ii adecvate. III.Proiectarea demersului didactic Predarea reprezint activitatea p rofesorului de organizare i conducere a ofertelor de nvare care are drept scop facil itarea i stimularea nvrii eficiente la elevi. Proiectarea demersului didactic este ac ea activitate desfurat de profesor care const n anticiparea etapelor i a aciunilor con rete de realizare a predrii. Proiectarea demersului didactic presupune: - lectura personalizat a programelor colare; - planificarea calendaristic; - proiectarea sec venial (a unitilor de nvare). III.1. Lectura personalizat a programelor colare n co noului curriculum, conceptul central al proiectrii didactice este demersul didac tic personalizat, iar instrumentul acestuia este unitatea de nvare. Demersul person alizat exprim dreptul profesorului - ca i al autorului de manual - de a lua decizi i asupra modalitilor pe care le consider optime n creterea calitii procesului de nvat nt, respectiv, rspunderea personal pentru a asigura elevilor un parcurs colar indiv idualizat, n funcie de condiii i cerine concrete. LECTURAREA PROGRAMEI se realizeaz pe orizontal n succesiunea urmtoare: Competente Generale Competente Specifice Coninuturi Activiti de nvare

III.2.Planificarea calendaristic n contextul noului curriculum, planificarea calen daristic este un document administrativ care asociaz elemente ale programei cu alo carea de timp considerat optim de ctre profesor pe parcursul unui an colar. n elabora rea planificrilor calendaristice recomandm parcurgerea urmtoarelor etape: 1. Realiz area asocierilor dintre competenele specifice i coninuturi. 2. mprirea n uniti de n Stabilirea succesiunii de parcurgere a unitilor de nvare. 95

MiniGhid Metodologic Informatic & TIC 4. Alocarea timpului considerat necesar pentru fiecare unitate de nvare, n concordan c u competenele specifice i coninuturile vizate. Planificrile pot fi intocmite pornind de la urmtoarea rubricaie Unitatea colar Disciplina..

Profesor.. Clasa/Nr. ore pe spt./ .. Planificare calendaristic Anul colar ate Uniti de nvare Competene specifice Sptmna Observatii

In acest tabel: Unitile de nvare se indic prin titluri (teme) stabilite de ctre prof r. In rubrica Competene specifice se trec simbolurile competenelor specifice din p rograma colar. Continuturile selectate sunt cele extrase din lista de continuturi ale programei. Numarul de ore alocate se stabileste de catre profesor in funcie d e experiena acestuia i de nivelul de achiziii ale elevilor clasei. ntregul cuprins a l planificrii are valoare orientativ, eventualele modificri determinate de aplicare a efectiv la clas putnd fi consemnate n rubrica Observaii. O planificare anual corect tocmit trebuie s acopere integral programa colar la nivel de competene specifice i con nuturi. III.3. Proiectarea unei uniti de nvare Elementul generator al planificrii cale ndaristice este unitatea de nvare. O unitate de nvare reprezint o structur didactic is i flexibil,care are urmtoarele caracteristici: - determin formarea la elevi a unui comportament specific, generat prin integrarea unor competene specifice; - este unitar din punct de vedere tematic; - se desfoar n mod sistematic i continuu pe o peri oad de timp; - se finalizeaz prin evaluare. Detaliem n continuare elementele esenial e ale proiectrii unei uniti de nvare. Se recomand utilizarea urmtorului format. Unita colar Disciplina.. Profesor.. Clasa/Nr. ore pe spt./ ..

Proiectul unitii de nvare.. Nr. de ore alocate.. Coninuturi Competen are Observatii

Coninuturi: apar inclusiv detalieri de coninut necesare n explicitarea anumitor par cursuri, respectiv n cuplarea lor la baza proprie de cunoastere a elevilor. In ru brica Competene specifice se trec simbolurile competenelor specifice din programa c olar Activitile de nvare pot fi cele din programa colar, completate, modificate sau r nlocuite de altele, pe care profesorul le consider adecvate pentru atingerea obi ectivelor propuse. Rubrica Resurse cuprinde specificri de timp, de loc, forme de organizare a clasei, material didactic folosit etc. n rubrica Evaluare se menionea z instrumentele sau modalitaile de evaluare aplicate la clas. Finalul fiecrei uniti de nvare presupune Evaluare sumativ. 96

MiniGhid Metodologic Informatic & TIC

Desi denumirea si alocarea de timp pentru unitile de nvare se stabilesc la nceputul an ului colar prin planificare, este recomandabil ca proiectele unitailor de nvaare s se completeze ritmic pe parcursul anului, avnd n avans un interval de timp optim pen tru ca acestea s reflecte ct mai bine realitatea. In completarea rubricaiei, se urm arete corelarea elementelor celor cinci coloane. Practic pe baza indicaiilor din p lanificare se fac detalierile pe orizontal, ordonnd activitaile n succeesiunea derulr ii, raportandu-le la competene i specificnd resursele necesare bunei desfurri a proces ului didactic. Proiectarea unitii de nvare - ca si a leciei - ncepe prin parcurgerea s hemei urmatoare: n ce scop voi face? Identificarea competenelor Ce voi face? Selectarea coninuturilo r Cu ce voi face? Analiza resurselor Cum voi face? Determinarea activitilor de nvare Ct s-a realizat? Stabilirea instrumentelor de evaluare

ConceptuI de unitate de nvare are rolul s materializeze conceptul de demers didactic personalizat, flexibilizd proiectarea didactic i definind n acest sens pentru pract ica didactic premise mai bine fundamentate din punct de vedere pedagogic. Identif icarea unei unitii de nvare se face prin tema acesteia. Stabilirea temei de catre pro fesor pe baza lecturii programei, utiliznd surse diverse, este primul pas n identi ficarea unitilor de nvare n care va fi imparit materia anului colar, respectiv, n o rea unu demers didactic personalizat. Temele sunt enunuri complexe legate de anal iza scopurilor nvarii, formulri fie originale, fie preluate din lista de coninuturi a programei, sau din manual formulri care reflect din partea profesorului o nteleger e profund a scopurilor activitaii sale, talent pedagogic, inspiraie, creativitate. Activitile de nvare se consruiesc prin corelarea competenelor cu coninuturile i presu orientarea ctre un anumit scop, redat prin tema activitii. In momentul propunerii lor spre rezolvare elevilor, activitile de nvare vor fi transpuse ntr-o anumit form d omunicare inteligibil nivelului de vrst. Intr-o abordare pragmatic, resursele cuprin d acele elemente care asigur cadrul necesar pentru buna desfaurare a activitailor d e nvare. Astfel, profesorul va meniona n aceast rubric forme de organizare a clasei (t puri de interaciuni ale resurselor umane), mijloace de nvamant, alocarea de timp, pr ecum i orice alte elemente pe care le consider utile n derularea scenariului didact ic. In condiiile noului curriculum, lectura programei i a manualelor nu mai este n mod obligatoriu liniar. Programa trebuie parcurs n mod necesar de ctre toi , dar ea, ca i manualele se pliaz unei citiri personale i adaptate. Asupra coninuturilor progr amei profesorul poate interveni prin regruparea lor sub temele unitilor de nvare pe c are le-a stabilit. III.4. Proiectarea activitii de evaluare se realizeaz concomiten t cu proiectarea demersului de predare/nvare i n deplin concordan cu acesta. Cteva utile n proiectarea instrumentelor de evaluare sunt urmatoarele: Care sunt compet enele din programa colar, pe care trebuie s le dobndeasc elevii? Care sunt performan minime, medii i superioare pe care le pot atinge elevii, pentru a demonstra c au atins aceste competene? Care este specificu colectivului de elevi pentru care mi p ropun evaluarea? Cnd i n ce scop evaluez? Pentru ce tipuri de evaluare optez? Cu ce instrumente voi realiza evaluarea? Cum voi proceda pentru ca fiecare elev sa fi e evaluat prin tipuri de probe ct mai variate astfel nct evaluarea s fie ct mai obiec tiv? Cum voi folosi datele oferite de instrumentele de evaluare administrate, pen tru a elimina eventualele blocaje constatate n formarea elevilor i pentru a asigur a progresul scolar al fiecaruia dintre ei? PREDICTIV (INIIAL) TIPURI DE EVALUARE SUMATIV (FINAL) FORMATIV (CONTINU) 97

MiniGhid Metodologic Informatic & TIC TRADIIONALE METODE I INSTRUMENTE DE Probe scrise Probe orale Probe practice

Observarea sistematic a elevilor Investigaia EVALUARE Proiectul COMPLEMENTARE Port ofoliul Tema pentru acas Tema de lucru n clas Autoevaluarea Adeseori, evaluarea for mativ este nlocuit cu evaluarea curent, n accepiunea tradiional de notare ritmic, robe stereotipe precum dictri, calcule, compuneri, diverse tipuri de exerciii etc. , care sunt apreciate prin note n mod aproximativ, fr interes n ceea ce privete nivel ul cognitiv, afectiv, psihomotor, relaional. O astfel de evaluare are n vedere doa r unele tipuri de comportamente, de obicei nerelevante pentru personalitatea ele vului i neglijeaz aspecte importante ca: gndirea, imaginaia, atitudinea de responsab ilitate, adoptarea unor metode proprii de lucru, competena de comunicare i de relai onare etc. Ceea ce este generalizat n evaluarea curent din coli este stocarea n memo rie a abstraciilor i promptitudinea reproducerii acestora. Multe cunotine i capaciti c re necesit evaluare sunt ignorate, dei sunt, n egal msur, variabile importante ale nv cum ar fi: atitudinea elevului fa de nvare, fa de disciplina de studiu, fa de educat a de interrelaiile din interiorul colectivului de elevi, modul n care elevul nva (sist matic sau sporadic), modul cum abordeaz cunotinele pentru a rezolva probleme practi ce, specifice vieii cotidiene etc. Focalizat pe unitatea de nvare, evaluarea ar trebu i s asigure evidenierea progresului nregistrat de elev n raport cu sine nsui, pe drumu l atingerii competenelor prevzute n program. Este important s fie evaluat nu numai can titatea de informaie de care dispune elevul, ci, mai ales, ceea ce poate el s fac u tiliznd ceea ce tie sau ceea ce intuiete. In acest sens, cteva aspecte pot fi avute n vedere: - modificarea raportului dintre evaluarea sumativ, care inventariaz, sele cteaz i ierarhizeaz prin not i evaluarea formativ, ce are drept scop valorificarea pot enialului de care dispun elevii i conduce la perfecionarea continu a stilului i a met odelor proprii de nvare; - realizarea unui echilibru dinamic ntre evaluarea scris i ev aluarea oral: aceasta din urm, dei presupune un volum mare de timp pentru apreciere a tuturor elevilor i blocaje datorate emoiei sau timiditii, prezint avantaje deosebit e, ca: realizarea interaciunii elev-profesor, demonstrarea comportamentului comun icativ i de inter-relaionare a elevului. - folosirea cu mai mare frecven a metodelor de autoevaluarei evaluare prin consultare n grupuri mici. n raport cu momentele re alizrii evalurii, n proiectul unitii de nvare apar specificaii: evaluare iniial, f u sumativ. Fiecare activitate de evaluare a rezultatelor colare trebuie nsoit n mod si stematic de o autoevaluare a procesului pe care profesorul l-a desfurat cu toi elev ii i cu fiecare elev. Numai astfel pot fi stabilite modalitile prin care poate fi r eglat, de la o etap la alta, activitatea de nvare / formare a elevilor n mod diferenia . III.4.1. Tipuri de itemi Item = <ntrebare> + <formatul acesteia> + <rspunsul atep tat> Teoria i practica evalurii evideniaz mai multe citerii pe baza crora pot fi clas ificai itemii. Unul dintre criteriile cel mai des utilizate este acela al gradulu i de obiectivitate oferit n corectare. n funcie de acest criteriu, itemii pot fi cl asificai n trei mari categorii: 98

MiniGhid Metodologic Informatic & TIC

a. Itemii obiectivi asigur un grad de obiectivitate ridicat n msurarea rezultatelor colare i testeaz un numr mare de elemente de coninut ntr-un interval de timp relativ scurt. Rspunsul ateptat este bine determinat, ca i modalitatea de notare a acestuia . b. Itemii semiobiectivi permit ca rspunsul ateptat s nu fie totdeauna unic determ inat, modalitatea de corectare i notare inducnd uneori mici diferene de la un corec tor la altul. Acetia testeaz o gam mai variat de capaciti intelectuale, oferind n acel timp posibilitatea de a utiliza i materiale auxiliare n rezolvarea sarcinilor de lucru propuse. c. Itemii subiectivi (cu rspuns deschis) solicit un rspuns amplu, pe rmind valorificarea capacitilor creative ale elevilor. Acetia sunt relativ uor de cons truit, principala problem constituind-o modul de elaborare a schemei de notare as tfel nct s se poat obine unitate i uniformitate la nivelul corectrii. a. Itemi obiecti i Fie c este vorba de activiti de proiectare i programare (Informatic), fie c este vor ba de activiti de utilizare i combinare a instrumentelor informatice (Tehnologia In formaiei), lucrul cu calculatorul implic formulri standardizate, lipsite de echivoc , itemii obiectivi i cei semiobiectivi repezentnd instrumente de evaluare fracvent aplicate la aceste discipline. Itemii obiectivi sunt caracterizai prin: structur area sarcinilor propuse i standardizarea formatului lor de prezentare; corelarea strict a sarcinilor cu obiectivele de evalurii; capacitatea de a testa un numr mare de elemente de coninut ntr-un timp relativ scurt; obiectivitate privind apreciere a rspunsului; posibilitatea asocierii cu un sistem de notare extrem de simplu: pu nctajul aferent se acord integral, se acord parial conform unei reguli (formule) de calcul sau nu se acord deloc (n funcie de rspunsul ateptat); rolul secundar pe care l au de a obinui elevul cu formulri standard, tiinifice, elemente utile n construirea rspunsurilor pentru itemii semiobiectivi i subiectivi. a.1. Itemi cu alegere dual A legerea dual presupune formularea unei cerine cu dou variante complementare de rspun s (Adevrat/Fals, Da/Nu, Corect/Incorect etc.). Se pot verifica prin intermediul i temilor cu alegere dual: cunotinele legate de corectitudinea sintactic a unor expres ii (comenzi, instruciuni, notaii etc.); nelegerea semnificaiei unor noiuni din term logia de specialitate (denumiri, instrumente de prelucrare, metode de rezolvare, proprieti etc.) recunoaterea unor explicaii, definiii, sau imagini. Itemii de acest tip se prezint sub forma unor ntrebri sau enunuri, efortul elevului reducndu-se la id entificarea unui rspuns din dou posibile. Achiziiile evaluate prin itemii cu aleger e dual sunt de regul rudimentare. Fac excepie enunurile care pun n eviden justificri unor proprieti, operaii sau reguli, justificri care necesit achiziii cognitive superi oare. Tot n categoria itemilor cu alegere dual se pot realiza cerine care necesit di n partea elevului operaii de anticipare a efectului unei operaii prin aplicarea un ui sistem riguros de cunotine ntr-un context nou. Acetia sunt itemii cu cel mai nalt grad de dificultate. Atragem atenia asupra faptului c lipsa firului rou care pune n ev iden elementele sistematice ntlnite n utilizarea unui produs soft (chiar i n cazul unu soft de baz) conduc la un experimentalism accentuat care mpiedic formarea capacitii elevului de a se adapta situaiilor noi, neexersate. Factorul de discriminare fiin d ns extrem de mic, elevul va putea obine un rezultat acceptabil la un test format numai din astfel de itemi alegnd la ntmplare un rspuns dintre cele dou admise pentru fiecare item n parte. De obicei, itemii cu alegere dual sunt formulai n combinaie cu itemi subiectivi de tipul Justificai..., Scriei varianta corect..., Explicai n ce c area... etc. n aceste cazuri, o parte din punctaj este alocat justificrii. Pentru pr oiectarea corect a itemilor cu alegere dual este necesar respectarea urmtoarelor cer ine: formularea clar a enunului, fr ambiguiti sau formulri incomplete; dac se solici cierea cu ADEVRAT/FALS, se vor evita enunurile foarte generale; selectarea unor en unuri relevante pentru domeniul de cunoatere sau categoria de competene testat (uneo ri, efortul de a realiza enunuri fr echivoc duce la elaborarea de itemi nesemnifica tivi din punct de vedere educaional sau tiinific); se va evita utilizarea unor enunu ri negative, acestea conducnd la raionamente ce folosesc dubla negaie, inducnd un gr ad nalt de ambiguitate; 99

MiniGhid Metodologic Informatic & TIC

se vor evita enunurile lungi i complexe, prin eliminarea elementelor redundante in utile n raport cu ideea enunului i cerina itemului; nu se va folosi un limbaj academ ic, o terminologie foarte specializat sau o construcie lingvistic stufoas i greoaie; se va evita introducerea a dou idei ntr-un singur enun, cu excepia cazului n care se dorete evidenierea relaiei dintre acestea; enunurile vor fi aproximativ egale ca lun gime; enunurile adevrate sau false s fie aproximativ egale ca numr, dar nu exact ega le, deoarece acesta ar putea constitui un indiciu dup care elevul ncearc s ghiceasc rs punsul corect. a.2. Itemi de tip pereche Itemii de tip pereche solicit stabilirea unor corespondene ntre informaiile distribuite pe dou coloane. Prima coloan conine in formaii de tip enun (premise), cea de-a doua coloan coninnd informaii de tip rspuns. E evului i se solicit s asocieze fiecare enun cu un unic rspuns. Cele dou coloane sunt precedate de instruciuni de asociere n care i se explic elevului tehnica de formare a perechilor (s uneasc printr-o linie, s rescrie perechile asociate sau doar eleme ntele lor de identificare etc.) i se precizeaz dac un rspuns poate fi folosit la mai mult de un enun (dac funcia de asociere este injectiv sau nu), eventual dac exist rsp nsuri care nu vor fi folosite niciodat (dac funcia de asociere este surjectiv sau nu ). Se verific prin intermediul itemilor de tip pereche capacitatea elevului de a stabili corelaii ntre: funcii i instrumente; simboluri i concepte; termeni i defini probleme i metode de rezolvare. Itemii de acest tip permit abordarea unui volum m are de informaie ntr-un interval de timp relativ redus. Factorul de discriminare e ste ceva mai mare dect n cazul itemilor cu alegere dual, strategia de asociere la ntmp lare neconducnd dect n situaii foarte rare la un rezultat acceptabil privind rezultat ul testului. Pentru proiectarea corect a itemilor de tip de pereche este necesar r espectarea urmtoarelor cerine: utilizarea unui material omogen, dintr-o sfer relati v restrns; utilizarea unui numr inegal de premise i rspunsuri, astfel nct, dac elevul ociaz corect n-1 enunuri dintre cele n date, s nu rezulte automat rspunsul pentru ce l de-al n-lea enun; aranjarea listei de rspunsuri (mai ales dac sunt multe) ntr-o or dine logic, astfel nct cutarea rspunsului n list s se realizeze ct mai comod; aranja nunurilor n list astfel nct s nu se poat intui o regul de asociere (referinele s fi e); aranjarea coloanelor astfel nct acestea s ncap n ntregime pe aceeai pagin. a.3. cu alegere multipl Itemii cu alegere multipl sunt cele mai utilizate tipuri de ite mi, n special n testele standardizate (bacalaureat, admitere etc.) Un item cu aleg ere multipl este format dintr-un enun numit premis sau baz i un numr de opiuni din car elevul trebuie s aleag un singur rspuns numit cheie. Celelalte rspunsuri, neconform e cu cerina, dar plauzibile poart numele de distractori. Se verific prin intermediu l itemilor de tip pereche capacitatea elevului de a identifica: definiii i notaii; instrumentul adecvat unei prelucrri; secvene de program care realizeaz o anumit prel ucrare; expresii cu o valoare dat; termeni i expresii de specialitate; metode de r ezolvare i tehnici de implementare. Itemii de acest tip permit abordarea unui vol um mare de informaie ntr-un interval de timp relativ redus, oferind posibilitatea evalurii unor achiziii cognitive complexe, dei nu pot msura capacitatea elevului de a-i organiza i exprima ideile. Sunt forme de testare cu un grad mare de fidelitate , iar factorul de discriminare este mai mare dect n cazul celorlali itemi obiectivi . Abilitatea profesorului de a elabora distractori ct mai plauzibili, care s const ruiasc toate alternativele posibile de a grei, contribuie la reuita aplicrii testelo r cu alegere multipl. Erorile comise de elevi ofer profesorului informaii supliment are necesare n autoreglarea procesului de nvmnt. O categorie de itemi cu alegere multi pl solicit rspunsul corect, celelalte variante fiind greite, n timp ce ali itemi solic it cel mai bun rspuns, pe baza unei discriminri complexe. n aceste cazuri trebuie 10 0

MiniGhid Metodologic Informatic & TIC

manifestat grij la formularea cerinei astfel nct criteriul de discriminare a celui mai bun rspuns s reias clar din enun. Pentru proiectarea corect a itemilor cu alegere mul tipl este necesar respectarea urmtoarelor cerine: stabilirea clar a cerinei, n concord n cu obiectivul de evaluare; furnizarea tuturor informaiilor necesare n premis, elimi nndu-se materialul irelevant; formularea premisei folosind afirmaii sau ntrebri pozi tive; construirea unor alternative plauzibile, aflate n concordan cu premisa; const ruirea itemului astfel nct s existe o singur alternativ corect sau cea mai bun; co unor alternative astfel nct distractorii s fie n mod cert greii sau mai puin buni ianta cheie s fie n mod cert corect sau cea mai bun; aranjarea listei de rspunsuri rdine logic, astfel nct cutarea rspunsului n list s se realizeze ct mai comod; const a ansamblurilor de itemi cu alegere multipl astfel nct rspunsurile s ocupe poziii dife rite n lista de variante (s nu fie n mod constant al doilea rspuns, de exemplu) b. I temi semiobiectivi Itemii semiobiectivi formeaz o categorie de instrumente de eva luare ce solicit construirea parial sau total a unui rspuns pe baza unei sarcini defi nite. Itemii semiobiectivi sunt caracterizai prin: posibilitatea de a testa o gam mai larg de capaciti intelectuale i rezultate ale nvrii; crearea unor situaii cognit e nivel mai ridicat prin solicitarea de elaborare a rspunsului i nu de alegere a l ui dintr-o mulime prestabilit, ca n cazul itemilor obiectivi; raportarea parial subi ectiv a profesorului n raport cu rspunsul formulat (rspunsul poate fi scris ordonat sau dezordonat, formularea poate fi mai clar sau mai neclar, termenii folosii se po t ncadra n nite standarde tiinifice sau pot fi variante particulare ale acestora etc. ) posibilitatea asocierii unui sistem de notare n care pot s intervin situaii neprevz ute (rspunsuri neateptate, care comport raportri noi la barem). b.1. Itemi cu rspuns scurt / de completare Itemii cu rspuns scurt solicit ca elevul s formuleze un rspuns scurt sau s completeze o afirmaie astfel nct aceasta s capete sens sau s aib valoare e adevr. Se pot verifica prin intermediul itemilor cu rspuns scurt i de completare: cunoaterea unor noiuni, expresii de specialitate, simboluri, notaii etc.; recunoate rea i nominalizarea unor elemente vizuale specifice unui anumit mediu de lucru; c apacitatea de integrare a unor elemente necesare din punct de vedere sintactic s au semantic ntr-un context dat; schimbarea unor elemente dintr-un context dat ast fel nct s se realizeze o finalitate precizat. Itemii cu rspuns scurt se prezint cel m i des sub forma unor ntrebri. Ei solicit un rspuns sub o form restrns (un numr, un si l, un cuvnt, o expresie, o propoziie sau fraz concis). Itemii de completarea se prez int sub forma unui enun, unei afirmaii incomplete. Ei solicit gsirea cuvntului sau sin tagmei care completeaz i d sens enunului respectiv. Pentru proiectarea corect a itemi lor cu rspuns scurt / de completare este necesar respectarea urmtoarelor cerine: for mularea enunului astfel nct s admit un rspus scurt, exprimat cu precizie; formularea e nunului astfel nct acesta s admit un singur rspuns corect, pe ct posibil; rezervarea u or spaii pentru rspuns care s sugereze numrul de cuvinte ateptate (dac acest lucru nu reprezint un indiciu), nu i dimensiunea lor; vizarea unui rspuns care s reprezinte o sintez de cunotine sau un rezultat al nelegerii unei situaii i mai puin o reproducer unor informaii.

b.2. ntrebri structurate ntrebrile structurate solicit, printr-un sistem de subntrebri relative la o tem comun, rspunsuri de tip obiectiv, rspunsuri scurte sau de completare prin care se pot eva lua cunotinele complexe referitoare la tema respectiv fr a solicita elaborarea unui rs puns deschis (eseu). Se pot verifica prin intermediul ntrebrilor structurate: capa citatea de a urmri, recunoate, adapta i construi un algoritm pe o tem dat sau un prog ram ntr-un limbaj de programare; 101

MiniGhid Metodologic Informatic & TIC

capacitatea de a realiza din aproape n aproape o prelucrare complex utiliznd un med iu de lucru informatic. O ntrebare structurat poate s conin materiale suport i informa i suplimentare ce se adaug treptat, conferind procesului de evaluare varietate, c omplexitate i gradualitate. Se pot verifica totodat cunotine, dar i priceperi i deprin deri sporind gradul de obiectivitate n raport cu itemii cu rspuns deschis. Subntrebr ile ce formeaz itemul permit creterea progresiv a dificultii cerinelor, dar este recom andat ca subntrebrile s fie independente, adic rspunsul la o ntrebare s nu depind de nsul la ntrebrile precedente. Proiectarea lor necesit atenie, pricepere i timp. Pentr u proiectarea corect a ntrebrilor strucutrate este necesar respectarea urmtoarelor ce rine: redactarea subntrebrilor astfel nct acestea s solicite rspunsuri simple la ncep crescnd pe parcurs dificultatea acestora; formularea unor subntrebri autoconinute (a l cror rspuns corect s nu depind de rspunsul corect la una dintre ntrebrile precedente realizarea concordanei dintre enunul general (tema ntrebrii) i subntrebrile formulate. c. Itemi subiectivi (cu rspuns deschis) Itemii subiectivi formeaz o categorie de i nstrumente de evaluare ce vizeaz creativitatea elevului, originalitatea i caracter ul personal al rspunsului. Dei sunt uor de formulat, itemii subiectivi ridic problem e privind obiectivitatea evalurii. Itemii subiectivi sunt caracterizai prin: abord are global a unei sarcini asociate unui obiectiv ce nu poate fi evaluat prin inte rmediul itemilor obiectivi; crearea unor situaii cognitive de nivel foarte ridica t prin solicitarea de a realiza interaciuni reale i complexe ntre cunotine, abiliti i prinderi; raportarea subiectiv a profesorului n raport cu rspunsul formulat; necesi tatea predefinirii unor criterii privind baremul de corectare i notare, criterii clare, judicioase i puternic anticipative; posibilitatea, n cazul n care baremul nu a prevzut toate situaiile de interpretare i construire a rspunsului, a unor element e noi (rspunsuri neateptate) care comport reanalizarea baremului. n cazul informatic ii i tehnologiei informaiei se pot elabora itemi subiectivi de tip eseu (structura t sau liber) i itemi de tip problem (care necesit proiectare, redactare i uneori imp lementare a rezolvrii).

c.1. Itemi de tip eseu Itemii de tip eseu pot fi structurai sau liberi. Itemii structurai sunt construii a stfel nct rspunsul ateptat s fie orientat cu ajutorul unor elemente din enun (indicii ivind ordinea de tratare, numrul de linii, formularea rspunsului, ideile care treb uie s fie atinse etc.). Un eseu liber nu furnizeaz n enun nici un fel de indicaii sau constrngeri, elevul avnd libertatea s-i strucutreze cum consider i cum poate material ul pe care-l solicit enunul. Acest tip de eseu comport operaii de maxim complexitate (analiz, sintez, sistematizare i restructurare) lsnd fru liber fanteziei i capacitil eative ale elevului. Deoarece la informatic elementele de creativitate se manifes t mai ales prin rezolvri de probleme i proiecte, iar n cazul tehnologiei informaiei p rin teme practice i proiecte, itemii de tip eseu preferai sunt cei structurai, un e seu liber nefiind necesar dect rar, pentru anumite teme cu un volum mai mare de e lemente informative n raport cu achiziiile operaionale. Se pot verifica prin intermedi l itemilor de tip eseu: cunotinele globale legate de stuctura sistemelor de calcul , sisteme de operare, evoluia istoric a sitemelor hard i soft, principiile de utili zare a unei anumite aplicaii, etapele conceptuale ale proiectrii unei aplicaii etc. capacitile de sistematizare a unor elemente prin construirea unor scheme sau repr ezentri grafice. Itemii de tip eseu se prezint sub forma unor cerine generale nsoite eventual (pentru eseurile structurate) de indicii privind tratarea cerinei. Se po t aduga restricii privind ntinderea n timp sau spaiu (numr rnduri, pagini, paragrafe e c.) sau privind forma de prezentare a rspunsului. c.2. Itemi de tip problem Rezolv area unei probleme presupune soluionarea unei situaii conflictuale generat de necon cordane ivite ntre sistemul de achiziii i situaiile concrete descrise de un enun. Aces te neconcordane sunt generate uneori de nepotrivirea ntre contextul general al cun otinelor i situaiile particulare n care acestea trebuie s fie aplicate. Alteori achizi ile sunt dobndite prin experimente (situaii particulare) i, pentru a fi aplicate n c

u totul alte situaii, acestea trebuie s fie ridicate la un nalt nivel de abstractiz are i generalizare. 102

MiniGhid Metodologic Informatic & TIC Rezolvarea de probleme este o activitate specific i des utilizat la disciplina Infor matic, elementele gndirii algoritmice, metodele de rezolvare i tehnicile de implemen tare fiind supuse unui tir sistematic de probleme prin care acestea s formeze compe tene reale de programare. Capacitile cognitive superioare legate de aplicare creati v, gndire divergent, descoperirea condiiilor interne, alegerea modelului adecvat etc . sunt verificate prin itemi de acest tip. Obiectivele urmrite prin utilizarea re zolvrii de probleme sunt: - obinerea informaiilor necesare rezolvrii problemei; -for mularea i testarea ipotezelor; -descrierea metodei de rezolvare a problemei; -ela borarea unui raport despre rezultatele obinute; -posibilitatea de generalizare i t ransfer a tehnicilor de rezolvare. 103

MiniGhid Metodologic Informatic & TIC

Cerine suplimentare asociate unei probleme pot pune n eviden capacitatea elevului de a estima eficiena unei rezolvri, de a construi un algoritm conform unor criterii (limita de memorie, numr de instruciuni etc.). Se pot formula probleme n care se fu rnizeaz algoritmul i se cere un enun de problem care se rezolv prin intermediul algor itmului respectiv. Acest tip de item impune o analiz atent a algoritmului i asocier ea lui cu una dintre problemele sau prelucrrile numerice ntlnite la matematic, fizic sau n alte domenii, o formulare a enunului care s se caracterizeze prin coeren. Enunur ile pot fi formulate abstract, la obiect sau pot crea un context care trebuie modela t pentru a se ajunge la rezolvarea propriu-zis. Povestea n spatele creia se ascunde p roblema are de cele mai multe ori conotaii practice, descriind situaii concrete de prelucrare, amintind c rolul programatorului este acela de a ordona iniial informaia i operaiile specifice unui anumit context i abia dup aceea de a elabora algoritmul, de a implementa i verifica programul corespunztor. Aspecte de aceeai natur se ntlnesc i n domeniul utilizrii calculatorului, la Tehnologia informaiei, cnd beneficiarul fo rmuleaz un enun i utilizatorul trebuie s-i aleag programul de aplicaie adecvat, din ca rul programului s-i aleag obiectele i instrumentele potrivite, s proiecteze, pe pai, p relucrarea astfel nct produsul (documentul, prezentarea, raportul etc.) s rspund cerin or i s fie realizat n timp record. Aspectele reale de concepie, de creativitate i gndi re divergent intervin la realizarea machetelor, a prezentrilor etc. Evaluarea prin rezolvare de probleme la informatic ridic uneori probleme din punctul de vedere a l ntocmirii baremului de corectare. Unele tendine exagerate tind s impun o corectare pe principiul: problem=program funcional corect (pornind de la premisa c un program care aproape merge e ca un avion care aproape zboar). Se recomand totui ca baremul de corectare s cuprind fraciuni din punctaj pentru diferitele aspecte pe care le co mport rezolvarea unei probleme la informatic: corectitudinea sintactic, structurare a datelor i declararea variabilelor, structurarea programului, corectitudinea alg oritmului, eficiena algoritmului, tratarea unor situaii limit, eventual explicarea metodei aplicate (chiar daca a fost aplicat greit) etc. Se pot verifica prin inter mediul itemilor de rezolvare de probleme: concepia unor algoritmi de rezolvare a problemelor elementare; asimilarea unui algoritm general prin adaptarea lui astf el nct s rezolve o problem particular; capacitatea de a alege structurile de program de date adecvate rezolvrii unei probleme; abilitatea de a implementa programul, de a-l depana, de a-l testa i, n funcie de erorile aprute, de a reconsidera elemente le de sintax ale programului, strategiile de structurare a datelor sau nsui algorit mul de rezolvare (n partea practic a probei); capacitatea de a organiza volume mar i de date cu ajutorul bazelor de date; discernmntul n a alege un algoritm mai efici ent (conform unuia dintre din criteriile studiate: numr operaii, spaiu de memorie u tilizat) III.4.2. Metode complementare de evaluare Metodele complementare de eva luare reprezint instrumente suplimentare, nestandardizate, de evaluare dispunnd de forme specifice cum ar fi: investigaia, referatul, portofoliul, proiectul, obser varea sistematic a activitii elevului i autoevaluarea. Metodele complementare realiz eaz actul evalurii n strns legtur cu procesul educativ, prin ntreptrundere cu etapel stuia, urmrind n special capacitile cognitive superioare, motivaiile i atitudinea elev ului n demersul educaional. Metodele alternative de evaluare se caracterizeaz prin urmtoarele: capacitatea de a transforma relaia profesor-elev inducnd un climat de c olaborare i parteneriat; posibilitatea transformrii procesului de evaluare prin nlo cuirea tendinei de a corecta i sanciona prin aceea de a soluiona erorile semnalate; posibilitatea de a deprinde elevul cu mecanismele de aurocorectare i autoeducare necesare i n procesul de integrare social; utilizarea mai ampl a tehnicilor i mijloac elor didactice; caracterul sumativ, realizat prin evaluarea cunotinelor, capacitilor i atitudinilor pe o periad mai lung de timp i dintr-o arie mai larg; caracterul form ativ, realizat prin valorificarea atitudinii elevului n raport cu propria sa eval uare; capacitatea de a realiza o evaluare individualizat (observare sistematic); c apacitatea de a educa spiritul de echip prin activiti de grup (investigaii, proiecte );

104

MiniGhid Metodologic 1.Investigaia Informatic & TIC

caracterul profund integrator realizat prin interdisciplinaritate, educare i inst ruire mutilateral. Investigaia este o metod de evaluare i nvare utilizat foarte des l isciplina Tehnologie informaiei i numai ocazional la disciplina Informatic. Organiz area unei activiti de evaluare i nvare prin metoda investigaiei presupune: valorific a metodei de nvare prin descoperire; studiul unor documentaii complementare, experim entarea unor instrumente de prelucrare nestandard, compararea i generalizarea uno r tehnici i metode utilizate n tehnologie prin cercetarea altor izvoare sau prin u tilizarea altor instrumente echivalente; extrapolarea cunotinelor dobndite i verific area ipotezelor formulate; solicitarea unor cunotine sau deprinderi dobndite la alt e dicipline prin adaptarea creatoare a acestora la cerinele temei de investigaie. n cele mai multe dintre cazuri investigaia trebuie s fie organizat ca munc independen t depus de elev, dirijat i sprijinit de profesor. Tehnologia informaiei, cu multitudin ea de aplicaii software din domenii att de variate, este un teren ideal pentru des furarea investigaiilor. Elevul cerceteaz posibilitile unei aplicaii (de exemplu, apl romneasc de tip agend MyCount difuzat pe Internet): citete explicaiile asociate butoan elor, opiunile din meniuri, informaiile din Help, experimenteaz operaiile propuse de aplicaie imaginnd utilitatea practic a acestora i formuleaz concluzii generale refer itoare la acel soft (utilitate, spaiul ocupat pe disc sau n memorie, spaiul ocupat de produsele construite cu ajutorul lui, calitatea grafic i funcional a interfeei). I nvestigaii mai rafinate pot realiza elevii iniiai n programare i n sisteme de operare care disting mult mai multe aspecte n spatele produsului soft investigat (eficien, po sibilitate de dezvoltare, configurare, conflicte cu alte programe etc.). Pentru organizarea activitilor de investigaie, profesorul va urmri: formularea general a tem ei; asigurarea surselor bibliografice sau tehnice necesare; formularea unor indi caii care s direcioneze activitatea elevilor; urmrirea activitii elevului n sensul uti izrii eficiente i creatoare a materialului de investigat; sprijinirea elevilor sau grupurilor de elevi care ntmpin dificulti n nelegerea temei sau a metodelor specific e studiu; ncurajarea i evidenierea activitilor creatoare desfurate de elevi, a descope irilor neateptate. 2. Referatul i proiectul

Referatul reprezint o form de mbinare a studiului individual cu activitate de preze ntare i argumentare. Tema referatului, nsoit de bibliografie i alte surse de document are (Internet, vizite etc.), este tratat n mod independent de ctre elev i susinut apoi n faa colegilor sau altui auditoriu mai larg. Varietatea universului informatic ( a limbajelor i tehnicilor de programare, a aplicaiilor din domeniul TIC, a noutilor hardware etc.) justific utilizarea acestei forme de studiu i evaluare la clas, att l a Tehnologia informaiei ct i la Informatic. Dac studiul aferent i rezultatul studiului prezint interes i din punct de vedre practic, rezultatul fiind un program (o apli caie) sau un produs TI complex (rezultatul aplicrii creatoare a instrumentelor inf ormatice), dac bibliografia propus este mai bogat i etapele de proiectare (concepie), implementare i testare necesit un timp mai ndelungat, lucrarea poart numele de proi ect. Organizarea unei activiti de evaluare i nvare prin intermediul referatelor i proi ctelor presupune: valorificarea metodei de nvare prin descoperire; studiul unor mat eriale suplimentare i izvoare de informare diverse n scopul mbogirii i activizrii cu nelor din domeniul studiat sau domenii conexe, prin completri de coninut ale progra mei sau prin aducerea n atenie a unei problematici complet noi; structurarea infor maiei corespunztoare unui referat ntr-un material ce poate fi scris, ilustrat sau p rezentat pe calculator; activitile de concepere, organizare, experimentare, reproi ectare (dac este cazul), dezvoltare i elaborare a documentaiei aferente necesit plan ificarea unor etape de elaborare i o strategie de lucru, n cazul proiectului; prez entarea referatului sau proiectului de ctre elevul sau elevii care l-au elaborat, acesta (sau un reprezentant al grupului) trebuind s-l susin, s fie capabil s dea exp

licaii suplimentare, s rspund la ntrebri etc. Referatul este de regul o lucrarea de ma mic amploare, dar mai structurat i mai bogat n informaii dect o tem de munc indepen ferent leciei curente. Proiectul este o lucrare mai ampl a 105

MiniGhid Metodologic Informatic & TIC

crei tem este comunicat sau aleas din timp, elaborarea unui proiect putnd s dureze de la 1-2 sptmni pn la 2-3 luni sau chiar un semestru. Proiectul poate fi elaborat n grup , cu o distribuire judicioas a sarcinilor ntre membrii grupului. Referatul poate f i utilizat la Informatic i n egal msur la Tehnologia informaiei temele referatelor viz cel mai des domenii de actualitate n producia sofware sau n domeniul TIC. Pentru a realiza o evaluare pe baz de referate, profesorul: va formula teme clare, de com plexitate medie, preciznd pe ct posibil amploarea lucrrii (cte pagini, durata maxim n ecesar prezentrii etc.) va recomanda sau asigura sursele bibliografice i de informa re necesare; i va rezerva suficient timp (n perioada de evaluare sau la sfritul unor uniti de nvare) pentru ca elevii nsrcinai cu elaborarea referatelor s-i poat preze atul; va supraveghea discuiile purtate cu elevii asupra coninutului referatului. P entru a realiza o evaluare pe baz de proiecte, profesorul: va formula teme practi ce, de complexitate sporit, lsnd celor care elaboreaz proiectul mult libertate n a imp roviza, adapta i interpreta cerina ntr-un mod personal; va stabili un termen final i , n funcie de modul de evaluare, termene intermediare de raportare; va recomanda s au asigura sursele bibliografice i de informare necesare; i va rezerva suficient ti mp (n perioada de evaluare sau la sfritul unor uniti de nvare) pentru ca elevii nsr elaborarea proiectelor s-i poat prezenta rezultatul proiectrii; va supraveghea disc uiile purtate cu elevii asupra proiectului. Portofoliul 3. Portofoliul reprezint o metod complex de evaluare n care un rezultat al evalurii este elaborat pe baza apli crii unui ansamblu variat de probe i instrumente de evaluare. Prin multitudinea de forme i momente n care se desfoar testarea elevului, rezultatul final converge ctre oarea real a acestuia, sesiznd elementele de progres sau regres, ilustrnd preocupar ea pentru lmurirea neclaritilor, oferind o imagine de ansamblu asupra nivelului cun otinelor, gradului de formare a abilitilor i gradului de raportare atitudinal pe care acesta o are fa de tema evaluat. Portofoliul este realizat pe o periad mai ndelungat, de la un semestru, un an, pn la un ciclu de nvmnt. Coninutul unui portofoliu este rep entat de rezultatele la: lucrri scrise sau practice, teme pentru acas, investigaii, referate i proiecte, observarea sistematic la clas, autoevaluarea elevului, chesti onare de atitudini etc. La Tehnologia informaiei portofoliul se poate constitui d intr-o colecie de lucrri practice realizate pe calculator, fiecare viznd anumite as pecte de utilizare. Alegerea elementelor ce formeaz portofoliul este realizat de ct re profesor (astfel nct acestea s ofere informaii concludente privind pregtirea, evol uia, atitudinea elevului) sau chiar de ctre elev (pe considerente de performan, pref erine etc.) Structurarea evalurii sub forma de portofoliu se dovedete deosebit de u til, att pentru profesor, ct i pentru elev sau prinii acestuia. Pentru a realiza o eva luare pe baz de potofoliu, profesorul: va comunica elevilor intenia de a realiza u n portofoliu, adaptnd instrumentele de evaluare ce constituie centrul de greutate a le portofoliului la specificul disciplinei; va alege componentele ce formeaz port ofoliul, dnd i elevului posibilitatea de a aduga piese pe care le consider relevante pentru activitatea sa; va evalua separat fiecare pies a portofoliului n momentul realizrii ei, dar va asigura i un sistem de criterii pe baza crora s realizeze evalu area global i final a portofoliului; va pune n eviden evoluia elevului, particularit e exprimare i de raportare a acestuia la aria vizat; va integra rezultatul evalurii portofoliului n sistemul general de notare. 4. Observarea sistematic a activitii i comportamentului elevilor

Fia de observare a activitii i comportamentului elevului nregistreaz informaii legate e particularitile personalitii elevului manifestate n procesul didactic, de achiziiile evaluate spontan (rspunsuri sporadice, atitudini semnificative etc.), de progres ul nregistrat de acesta. Profesorul construiete aceast fi n vederea individualizrii pr cesului sumativ de evaluare, dar i a celui de nvare. Pe baza fiei de evaluare se poat e realiza i orientarea colar i profesional a elevului. Informaiile din fia personal a aracter parial secret, parte dintre ele fiind comunicate elevului i prinilor acestui

a. 106

MiniGhid Metodologic Informatic & TIC

Un model orientativ de fi de observare conine: Date generale despre elev (nume, pre nume, vrst, climat educativ, condiii materiale, particulariti socio-comportamentale); Particulariti ale proceselor intelectuale (gndire, limbaj, imaginaie, memorie, ateni e, spirit de observaie etc.); Aptitudini i interese manifestate; Particulariti afect iv-motivaionale; Trsturi de temperament; Atitudini i relaionare (cu sine nsui, cu mate ia studiat, cu colegii) Consideraii privind evoluia aptitudinilor, atitudinilor, in tereselor i nivelului de integrare. Prin stabilirea copmpetenelor generale ale dis ciplinei i achiziiile cognitive i comportamentale vizate de aceasta, fia de observar e poate s conin i considerente legate de atingerea i formarea competenelor specifice. Completarea fiei se realizeaz n timp ntr-un ritm adecvat specificului activitilor de l a disciplina, din anul i de la clasa respectiv, dar i n funcie de implicarea i de ritm ul individual al elevului. IV. . Proiectul unitii de nvare - Proiectul de lecie ? Fa proiectarea tradiional centrat pe lecie (ora de curs) - proiectarea unitii de nvare rmatoarele avantaje: creeaz un mediu de nvare coerent n care ateptrile elevilor devi lare pe termen mediu i lung; implic elevii n ,,proiecte de nvatare personale" pe ter men mediu si lung - rezolvare de probleme complexe, luare de decizii complexe, c u accent pe explorare i reflecie; implic profesorul ntr-un ,,proiect didactic" pe te rmen mediu i lung, cu accent pe ritmurile de nvare proprii ale elevilor; d perspectiv a leciilor, conferind acestora o structur specific, n funcie de secvena unitii de nv re se afl. Proiectul de lecie - conceput ca document separat - este recunoscut ca o formalitate consumatoare de timp i energie. Proiectul unei uniti de nvare conine suf ciente elemente pentru a oferi o imagine asupra fiecrei ore. Ca urmare, n tabelul care sintetizeaza proiectarea unitatii de nvare se pot delimita prin linii orizonta le (punctate) spatiile corespunzatoare unei ore de curs. Astfel, pentru fiecare lecie, proiectul unitii de nvare ofer date referitoare la elementele de coninut i co nele vizate, la care se raporteaz anumite activiti de nvare; totodat, sunt indicate r rse materiale, forme de organizare a clasei etc., pentru fiecare activitate prec um i instrumente de evaluare necesare la nivelul leciei (orei). In consecin, dac proi ectul unitii de nvare este bine construit, nu mai este necesar detalierea la nivelul p roiectului de lecie. Lecia este neleas ca o component operaional (Cum?) pe termen scu a unitii de nvare. Dac unitatea de nvare ofer ntelegerea procesului din perspectiv lecia ofer nelegerea procesului din perspectiva operativ, tactic. Proiectul unitii d e trebuie s ofere o derivare simpl a leciilor componente. Ca urmare, trecerea de la unitatea de nvare - o entitate supraordonat - la o lecie component trebuie s permit ,replicare" n acelai timp functional (De ce?), structural (Cu ce?) i operaional (Cum?) a unitaii de nvare, la o scar temporal mai mic i ntr-un mod subordonat. Acest mod de are orientat ctre scopuri precise caracterizeaz organizarea att a unitii de nvare c ciei. 107

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