Baze de Date – Cadru General

=== 8e9ec0665bdba6d9bfb5cced44c3fc93cc2d5b94_545469_1 ===

Baze de date – cadru general

Noțiunea de bază de date apare la sfârșitul anilor ’60. La vremea apariției bazelor de date, aplicații cu volum mare de date erau organizate în jurul fișierelor independente, denumite arhitecturi file-based sau flat files.

O bază de date este alcătuită din fișierele de date propriu-zise, un fișier destinat stocării structurii acestora și relațiilor dintre ele, precum și o serie de restricții ce pot fi definite asupra câmpurilor și înregistrărilor din fișiere.

Un sistem de gestiune a bazelor de date (SGBD) reprezintă software-ul propriu-zis al acestuia care asigură realizarea activităților: definirea structurii BD; încărcarea datelor în BD; accesul la date; întreținerea BD; reorganizarea BD și securitatea datelor.

Obiectivele unui SGBD sunt: asigurarea unei redundanțe minime și control al datelor; asigurarea unor facilități sporite de utilizare a datelor; sporirea gradului de securitate a datelor împotriva accesului neautorizat; asigurarea integrității datelor; asigurarea partajabilității datelor (sub aspectul accesului mai multor useri la același date și dezvoltarea unor aplicații fără a se modifica structura BD).

Un SGBD îndeplinește mai multe funcții. Una intre acestea este funcția de descriere a datelor, care face posibilă descrierea bazei de date, folosind limbajul de definire. Datele sunt definite la mai multe niveluri, respectiv conceptual, logic și fizic. Prin această funcâie, sunt descrise atributele bazei de date, legăturile dintre entitățile care o compun, se stabilesc criteriile de validare, modul în care datele pot fi accesate, precum și aspectele referitoare la confiențialitate și integritate.

O altă funcție este cea de manipulare a datelor, prin aceasta bazele de date fiind create, putând fi adăugate înregistrări, se poate schimba valorarea câmpurilor, și se pot căuta, edita și sorta o serie de înregistrări virtuale.

O a treia funcție este cea de utilizare, prin aceasta fiind asigurate interfețele utile pentru ca utilizatorii să comunice cu baza de date. Există mai multe tipuri de utilizatori: utilizatori liberi (conversaționali), aceștia fiind beneficiarii finali ai informațiilor, nefiind informaticieni, ei folosind în manieră simplă limbajele de interogare; programatori, aceștia fiind cei care folosesc limbaje de manipulare cu scopul efectuării unor proceduri complexe asupra bazelor de date; administratorul bazei de date, acesta având rolul cel mai important pentru ca sistemul în ansamblu să funcționeze la parametri optimi.

O a patra funcție este reprezentată de cea de administrare a bazei de date, aceasta fiind realizată de către administrator.

In realizarea unor SGBD performante, a avut o foarte mare importanță teoria relațională, care reprezintă un sistem de concepte, metode și instrumente. SGBD sunt aplicații folosite într-un număr mare de sectoare de activitate pentru organizarea, stocarea, administrarea și utilizarea informațiilor existente(numite date). Pentru organizarea și stocarea datelor în bazele de date, SGBD-urile utilizează modele conceptuale. Modelele conceptuale mai des utilizate sunt:ierarhic, rețea, relațional, obiectual și obiectula-relațional. SGBD corespunzător bazelor de date relaționale (SGBDR) are rolul de a gestiona aceste baze de date relaționale. Fiecare SGBDR implementează într-o manieră specificată limbajul SQL, motiv pentru care aceste implementări sunt diferite la fiecare sistem. Există două tipuri de SGBDR, în funcție de proveniența și costurile lor, respectiv sisteme comerciale (proprietare) și sisteme cu sursă deschisă (open source).

SGBDR pot fi caracterizate atât la nivel global, ca și categorie aparte de sisteme de gestiune, cât și la nivel particular, fiecare având aspecte diferite față de celelalte. La nivel global, caracterizarea se face cu ajutorul limbajelor relaționale, utilitarelor specializate, modului de protecție a datelor și a celui de optimizare a cererilor de extragere.

După criteriul limbajului relațional, SGBDR pune la dispoziție un ansamblu de comenzi cu care datele pot fi manipulate și descrise. Aceste comenzi se pot include într-un limbaj relațional unice, cum este SQL, sau în limbaje separate, ca LDD (pentru definire) și LMD (pentru manipulare), în ambele cazuri nefiind vorba de aceleași comenzi pentru definirea și manipularea datelor. LDD conțin puține comenzi, descrierile fiind memorate ca tabele în dicționarul bazei de date relaționale. Comenzile definesc o serie de operații logice, conceptuale și fizice. LMD se caracterizează în funcție de criterii generale, calitative și funcționale; la nivel general, caracterizarea se realizează în funcție de operatorii relaționali, modul de tratare a datelor, utilizatori și realizatori ai limbajului.

Protecția datelor are o mare importanță, SGBDR trebuind să o implementeze. Acest aspect se referă la integritatea datelor (din punct de vedere semantic, concurența la date, salvarea sau restaurarea lor) și la securitatea datelor (autorizarea accesului, procedurile speciale, criptarea).

Cererile de regăsire sunt exprimate prin diverse limbaje relaționale, folosindu-se interfețe automate de rescriere a cererilor de regăsire, în două etape: exprimarea cererilor de regăsire sub forma unor expresii algebrice relaționale; aplicarea unor transformări algebrice relaționale asupra expresiilor construite în pasul anterior, pentru a se obține expresii relaționale echivalente și eficiente.

Utilitarele specializate care sunt folosite au o mare importanță pentru capacitatea de utilizare a unui SGBDR, pentru diversele categorii de utilizatori, respectiv analiști, dezvoltatori, designeri etc.

Criteriile de comparație a SGBD-urilor sunt reprezentate de facilitățile de descriere, manipulare, utilizare și administrare a datelor. După criteriul facilităților de descriere, caracteristicile sunt reprezentate de maniera de implementare a modelului relațional; conceptul de bază de date folosit în schemă; definirea metadatelor; definirea relațiilor virtuale; actualizarea schemei relației; restricțiile de integritate ce pot fi declarate.

După criteriul facilităților de manipulare, caracteristicile sunt reprezentate de LMD relațional implementat; funcțiile de calcul aritmetic și funcțiile agregate; modurile de acces la date; programarea orientată-obiect; tratarea valorii NULL; optimizarea cererilor de regăsire; actualizarea relațiilor de bază și virtuale.

După criteriul facilităților de utilizare și administrare, aceste caracteristici sunt reprezentate de instrumentele de dezvoltare; instrumentele CASE; instrumentele analize statistice; software-ul pentru acces de la distanță; utilitarele de întreținere; mecanismele pentru autorizarea accesului la date.

Oracle reprezintă un SGBD complet relațional, extins, care prezintă facilități provenite din tehnologia orientată pe obiect (OO). Acest sistem a fost creat de compania Oracle Corporation din Statele Unite, aceasta fiind la ora actuală cel mai important furnizor de software în domeniul gestiunii datelor, putând fi aplicat pe toate tipurile de calculatoare și sub diverse sisteme de operare. Acest sistem cuprinde un ansamblu complet de constructori de aplicații și produse pentru utilizatori, aplicațiile sale putând fi portate pe un număr ridicat de sisteme de operare și stații de lucru. Oracle cuprinde un și un sistem de management flexibil, destinat stocării și gestiunii informației folosite utilizate de aplicații.

Prima versiune a sistemului a fost creată la finele anilor '70, pe baza teoriei relaționale, având implementat limbajul relațional SQL, dezvoltat mai apoi spre SQL*Plus.

Există o serie de facilități suplimentare, odată cu versiunea 5.0, respectiv funcționare în arhitectura client/server; limbaj procedural propriu PL/SQL; precompilatoare ca interfață cu limbajele universale.

Odată cu versiunea 8.0, s-a trecut la arhitectura NC (Network Computing), ceea ce a conferit o deschidere mai mare, optimizări performante și accent ridicat pe analiză comparativ cu programarea.

Versiunea 8i a reprezentat un sistem de baze de date pe Internet, iar odată cu versiunea 9i, a devenit mai mult decît un suport pentru baze de date, punând la dispoziție o infrastructură completă de software pentru e-business, putând rula pe diverse sisteme de calcul și de operare. Versiunea 9i Database asigură, în plus, o protecție automatizată crescută, ceea ce a condus la scăderea semnificativă a costului administrării bazei de date.

Arhitectura de bază Oracle este formată din componente dispuse într-o configurație client/server, aflându-se pe computere diferite în rețea, serverul realizând manipularea și memorarea datelor și administrarea bazei de date, iar clientul realizând interfața cu user-ul și lansează aplicația care accesează datele din baza de date. Datele sunt rganizate sub formă de tabele, prin SQL realizându-se stocarea, regăsirea și actualizarea informațiilor. Baza de date conține: tabele-sistem de control (dicționar); tabele-utilizator, care conțin într-o formă normală toate informațiile; vederi ale bazei de date, care sunt machete pentru vizualizarea tabelelor; proceduri, funcții și package-uri pentru prelucrarea informațiilor; obiecte definite de utilizator cu proprietățile și metodele lor.

