Microsoft Visual Studio

Programare orientată pe obiecte Curs 7 Microsoft Visual Studio Microsoft Visual Studio este un mediu de dezvoltare integrat (integrated development ...
Author: Emmeline Clark
22 downloads 0 Views 593KB Size
Programare orientată pe obiecte

Curs 7

Microsoft Visual Studio Microsoft Visual Studio este un mediu de dezvoltare integrat (integrated development environment - IDE) de la Microsoft. Acesta poate fi folosit pentru a dezvolta aplicaţii consolă şi aplicații cu interfaţă grafică pentru toate platformele suportate de Microsoft Windows (ex. .NET Framework, Windows Mobile etc).

Istoricul versiunilor

Denumire Visual Studio Visual Studio 97 Visual Studio 6.0 Visual Studio .NET (2002) Visual Studio .NET 2003 Visual Studio 2005 Visual Studio 2008 Visual Studio 2010 Visual Studio 2012 Visual Studio 2013 Visual Studio 2015

Versiune 4.0 5.0 6.0 7.0 7.1 8.0 9.0 10.0 11.0 12.0 14.0

Versiunea .NET Framework N/A N/A N/A 1.0 1.1 2.0 3.5 4.0 4.5 4.5.1 4.6

Anul lansării 1995 1997 1998 2002 2003 2005 2007 2010 2011 2013 2015

Anterior versiunii Visual Studio 4.0 a existat Visual Basic 3, Visual C++, Visual FoxPro și Source Safe ca și produse independente. Microsoft Visual Studio oferă editor, compilator/debugger și mediu de proiectare (designer) pentru mai multe limbaje de programare. Limbaje de programare incluse: Microsoft Visual C++, Microsoft Visual C#, Microsoft Visual Basic, Microsoft Visual Web Developer, Team Foundation Server.

Limbaje anterioare: Visual FoxPro (eliminat în 2007), Visual SourceSafe (întrerupt începând cu Visual Studio 2008), Microsoft Visual J++/ Microsoft Visual J # (întrerupt începând cu Visual Studio 2008), Visual InterDev (înlocuit cu Microsoft Visual Web Developer). Pe lângă limbajele amintite anterior, Microsoft Visual Studio oferă suport și pentru alte limbaje, cum ar fi M, Python, Ruby. De asemenea, sprijină XML/XSLT, HTML/XHTML, JavaScript și CSS. 1

Programare orientată pe obiecte

Curs 7

Visual studio este oferit în mai multe variante: Express, Professional, Premium, Ultimate, Test Professional. .NET Framework este o platformă/cadru (Framework) de dezvoltare software unitară, înzestrată cu un set mare de clase, structuri, enumerări etc., organizate într-un set de spaţii de nume (namespaces) bazate pe un limbaj comun. .NET Framework este o componentă livrată împreună cu sistemul de operare Windows. Ultima versiune de .NET Framework este .NET Framework 4.6 și este inclusă în Windows 10. Tehnologia .NET pune laolaltă mai multe tehnologii (ASP, XML, OOP, SOAP, WDSL, UDDI) şi limbaje de programare (ex.: C++, VB, C#) asigurând, totodată, atât portabilitatea codului compilat între diferite calculatoare cu sistem Windows, cât şi reutilizarea codului în programe, indiferent de limbajul de programare utilizat. Pentru a fi integrate în platforma .NET, limbajele de programare sus amintite respectă un set de caracteristici de bază Common Language Specification (CLS), astfel asigurându-se interoperabilitatea între aplicaţii, indiferent de limbajul folosit pentru crearea acestora. CLS-ul definește și un set de tipuri - Common Type System (CTS). Ca elemente de bază, limbajele de programare au: clase, interfeţe, delegări, tipuri valoare şi referinţă, iar ca mecanisme: moştenirea, polimorfismul şi tratarea excepţiilor. Limbajele au o platformă comună de executare numită Common Language Runtime (CLR). Toate aceste limbaje folosesc un ansamblul de biblioteci necesare în realizarea aplicaţiilor desktop sau Web, numit Framework Class Library (FCL). În figura de mai jos este arhitectura pentru .NET Framework.

Componenta .NET Framework este formată din compilatoare, biblioteci şi alte executabile utile în rularea aplicaţiilor .NET. Fişierele corespunzătoare se află, în general, în directorul C:\WINDOWS\Microsoft.NET\Framework\V…. (corespunzător versiunii instalate).

Compilarea programelor Un program scris într-unul dintre limbajele .NET conform Common Language Specification (CLS) este compilat în Microsoft Intermediate Language (MSIL sau IL). Codul astfel obţinut are extensia ".exe", dar nu este direct executabil, ci respectă formatul unic MSIL. 2

Programare orientată pe obiecte

Curs 7

CLR include o maşină virtuală asemănătoare cu o maşină Java, ce execută instrucţiunile IL rezultate în urma compilării. Maşina foloseşte un compilator special JIT (Just In Time). Compilatorul JIT analizează codul IL corespunzător apelului unei metode şi produce codul maşină adecvat şi eficient. El recunoaşte secvenţele de cod pentru care s-a obţinut deja codul maşină adecvat, permiţând reutilizarea acestuia fără recompilare, ceea ce face ca, pe parcursul rulării, aplicaţiile .NET să fie din ce în ce mai rapide. Faptul că programul IL produs de diferitele limbaje este foarte asemănător are ca rezultat interoperabilitatea între aceste limbaje. Astfel, clasele şi obiectele create într-un limbaj specific .NET pot fi utilizate cu succes în altul. Pe lângă cele de mai sus, CLR-ul se ocupă și de gestionarea automată a memoriei (eliberarea automată a zonelor de memorie asociate unor date devenite inutile). Privitor la portabilitate, .NET Framework are la bază standardul Common Language Infrastructure, ceea ce face ca aplicaţiile .NET să ruleze, în afară de Windows, şi pe unele tipuri de Unix, Linux, Solaris, Mac OS X şi alte sisteme de operare. Dintre avantajele utilizării platformei .NET Framework putem enumera:  oferă instrumente pe care le putem folosi şi în alte programe;  oferă acces uşor la baze de date;  permite realizarea desenelor sau a altor elemente grafice.  spaţiul de nume System.Windows.Forms conţine instrumente (controale) ce permit implementarea elementelor interfeţei grafice cu utilizatorul;  oferă clase care efectuează majoritatea sarcinilor uzuale cu care se confruntă, reducând astfel timpul necesar dezvoltării aplicaţiilor.

Limbajul C# Limbajul C# a fost dezvoltat de o echipă de ingineri de la Microsoft în frunte cu Anders Hejlsberg (autorul limbajului Turbo Pascal şi membru al echipei care a proiectat Borland Delphi). C# este un limbaj simplu, cu circa 80 de cuvinte cheie şi 12 tipuri de date predefinite. El permite programarea structurată, modulară şi orientată obiectual, conform perceptelor moderne ale programării profesioniste. Principiile de bază ale programării orientate pe obiecte (încapsulare, moștenire, polimorfism) sunt elemente fundamentale ale programării C#. La baza acestuia stă limbajul C dar sunt preluate și principiile de programare din C++. Sintaxa este apropiată și limbajului Java. Au fost adăugate o serie de tipuri noi de date sau funcţiuni diferite ale datelor din C++, iar în spiritul realizării unor secvenţe de cod sigure (safe), unele funcţiuni au fost adăugate (de exemplu, interfeţe şi delegări), diversificate (tipul struct), modificate (tipul string) sau chiar eliminate (moştenirea multiplă şi pointerii către funcţii). Unele funcţiuni (cum ar fi accesul direct la memorie folosind pointeri) au fost păstrate, dar secvenţele de cod corespunzătoare se consideră „nesigure”. În momentul în care Microsoft a decis să susțină și să dezvole C# s-a hotărât ca acesta să aibă o legatura deosebita cu mediul sau de rulare, arhitectura .NET. Pe de o parte, C# a fost dezvoltat pentru crearea codului pentru arhitectura .NET, iar pe de alta parte bibliotecile utilizate de C# sunt cele ale arhitecturii .NET. Atunci cand este compilat un program C#, rezultatul compilarii nu este un cod executabil ci se se produce un fisier într-un limbaj. Acest fisier IL poate fi copiat in orice calculator care dispune de .NET CLR, prin intermediul compilatorului JIT (Just In Time), motorul comun de pogramare transforma codul intermediar in cod executabil.

3

Programare orientată pe obiecte

Curs 7

Gestionarea automată a memoriei Prin intermediul operatorilor new şi delete, în C++, programatorul gestionează manual memoria ceea ce conferă avantaje dar şi dezavantaje. Avantaje: o permite un control foarte precis asupra momentului în care este distrus un obiect, astfel folosindu-se memoria exact atât cât este nevoie; o permite folosirea destructorilor, astfel obiectele fiind întotdeauna şterse corespunzător. Dezavantaje: o riscul de a apela prea târziu (sau deloc) operatorul delete. Omiterea apelării operatorului delete nu este în general fatală pentru program, dar conduce la ocuparea memoriei mai mult decât este necesar (memory leakage). Memory leak este o eroare de programare în care programatorul a alocat memorie pe heap utilizând funcţiile din libraria standard C (malloc, calloc, realloc) sau operatorul C++ new, dar nu a mai dezalocat memoria alocata . Acest fapt reprezintă o problemă deoarece consumul de memorie al aplicaţiei poate creşte în mod necontrolat. Problema devine critică mai ales în cazul aplicatiilor care trebuie sa ruleze un timp îndelungat (de exemplu un server de baza de date, sau un server web, un filesystem ... etc). o riscul de a apela prea devreme operatorul delete –este o problemă mult mai gravă.

Exemplu: //cream un obiect Punct *P=new Punct(); //il transmitem unei funcţii oFunctie(P); //folosim obiectul P->daX();//!!!!!!obiectul a fost şters în funcţie. EROARE!!!!! ... void oFunctie(Punct *pct){ //foloseşte obiectul pct->daX(); //s-a terminat de folosit obiectul??? delete pct; }

Ca şi Sun Microsystems în cazul limbajului Java, Microsoft a decis că dezavantajele gestionării manuale a alocărilor făcute depăşesc avantajele oferite, de aceea s-a trecut la gestionarea automată a memoriei. Se pot crea în continuare obiecte în mod dinamic, dar ştergerea obiectelor intră în responsabilitatea sistemului, nu a programatorului. Sistemul urmăreşte referirile la obiecte şi atunci când un obiect nu mai este referit, devine un candidat pentru “colectarea gunoiului”. Consecinţe: nu se poate şti când se face colectarea gunoiului pentru un obiect.

4

Programare orientată pe obiecte

Curs 7

Tipuri fundamentale de date în C# Limbajul C# include două categorii de tipuri de date : tipuri valorice si tipuri referință. Conform MSDN, tipurile valoare se clasifica astfel : Tipuri numerice a)Intregi În C# sunt definite 9 tipuri de întregi : char, byte, sbyte, short, ushort, int, uint, long, ulong. Cu excepția lui char, toate sunt folosite la calcule numerice. Variabilele de tip int se utilizează în controlul buclelor, indexarea tablourilor, aritmetica normală cu numere intregi. Se recomandă ca atunci când este nevoie de o valoare ( fără semn ) care depășește domeniul lui int, să se folosească uint. În cazul valorilor mari este recomandat long, iar la cele fara semn, ulong.

b) În virgulă mobilă Tipurile în virgulă mobilă se utilizează pentru reprezentarea numerelor care au parte fracționară. Există două tipuri : float, double.

c) Decimal Tipul decimal este folosit în calculele monetare. El are avantajul că elimină erorile de rotunjire atunci când se lucrează cu valori fracționare, pentru că poate reprezenta în mod precis până la 28 de poziții zecimale. Tipul decimal nu exista in C, C++, Java.

