Sunteți pe pagina 1din 7

In document am explicat multe notiuni pe care trebuie sa le inveti si sa intelegi ce inseamna.

Marea majoritate din ele


sunt “prescurate” prin acronime, asa ca sa nu mai zici ca iti explic ceva cu altceva ambiguu. Trebuie invatate!

Microsoft Visual Studio 2005 este un IDE (Integrated Development Environment),


adica un mediu de dezvoltare integrat, o suita ce contine mai multe tehnologii Microsoft de dezvoltare si
care au in comun platforma .NET.

In Visual Studio 6 nu exista un mediu comun, in schimb ai aplicatii diverse care reprezinta componentele
mediului de dezvoltare. In VS2005, acestea au fost unificate pt. spori experienta de dezvoltare si pt. ca
platforma .NET pe care se bazeaza dezvoltarea aplicatiilor in aproape toate limbajele din mediul de
dezvoltare, au in comun componentele ce reprezinta .NET Framework.

In VS2005 (versiunea interna 8) vine cu suport simplicit (default) pt. .NET Framework versiunea 2.0, deci
limbajul C# va avea si el versiunea 2.0.

Termeni si explicatii detaliate


CLI (Common Language Infrastructure) = reprezinta infrastructura de baza a .NET framework-ului,
sau comuna a .NET Framework-ului; daca te uiti la imaginea documentatie CLI.png poti sa observi
chenarul CLI, care grupeaza elementele comune ale componentei de creare/executie a aplicatiilor .NET

CIL (Common Intermediate language) = sa nu-l confunzi cu CIL, CIL este limbajul comun intermediar,
componenta a CLI ce reprezinta starea fizica aplicatiei dupa compilare. Asa cum in C/C++/Pascal noi
compilam aplicatiile din fisiere text c/cpp/pas in fisiere binare, in .NET aplicatiile se vor compila in asa
numitul CIL sau MSIL (Microsoft IL, e bine de stiut in caz ca-l intalnesti) care are rolul de a desprinde
aplicatia de mediul de executie si sistemul de operare (SO); ce inseamna asta? Inseamna ca o aplicatie
compilata in CIL se va executa indiferent de natura hardware a sistemului, in principal se refera la
procesorului (CPU) care difera de la platforma la platforma, cat timp avem mediul de execurie. In cazul
a .NET Framework-ului avem CLR-ul. Asemanator e si java care se compileaza intr-un bytecode, el mai
apoi este rulat folosind comenzile java.exe sau javaw.exe, acestea reprezentand un fel de CLR. De
asemenea este independent de SO, astfel ca si pe Unix (Linux) exista implementari a .NET Framework-
ului, una se numeste Mono iar cealalta DotGNU si poate rula fara probleme in proportie de 70%, restul de
30% reprezentand interfetele native ale SO care sunt protejate prin patente si drepturi de autor.

Assembly = reprezinta fizic ceea ce rezulta in urma compilarii in CIL. Un assembli poti sa-l asemeni cu
class-urile din Java. Nici ele nu sunt binare 100% si sunt prelucrate de catre un CLR care in Java se
numste JRE sau Java Runtime Environment. Diferenta insa o reprezinta faptul ca pe Windows, aplicatiile
sunt intalite sub forma de executabile, iar in java class-urile sunt pur si simplu niste fisiere tip, ele avand
nevoie sa le rulezi folosind executabilul java.exe. Pt. ca pe Windows ne-am obisnuit cu exe-uri, click and
execute, aplicatiile .NET au assembly-ul “imbracat” intr-o aplicatie care preia acele functii de initializare a
mediului si automatizeaza procesul de executie.

