QReferate - referate pentru educatia ta.
Referatele noastre - sursa ta de inspiratie! Referate oferite gratuit, lucrari si proiecte cu imagini si grafice. Fiecare referat, proiect sau comentariu il poti downloada rapid si il poti folosi pentru temele tale de acasa.



AdministratieAlimentatieArta culturaAsistenta socialaAstronomie
BiologieChimieComunicareConstructiiCosmetica
DesenDiverseDreptEconomieEngleza
FilozofieFizicaFrancezaGeografieGermana
InformaticaIstorieLatinaManagementMarketing
MatematicaMecanicaMedicinaPedagogiePsihologie
RomanaStiinte politiceTransporturiTurism
Esti aici: Qreferat » Referate informatica

Delphi limbaj orientat obiect



Delphi limbaj orientat obiect


Pentru a scrie aplicatii simple in Delphi nu e necesara cunoasterea in detaliu a tuturor elementelor limbajului - de exemplu facilitatile avansate pentru tratarea exceptiilor - deoarece Delphi pregateste in mare parte codul necesar pentru programator. Totusi, pentru a intelege mai bine ce facem si pentru a stapini cu adevarat mediul Delphi, sint necesare aceste cunostinte. Delphi este o extensie a limbajului Pascal, principala sa facilitate fiind orientarea spre lucrul cu obiecte, motiv pentru care, in continuare, vom trata aceasta trasatura a limbajului.


Delphi foloseste o noua viziune asupra lucrului cu obiecte, fata de extensiile anterioare Pascal.


Termeni de baza

Termenii de baza folositi in lucrul cu obiecte sint "clasa" si "obiect".

"Clasa" = tip de data utilizator, care are o reprezentare, o stare si un comportament. Clasa contine date interne (de obicei ascunse) si subprograme. Datele interne descriu reprezentarea clasei, valorile concrete constituie starea unui obiect iar subprogramele descriu comportamentul. O clasa descrie un grup de entitati foarte asemanatoare. Fiind un tip de data, o clasa nu ocupa spatiu in memorie.



"Obiect" = o instanta a unei clase (o variabila de tipul descris de clasa). Obiectul corespunde unei entitati "reale". Un obiect ocupa spatiu de memorie in timpul executiei programului.


In unele limbaje cei doi termeni nu sint foarte clar diferentiati. Chiar versiunile anterioare de Pascal foloseau cuvintul rezervat object pentur a defini o clasa. De aceea programatorii Pascal sint obisnuiti sa foloseasca termenul de obiect in loc de clasa si instanta in loc de obiect.


O data cu introducerea cuvintului rezervat class pentru definirea claselor (in loc de object), Delphi a introdus si un nou model de lucru cu obiecte.


Diferenta intre cele 2 modele

Intre cele doua modele de lucru cu obiecte asemanarile sint foarte mari, mergind uneori pina la identitate. Ambele modele definesc clase de obiecte, ambele suporta modificatorii de acces la atribute si metode private, protected si public, ambele permit derivarea claselor prin mostenire. Codul scris este aproape identic pentru ambele modele.

Ceea ce difera este modul de implementare si comportamentul codului compilat. In modelul anterior se lucra cu obiecte statice, in timp ce in noul model se lucreaza cu obiecte dinamice. Aceasta implementare este numita "model referinta".


In modelul referinta, un obiect (ca variabila) nu contine date, ci este doar un pointer catre zona de memorie in care se afla datele obiectului (obiectul in sine).



Modelul referinta este foarte puternic si in acelasi timp usor de folosit, mai usor de folosit decit modelul static. Acest model de lucru cu obiecte este folosit si in limbaje strict orientate obiecte precum Eiffel.


Pentru compatibilitate, Delphi pastreaza si modelul static de lucru cu obiecte. In continuare ne vom ocupa numai de modelul referinta.



Declararea unei clase

In ierarhia de obiecte Delphi, TObject este clasa de baza, din care sint derivate toate celelalte. Orice clasa noua definita trebuie sa fie derivata din una existenta. Pentru o clasa complet noua de porneste de la clasa de baza, caz mai rar intilnit. Intrucit unul din scopurile claselor este refolosirea codului, mai mereu se porneste de la o clasa aflata pe un nivel oarecare al ierarhiei.