5

Programare orientată pe obiecte

Curs 7

d) Tipuri Bool Tipul bool reține valorile de adevăr ( “true” ) și fals ( “false” ). Orice expresie de tipul bool va lua una din aceste valori. Important: Nu se poate converti. e) Caractere In C#, pentru caractere se utilizează modelul Unicode. //declararea unei variabile char cu valoare implicita '\0' char ch; ch = 'b'; //afisarea valorii din standardul UNICODE pentru un caracter //are loc conversia catre un int Console.WriteLine("Valoarea lui {0} in standardul UNICODE este {1}",ch,(int)ch); Structura – tip valoare propriu Acest tip este asemantor cu cel din C++. Deoarece este un tip valoric, va fi stocat în stivă. Atât timp câ structura este rezonabilă în ceea ce priveste mărimea, nu vor fi probleme cu administrarea memoriei. O structura poate conține declarații de constante, câmpuri, metode, proprietăți, indexatori, operatori, constructori. Exemplu: struct Persoana { public string nume; public string prenume; public int varsta; } Tipul enumerare Tipul enumerare se definește de programator și se aseamănă cu cel din C++. Acest tip permite folosirea numelor cărora li se atribuie o valoare. Este recomandată declararea și definirea enumerărilor direct în interiorul unui spațiu de nume, pentru a putea fi folosită de toate clasele. Sintaxa pentru a defini o enumerare este : [atribute] [modificatori] enum NumeEnum : [tip] In cazul in care nu se specifică tipul enumerării, acesta este considera implicit int. ( [] – optional ) namespace tipulEnum { enum ZileSaptamana { Luni = 1, Marti, 6