CLR (Common Language Runtime) = eveniment de executie a limbajelor comune. Este partea din .NET
responsabila pt. interpretarea CIL, tranfsormarea lui in cod binar si executarea aplicatiei. Cum am zis mai
sus, CIL e independent de platforma hardware, insa CLR trebuie si este intotdeauna dependent de a, de
aceea daca vrei sa rulezi o aplicatie pe un PC, CLR-ul va fi alcatuit din aplicatii destinate procesoarelor
x86, procesoare ca Intel Pentium sau AMD Athon. De aceea cand se compileaza o aplicatie in cod binar
(cod de executie), acesta trebuie sa respecte seturile de instructiuni impuse de platforma. Pt. proiectul
nostru, unele dispozitive au procesoare ARM (Advanced RISC Machines), iar altele au Intel (x86 deci
CISC) si implicit si CLR-ul va fi ori pt. un tip de procesor, ori pt. altul. Avantajul il constituie ca aplicatia nu
mai trebuie recompilata daca o muti de pe un PDA CISC pe unul RISC. Sper ca ai inteles rostul acestui
CLR si relatia lui cu CIL. Deigur… in realitate sunt multe specificatii pt. diverse procesoare si platforme
diferite fiecare avand propriul set de instructiuni. N-ar avea rost sa car o aplicatie compilata in nshpe
platforme in caz ca poate poate o as fie nevoie… CLR-ul elimina aceasta grija. Un alt aspect al mediului
.NET o reprezinta codul menajat sau manged code, ce se refera la faptul ca in timpul executiei CLR
poate sa decida daca aplicatia a efectuat o comanda gresit, de aici ii vine si denumirea de “menajat”.
Aceasta faciliate ajuta dezvoltatorul la corectarea aplicatiilor mai eficient pt. ca odata cu prirea executiei
CLR-ul mai colecteaza si informatii despre eroarea produsa pe cand in programarea nativa dezvoltatorul
ramane doar cu un mesaj simplu de eroare sau mai rau un ecran albastru.

JIT (Just-In-Time Compiler) = este motorul de compilare folosit de catre CLR pt. a transorma CIL in
cod binar / cod masina si totodata si o metoda de compilare. Dupa nume reprezinta compilare chiar-la-
timp, adica se face in momentul executiei. In imagine nu se vede dar el reprezinta motorul CLR, iar
Compiler-ii de dinafara CLI-ului sunt altceva, ei fac din cod text in CIL. JIT, prezent in CLR compileaza din
CIL in cod binar.

Runtime si Runtime Environment = reprezinta momentul executiei si mediul in care petrece


momentului executiei, Environmentul fiind acele aplicatii specifice platformelor hardware si software.

Cam atat cu Termenii de baza… mai vin si altii dar astia sunt importanti.

Ca rezumat: in .NET, un program creat in C# la compilare va fi transformat in CIL rezultand intr-un


assembly, iar la rulare, acel assemby este interpretat de catre CLR si transformat in cod nativ / cod
masina.

.NET Framework
Pt. a intelege mai bine o sa facem o analogie cu diverse medii de programare / aplicatii.

.NET Framework este o componenta software ce se poate adauga SO Windows (deci nu vine preinstalat cu
acesta, pe PDA-uri trebuie preinstalat, evident). Aceasta componenta vine cu o multime de solutii
preprogramate pt. a rezolva multe din cerintele programarii generale pe platforma Windows. Cateva
genuri de solutii sunt legate de interfetele grafice cu utilizatorul si controlul acestora, accesul de date,
conectivitate cu baze de date, criptografie, dezvoltarea aplicatiilor web, algoritmi numerosi si comunicatii
in retele.

Prin .NET Framework se intelege tehnologia in general, dar aceasta denumire inseamna unul din mai
multe lucruri:
- poate semnifica componenta software ce ajuta la rularea aplicatiilor destinate platformei .NET. Aceasta
are numele .NET Framework Runtime, adesea omitandu-se terminatia “Runtime” pt. ca este componenta
cel ma des folosita
- poate semnifica componenta software folosita la dezvoltarea aplicatiilor .NET. In acest caz denumirea
este .NET Framework SDK (Standard Development Kit = Solutie de dezvoltare standadr). Acesta contine
compilatorul, declararile namespace (using System;) cat si documentatia necesara programatorilor.
Denumirea ei trebuie sa contina terminatia SDK.