Pentru a defini o clasa in Delphi se procedeaza astfel:

- pentru o clasa complet noua:

type

TClasaNoua=class


end;

sau

type

TClasaNoua=class(TObject)


end;

Aceste doua forme sint echivalente. In primul caz derivarea se face implicit din clasa de baza TObject, in al doilea caz se face derivarea in mod explicit din clasa de baza.


- pentru a deriva dintr-o clasa existenta:

type

TClasaNoua=class(TClasaParinte)


end;


Faptul ca orice clasa este derivata direct sau indirect din TObject asigura implementarea modelului referinta si prezenta facilitatilor de baza in orice clasa.


Exemplu:

type

TNrComplex=class(TObject)

preala:real

pimag:real;

procedure seteaza(pr,pi:real);

function modul:real;

end;

Accesul la atributele unui obiect se face prin calificare:

var nrc:TNrComplex;


nrc.preala:=7.3;

nrc.pimag:=3.2;


Corpul metodelor trebuie descris in partea de cod. Pentru a marca apartenenta metodelor la clasa, numele lor trebuie calificat cu numele clasei din care fac parte:

procedure TNrComplex.Seteaza(pr,pi:real)

begin preala:=pr;

pimag:=pi;

end


function TNrComplex.Modul:real;

begin modul:=sqrt(preala*preala+pimag*pimag);

end


Apelarea metodelor se face prin calificare, asemanator cu accesarea atributelor:

var nrc:TNrComplex;

m:real;


nrc.Seteaza(7.3,3.2);

m:=nrc.modul;


Constructori si destructori

In exemplul anterior nrc este de fapt o referinta, conform modelului referinta de lucru cu obiecte. Prin declararea variabilei nrc nu a fost creat nici un obiect, doar s-a rezervat un spatiu in care sa fie retinuta ulterior adresa unui obiect de tip TNrComplex. (In modelul static de obiecte, prin declaratie s-ar fi creat un obiect).

Obiectul in sine trebuie creat explicit, prin apelarea constructorului sau.

Constructor = o metoda speciala, care creeaza un obiect (aloca memorie in heap pentru atributele obiectului).

Destructor = o metoda speciala care "sterge" obiectul din memorie (elibereaza zona de memorie ocupata de obiect).


Deoarece orice clasa este derivata de TObject, ea va contine un constructor si un destructor mostenite din aceasta clasa: Create respectiv Free.


Exemplu:

pentru ca exemplul anterior sa fie corect, inainte de a putea accesa atributele sau metodele obiectului, acesta trebuie creat. Atunci cind obiectul nu mai este necesar, el trebuie sters din memorie. Exemplul va arata astfel:


var nrc:TNrComplex;

m:real;


nrc.Create;  //creare obiect

nrc.Seteaza(7.3,3.2); //utilizare obiect

m:=nrc.modul;

nrc.Free;    //stergere obiect



Desi este corecta, clasa descrisa mai sus nu are functionalitate. Pentru a avea o functionalitate minima, trebuie adaugate citeva metode:

adaugarea unui numar complex,

scaderea unui numar complex,

inmultirea cu un numar complex,

inmultirea cu un numar real etc.


Din motive legate de usurinta in gestionarea codului si securitatea datelor, fiecare clasa se descrie intr-un unit separat (desi e posibila descrierea ei in orice alt unit).

In sectiunea de interfata a unit-ului se descrie clasa ca atare, iar in sectiunea de implementare se descriu metodele clasei.


Exemplu:

unit-ul care contine descrierea clasei TNrComplex,

o aplicatie simpla care foloseste clasa TNrComplex.



Constructori si destructori definiti de utilizator

Constructorul implicit face doar alocare de memorie pentru atributele clasei, fara a le initializa. Pentru multe aplicatii, e nevoie si de initializarea atributelor. In acest scop se poate scrie o noua versiune pentru constructorul implicit (override - inlocuirea lui) sau se poate scrie un constructor complet nou. Un constructor nou poate avea orice nume.


Exemplu: in clasa TNrComplex se adauga:

constructor Init(pr,pi:real);


constructor TNrConmplex.Init(pr,pi:real);

begin preala:=pr;

pimag:=pi;