Programare orientată pe obiecte

Curs 7

Miercuri, Joi, Vineri, Sambata, Duminica } } Important: Implicit, valoarea primului membru din enumerare este 0. Tipurile enum sunt derivate din clasa System.Enum, derivata din System.ValueType.

Tipurile nullable Sunt tipuri valoare pentru care se pot memora valori posibile din aria tipurilor de baza, inclusiv valoare null. Valoarea unei variabile conține valoarea implicită a tipului, daca nu este initializată explicit. Se folosesc atunci când se dorește ca valoarea implicită a variabilei să nu fie definită.

Exemplu: Nullable a ; //Un alt mod de a declara o variabila de acest tip este: int? a = null; //iar verificarea se poate face in felul urmator: Console.WriteLine(“valoarea variabilei este {0}”, a ?? “null”);

C++ vs C# C++ este un limbaj de programare care are capabilități high-level (POO) și low-level(lucrul cu pointerii, adresele de memorie etc). C++ este privit ca un “mid-level language”. C# este un limbaj simplu, modern orientat obiect și “type-safe programming language” (ex.: nu ești lăsat să faci unele declarații care în C++ generau erori gen “Access violation”) 1) În .Net este implementat Garbage Collector, “unealta” care permite gestionarea automată a memoriei. Nu mai este obligatorie folosirea operatorilor “delete” sau “delete[]” din c++, framework-ul se ocupa de memorie, decide dacă anumite zone de memorie si-au încetat activitatea și le dealocă automat. Din acest motiv, de multe ori, destructorii în C# au doar un rol simbolic. 2) Codul C++ este compilat în cod assembly, pe cand codul c# este compilat in “Intermediate language” (sau pe scurt IL), apoi acesta este compilat în executabil printr-o metoda Just-In-Time Compilation. O altă mare diferență față de C++. 7