Astfel avem .NET Framework adica Runtime-ul si .NET Framework SDK. Abele impreuna facand parte din
tehnologia .NET Framework.
Importanta:
Pt. programatorii Windows, .NET reprezinta un pas important in dezvoltarea tehnologiei Microsoft
deoarece asigura ca orice program .NET, scris in orice limbaj .NET va functiona fara probleme (daca e
codat bine) si mai asigura comunicarea de la program la program cu complexitate redusa datorita .NET
Framework-ului general spre deosebire de tehnologiile anterioarea unde ba mai lipsea un dll, ba era o
versiune incompatibila.

Ratiune fundamentala:
Microsoft spune ca platforma .NET reflecta experienta acumulata dealungul anilor in problemele intalnite
de programatori si module de abordare a acestor probleme.
Insa limbajul Java si platforma J2SE/J2EE au devenit cei mai buni competitori tehnologiilor Microsoft iar
unii cred ca .NET este un raspuns pt. aceasta competitie tehnologica.

Intentii de design si capabilitati:


.NET framework a fost creat avan in gand anumite intentii:
1. Interoperabilitatea, pt. ca interactiunea dintre aplicatiile vechi si cele noi (.NET) este adesea
necesara, .NET Framework-ul prea aceasta cerina punand la dispozitie componente de interoperabilitate
2. Common Runtime Engine, dupa cum am spus mai sus, programele scrise in orice limbaj se
compileaza in CIL folosind JIT care mai apoi sunt rulate prin CLR iar aceasta combinatie de tehnici se
numeste CLI :)
3. Independenta Limbajului, in .NET Framework s-a introdus CTS-ul (Common Type System =
Sistem Comun de Tipuri) prin care s-a definit toate tipurile si posibilitatile de tipuri de date sau constructii
de program suportate de catre CLR si felul in care pot sau nu sa interactioneze unul cu altul. Din acest
motiv in .NET Framework se poate programa in mai multe limbaje.
4. Base Class Library (BCL), uneori se mai face referire la BCL ca si Framework Class Library (FCL) si
reprezinta acele clase/biblioteci ce incorporeaza functii ca scriere/citire de fisiere, conectivitate la baze de
date, manipulare de documente XML etc.
5. Securitate, in .NET programele se pot configura sa ruleze la diferite nivele de securitate fara a folosi
conceptul de sandbox.

Sandbox = reprezinta un concept prin care intr-un mediu izolat de mediul real se fac testari ale aplicatiei.
Pe Windows acest concept se poate asemana cu un utilizator sub care este rulat un program, iar
utilizatorul apartinand unui grup de utilizatori cu restrictii maxime. Acest grup nu poate sa faca modificari
persistente asupra sistemului ci doar temporare, iar la restart lucrurile revin la starea initiala. De aici
rezulta si denumirea de sandbox (locul de joaca in nisip al copiilor, unde creaza in voie ce vor ei fara sa
deranjeze mediul de joaca din jurul acelui loc)

Prin design, .NET Framework poate creaza aplicatii independente de platforma (am explicat mai sus) insa
pana in prezent, platforma .NET Framwork are o implementare finala si completa doar sub Windows, iar
pt. alte sisteme de operare este doar partial implementata.

Acum descriu pe scurt cam ce contine arhitectura .NET Framewrok:


1. CLI: Rolul acestei componente l-am descris, pe scrut CLI-ul nu vrea sa stie in ce limbaj a fost creata
aplicatia ci il intereseaza doar CIL-ul, iar aici intervin mai restul componentelor:
- CTS (Common Type System)
- CLS (Common Language Specification = reprezinta un set de reguli pe care trebuie sa le
respecte orice limbaj ce este destinat CLI-ului… ca exemplu pot sa dau limbajul Visual Basic .NET care
difera cu mult fata de Visual Basic 6, si care a fost modificat astfel incat sa se comporte ca si C# in ceea
ce priveste stilul de programare. Va exista tot sintaxa punct (namespace.clasa.metoda(paramerii)) si
astfel putand sa fie folosite toate resursele de progrmare (bibliotecile) puse la dispozitie.
- CIL
- JIT
- VES (Virtual Execution System = aduce suport pt. executarea codului CIL) ce este asemanator
emulatorului de PDA pe PC, in care codul compilat este destina acelui SO si procesor, insa emulatorul
traduce acel cod si face posibila executia lui pe PC.
2. Assemblies: (explicatia generala am dat-o mai sus) codul CIL este gazduit in assembly-uri .NET, care
in Windows inseamna fisiere executabile portabile (PE = Portable Executable) EXE sau DLL. Un assembly
poate sa contina mai multe fisiere dar unul din ele trebuie sa fie obligatoriu un manifest, care este un
fisier metadata pt. respectivul assembly. Acest manifest va contine numele complet al assembly-ului si
optional numarul de versiune, cheia publica (care este folosita pt. validarea autenticitatii aplicatie)

metadata = simplu explicat reprezinta date despre date insa difera putin fata de ceea ce am scris mai
jos. Acest metadata reprezinta descrierea assembly-ului prin cateva date…

3. Metadata: in CIL se foloseste metadata .NET prin care se asigura ca executarea unei metode se face
exect asa cum este declarata in assembly. Practic se refera la un fel de a controla corectitudinea codului,
ducand la o executie cat mai sigura lipsita de erori prin adaugarea de etichete (date) ajutatoare
compilatorului.
4. BCL … pe care l-am explicat mai sus. Practic, multi programatori C/C++ (etc) “reinventeaza roata”
creand clase pt. diverse functonalitati pt. care exista deja o implementare, iar BCL are acest rol de a
umple golul… in final programatorul .NET trebuie doar sa foloseasca implementarea fara se mai complice
sa o creeze.

Securitate:
La capitolul acesta in .NET s-au implementat 2 metode: CAS (Code Access Security) si Validare si
Verificare. In timpul executiei CLR verifica assembly-ul incarcat folosind diverse informatii incluse in
assembly cat si testarea si verificarea lui (a metodelor lui) in procesul de rulare inate de a fi expus
utilizatorului sau sistemului in care se ruleaza => cod menajat (mentionat la CLR).

Standardizare:
La sfarsitul lui 2001, atat limbajul C# cat si CLI au devenit standarde ECMA iar in 2003 au devenit si
standarde ISO. Patentele pt. acestea, desi sunt detinute de Microsoft si partenerii sai, ele trebuie sa fie
oferite sube termenii RAND (rezonabili si non-discriminatorii). Insa nu tot ce tine de .NET Framework a
fost inclus in standardizare asa ca Windows Forms, ADO.NET (ActiveX Data Objects .NET = o
interfata de conecatre la diversele sisteme de gestiune a bazelor de date) si ASP.NET sunt detinute
exclusiv de catre Microsoft si pot impiedica implementarile lor in alte platforme decat Windows sau .NET
Framework (am zis mai sus de implementari non-Windows ale .NET Framework-ului).

Versiuni:
In noiembrie 2000 a aparut versiunea 1.0 beta 1, iar in noi. 2005 a fost lansata ver. 2.0 (pe care lucram
noi). Desi exista si versiunea 3.0, lansata in noi. 2006, aceasta este doar 2.0 cu un plus de componente
pt. Windows Vista. Cum tinta noastra este Windows Mobile 2005, nu avem nevoie de acele componenete.

beta = este o eticheta data aplicatiilor in curs de dezvoltare dar intr-un stadiu apropiat de finalizare si
facute publice pt. testare si depanare doritorilor de exploatare a tehnologiilor noi

final = se refera la prima versiune majora, 1.0, a aplicatiei gata pt. comercializat sau la care obiectivele
dezvoltarii (intentii de design de mai sus) au fost indeplinite in totalitate
.NET Compact Framework
Ca denumire o sa folosesc CF pt. a face referire la .NET Compact Framework si PDA pt. a face referire la
dispozitive mobile Pocket PC.

CF reprezinta pe parte de Runtime un Framework destina PDA-urilor. Avand in vedere ca acesta include
CLR care depinde de procesor, CF vine in mai multe “arome” (flavors) pt. a satisface multitudinea de
procesoare care stau la baza PDA-urilor.
In general procesoarele sunt ori Intel x86, cum sunt si cele PC gen Athlon, Duron, Petium 4 deci
proceseare CISC (Complex Instruction Set Computer) ori ARM (Advanced RISC Machines) care sunt mici
procesoare RISC (Reduced Instruction Set Computer).

Iar pe parte de SDK, CF reprezinta un subset al .NET Framework-ului SDK plus cateva biblioteci utile doar
PDA-urilor cum ar fi WindowsCE InputPanel.

! In .NET Framework SDK, namespace-ul WindowsCE se refera in general la interfete specifice Windows-
urilor mobile, pt. a nu modifica namespace-ul si a evita problemele ce pot aparea din cauza ca in program
se scrie efectiv “WindowsCE” acesta este valabil si pt. SO non-WindowsCE ca Windows Mobile.

Un avantaj pe care il reprezinta CF este, daca este instalat CF-ul pt. desktop-uri, aplicatia destinata PDA-
urilor poate rula si pe PC fara probleme atata timp cat se respecta limitarile si nu se rezuma doar la
aspectul vizual. Pt. asta se recomanda folosirea emulatorului sau a unui PDA real. Insa codul, citirea de
fisiere, accesarea resurselor internet, se poate face transparent pe PC cum s-ar face si pe PDA.

Noi la inceput o sa facem aplicatia pe buncati… care vin testate pe PC, si poate si demonstrate indrum.,
mai apoi vin “lipite” in aplicatia finala si finalizat proiectul.

C# este limbajul de baza pt. platforma .NET, a fost introdus prima oara sub versiunea 1.0 in Visual
Studio .NET (2002) si reprezinta un hibrid intre C++ pt. simplitatea sintaxei limbajului si Java pt. puterea
programarii orientate pe obiect si virtualizare. C# a fost ulterior aprobat de ISO si ECMA (European
Computer Manufacturers Association).