Serverul Oracle cuprinde un sistem de management al bazelor de date (DBMS), acesta avân rolul de a controla: stocarea de date în sfera bazelor de date dedicate; recuperarea de date pentru aplicații, folosind o serie de tehnici de optimizare corespunzătoare; securitatea bazelor de date și a sarcinilor permise pentru useri; consistența și protecția datelor, arhivarea sarcinilor și mecanisme de căutare; comunicarea și integritatea informațiilor, în cazul în care există o rețea de baze de date.

Este necesar să se ruleze aplicațiile Oracle pe același calculator ca serverul Oracle, existând și posibilitatea ca aplicațiile și utilitarele folosite de acestea să poată fi rulate pe un sistem client, local, iar DBMS pe server.

SQL (Structured Query Language) a fost dezvoltat de către IBM, în anii 80, fiind un limbaj de programare care realizaează definirea și manipularea bazelor de date. Bazele sale de date sunt relaționale, datele fiind memorate într-un ansamblu de relații simple. Baza de date poate conține un tabel sau mai multe, fiecare dintre acestea fiind alcătuit din rânuri și coloane, în aceste tabele putându-se defini și manipula date cu ajutorul comenzilor SQL.

Prin intermediul SQL este posibil un SGBDR, care realizează un limbaj de baze de date orientat pe mulțimi. SQL este folosit pentru administrarea celor mai multe sisteme de baze de date relaționale. La fel ca și cea ma mare parte a limbajelor de programare, SQL utilizează cuvinte în, cum ar fi insert, select, delete ca făcând parte din setul de comenzi.

Limbajul SQL nu este procedural, el nespecificând modul de obținere a informațiilor solicitate, metoda de acces la date, ci doar care sunt acestea. specifică care sunt informațiile dorite, nu cum se obțin acestea.

Comenzile SQL sunt executate exclusiv secvențial, asupra unei singure înregistrări odară, astfel încât setul de înregistrări este văzut ca un set de linii ale unui tabel.

SQL poate fi utilizat de mai multe categorii de utilizatori, dintre care administratorul bazei de date, programatorii, managerii etc.

Sarcinile pentru care SQL execută comenzi sunt variate, respectiv: selecția datelor, inserarea, extragerea și ștergerea rândurilor dintr-un tabel; crearea, modificarea și ștergerea obiectelor de tip bază de date; controlul accesului la baza de date și la obiectele de tip bază de date; verificarea – garantarea consistenței bazei de date.

Există 3 componente ale comenzilor în SQL, respectiv: limbajul de definire a datelor (Data Definition Language) – DDL; limbajul de manipulare a datelor (Data Manipulation Language) – DML; limbajul de control al datelor (Data Control Language)-DCL.

PL/SQL (Procedural Language/SQL) reprezintă un limbaj procedural, un mijloc de procesare a tranzacțiilor, o extensie SQL și o tehnologie existentă în unele aplicații Oracle. Acest limbaj reprezintă o extensie la SQL, incluzând o serie de facilități ale limbajelor recente de programare, cu ajutorul său manipularea datelor și procesurile de interogare putând fi incluse în blocuri structurate și proceduri, fiind procesate astfel tranzacțiile.

Deoarece limbajul este structurat, se pot diviza programele în blocuri logice, cu resursele aferente, se pot declara local variabilele într-un bloc unde vor fi utilizate și se pot trata erorile în blocul unde ele apar. Pentru controlul execuției programelor, se pot utiliza bucle, decizii și salturi, stabilind când și dacă acțiunile sunt executate. Astfel, aplicațiile Oracle, de exemplu, SQL Forms, pot grupa comenzi și pot controla executarea acestora prin PL/SQL, acesta derivând din Oracle, fapt care îi permite să fie pus pe toate computerele care suportă Oracle.

Intre tipurile de date și variabilele din PL/SQL și cele din SQL există compatibilitate, limbajul PL/SQL având rolul de a asigura relația dintre nevoile de acces la tehnologia bazelor de date și cele de facilități în programarea procedurală, conducând la ameliorarea performanțelor aplicațiilor, oferind o serie de avantaje dependent de mediul în care este utilizat.

O unitate a PL/SQL cuprinde unul sau mai multe blocuri, care pot fi separate complet sau lipite între ele. Un bloc poate fi anonim sau un subprogram. Locurile anonime nu au nume, de obicei, fiind declarate în punctul în care vor fi utilizate în aplicație și vor fi transferate modulului PL/SQL în momentul execuției. Subprogramele pot fi declarate ca funcții sau proceduri, iar SQL Forms face posibil ca acestea să fie declarate ca parte a Form-ului, și apelate din orice punct.

Definirea unui bloc anonim se face astfel:

DECLARE

– Definiția obiectelor PL/SQL care vor fi folosite in acest bloc

BEGIN

– Acțiuni executabile

EXCEPTION

– Tratarea erorilor (cazuri de excepție) ce trebuie făcută dacă o acțiune cauzează o eroare

END;

Este obligatorie utilizarea cuvintelor cheie BEGIN și END, acestea având rolul de a delimita corpul acțiunii care va fi executată. DECLARE este o secțiune opțională, utilizată pentru definirea obiectelor PL/SQL de tipul variabilelor utilizate în cadrul blocului sau un bloc inclus în acesta. EXCEPTION este o secțiune utilizată la sfârșit, cu scopul diminuării erorilor predefinite, ea stanilind acțiunile care urmează a fi realizate în acest caz/ Această secțiune este opțională și se află chiar înainte de clauza END.

Secțiunile DECLARE, BEGIN, EXCEPTION nu se termină cu ';', în timp ce celelalte instrucțiuni PL/SQL au nevoie de aceasta, pentru a putea scrie mai multe instrucțiuni pe aceeași linie.

Regulile sintactice de bază care se aplică în cazul SQL se aplică și la PL/SQL. Cuvintele Cheie nu pot avea mai multe linii, pe când instrucțiunile, da. Unitățile lexicale (identificatorii, numele de operatori) se pot separa prin spații sau alte elemente de delimitare care nu aparțin unităților lexicale.

Cuvintele rezervate nu pot fi folosite ca identificatori decît marcate în ghilimele duble( de ex. "SELECT").Identificatorii trebuie să se înceapă cu o literă și pot conține pîna la 30 de caractere.

Șirurile trebuie marcate cu ghilimele simple. Numerele pot fi reprezentate prin valoarea lor (ex. -32.65) sau scrierea științifică ( ex. 2E5 înseamnă 2×10 la puterea 5 = 200000 ). Comentariile pot fi marcate cu simbolurile /* și */, caz în care comentariile se pot lungi pe mai multe linii ( tip

'C') sau începînd cu '–' în care sfîrșitul liniei marchează sfîrșitul comentariului.

Variabila este denumirea unei porțiuni de memorie pentru păstarea unor valori, atribuirea valorilor din tabelele BD în variabile se face cu ajutorul comenzii:

SELECT ……… INTO identificator_variabilă,

variabilile se declară în secțiunea declarativă și pot fi ințializate, sintaxa:

identifier [Constant] datatype [NOT NULL] [:= / default epxresie]

Exemplu:

emp_hiredate DATE;

emp_deptno NUMBER(2) NOT NULL:= 10;

location VARCHAR2 (13):= ‘Atlanta’;

c_com CONSTANT NUMBER:= 1400;

Dacă variabila are NOT NULL este strict necesar sa fie inițializată în sectiunea de declarare. PL/SQL are următoarele tipuri de variabile: variabile scalare care conține o singură valoare, variabile compuse au o structură complexă și reprezintă o colectie de variabile scalare, variabile referențiale care reprezintă un link la alte variabile, obiecte largi pentru păstrarea fișierelor binare, în afară de aceste variabile PL/SQL se mai utilizează variabile de legătură (: ) sau variabile de substituție cu un (&) sau două (&&).

Tipul variabililor scalare: CHAR – variabilă textuală de lungime fixă; VARCHAR2 – variabilă textuală de lungime variabilă; LONG RAW – păstrarea fișierelor binare pînă la 2 GB; NUMBER (a,b) – ”a” este numărul maximal de cifre semnificative, iar “b” numărul maximal de cifre după virgulă; BOOLEAN – poate primi valoarea true sau false; DATE – conține data și timpul cu precizie pînă la o secundă.

Cu ajutorul %TYPE putem declara o variabilă de tipul unui alt obiect, sau altă variabilă sau coloana a tabelei, sintaxa:

identifier table.column_name%TYPE;

emp_lname employess.last_name%TYPE;

balance NUMBER;

min_balance balance%TYPE:=1000;

Variabilele de legătură sînt din mediul din care executăm blocul PL/SQL, putem folosi opțiunea Set Autoprint On care printează toate variabilile de legătură. Variabilele de substituție cu & sau && se substituie prin valori introdu-se de operator la lansarea blocului PL/SQL sau prin valori declarate în operatorul Define.

Multe din funcțiile disponibile în SQL sunt de asemenea disponibile și în PL/SQL. Acestea includ: funcții numerice pentru o singură linie; funcții caracter pentru o singura linie; funcții de conversie de tip dată; funcții de timp; funcții diverse. În plus PL/SQL oferă două funcții pentru raportatea erorilor denumite SQLCODE și SQLERRM.