Programare orientată pe obiecte

Curs 7

3) În C# obiectele simple precum int, float, double, sau struct-urile sunt create pe stiva, iar clasele întotdeauna în coadă. În C++ un șir este pur și simplu o serie de caractere. În C #, sirurile de caractere sunt obiecte ale clasei String, clasă înzestrată cu o gamă largă de metode. 4) În C++ un tablou este doar un pointer. În C# tablourile sunt obiecte care includ metode și proprietăți (exemplu: dimensiunea unui tablou poate fi obținută prin intermediul proprietății Length). Mai mult, în C# este verificat fiecare indice utilizat pentru a accesa elementele tabloului. Există diferențe și de sintaxă pentru declararea tablourilor: semnul "[]" apare în C# după tipul elementelor tabloului în timp ce în C++ apare după variabilă. Exemplu: C#: int[] tablou; C++: int tablou[5]; 5) Pointerii sunt permiși în C #, dar numai în mod ”unsafe”. 6) În C# metodele și variabilele globale nu sunt acceptate. Metodele și variabilele trebuie să fie conținute într-o clasă sau într-o structură. Metoda Main() în C# este declarată în mod diferit față de funcția main() din C++. În C# numele acestei metode începe cu majusculă și este întotdeauna de tip static. Diferă și argumentele din linia de comandă. Dacă în C++ toate variabilele sunt transmise prin valoare (cu excepția cazului în care se utilizează pointeri sau o referințe), în C# clasele sunt transmise prin referință și structurile sunt transmise prin valoare, cu excepția cazului în care se folosește explicit modificatorul ref sau out. În C # delegații sunt aproximativ la fel cu pointerii de funcții din C++. 7) C# suportă operatori noi, cum ar fi is și typeof. De asemenea sunt suportate diferite funcționalități pentru unii operatori logici. Supraîncărcarea operatorilor se realizează în mod diferit în C #. 8) În C# instrucțiunile if /else , while, for sunt la fel ca în C++. switch diferă prin faptul că este obligatoriu să se pună break după fiecare case. În C# se poate folosi foreach: int[] v = new int { 1, 4, 7, 9, 11, 25, 6 }; foreach (int i in v)//aici se creaza de fiecare data un obiect virtual int if (i % 2 == 0) Console.WriteLine(i);//echivalent cout

Suggest Documents