C# are la baza CLI-ul insa nu a fost facut sa concureze cot la cot cu C++-ul.
Limbajul prezinta unele limitari dar si unele avantaje fata de C++:
- nu are variabile sau metode globale, toate trebuie sa fie declarate intr-o clasa (rol abstract)
- functii aparent globale, ca printf() din C, trebuie sa faca parte dintr-o clasa
- in C# nu se mai permite ca true sau false sa fie tot una cu intregii 1 sau 0
- pointerii pot fi utilizati dar numai in cazul in care blocul de program este declarat unsafe, iar daca o
aplicatie contine astfel de blocuri are nevoie de permisii speciale pt. a rula, acestea putand fi setate printr-
un fisier de declarare a securitatii sau in configuratorul .NET Framwork-ului (Runtime)
- memoria menajata nu poate fi eliberata explicit cum se facea in C++ cu ajutorul destructorilor sau a
functiei free(), in schimb se foloseste un Garbage Collector ce are rolul de a verifica automat ce zone de
memorie trebuie eliberate; in cazul C++, daca un obiect nu este distrus si instanta lui nu mai este valida,
memoria ocupata, ce poate contine date critice, se numeste memory leak si contituie o problema majora
in aplicatiile prost programate
- mostenirea multipla nu este suportata; decizia aceasta a fost luata de arhitectul sef al limbajului, Anders
Hejlsberg, pt. a evita complicatii numite si “dependency hell”. Se refera la faptul ca o daca ce s-au creat
sute de clase si fiecare su mosteniri complexe, pe parcursul dezvoltarii va fi destul de greu sa se
urmareasca si dirija dezvolarea intr-un mod eficient iar securitatea si stabilitatea sunt puse la incercare de
catre factorul major, eroarea umana.
- system de tipuri unificat (unified type system), toate tipurile sunt membrii ai namespace-ului
System.Object si au implicit metoda ToString() prin care un programator poate jongla cu tipul si valorile
variabilelor
… si altele.