Funcții nedisponibile în instrucțiuni structurale sunt: GREATEST and LEAST, AVG, MIN, MAX, COUNT, SUM, STDDEV și VARIANCE.

Funcția de lungime  desc_size:= LENGTH(prod_description);

Funcția de convertire  emp_name:= LOWER(emp_name);

Cele mai importante avantaje ale utilizării PL/SQL sunt reprezentate de: integrarea construcțiilor procedurale cu limbajul SQL, PL/SQL integrează construcții de control și condiționale cu SQL, care asigură un control crescut asupra execuției construcțiilor în SQL; reducerea traficului în rețea, permițând combinarea construcțiilor SQL într-o singură unitate/modul și trimite tot deodată; modularizarea programului, asigurând gruparea logică a declarațiilor într-un bloc unic sau mai multe blocuri într-unul, pentru a crea programe complexe. Se poate realiza și segmentarea aplicației în mai multe blocuri; integrarea cu alte medii si instrumente, PL/SQL este integrat în instrumente ale serverului Oracle cum ar fi: HTML DB, Oracle Database XE, Oracle Forms, Oracle Reports și altele; programele sale pot fi portate oriunde serverul Oracle rulează; tratarea eficientă a excepțiilor.

Pentru construcția de aplicații care cuprind programare logică, construcții secvențiale și SQL, este nevoie de PL/SQL, aplicațiile putând fi modificate ulterior. Se selectează datele din tabel în blocul PL/SQL cu ajutorul comenzii SELECT, schimbată puțin față de cea din SQL, iar tranzacția este dirijată folosind cu Commit, Rollback și SavePoint, comenzile de tipul Create nefiind folosite direct. Sintaxa comenzii SELECT:

SELECT select_list INTO {variabile_name[,variabile]…/record_name}

FROM table

[WHERE condition];

În blocul PL/SQL acest SELECT este obligatoriu să se termine cu semnul; și acest select trebuie să întoarcă un rînd și nu mai unul.

Totalitatea operatorilor de schimbare a direcției de execuție a programei în dependență de careva condiții constituie structurile de control. Fluxul logic de îndeplinire a programei poate fi schimbat de la liniar cu ajutorul operatorului IF,sintaxa:

IF condition THEN statements;

[ELSEIF condition then statements;]

[ELSE statements;]

END IF;

Expresia CASE selectează și întorce un rezultat în dependență de condiție, condiția reprezintă compararea la coincidența Select-ului cu expresiile de după WHEN una după alta, sintaxa:[11]

CASE selector

WHEN expression 1 THEN result 1

WHEN expression 2 THEN result 2

….

WHEN expression n THEN result n

[ELSE result n+1]

END;

În expresiile logice nu se recomandă de utilizat valoarea NULL. Ciclurile permite îndeplinirea unuia sau mai multor operatori de cîteva ori, sînt 4 tipuri de cicluri:

ciclu simplu – îndeplinește comenzile fără condiții generale

ciclu FOR – îndeplinește operatorii de un număr de neștiut de ori după un

contor;

ciclul WHILE – îndeplinește comenzile în dependență de condiție

ciclu FOR cu CURSOR – îndeplinește comenzile în dependență de valorile unui cursor,de atîtea ori cîte rînduri sînt în cursor, sintaxa:

LOOP statment1;

EXIT [WHEN condition];

END LOOP;

WHILE condition LOOP

statement1;

statement2;

END LOOP;

FOR counter IN [reverse]

lower_bound … upper_bound LOOP

statement1;

statement2;

END LOOP;

Counter este un contor, adică un număr întreg care parcurge valorile de la lower_bound pînă la upper_bound, iar pentru Reverse invers de la upper_bound la lower_bound. Ciclul simplu se folosește dacă comenzile din ciclu trebuie să se îndeplinească măcar odată. Ciclul WHILE se utilizează dacă la fiecare iterație trebuie de verificat o condiție. Ciclul FOR se utilizează atunci cînd este cunoscut numărul de iterații. Ciclurile pot fi imbricate, pentru a le deosebi se folosește operatorul EXIT, putem folosi și etichete.

Excepția este o variabilă PL/SQL care apare în timpul îndeplinirii blocului. În cazul cînd apare o excepție blocul obligatoriu își încetează executarea dar se poate de definit prelucrarea excepției pentru acțiunele finale. Există 2 metode de generare a excepției: excepția se generează explicit de către server; excepția se generează explicit de către programator.

Excepția se prelucreză în 2 moduri: în secțiunea de prelucrare a excepției dacă este prevăzută această excepție, se îndeplinesc comenzile respective; se transmite aceasta excepție în mediul sau blocul de unde a fost chemat PL/SQL.

Există 3 tipuri de excepții: excepții predefinite, se generează implicit de către Server, aproximativ 20 de erori tipice care apar la executarea codului PL/SQL; excepții ne predefinite, generate implicit de Server, oricare altă eroare standard a Serverului Oracle. Excepția trebuie declarată în secțiunea de declarare; excepțiile utilizatorului, definită în secțiunea de declarare, situația în care elaboratorul softului o consideră nenormală.

Sintaxa secțiunii de excepție:

EXCEPTION

WHEN exception1 [OR exception2…] THEN

statements1;

statements2;

[WHEN exception 3] [OR eception4…] THEN

statements1;

statements2; ….]

[WHEN others THEN

statements1;

statements2; …]

Tehnologii utilizate pentru proiectarea si design-ul aplicațiilor Web

Un serviciu Web este, în principiu, o aplicație software, care poate fi accesată pe Web folosind alte software-uri. Un serviciu Web este aplicabil la orice tip de mediu Web: internet, intranet, extranet.

Serviciile Web au dus la apariția interfețelor programabile, folosite pentru accesarea aplicațiilor Web. In loc să se folosească numai o metoda implicită pentru a accesa URL-ul și a returna conținut în HTML, se poate folosi o varietate de metode specializate cu semnături personalizate. O varietate de platforme software (Microsoft .NET, Oracle, Java) pun la dispoziție medii pentru dezvoltarea de servicii Web care folosesc elemente software: obiecte, clase, funcții etc.

Serviciile Web, bazate pe standarde deschise cum ar fi HTTP și XML (Extensible Markup Language) sunt tehnologii care conduc la interoperabilitate. Multe sisteme software folosesc tehnologii de componente distribuite, cum ar fi Distributed Component Object Model (DCOM) și Remote Procedure Call (RPC). O problemă comună a acestor tehnologii este dependența de platformă. Serviciile Web folosesc tehnologii de Internet standard, cum ar fi HTTP și XML, iar utilizarea lor este independentă de platforma pe care se dezvoltă aceste servicii Web. Serviciile Web prezintă un potențial uriaș de utilizare оntr-o varietate de sisteme folosite оn Internet, cum ar fi cele pentru sistemele meteorologice, serviciile de știri bursiere, servicii de știri, de urmărire a pachetelor etc.

Serviciile Web folosesc tehnologii Internet (HTTP, XML) pentru a realiza comunicarea оntre furnizor și consumator. In acest caz, furnizorul este cel care creează componenta Web Service și o distribuie prin serverul său pentru a putea fi folosită оn aplicații de către consumatori.

Informația ce apare pe site poate fi folosită și de alte sisteme: motoare de căutare, agenți pentru monitorizarea paginilor și înștiințarea utilizatorului despre modificările care au avut loc. După definiția W3C (engl. World Wide Web Consortium) serviciile web sînt sisteme software proiectate pentru asigurarea interacțiunii a două calculatore într-o rețea. În prealabil este stabilită o interfață de comunicare, de obicei descrisă cu ajutorul limbajului XML. Arhitectura CMS-ului trebuie să permită integrarea de servicii web din afara sistemului pentru asigurarea flexibilitatății întregului sistem.