end;



Prin apelarea acestui constructor se realizeaza atit alocarea de spatiu cit si initializarea atributelor.


Exemplu: nrc.init(7.3, 3.2);


Asemanator, se poate scrie un destructor care sa efectueze operatii specifice (de exemplu, daca avem clasa Lista simplu inlantuita, care are ca atribut capul listei, inainte de stergerea obiectului trebuie sterse toate nodurile listei - operatie care trebuie realizata in mod explicit de destructor).


Ascunderea atributelor/metodelor

Pentru o abordare orientata obiect corecta, atributele trebuie ascunse in interiorul clasei -incapsulate. Principalul scop al incapsularii este protejarea atributelor impotriva accesului neautorizat (inclusiv pentru a evita valorile care descriu stari aberante ale obiectelor).


Accesul la datele ascunse se face intermediul metodelor de acces (metode al caror scop este sa seteze sau sa citeasca valorile atributelor - de exemplu metoda Seteaza din exemplul anterior). In acest fel implementarea interna a clasei poate fi schimbata, fara a afecta in vreun fel aplicatiile elaborate pe baza ei.


In Delphi, incapsularea se realizeaza pe doua niveluri: la nivelul clasei si la nivelul unit-ului.


La nivelul clasei, incapsularea se realizeaza prin folosirea modificatorilor de acces. Delphi a imprumutat din C++ modificatorii private, protected si public. In plus, exista modificatorul published - cu rol special in Delphi - si automated, cu rol specific controalelor tip OLE.


private: atribute si metode care nu pot fi accesate din afara unit-ului de clasa (in C++ e mai strict, interzicind accesul din afara clasei).

public: atribute si metode accesibile liber, din orice sectiune de program in care este vizibil obiectul respectiv.

protected: atribute si metode partial protejate. Sint accesibile din clasa curenta si toti descendentii sai, dar nu pot fi accesate de utilizatorii clasei sau ai descendentilor sai (codul care instantiaza obiecte din clasele respective).


In principiu, atributele unei clase sint private iar metodele publice. Daca unele metode sint necesare doar pentru unele calcule interne clasei, atunci pot fi private sau protejate. Atributele pot fi publice atunci cind se doreste acces rapid si usor la ele si exista siguranta in privinta modului de definire si in privinta securitatii clasei.


Exemplu: atributele clasei TNrComplex devin private si se adauga metode pentru accesarea si setarea cimpurilor preala si pimag. Se adauga si o metoda care intoarce valoarea complexa reprezentata ca sir de caractere.


published: atribute si metode publice disponibile si in timpul dezvoltarii aplicatiei. Ele sint accesibile mediului Delphi si apar in Inspectorul de obiecte in timpul dezvoltarii aplicatiei. Folosirea modificatorului published este importanta atunci cind se dezvolta componente Delphi si mai putin importanta atunci cind se dezvolta aplicatii.

Daca in descrierea clasei nu se precizeaza nici un modificator, atunci implicit atributele si metodele sint published.

automated: folosit pentru a defini interfata publica cu informatii tip automatizare OLE a unor clase. E folosita in clasele derivate din TAutoClass, pentru a crea servere de automatizare OLE.

Observatie: atunci cind se construieste o interfata Delphi, atributele corespunzatoare elementelor de interfata trebuie sa fie publicate pentru a putea fi initializate automat (Delphi le plaseaza in sectiunea implicita - published). De asemenea, procedurile care raspund evenimentelor trebuie sa fie publicate. Numai elementele publicate apar in Inspectorul de obiecte.


La nivelul unui unit incapsularea se manifesta prin restrictiile de acces impuse de sectiunile acestuia: interfata si implementare. Doar ceea ce este descris in sectiunea de interfata este vizibil din afara unit-ului, restul fiind protejat, ascuns in interior.

Nu se poate descarca referatul
Acest referat nu se poate descarca

E posibil sa te intereseze alte referate despre:


Copyright © 2024 - Toate drepturile rezervate QReferat.com Folositi referatele, proiectele sau lucrarile afisate ca sursa de inspiratie. Va recomandam sa nu copiati textul, ci sa compuneti propriul referat pe baza referatelor de pe site.
{ Home } { Contact } { Termeni si conditii }