Un namespace, de ex. System.Object, este ceva asemanator unui header din C. Daca acesta nu se
defineste el trebuie specificat inainte de obiect folosind sintaxa punct. Reprezinta o grupare de clase pe
baza functionalitatii acestora. Si aplicatiile pe care le faci sunt incluse inpropriul namespace pt. ca daca
declari clase cu denumiri deja existente ca ele sa poate coexista trebuie diferentiate cumva, iar un
namespace are acest rol.

Un mic programel in C#
1. Deschide Visual Studio 2005
2. La File > New > Project, selecteaza Visual C# > Windows > Windows Application
3. Dai un nume la proiect si eventual modifica “location” pt. a gasi mai usor aplicatia
4. OK

Prin faptul ca ai selectat Windows Application, VS2005 iti va crea automat fisierele necesare pt. crearea
aplicatiei iar daca rulezi acum aplicatia ea iti va afisa doar acea fereastra goala care se vede in VS2005.
Rularea se face ori de la toolbar-ul Debug, butonul verde, ori din meniul Debug, ori apasand F5. Daca
selectezi rularea doar a aplicatiei fara sprijin de depanare ea se va executa mai repede…

In solution explorer ai proiectul creat. In acesta ai folderul Properties ce contine fisierul AssemblyInfo.cs.
Acest fisier este acel manifest (metadata) mentionat mai sus, in care poti sa-ti stabilesti datele ce vor fi
scrise la Versiunea aplicatiei (click dreapta pe aplicatie, Properties, Version). In loc de
WindowsApplication1 sau numele pe care l-ai dat la proiect, la AssemblyTitle scrie ce vrei tu. Dupa rulare
din VS2005, daca te duci in directorul proiectului la proprietatiile aplicatiei din Debug se va modifica cu
ceea ce ai scis.
Resources.resx este fisierul in care se vor introduce datele binare ce vor fi integrate in aplicatie. Daca o sa
avem nevoie aici o sa declaram ca vrem sa contina imagini.

Tot in solution explorer ai folderul References. In acesta trebuie sa adaugi referinte in momentul in care se
foloseste un alt namespace decat cele prezente. De ex. namespace-ul Syste.Net ce ne ajuta sa descarcam
informatii de pe internet trebuie declarat, altfel cand tiparim ceva nu o sa mai avem suportul IntelliSense.
Cand tastezi Mess iti va aparea o lista cu toate posibilitatile de metode/clase deja existente ce incep cu
acele litere. Poti sa fol. si CTRL+Spatiu sa scoti acel meniu.

In fereastra principala ai in prim plan formularul de baza in modul design. Daca dai dublu clic pe el vei
intra in modul de programare si acolo poti sa scrii codul tau.

Metoda Form1_load se refera la evenimentul de pornire al aplicatiei… poti sa o stergi ca nu avem nevoie
de ea.

1. Deseneaza un buton si o casuta text cu ajutorul toolbox-ului din stanga. Daca nu se vede apasa
CTRL+ALT+X.
2. Dublu clic pe buton si scrie in button1_Click:
this.textBox1.Text = "yupeeee!";
3. Ruleaza aplicatia.

Cam asa se face o aplicatie… :)


Daca esti curioasa poti incerca si alte lucruri, sa schimbi proprietatiile sau sa incerci si alt obiecte vizuale.
Dupa clasa Form1 creaza clasa (abstracta) msg (fara copy/paste):

public class msg


{
public string a = "yahoooo!";
}

Iar in button1_Click scrie:

msg mesaj = new msg(); // aici creezi obiectul mesaj de tip si clasa msg
this.textBox1.Text = mesaj.a; // aici accesezi proprietatea “a” a obiectului mesaj

textBox1 e doar denumirea elementului. In panoul Properties, poti seta la Name acest nume iar cand vrei
sa folosesti obiectul il adresezi prin nume. Acelasi lucru si pt. button_1, iar la evenimentul (functia)
button1_Click trebuie sa-l redenumesti si pe acesta dupa noul-nume_Click

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