Rezervarea adreselor URL este realizată în șablonul dispatcher_template sau chiar în modululapache handler: toate adresele de forma “/system/*” sau ‘/build/*’ sunt procesate de același șablon, care încarcă un modul și execută procedura cu numele ce urmează după “/system/” în URL. Uneori posibilitățile sistemului de șabloane este suficient pentru a construi răspunsul.

HTML (Hypertext Markup Language) are rolul de a care descrie formatul primar în care sunt distribuite și văzute documentele pe Web. Acest limbaj are mai multe caracteristici, respectiv structurarea formatării, este independent de platformă, asigură legăturile hypertext. Independența de platformă se referă la faptul că un document poate fi afișat de o manieră similar de computer diferite, cu caracteristici grafice diferite. Legăturile hypertext constau în faptul că orice cuvât sau imagine poate trimite la un alt document, facilitaând astfel navigarea între documente sau în cadrul unui singur document. Structurarea formatării se referă la posibilitatea convertirii lor într-un alt format și posibilitatea de a interoga o serie de baze de date alcătuite din aceste documente.

HTML, HTTP și URL au reprezentat cele dintâi specificații de bază pe Web. HTML a fost creat în 1989, fiind gândit inițial pentru fizicienii care folosesc calculatoare diferite și doresc să schimbe informații prin intermediul Internetului. HTML a fost îmbogățit în 1993 pentru a se putea insera grafica, fiind construit astfel primul navigator grafic, Mosaic. HTML 2.0 a reprezentat formalizarea HTML 1.0 într-un DTD al SGL, putând fi extins de o manieră controlată la alte nivele.

Fișierele care au fost create cu ajutorul acestui limbaj urmează a fi interpretate de navigatoare, iar acestea afișează paginile în formatul solicitat. Acest limbaj descrie caracteristicile de format ale elementelor incluse prin procedee de marcare. Fiecare element se găsește între două tag-uri (marcaje), de tipul <tag> … </tag>. Caracterele ”<” și ”>” au rolul de a diferenția marcajele de restul textului. Limbajele de marcare permit comenzilor lor o interpretare simplă.

Utilizarea și standardizarea comenzilor de marcare în fișierele HTML dau posibilitatea browserelor să citească si să formateze paginile Web, ceea ce contează foarte mult, deoarece există diverse elemente precum imagini, culori, hyperlinks etc., controlând astfel modul în care sunt afișate obiectele în interiorul browserelor.

O pagină HTML poate fi create cu ajutorul oricărui editor de texte sau cu editoare special, interactive, codul HTML autogenerându-se.

Categoriile în care se pot clasifica codurile de marcare sunt: marcaje de bază, care au rolul de a delimita pagina sau documentul HTML, titlul si corpul ei; marcaje pentru structurarea documentului, care asigură introducerea paragrafelor, subtitlurilor și liniilor de delimitare; marcaje pentru formatarea textului si crearea listelor; marcaje pentru crearea hyperlink-urilor; marcaje pentru introducerea de obiecte de diverse tipuri.

XHTML reprezintă numele de cod al HTML reformulat ca aplicație a XML, având rolul de a defini profilele documentelor ca spații de nume, cu adresa sa proprie, dată de un URL. Documentele se pot eticheta ca text/html sau text/xml. Declarea tipului de documente XHTML este realizată cu ajutorul DOCTYPE, la fel ca în SGM. Există trei tipuri de documente: strict, tranzițional și frames.

XHTML nu este doar o formulare a HTML în XML, ci el realizeaz și modularizarea limbajului HTML printr-o serie de tag-uri și de blocuri de construcție a produselor Web.

Modulele de bază XHTML realizează specificarea tipurilor de date și modele de bază, precum și setul de elemente necesar pentru a scrie un document HTML. Acestea sunt: html, head, title, base, meta, link, body, h1-h6, p, br, a, span, div. Modulul tranzițional are rolul de a specifica profilul tranzițional, elemente care au fost excluse in profilul strict – basefont, font, center, s, u, conținind si definitiile unor atribute ca border, align, noshade. Modulul de stiluri pune la dispoziție atributul style și are rolul de a define folosire elementului link. Modulul script are rolul de a specifica elementele script și noscript. Modulul de fonturi definește elementele privitoare la fonturi existente în HTML 4.0 – varianta strictă: tt, b, i, big, small. Modulul de frazare specific elementele care dau informații despre o serie de note în cadrul frazei: abbr, acronym, address, blockquote, q, cite, code, dfn, kbd, samp, var. Modulul de inflexiune definește elementele care nu dau informații privind un domeniu, numai inicații despre intențiile avute în vedere: em, pre, strong, sub, sup, hr. Modulul de editare pune la dispoziție elemente privind editarea documentelor, cum sunt del și ins. Modulul liste definește elementele dl, dt, dd, ul, ol, li. Modulul de formulare definește elementele privind scrierea formularelor: form, input, textarea, select, optgroup, option, label, button, fieldset, legend, isindex. Modulul de tabele specifică elementele table, caption, col, colgroup, thead, tbody, tr, th, td. Modulul hărți de imagini oferă elementele map și area. Modulul applets oferă applet și param pentru suportul applet-urilor Java. Modulul obiecte definește elemente ca object și param. Modulul cadre definește elementele privind folosirea cadrelor: frameset, frame,iframe, noframes.

XML (eXtensible Markup Language) reprezintă un limbaj de adnotare și de structurare a datelor. Acest limbaj reprezintă un subset al SGML, menținând o serie de caracteristici cum sunt posibilitatea de creare a marcajelor, de validare, de citire și de înțelegere. Scopul folosirii lui este reprezentat de realizarea adnotărilor, schimbul de date, publicarea documentelor, prelucrarea automată de către clienți. Documentele XML au beneficiul de a fi prelucrate repede, fără a fi limitate de complexitatea SGML.

CSS (Cascading Style Sheets) nu reprezintă un nou limbaj, ci un mecanism de formatare a documentelor HTML, neexcluzând HTML din pagina web, fiind conceput pentru a lucra cu acesta.

CSS permite schimbarea modului de apariție și aranjarea tuturor paginilor în site-ul web, editându-se un singur document CSS, controlându-se mai subtil pagina web. CSS are o utilitate foarte mare în web design, oferind posibilitatea de a controla stilul mai multor pagini simultan. Un dezavantaj este reprezentat de faptul că poate să difere în funcție de browser, nu toate browserele interpretând la fel codul CSS. Cu ajutorul Java, se pot obține efecte mai complexe, inclusiv de animație.

Limbajul JavaScript are rolul de a oferi celui care vizualizează paginile web capacitatea de a fi un utilizator activ. JavaScript a fost creat de Netscape, apărând întâia dată în Navigator 2.0. Are două forme primare, respectiv: partea interpretată de server (serverside), rezervată exclusiv produselor Netscape LiveWire; partea interpretată de client (clientside), care este accesibilă utilizatorilor prin intermediul paginilor HTML, conținând o serie de comenzi incluse între tag-urile

<SCRIPT LANGUAGE = “JavaScript”>

……..</SCRIPT>.

Poate fi amplasat în tag-ul <HEAD>, în tag-ul <BODY> și în tag-uri HTML. Browserul interpretează comenzile și le execută, iar dacă nu cunoaște Java, le tratează ca și comentarii HTML.

JavaScript este interpretat diferit de browsere și este folosit pe partea de client pentru verificarea locala a datelor introduse într-o fereastră, crearea de aplicații stand-alone sau pentru comunicarea cu applet-urile Java și cu aplicațiile auxiliare. Dintre caracteristicile sale, aminntim calculele de uz general, structurile de date de uz general, generarea de conținut bazat pe DHTML, contoare de timp etc. Nu oferă suport pentru grafică, pentru aceasta combinând capacitățile browserului și cele ale HTML pentru afișarea rezultatelor. JavaScript nu dispune de variabile globale sau domenii de vizibilitate pentru funcții, dar se bazează pe un model complex de obiecte ale browserelor.

JavaScript organizează toate elementele unei pagini Web într-o ierarhie, fiecare element fiind văzut ca un obiect, iar obiectul având proprietăți și metode. Limbajul se bazează pe 3 blocuri funcționale, respectiv: valori (tipuri de date suportate de JavaScript), obiecte (colecții de proprietăți care pot fi apelate cu un singur nume), funcții (proceduri care pot fi executate de o aplicație).

PHP (Hypertext Preprocessor) reprezintă un limbaj de programare open-source, utilizat mai ales cu scopul creării de aplicații de server și pentru pagini web dinamice. PHP are sintaxa din C, Java și Perl, fiind legat de pagini HTML, executând comenzile printr-un server care suportă PHP. Se folosește pe scară largă împreună cu baze de date MySQL. Acronimul PHP a însemnat la început ”Personal Home Page”. PHP este utilizat pe servere web UNIX și Windows.

PHP permite folosirea unor elemente specifice limbajelor de programare. Ieșirea standard a script-ului PHP devine intrarea standard pentru programul de navigare care vizualizează pagina. Așadar, la ieșirea standard poate fi scris orice tip de cod HTML, acesta fiind interpretat de către browser.

PHP poate trimite headere HTTP pentru autentificare, poate seta cookie-uri sau redirecționa utilizatorii. Cu ajutorul bibliotecilor externe de funcții poate parsa fișiere XML, crea și manipula imagini, animații Shokwave Flash, PDF-uri sau se poate conecta la un server de mail.

Interpretorul PHP parcurge documentul accesat până în momentul în care întâlnește un marcaj de deschidere care indică faptul că textul care urmează trebuie interpretat ca fiind cod PHP. In continuare, textul este interpretat ca fiind cod PHP până în momentul în care este întâlnit marcajul de închidere. Intreg textul care nu este interpretat ca fiind cod PHP este furnizat la ieșire în forma în care a fost primit ca intrare de către interpretor.

Este permisă ieșirea și intrarea în modul PHP de câte ori este necesar în pagină. Aceasta este util când se lucrează cu texte de mari dimensiuni. Structura fiecărei pagini, indiferent că este prima pagină, pagina cu date de contact sau pagina cu detalii ar putea arata astfel: partea de conectare la baza de date; header (titlu, specificații stil, set de caractere); meniul (butoanele de navigare); conținutul paginii; footer-ul paginii. Această structură se va putea folosi pentru toate paginile site-ului și, în afară de partea reprezentând conținutul, care diferă de la pagină la pagină, celelalte elemente-modul rămân practic neschimbate. Așadar, le putem refolosi scriindu-le pe fiecare din ele într-un fișier separat și apoi incluzându-le în pagina finală, livrată la utilizator atunci când avem nevoie. Vom putea modifica direct din baza de date conținutul oricăreia dintre ele, fiecare parte putându-se actualiza independent una de cealaltă, reușindu-se astfel dintr-o singură mișcare operarea modificărilor dorite în toate paginile site-ului.

Tehnologia ASP.NET

Tehnologia .NET, dezvoltata de icrosoft, se bazează pe așa numitul “.NET Framework”, care este o platformă de calcul care simplifică dezvoltarea aplicațiilor în mediul puternic distribuit al Internetului. Acest .NET Framework este conceput astfel încât să satisfacă următoarele obiective:

să ofere un mediu consistent de programare, obiect-orientat, indiferent dacă codul obiectului este stocat și executat local, executat local dar distribuit pe Internet sau executat la distanță.

să ofere un mediu de execuție a codului care să minimizeze desfășurarea software-ului și conflictele de versiune.

să ofere un mediu de execuție a codului care să garanteze execuția sigură a codului, incluzând codul creat de dezvoltatori (third-party) necunoscuți sau necertificați.

să ofere un mediu de execuție a codului care să elimine problemele de performanță ale mediilor scripted sau interpreted.

să facă experiența dezvoltatorului consistentă în cazul variatelor tipuri de aplicații, cum ar fi aplicațiile de tip Windows-based și aplicațiile de tip Web-based.

să construiască toate comunicațiile pe standarde industriale care să asigure faptul că codul bazat pe .NET Framework poate fi integrat în orice alt cod.

Platforma .NET este mult mai mult decât un nou limbaj, software development kit (SDK) sau chiar un sistem de operare. Oferă servicii noi foarte puternice, un nou format binar independent de procesor, noi limbaje, extensii pentru limbaje vechi etc. Folosirea eficientă a acestor noi unelte și aplicații nu este posibilă fără o cunoaștere bună a platformei ce va da viață aplicațiilor.

Premisa din spatele platformei .NET este că lumea calculatoarelor se schimbă de la un calculator conectat la servere prin rețele de genul Internetului, la un calculator unde toate felurile de device-uri inteligente, calculatoare și servicii lucrează împreună pentru a oferi o experiență mai bogată utilizatorului. Platforma .NET este răspunsul acestor provocări pe care schimbarea le va aduce programatorilor.

Platforma .NET este formată din mai multe componente, care pot fi grupate în trei categorii de bază:

.NET Framework – o aplicație complet nouă pentru dezvoltarea platformelor.

Produse .NET – diverse aplicații Microsoft bazate pe .NET Framework, incluzând noi versiuni de Exchange și SQL Server, XML – toate integrate în platforma .NET.

Servicii .NET – mai multe servicii .NET, asigurate de Microsoft pentru folosire în dezvoltarea aplicațiilor ce merg pe .NET Framework. Foarte importante și de amintit sunt serviciile Web (Web Services).

Insuși .NET Framework poate fi divizat în trei părți:

CLR (Common Language Runtime) este un mediu de execuție care se ocupă de alocarea memoriei, captarea erorilor și interacțiunea cu serviciile sistemului de operare.

Base Class Library este o colecție extinsă de componente pentru programare și aplicații pentru interfețe de programare (API).

două ținte de dezvoltare de nivel înalt. Una dintre ele este pentru aplicațiile Web (ASP.NET) și alta pentru aplicații normale Windows (Windows Forms).

Avantajele oferite de către .NET Framework includ cicluri mai rapide de dezvoltare (refolosirea codurilor, mai puține surprize de programare, suport pentru mai multe limbaje de programare), mai puține bug-uri legate de tipul datelor datorită securității integrale, scurgere de memorie redusă datorită Garbage Collector-ului și, în general, aplicații sigure.

CLR-ul (common language runtime), este fundația .NET Framework. Runtime poate fi privit ca un agent care administrează codul în momentul execuției, oferind servicii de bază precum managementul memoriei, managementul thread-urilor și servicii de lucru la distanță, în timp ce promulgă siguranța tipurilor și alte forme de acuratețe a codului, care asigură securitate și robustețe.

De fapt, conceptul de management al codului este un principiu fundamental al runtime-ului. Codul care vizează runtime-ul este cunoscut ca managed code, iar codul care nu vizează runtime-ul este cunoscut ca unmanaged code.

Biblioteca de clase, cealaltă componentă principală a Framework-ului .NET, este o colecție cuprinzătoare, obiect-orientată, de tipuri reutilizabile care poate fi folosită pentru dezvoltarea variatelor aplicații, pornind de la aplicațiile tradiționale în linie de comandă sau cu interfața grafică (GUI – Graphical User Interface), până la aplicații bazate pe ultimele inovații oferite de ASP.NET, inovații precum Web Forms sau XML Web services.

.NET reprezintă soluția oferită de compania Microsoft pentru programarea aplicațiilor distribuite în Internet. Aceasta se caracterizează prin trei componente de bază:

un mediu de execuție independent de limbaj optimizat pentru prelucrări distribuite — .NET Framework;

un mediu de dezvoltare care oferă suport pentru mai multe limbaje de programare standardizate sau proprietate Microsoft —Visual Studio .NET;

sistemul de operare care oferă suport pentru aplicațiile distribuite dezvoltate pe platforma .NET Framework — Windows Server.

ASP.NET reprezintă un ansamblu de tehnologii care facilitează dezvoltarea de aplicații web. ASP.NET reprezintă evoluția de la Microsoft Active Server Pages (ASP), folosind însă suportul platformei de dezvoltare Microsoft .NET, fiind lansat în 2002 cu versiunea 1.0 a .NET Framework.

ASP.NET reprezintă un framework web gratuit folosit cu scopul creării de site-uri, aplicații și servicii, împreună cu HTML, CSS și JavaScript. ASP.NET a fost construit pe Common Language Runtime (CLR), astfel încât programatorii pot scrie coduri cu ajutorul oricărui limbaj suportat de .NET.

Un avantaj foarte semnificativ al ASP.NET constă în timpul redus necesar pentru dezvoltarea aplicațiilor web. Atât tehnologia în sine, cât și uneltele de dezvoltare de aplicații web de la Microsoft (cum ar fi Visual Web Developer Express – VWD) reduc considerabil timpul de dezvoltare al aplicațiilor web față de alte tehnologii – prin simplitatea unui limbaj de programare ‖managed‖ de genul C# sau Visual Basic .NET, prin colecția bogată de biblioteci de clase și controale .NET .

Deși ASP.NET a fost creat cu scopul creării unor aplicații web foarte complexe – prin faptul că se bazează pe .NET, prin faptul că se insistă pe un model de dezvoltare OOP, respectiv pe separarea interfeței de logica aplicației – totuși, este extrem de simplu ca folosind ASP.NET să dezvoltăm aplicații mici, de genul magazinelor online, al aplicațiilor care sunt pur și simplu un ‖front-end‖ pentru o bază de date, sau al site-urilor personale.

ASP.NET cuprinde toate tehnologiile necesare pentru a dezvolta o aplicație web, scriind o cantitate redusa de cod. Limbajele de programare care pot fi utilizate pentru a crea aplicații ASP.NET sunt cele suportate de platforma .NET – cum sunt Visual Basic .NET și C#, iar o altă caracteristica importanta a acestor limbaje (exceptand faptul că sunt ‖managed‖) este ca au fost create având în vedere paradigma programării orientată pe obiecte. Totul din .NET, și evident din ASP.NET, este un obiect.

Cele mai importante diferențe dintre ASP.NET și platformele de dezvoltare existente includ următoarele:

ASP.NET propune un modelul de programare în întregime obiect-orientat, care include o arhitectură bazată pe evenimente și controale, care îıncurajează încapsularea și refolosirea codului;

ASP.NET oferă posibilitatea de a programa în orice limbaj acceptat de .NET;

ASP.NET sprijină ideea de executare rapidă: paginile și componentele ASP.NET sunt compilate (fie la prima cerere, fie la instalarea site-ului pe server), în loc de a fi interpretate de fiecare dată când acestea sunt utilizate;

modul de programare este orientat pe obiecte;

orice pagină este văzută ca un obiect, derivat din clasa pusă la dispoziție de .NET Framework;

are un mecanism încorporat care permite păstrarea stării paginii (chiar dacă protocolul de comunicare HTTP este fără stare);

ASP.NET permite dezoltarea de aplicații web bazate pe evenimente, similar cu situația întâlnită în cadrul aplicațiilor de tip forme Windows;

este senzitiv la browserul pentru care se face trimiterea codului HTML, alegând automat codul optimizat pentru o colecție de browsere;

ASP.NET este gazduit de către CLR – aceasta aduce beneficii notabile precum: managementul automat al memoriei prin garbage collection (eliberare a memoriei alocate dinamic);

tipuri de date sigure, verificabile; manipularea structurată a erorilor; fire de execuție – pentru fiecare cerere făcută de către un client, se lansează un fir de execuție separat;

ușor de configurat.

O pagină web aspx este compusă din cod ASP.NET de formă:

cod HTML; acesta este interpretat de către browser;

controale web – acestea se recunosc prin tagurile care încep cu prefixul asp, controalele web sunt procesate pe server și vor produce cod HTML care este inteligibil pentru un browser;

cod C# sau VB.NET

Acest ultim cod este executat pe server (deci browser-ul nu trebuie să aibă niciun tip de suport pentru executarea de cod .NET).

Relativ la locația în care se poate depune acest cod, avem posibilitățile:

cod inline, adică scris în interiorul paginii aspx, utilizat pentru pagini web simple;

od ―în spate (behind), într-un fișier separat cu extensia .cs (dacă este cod C#). Este modelul preferat pentru dezvoltarea de pagini. Conectarea dintre pagina aspx și code–behind se face prin intermediul directivei Page de pe primul rând. Există două diferențe între a avea tot codul într-un singur fișier și a avea code-behind. In modelul cu code-behind nu există scripturi care să aibă atributul runat = ”server”.

Cea de-a doua diferență constă în faptul că la modelul cu code-behind directiva ”Page” conține atribute care fac referire la un fișier extern (SamplePage.aspx.vb sau SamplePage.aspx.cs) și o clasă.

Limbajul C#

Limbajul C# este foarte asemănător cu Java si C++, motiv pentru care este un limbaj de programare care poate fi învățat ușor de către cei care le cunosc pe celelalte. Limbajul a fost creat de către Microsoft în cadrul platformei .NET.

În C# există 2 tipuri de date: tipuri valoare si tipuri referință. Tipurile valoare includ tipuri, de exemplu: char, int, float, care conțin în mod direct datele referite și sunt alocate pe stivă. Tipurile referință cuprind tipurile clasă, interfață și tablou, având proprietatea că variabilele de acest tip stochează referințe.

C# conține un set de tipuri predefinite, pentru care nu este necesară referirea vreunui spațiu de nume via directiva using sau calificare completă : string, object, tipurile întregi, tipuri numerice, tipurile bool si decimal.

Tipul string este folosit la manipularea șirurilor de caractere codificate Unicode. Tipul bool este folosit la reprezentarea valorilor logice true și false. Puteți vedea un tabel al tuturor tipurilor valoare mai jos.

C# este gândit să fie un limbaj de programare simplu, modern și orientat pe obiecte. Este încă în dezvoltare de o echipă de programatori condusă de Anders Hejlsberg. Cea mai recentă versiune este 5.0, care a fost lansată în 15 august 2012.

Standardul ECMA listează scopurile de design ale C#:

limbajul și implementările lui ar trebui să ofere suport pentru principiile de ingineri software ca strong type checking, array bounds checking, garbage collection automat, etc.

limbajul este gândit pentru utilizarea în dezvoltarea componentelor software care să fie implementate în medii distribuite.

portabilitatea codului sursă este foarte importantă, ca și portabilitatea programatorilor.

suportul pentru internaționalizare este foarte important.

C# este gândit să fie potrivit pentru scrierea aplicațiilor pentru sisteme găzduite sau embedded.

deși aplicațiile C# sunt gândite să fie economice cu memoria și puterea de procesare, limbajul nu a fost gândit să concureze direct la perfomanță și dimensiune cu C sau assembler.

Limbajul C# este o componentă a pachetului Microsoft Visual Studio.NET care conține o bibliotecă modernă de clase numită Microsoft.NET Framework ce pune la dispoziția programatorului aproape toate instrumentele necesare pentru a realiza aplicații pentru internet, web și Windows.

Această colecție de clase conține biblioteca de clase WindowsForms care furnizează instrumente pentru realizare de aplicații tradiționale pentru sistemul de operare Windows.

C# este dezvoltat de o echipa restrânsă de la Microsoft în anul 2001, echipă din care s-a evidențiat Anders Hejlsberg (autorul limbajului TP și membru al echipei care a realizat Borland Delphi).

C# dispunde de o serie de caracteristici ale C++, precum flexibilitatea și puterea, precum și ale Visual Basic, respectiv facilitatea de dezvoltare a unei aplicații cu interfață grafică datorită constructorilor de obiecte și platforma.NET pentru rețeaua internet.

C# este un limbaj de tip.NET și permite realizarea de aplicații pe platforma Microsoft.NET, care oferă instrumente și servicii pentru exploatarea cu maximă eficiență a puterii de calcul și a componentelor de comunicații.

Tipuri de date

Tipuri valoare

Tipuri simple: byte, char, int, float etc.

Tipul enumerare: enum

Tipul structură: struct

Tipul referință

Tipul clasă – class

Tipul interfață – interface

Tipul delegate – delegate

Tipul tablou – array

Toate tipurile de date sunt derivate din tipul System.Object. Toate tipurile valorea sunt derivate din tipul System.ValueType, derivate la randul ei din clasa Object(System.Object).

Tipuri întregi

Limbajul C# (C sharp) este un Standard Internațional, dezvoltat de firma Microsoft și patentat împreună cu firmele Intel și Hewlett-Packard, cu scopul de a oferi programatorilor un limbaj de programare modern, multi-funcțional, orientat spre obiect, capabil să exploateze noile tipuri de resurse software oferite de platforma .NET.

Limbajul nu este o invenție pură,ci este construit clasic, cu aceleași principii de bază ca și limbajul C++ sau Java. Majoritatea soluțiilor tehnice au fost create prin extinderea celor din limbajele C++ și Java, cu scopul de a simplifica munca programatorilor obișnuiți cu aceste două limbaje. Cunoașterea acestor limbaje nu este obligatorie, dar este utilă.

Specialiștii au caracterizat limbajul C# cu următoarele calități: multiparadigmă imperativă, funcțională, generică și orientată spre obiect sau component. Prin paradigmă se înțelege un anumit stil de programare sau un anumit tip de soluție tehnică pentru o problemă software oarecare.

Principalele paradigme de programare sunt:

Programarea imperativă – se face prin procesarea unor instrucțiuni, prin care se schimbă o anumită stare a sistemului.Programul este o listă de astfel de comenzi și instrucțiuni.

Programarea funcțională – se face prin evaluarea unor funcții matematice și evită structurile de date fixe sau variabile. Intregul program este controlat cu ajutorul funcțiilor (Exemplu: funcția Main).

Programarea procedurală sau structurată – se face prin fragmentarea operațiilor necesare în seturi. Pentru a obține o anumită stare a sistemului, trebuie urmate mai multe astfel de seturi de operații. Cu alte cuvinte este un tip de programare modulară.

Programarea în flux – numită și programare dictată de evenimente, se face prin răspuns la o anumită schimbare de stare a sistemului, denumită eveniment (click de mouse, apăsarea unei taste etc.). In mod current, legătura dintre eveniment și funcțiile programului se face fie prin mesaje simple, fie prin thread-uri (linii de execuție).

Programarea orientată spre obiect – utilizează structuri complexe de date denumite obiecte, pentru a izola seturi de date în fragmente mai mici de memorie, denumite și namespaces. Interacțiunea cu restul datelor din program se face prin funcții specializate, denumite metode.

Programarea declarativă – prezintă logica unui proces fără a descrie însă și fluxul de execuție (Exemplu: clasele abstracte).

Programarea automată – este concepută ca un set de stări finite ce pot fi controlate cu ajutorul unor variabile de control sau a unor tabele de schimbare de stare. Cu alte cuvinte, programul este format din mai multe module automate sau semi-automate.

Exemple: Limbajul Basic este imperativ, Limbajul Pascal este structurat și funcțional, Limbajul C este pur funcțional, Limbajul Java este procedural și ”event-driven” iar platforma Visual Studio este formată exclusiv din limbaje orienate spre obiect.

Se spune despre C sharp că este multiparadigmă, tocmai pentru că acceptă toate aceste stiluri de programare, pentru a crea soluții personalizate, în funcție de necesitățile de moment. Cu alte cuvinte, dacă este nevoie de o singură linie de comandă, nu trebuie creat un obiect sau o fereastră de control, ci se poate implementa direct comanda respectivă. Se va putea construi un modul executabil ce conține o singură comandă.

Exemplu: deschide automat un site de Web.

Aplicațiile C sharp consumă minimum de memorie necesară, dar economia de memorie nu este scopul principal pentru acest limbaj. Mai degrabă, pentru a simplifica munca programatorului, compilatorul C sharp include și un mecanism de tip ”automatic garbage collection”, asemănător cu cel din Java, prin care vaiabilele și constantele inutile sunt eliberate automat din memorie, în funcție de vechimea lor în program.

Compilatorul verifică foarte strict tipurile de data, dimensiunea ariilor de date și variabilele neinițializate sau desuete, pentru a limita la maximum procesarea de date ”defective” sau imposibil de găsit (procese redundante).

Aplicațiile scrise în limbaj C# sunt portabile pe numeroase sisteme de operare și sunt compatibile cu orice alt program ce utilizează standardul CLI (Common Language Infrastructure) specificat prin documentul ECMA-335.

Standardul CLI propune un set de reguli cunoscut sub numele de CLS (Common Language Specification) cu scopul de a asigura interoperabilitatea dintre mai multe limbaje de programare. Codurile care respectă aceste reguli de limbaj sunt arhivate în niște biblioteci speciale și poartă numele de ”framework” (suport). O astfel de bibliotecă este comună pentru mai multe limbaje de programare. Concret,limbajul C# exploatează biblioteca .NET (mai exact Microsoft.Net). Aceeași bibliotecă este exploatată și de către platforma Visual Basic 2010 și întregul set de programe din platforma Visual Studio 2010. Ca rezultat, programele editate în Visual C# vor putea fi portabile și pentru Visual Basic 2010. Mai mult decât atât, utilizatorii platformei Visual Studio 2010 vor putea construi aplicații ce utilizează module scrise în limbaje diferite. Fiecare astfel de modul va fi un simplu executabil ce poate fi apelat la fel ca și o funcție din program.

Numele de C sharp (C#) provine de la semnul "diez" din muzică și indică faptul că este vorba despre o incrementare a limbajului C. A fost propusă inițial denumirea de C++++, pentru a simboliza faptul că este o incrementare a limbajului C++, dar din motive comerciale s-a ales notația C#. Platforma .NET conține și alte limbaje denumite asemănător: J#, A#, Gtk#, Cocoa# sau Qt#, toate cu scopul de a simboliza o incrementare a limbajului de bază.Totuși, C# nu este un C++ cu funcții auxiliare ci este un program complet nou, cu altă bibliotecă de funcții și altă concepție de organizare.

Nici compilarea și construcția aplicațiilor nu este similară. C sharp construiește direct executabile, pentru sistemul de operare instalat.

Mai exact, compilatorul C# lucrează în două etape. In prima etapă, codul nativ este convertit la un limbaj intermediar: CIL (Common Intermediate Language). In cea de a doua etapă, codul intermediar este transformat în cod mașină, în funcție de sistemul de operare instalat. Acest mecanism este asemănător cu cel al compilatorului Java. Principalul avantaj este dat de faptul că același fragment de cod nativ poate fi transformat în executabil pentru Windows, Linux sau alt sistem de operare. Dacă se creează un sistem de operare nou, nu va trebui rescris decât compilatorul. Toate aplicațiile vechi vor putea fi utilizate pentru noul sistem de operare. Mai mult decât atât, toate limbajele care exploatează platforma .NET utilizează același cod intermediar.Ca rezultat, aplicațiile pot utiliza module scrise în limbaje de programare diferite.

Platforma .NET revoluționează și modul de arhivare a resurselor și a bibliotecilor de coduri.Vechiul sistem utiliza celebrele biblioteci cu alocare dinamică (DLL). Sistemul a fost excepțional la început, dar numărul extrem de mare de file DLL noi sau de versiuni incompatibile a făcut ca gestionarea acestui tip de resurse să fie tot mai dificilă. In numeroase cazuri, programele instalau versiuni diferite ale unei file DLL, versiuni incompatibile cu restul programelor ce exploatatu aceasi filă DLL, având ca rezultat defectarea acestor programe. In plus, numeroasele file DLL puteau introduce o serie de conflicte de identificator,de supraîncărcări ale funcțiilor și claselor etc.

Pentru a soluționa aceste inconveniente, platforma .NET a introdus un nou tip de unitate logică pentru arhivarea resurselor, denumită ”asamblare” (assemblies). Aceste unități pot fi de două tipuri: aplicații cu extensia .exe (numite frecvent și executabile) și componente cu extensia .dll.

Primele sunt programe complete, executabile direct, iar ultimele sunt doar obiecte, ce pot fi asamblate pentru a crea aplicații noi. Din acest motiv, în cazul limbajului C# se preferă expresia de ”limbaj orientat spre component” în locul celei de ”limbaj orientat spre obiect”. Deosebirile nu sunt foarte mari, dar există. Pentru robustețea suportului, limbajul C# nu acceptă moștenirea multiplă. Fiecare obiect trebuie să fie derivat din o singură clasă ancestoare. Pentru a personaliza obiectul se pot utiliza însă un număr nelimitat de interfețe.

O astfel de unitate, denumită ”asamblare” este mai complexă decât o simplă arhivă pentru codul sursă și conține:

serie de metadate în care sunt arhivate informații despre unitate, modul de acces și o listă de file dependente (se mai numește și ”manifest”)

serie de metadate în care sunt descrise tipurile de data utilizate

Codul intermediar propriu zis (Codul MSIL)

Resursele necesare.

Asamblările pot fi de două tipuri: private și partajate. Cele private pot fi utilizate doar de către aplicația care le-a instalat, iar cele partajate, pot fi utilizate în rețea, de către doi sau mai mulți utilizatori simultan. In majoritatea situațiilor, se vor prefera cele private, deoarece sunt ușor de realizat, sunt portabile, pot fi instalate în același director cu aplicația, nu se pretează la interacțiuni cu structuri asemănătoare.

Cele partajate se creează mai dificil, cu instrumente specializate și trebuie să primească un cod criptografic unic, pentru a evita orice fel de conflicte de identificator. In schimb, cele partajate pot fi utilizate pentru a construi aplicații noi sau pot fi apelate din rețea de la locații diferite.

O astfel de asamblare poate fi o filă unică sau poate fi formată din mai multe file, caz în care există o filă centrală ce conține manifestul, metadatele și link-urile spre restul filelor.

Cu alte cuvinte, platforma .NET reprezintă o nouă etapă de dezvoltare pentru relația dintre aplicație și resurse. După cum anunță și numele, suportul .NET este destinat mai ales pentru a crea aplicații portabile, de tip Web Forms sau pentru a facilita schimbul de date în rețea, fie cu ajutorul unor baze de date, fie cu alt tip de structuri de memorie. Dar posibilitățile nu se rezumă la aplicații de tip Web. Limbajul C# și platforma .NET se pot combina pentru a obține orice tip posibil de resursă software. Inițial a purtat numele de NGWS (Next Generation Windows Services) pentru a sublinia faptul că este vorba despre o tehnologie nouă. Suportul .NEt are la bază următoarele standarde Internet: HTTP,XML,SOAP și UDDI.

Dintre trăsăturile caracteristice limbajului C#, merită menționat:

Nu există funcții sau variabile globale. Toate datele trebuie să fie declarate în interiorul unor clase.Membrii statici ai unei clase publice pot substitui cu succes funcțiile și variabilele globale.

Tipul de data boolean este strict.Conditiile de tip while sau if vor evalua strict date de tip boolean (True sau False), spre deosebire de limbajul C++ unde sunt acceptate și valori de tip INT, ce pot fi convertite la valori booleene (0 si 1).

C# nu lucrează cu pointeri spre adrese de memorie, ci doar cu referințe spre obiecte reale. Dacă se utilizează pointeri, blocurile de cod vor fi marcate ca nesigure (unsafe) și nu vor putea fi executate decât după ce se solicită permisiunea utilizatorului.

Memoria nu poate fi eliberată explicit. Toate operațiile de eliberare a memoriei se fac automat, prin "Garbage collection".

Pe lângă try…catch, C# poate conține și bucle de tip try…finaly, pentru a gestiona funcțiile de tratare a excepțiilor.

C# nu acceptă moștenirea multiplă, dar acceptă oricâte interfețe.

Limbajul C# este foarte strict în ce privește tipul de data. Nu se fac niciun fel de conversii automate (cu excepția extinderii tipului INT).

Limbajul C# unifică toate tipurile de data într-un sistem comun denumit CTS (Common Type System). Ca rezultat, toate tipurile de data, inclusiv cele primitive (exemplu INT) sunt subclase ale clasei rădăcină: System.object. Astfel moștenesc metodele clasei de bază (Exemplu: toate tipurile de data vor avea și metoda: ToString()).

Dintre principalele facilități noi, oferite de combinația C# și .NET, merită remarcate următoarele: independența fatță de platforma software, interoperabilitatea cu alte limbaje, multi-threading, conectarea la serverul SQL 2005, suportul pentru formate de 64 de biti, genericele, metodele anonime și clasele parțiale, iteratorii și delegații (delegates).

Pentru a edita programele C#, există două soluții:

Se editează codul cu orice editor de text, se salvează fila cu extensia .cs și apoi se compilează fila cu utilitarul csc.exe,pentru a crea un executabil.

Se utilizează una dintre versiunile de Visual C#.

Ambele metode au avantaje și dezavantaje. Prima metodă se poate aplica și în absența unei conexiuni la Internet, oferă programe mici, simple și robuste în care trebuie să se controleze fiecare linie de cod. Cea de a doua metodă este mult mai elegantă și comodă, permite construirea unor aplicații complexe și beneficiază de un număr foarte mare de instrumente automate.

Prima aplicație pentru orice limbaj de programare o reprezintă un calcul numeric simplu.Primele programe pentru calculator au fost exclusive programe de calcul numeric. Tot din acea perioadă datează și formatele numerice simple: integer, signed și unsigned precum și stivele (strămoșii ariilor de date). Pentru a păstra compatibilitatea cu programele vechi, majoritatea programelor noi au păstrat și aceste tipuri de date, chiar dacă utilitatea lor este din ce în ce mai redusă. Pot fi utile mai ales în cadrul unor rutine de automatizare, concepute să opereze în mediu foarte limitat de memorie.

Limbajul C# recunoaște două tipuri fundamentale de date: tip valoric și tip referință. Tipurile de data valorice pot fi elementare (int,char, float etc) sau enumerări și structuri.Tipurile referință (pointerii) pot fi clase, interfețe, clase delegat sau arii de date. In limbaj C# tipurile predefinite de data sunt membrii ai clasei System și se importă în program odată cu biblioteca System. Tipurile valorice conțin datele propriu-zise, în timp ce referințele conțin doar un pointer spre adresa de memorie la care sunt arhivate datele. Este posibil să existe mai multe referințe spre aceeași adresă de memorie. Actualizând datele de la o astfel de adresă, se vor actualiza automat toate referințele spre acea adresă. Prin contrast, actualizarea unui tip de data valoric nu poate modifica nicio altă data din program (data este arhivată în acel tip).

Pentru a facilita munca programatorilor, C# oferă un set destul de bogat de tipuri predefinite. Toate aceste tipuri predefinite sunt obiecte și sunt declarate în biblioteca System (Exemple: System.Int16,System.Byte), iar pentru a simplifica manevrarea lor, au și câte o denumire alias:

Se pot utiliza ambele tipuri de notații, dar se recomandă utilizarea notațiilor alias (int, bool, string etc.).

Tipurile de data nu pot fi utilizate ca atare, ci se creează variabile sau constante din tipul respectiv. Toate aceste variabile și constant vor fi de fapt niște obiecte, având ca ancestor obiectul rădăcină: System.Object. Prin acest mecanism, toate datele analizate de compilator vor fi de tip obiect, adică vor fi încapsulate într-un spațiu de memorie denumit (namespace), pentru a evita datele defective rezultate prin suprascrierea uni tampon de memorie cu valori mai mari decât domeniul maxim. Dacă valorile atribuite nu sunt corecte, obiectul nu se creează și se evită astfel apariția unor date cu format incorect, ce nu pot fi șterse și parazitează inutil memoria. In plus, structurarea sub formă de obiecte simplifică mecanismul automat de eliberare a memoriei (garbage collector).

Există numeroase modalități de a controla modul de prezentare a datelor și interacțiunea dintre sistem și utilizator. Dintre acestea, cele mai simple sunt: Consola și Fereastra Windows. Consola este o fereastră de tip Windows, dotată cu minimum de metode pentru funcții de intrare/ ieșire (I/O). Consola este definită în System, sub formă de obiect separat.

Pentru a forma expresii, limbajul C# utilizează un set de operatori comun cu cel utilizat de limbajul C++. In funcție de numărul de membri din expresie, operatorii pot fi: unari, binari sau ternari. Tabelul următor prezintă acești operatori în ordinea descrescătoare a precedenței.

Denumite și directive de procesare, instrucțiunile au rostul de a seta mediul de operare sau de a organiza mediul de execuție după o anumită regulă, astfel încât ordinea de execuție a operațiilor să asigure un flux de date corect. Există și instrucțiuni de preprocesare, semnalate tot cu semnul # ca și în C++, cu rostul de a seta mediul de operare înainte de a începe procesarea codurilor din program (sunt la fel ca și în C++).

Unii autori preferă termenul de instrucțiuni pentru controlul fluxului, pentru a sublinia faptul că au rostul de a organiza ordinea de execuție. Importanța acestor instrucțiuni depinde de stilul de programare. In cazul programelor imperative, de tip ”listing”, rolul lor este esențial, în timp ce în cazul programării structurate pe obiect, rolul lor este preluat mai degrabă de funcții, metode și evenimente .Principalele instrucțiuni pentru controlul fluxului sunt:

1. Liste și blocuri de instrucțiuni:

EXEMPLU: static void main(){ F();G();H();M(); }

2.Etichete și salturi "goto":

EXEMPLUL Funcție(){ if(args.Length == 0)

goto sfarsit;

sfarsit:

Console.WriteLine("Sfarsit"); }

3.Declararea unor constante locale:

EXEMPLU: static void main(){ const float pi =3.141592 }

4.Declararea unor variabile locale:

EXEMPLU: static void main(){ int a = 2,b = 3,c= 5; }

5.Instrucțiuni complexe de tip expresie:

EXEMPLU: apelul unei funcții static int F(int a,int b){}

static void Main(){ F(3,5) }

6.Instrucțiunea condițională IF:

EXEMPLU: if (x >y) { Console.WriteLine("x este mai mare decat y");}

7.Instrucțiunea alternativă Switch Case:

EXEMPLU: static void Main(string[] args){ switch (args.Length) {

case 0:

Console.WriteLine("zero");

case 1:

Console.Writeline("unu");

}}

8.Bucla condițională WHILE:

EXEMPLU: static void Main(string[] args) { int i = 0;

while (i < args.Length) { Console.WriteLine(args[i]);

i++; }}

9.Bucla condițională DO…WHILE:

EXEMPLU: static void Main() { string s;

do { s = Console.ReadLine(); }

while (s != "Exit"); }

10.Bucla de repetiție FOR:

EXEMPLU: static void Main(string[] args){

for (int i = 0;i < args.Length;i++)

Console.WriteLine(args[i]); }

11.Bucla de iterație FOREACH:

parcurge toate elementele dintr-o colectie

EXEMPLU: static void Main( string[] args) {

foreach (string s in args)

Console.WriteLine(s); }

12.Ieșirea dintr-o buclă prin BREAK:

EXEMPLU: static void Main() { int x = 5;

while(x < 30) { Console.WriteLine("{0}",x);

x++;

if (x > 10)

break; }}

13.Continuarea unei bucle după instrucțiunea CONȚINUE:

EXEMPLU: static void Main(string[] args) {

int i = 0;

while(true) { Console.WriteLine(args[i++]);

if (i < args.Length) conținue;

break; }}

14.Specificarea datelor returnate,prin RETURN:

EXEMPLU: static int F(int a,int b) { return a + b ; }

static void Main(){ Console.WriteLine(F(2,3)); return; }

15.Evaluarea unui iterator prin YIELD:

EXEMPLU: static IEnumerable<int> FromTo(int a,int b) {

if ( a > b ) yield break;

for ( ; ; a++) { yield return a;

if (a == b) break; }}

16.Tratarea excepțiilor prin bucle TRY…CATCH:

EXEMPLU:

static int F(int a,int b){

if (b == 0 ) throw new Exception("Divide by zero");

return a / b; }

static void Main(){ try { Console.WriteLine(F(5,0)); }

catch(Exception e){Console.WriteLine("Error"); }}

17.Verificarea domeniului de valori prin operatorii CHECKED/UNCHECKED:

EXEMPLU: static void Main() { int x = Int32.MaxValue;

checked { Console.WriteLine(x+1); }

unchecked { Console.WriteLine(x+1); } }

18.Blocarea unui fir de execuție (thread) prin LOCK:

EXEMPLU: lock (x) { DoSomething(); }

19.Alocarea de resurse prin instrucțiunea USING:

EXEMPLU: static void Main() { using (Resource r = new Resource()) }

Nu există diferențe esențiale față de limbajul C++. Alegerea uneia sau alteia dintre aceste instrucțiuni, depinde atât de contextul de memorie, cât și de experiența anterioară a programatorului. In principiu, sunt de preferat în aplicațiile simple de tip Consola, cu program de tip listing și sunt de evitat în mediul vizual. In general, nu este recomandabil să se utilizeze bucle automate pentru crearea unor obiecte complexe, deoarece este foarte greu de controlat alocarea memoriei și există un risc crescut de a bloca execuția, prin supraîncărcarea memoriei de operare.

Instrucțiunile de procesare au prioritate maximă în ordinea de execuție a procesorului și vor fi executate și atunci când nu sunt concepute corect. Este esențial să se verifice cu maximum de atenție toate situațiile extreme ce pot fi generate de astfel de instrucțiuni.

Limbajul C# este un limbaj de programare complet, structurat sub formă de obiecte, ce poate satisface orice necesități de programare. Nucleul limbajului exploatează platforma .NET, unde sunt arhivate majoritatea claselor și intefețelor standard. La acestea se pot adăuga controalele de tip Active X sau resursele create de alți programatori.

Dat fiind numărul mare de resurse accesibile, soluțiile de programare acoperă un domeniu practic infinit. In plus, platforma .NET și controalele Active X sunt în permanentă dezvoltare.Nu se pot formula recomandări general valabile.

Bibliografie:

Buraga, S., Tarhon-Onu, V., Tanasă, Ș., Programare Web în bash și Perl, Polirom, Iași, 2002

Conolly, T., Begg, C., Strachan, A., Baze de date – proiectare, implementare, gestiune”, Editura Teora, București, 1999

Forta, B., Limbajul SQL și PL\SQL. Editura Teora, București, 2002

Honour, E., Dalberth, P., Kaplan, A., Mahta, A., Oracle, Editura Teora, București, 2001

http://www.firststeps.ru/sql/oracle/r.php?43

Ionescu, F., Baze de date relaționale și aplicații, Editura Economică, București, 2000

Jamsa, K., Klander, L., Totul despre C si C++ Manualul fundamental de programare in C si C++, Editura Teora, București, 2007

Jones, B.L., SAMS Teach Yourself the C# Language in 21 Days, 2004

Lungu, I., Iorga, M., Velicanu, M., Baze de Date Oracle, Editura Economică, București, 2002

Năstase, F., Internet, World Wide Web, JavaScript, HTML, Java, Editura Economică, București, 2005

Sasu, L., Site-uri WEB dinamice in ASP.NET‖, 5 octombrie 2009

Schildt, H., C#, Editura Teora, București, 2002

Umom, S., Oracle8. Programarea în limbaj PL/SQL, gen: Computing&Internet, an:2001

Watson, K. et al., Beginning Visual C#, Wrox Press Ltd., 2002

Watson, K., Beginning C# 2005 Databases, Wiley Publishing, Inc.,2006

Similar Posts