Dezvoltare de Aplicatii

download Dezvoltare de Aplicatii

of 165

Transcript of Dezvoltare de Aplicatii

Cuprins3. Dezvoltare de aplicaii .NET...................................................................................3 Introducerea n .NET Framework.............................................................................3 Caracterizarea platformei .NET............................................................................3 Date........................................................................................................................5 Tipuri de date.......................................................................................................5 Tipuri de date predefinite.....................................................................................7 Variabile n C#.....................................................................................................8 Constante...........................................................................................................10 Utilizarea enumerrilor.......................................................................................14 Tablouri unidimensionale...................................................................................17 Tablouri bidimensionale i multidimensionale....................................................19 Dirijarea execuiei (instruciuni)............................................................................25 Clasificarea instruciunilor..................................................................................25 Instruciuni de salt..............................................................................................26 Instruciuni de selecie.......................................................................................26 Instruciuni de iterare.........................................................................................29 Tipuri de date create de utilizator (Clase i structuri)...........................................33 Descrierea claselor.............................................................................................34 Membri statici i nestatici...................................................................................37 Transmiterea de parametri................................................................................39 Constructori i destructori..................................................................................42 Proprieti..........................................................................................................45 Indexatori...........................................................................................................46 Constructori statici.............................................................................................47 Cmpuri destinate doar pentru citire (readonly)................................................48 Utilizarea structurilor..........................................................................................49 Realizarea conceptului de motenire.................................................................50 Motenirea de implementare.............................................................................53 Motenirea de interfa......................................................................................59 Testarea la egalitate..........................................................................................62 Construcii auxiliare..............................................................................................64 Comentarii..........................................................................................................64 Comentarii de documentare...............................................................................65

1

Spaii de nume...................................................................................................71 Directivele preprocesorului................................................................................73 Caracterizare operatori.........................................................................................78 Clasificare operatori...........................................................................................78 Conversia datelor...............................................................................................80 Suprancarcarea operatorilor..............................................................................83 Conversia datelor de tip clas i structur.........................................................87 Crearea interfeei utilizator...................................................................................89 Crearea de aplicaii Windows (cu interfa grafic)............................................90 Componente i controale.................................................................................101 Controale de tip container................................................................................116 Validarea informaiei introduse........................................................................120 Utilizarea meniurilor.........................................................................................125 Crearea de componente i controale...............................................................131 Creare de aplicaii MDI.....................................................................................135 Delegai...............................................................................................................137 Delegai simpli.................................................................................................137 Delegai multipli...............................................................................................142 Delegai i evenimente....................................................................................143 Delegai i fire de execuie...............................................................................145 Grafic.................................................................................................................149 Folosirea GDI+.................................................................................................149

2

3. Dezvoltare de aplicaii .NETIntroducerea n .NET Framework

Caracterizarea platformei .NET

Platforma .NET este un produs Microsoft. ntrebarea ar fi de ce firma Microsoft, avnd o clas important de produse, a mers pe calea crerii unui nou produs, mai exact a unei noi tehnologii. Crearea unei noi tehnologii poate duce deseori la schimbri ideologice. Aa s-a i ntmplat n cazul platformei .NET. Firma Microsoft a venit i cu o serie de schimbri conceptuale, ce a implicat mari eforturi. Desigur c aceast direcie de elaborare nu a fost un capriciu, ci o necesitate, fiindc n cadrul produselor Microsoft s-au acumulat treptat o serie de probleme. Baza n dezvoltarea tuturor produselor Microsoft a fost de la nceputuri o serie de biblioteci de funcii, care formeaz nucleul Windows API (Windows Application Programming Interfaces), numit prescurtat Win API. Iniial, Win API consta din cteva sute de funcii, care treptat a crescut pn la mii de funcii. Aceast cretere s-a datorat implementrii unor noi posibiliti de interaciune la nivel de dispozitive. Aceast transformare permanent a instrumentarului a purtat nu doar un caracter extensiv, dar i unul ideologic. Trecerea de la modelul 16 la modelul 32, sau de la modelul 32 la modelul 64, a necesitat i transformri de principiu. n asemenea situaii, una dintre problemele importante i complicate este problema compatibilitii. n procesul dezvoltrii instrumentarului Win API, se acumulau treptat o serie de probleme interne, soluionarea crora cerea din ce n ce un efort mai mare. Firma Microsoft a contientizat aceste probleme i a neles c micarea pe calea veche de dezvoltare va cere eforturi din ce n ce mai mari i poate duce la o situaie de impas. De aceea Microsoft a mers pe calea unor schimbri ideologice, care ar soluiona problemele aprute i, pe de alt parte, ar permite o dezvoltare mai eficient i mai rapid a aplicaiilor. Astfel s-a venit cu platforma .NET, aceasta posednd o serie de avantaje: - are o orientare pe obiecte; - uurina dezvoltrii codului, fiindc exist nite biblioteci puternice; - permite dezvoltarea att a unor aplicaii desktop, ct i a unor aplicaii Web; - mecanisme puternice de prelucrare a datelor;3

o securitate sporit; existena unui mediu de dezvoltare cu multe funcionaliti; uurina amplasrii aplicaiilor; permite portabilitate sporit. O aplicaie executabil creat n baza tehnologiei .NET are o serie de particulariti, care o deosebesc de aplicaiile executabile obinuite create n baza Win API i poate fi rulat doar pe calculatoare pe care este instalat platforma .NET (.NET FrameWork). Pregtirea unei aplicaii executabile .NET pentru a fi rulat trece mai multe etape. Codificarea modulului-surs ntr-un limbaj de programare. n .NET sunt implementate mai multe limbaje (C#, C++, J#, Visual Basic, Jscript). Apoi urmeaz etapa de compilare-redactare, fiind obinut un modul executabil, de regul cu extensiunea .exe. Aceasta este prima etap a compilrii. Dar fiierul executabil nu poate fi rulat direct. A fost menionat deja c este necesar instalarea platformei .NET, care conine un element foarte important numit motor de executare (CLR Common Language RunTime), fiind un nucleu pentru executarea codului. Necesitatea acestui nucleu rezult din faptul c fiierul executabil este codificat ntr-un limbaj de nivel jos numit Limbaj Intermediar (LI). De aceea compilarea final are loc n procesul executrii codului. Aceasta este a doua etap a compilrii. O astfel de compilare se numete momentan (JIT Just In Time). Algoritmul acestei etape este urmtorul: se ia un fragment n LI i se compileaz rescriind fragmentul n coduri de calculator, fragmentul obinut se memoreaz i, totodat, se execut. Acest mod de tratare a compilrii n dou etape duce la un ir ntreg de eficientizri. Este, n primul rnd, o eficientizare n comparaie cu unele versiuni ale Java i, totodat, o eficien n crearea unui cod optimizat. Este o optimizare real dependent i de tipul procesorului. Acest tip de optimizare este posibil, cci a doua etap a compilrii are loc pe un calculator concret i informaia despre parametrii reali ai calculatorului poate fi uor utilizat. Realizarea compilrii prin compilare la LI duce la o interoperabilitate lingvistic, ceea ce presupune derivarea unei clase dintr-o clas creat n alt limbaj, existena n cadrul unei clase a instanelor de obiecte a unei clase create n alt limbaj, transmiterea de obiecte n calitate de parametri, iar obiectele sunt realizate n baz de clase create n diferite limbaje. Interoperabilitatea ridic o serie de probleme legate de tipurile de date. Fie, de exemplu, limbajele Visual Basic i C#. Limbajul Visual Basic are tipul Integer pe cnd C# nu are aa tip. n schimb C# are tipul int, iar Visual Basic nu-l are. De aceea la compilare trebuie s se in cont de aceste deosebiri ca s se obin un cod compatibil cu orice limbaj al platformei .NET. Deci trebuie s existe o politic de mapare ntre tipurile de date utilizate n cadrul platformei, politic ce trebuie s fie-

4

foarte strict. Aceast politic este exprimat prin CTS (Common Type System), o ideologie de legare a tuturor tipurilor ntr-un sistem integru. A fost deja menionat ideea c platforma .NET are implementate o serie de limbaje de programare. Printre acestea pot fi enumerate: C#, C++, J#, Visual Basic, Jscript, care pot fi numite limbaje native, fiindc sunt incluse n platforma .NET. Fiecare programator poate s aleag acel limbaj care i convine mai bine pentru dezvoltarea unei aplicaii concrete. Dar limbajele cu care poate lucra platforma .NET nu sunt limitate doar la cele care au fost enumerate anterior. Platforma .NET este deschis pentru insluderea de noi limbaje. Pe lng limbajele native pot fi amintite i compilatoare cu care poate lucra platforma .NET, cum ar fi limbajele F#, Fortran, PERL. ns nici aceste limbaje nu reprezint limita de includere. Orice limbaj poate fi inclus la necesitate n componena platformei .NET. Pentru aceasta limbajul trebuie s respecte o serie de cerine stricte numite CLS (Common Language Specification), reprezentnd un set de reguli stricte, respectate ca un limbaj s poat lucra cu succes n cadrul platformei .NET. nc un moment interesant referitor la platforma .NET ar fi tendina de a pstra i a ncerca s integreze experiena trecut. Una dintre tehnologiile trecute ar fi COM (Component Obiect Model). Platforma .NET are mecanisme ce permit integrarea aplicaiilor i serviciilor de tip COM. Un element ce d rapiditate n dezvoltarea aplicaiilor n cadrul platformei .NET este existena unei biblioteci comune pentru toate limbajele platformei. Biblioteca se numete prescurtat FCL (Foundation Class Library), iar toate clasele i tot ce ine de ele pot fi utilizate n acelai mod din orice limbaj al platformei. Adic numele clasei, metodele, proprietile, cmpurile i alte caracteristici sunt aceleai care nu ar fi limbajul. Doar modul de utilizare ine cont de sintaxa limbajului.

DateTipuri de date Pentru a descrie datele pe care le prelucreaz, limbajul C# utilizeaz tipuri de date, printre ele existnd i o clas bogat de tipuri de date predefinite. Tipurile de date utilizate se mpart n dou categorii importante: 1) Tipuri de date orientate la valoare (valorice). 2) Tipuri de date orientate la referen (refereniale). n tabelul ce urmeaz sunt prezentate cele mai importante particulariti ale datelor din aceste categorii:5

Valorice Sunt memorate n stiv Sunt dinamice

Refereniale Sunt memorate n dirijat (managed heap) Sunt stabile

memoria

Pentru a observa o particularitate ce deosebete datele valorice de cele refereniale, sunt prezentate dou exemple asemntoare ca prelucrare. n exemplul nti sunt utilizate date de tip int, care sunt date valorice. n urmtorul exemplu sunt utilizate date de tipul clasei Vector, care sunt date refereniale.int i, j; . . . i=20; j=i; i=17; Console.WriteLine({0}

{1}, i, j);

Rezultatul afirii este: 17 20Vector x, y; . . . x.c1=20; y=x; x.c1=17; Console.WriteLine({0}

{1}, x.c1, y.c1);

Rezultatul afirii este: 17 17 Din rezultatul afirii se observ c datele valorice diferite au un comportament independent, pe cnd datele refereniale diferite nu totdeauna au un comportament independent. Dup aplicarea operatorului de atribuire n contextul a dou variabile refereniale, ele ncep s arate la aceeai entitate:Memorie stiv (variabile) x y Memorie dirijat (obiecte) 20, . . .

Ambele variabile x, y sunt plasate n memoria stiv, iar obiectul de tip vector legat de variabila x este plasat n memoria dirijat. Dup aplicarea operatorului de atribuire (y=x;), variabila y va arta la obiectul la care arat variabila x. Evident c dac este schimbat valoarea componentei c1 a vectorului x, acelai lucru se va obine i pentru variabila y, dac n cadrul clasei nu este redefinit situaia dat.

6

Not: Orice tip referenial de date va avea aceast proprietate, dac n cadrul tipului de date nu este redefinit situaia dat. Tipuri de date predefinite Dup cum a fost deja menionat, limbajul C# are un set bogat de tipuri de date predefinite. Aceste tipuri sunt divizate n diferite categorii. Astfel printre tipurile predefinite, exist att tipuri de date valorice, ct i tipuri de date refereniale. Tipurile de date valorice sunt, la rndul lor, de mai multe feluri. Aadar, sunt opt tipuri de date predefinite ntregi. n tabelul ce urmeaz sunt prezentate unele caracteristici importante ale acestor tipuri:Common Type System System.Byte System.Uint16 System.Uint32 System.Uint64 System.Sbyte System.Int16 System.Int32 System.Int64 Tip predefinit byte ushort uint ulong sbyte short int long Dimensiune (binari) 8 16 32 64 8 16 32 64 Domeniu de valori 0255 065535 04294967295 018446744073709551615 (0264-1) -128127 -3276832767 -21474836482147483647 -9223372036854775808 9223372036854775807 (-263263-1)

De asemenea, sunt trei tipuri de date predefinite cu virgul mobil. Tabelul ce urmeaz prezint unele caracteristici importante ale acestor tipuri:Common Type Tip System predefinit System.Single float System.Double double System.Decimal decimal Dimensiune (binari) 32 64 128 Domeniu de valori 1.510-453.41038 5.010-3241.710308 1.010-287.91028

Mai sunt, de asemenea, dou tipuri speciale unul pentru caracterizarea valorilor caracteriale i altul pentru caracterizarea valorilor de adevr. Tabelul ce urmeaz vine cu unele caracteristici importante ale acestor tipuri:Common Type System System.Boolean System.Char Tip predefinit bool char Domeniu de valori false, true Setul de simboluri (Unicode)

Acestea sunt toate tipurile predefinite valorice. Tipurile predefinite refereniale sunt reprezentate prin dou tipuri de date. Tabelul ce urmeaz prezint unele caracteristici ale acestor tipuri de date:7

Common Type System System.Object System.String

Tip predefinit object string

Descriere Tip rdcin de la care sunt derivate toate tipurile. ir de caractere Unicode.

Tipul de date object este important prin faptul c este cel mai general tip de date de la care sunt derivate, direct sau indirect, absolut toate tipurile de date, inclusiv i cele predefinite. De aceea poate fi considerat printele tuturor tipurilor de date. Un alt reprezentant al tipurilor de date refereniale este string, care aduce comoditate n prelucrarea irurilor de caractere. n contextul tipului string poate fi aplicat operatorul + care are semnificaia concatenrii a dou iruri de caractere:sir1+sir2

n continuare, este adus un exemplu referitor la string, dar asemntor cu exemplul referitor la tipul de date Vector:string s1=Salut; string s2; s2=s1; s1=La revedere; Console.WriteLine({0}

{1}, s2, s1);

Rezultatul afirii este: Salut La revedere Se observ c rezultatul afirii este diferit, cu toate c tipul string este referenial i parc ar trebui ca s1 i s2 s ofere acelai rezultat. Din specificul de realizare intern a tipului de date string se obine o abatere de la regula general. Variabile n C# Definirea variabilelor n C# se face n felul urmtor:tip numeVariabila;

unde numeVariabila este un identificator corect. Crearea unui identificator corect se bazeaz pe urmtoarele reguli: 1) Primul simbol este o liter sau simbolul de subliniere _ . 2) Celelalte simboluri sunt litere, cifre sau simbolul de subliniere _ . 3) Simbolurile pot fi codificate. Codul este precedat de \u (u de la unicod), constnd din 4 cifre hexazecimale.Identificatorul \u0041i1 este acelai cu identificatorul Ai1.

8

Un identificator poate fi precedat de simbolul @ . Astfel pot fi utilizate n calitate de identificatori i cuvinte-cheie. 5) Literele pot fi oricare din codificarea unicod. Iniializarea unei variabile poate fi fcut la nivel de clas sau la nivel local n cadrul unei funcii. Poate fi efectuat iniializarea la definire4)

tip numeVariabila=valoare;

sau prin atribuire:numeVariabila=valoare;

La nivel de clas iniializarea nu este strict necesar. n caz c nu este fcut o iniializare explicit, valoarea variabilei va fi fixat implicit cu zero. La nivel de funcie variabila trebuie neaprat iniializat. n caz contrar, ea nu se consider a fi iniializat i apare eroare dac se ncearc utilizarea variabilei respective. Dac ar fi de comparat limbajele C, C++ cu C#, n raport cu definirea de variabile cu acelai nume la diferite niveluri, atunci n C, C++ fragmentul ce urmeaz este perfect corect:{ int i; i=20; . . . { int i; i=10; . . . } . . . }

pe cnd n C# codul anterior la nivel local va genera eroare. Tot va genera eroare i fragmentul ce urmeaz:static void Main() { int i; for(int j=0; j