4. Programele aplicative prelucrează informaţii ale realităţii
înconjurătoare: inventariază cărţile unei biblioteci, gestionează
materialele dintr-un depozit, manevrează fişele într-un
dispensar etc. O tendinţă naturală a limbajelor de programare
este de a pune în corespondenţă obiectele acestei realităţi cu
reprezentări cât mai fidele la nivelul limbajului. Astfel, un
obiect eterogen cum este televizorul poate fi descris printr-o
înregistrare cu câmpuri diferite referitoare la caracteristicile
sale: tip, carcasă, culoare, tub catodic, plasmă, cristale lichide
etc.
Acest mod de reprezentare este incompletă, ea surprinde
doar o descriere fizică a dispozitivului şi nu evidenţiază
funcţionalitatea sa. Astfel, în înregistrarea făcută nu sunt
precizate manevrele pentru punerea în funcţiune, pentru
schimbarea programelor sau alte asemenea acţiuni care
trebuie efectuate pentru a putea folosi televizorul.
Pe de altă parte, faptul că televizorul este un produs de larg
consum, sau că el este un obiect tehnic nu este reflectat sau
exploatat în nici un fel la nivelul structurilor amintite.
Limbajele orientate spre obiecte elimină aceste neajunsuri
prin includerea într-o singură structură a elementelor
descriptive şi a celor de funcţionalitate.
5. Programele aplicative prelucrează informaţii ale realităţii
înconjurătoare: inventariază cărţile unei biblioteci, gestionează
materialele dintr-un depozit, manevrează fişele într-un
dispensar etc. O tendinţă naturală a limbajelor de programare
este de a pune în corespondenţă obiectele acestei realităţi cu
reprezentări cât mai fidele la nivelul limbajului. Astfel, un
obiect eterogen cum este televizorul poate fi descris printr-o
înregistrare cu câmpuri diferite referitoare la caracteristicile
sale: tip, carcasă, culoare, tub catodic, plasmă, cristale lichide
etc.
Acest mod de reprezentare este incompletă, ea surprinde
doar o descriere fizică a dispozitivului şi nu evidenţiază
funcţionalitatea sa. Astfel, în înregistrarea făcută nu sunt
precizate manevrele pentru punerea în funcţiune, pentru
schimbarea programelor sau alte asemenea acţiuni care
trebuie efectuate pentru a putea folosi televizorul.
Pe de altă parte, faptul că televizorul este un produs de larg
consum, sau că el este un obiect tehnic nu este reflectat sau
exploatat în nici un fel la nivelul structurilor amintite.
Limbajele orientate spre obiecte elimină aceste neajunsuri
prin includerea într-o singură structură a elementelor
descriptive şi a celor de funcţionalitate.
6. Un limbaj de programare orientat pe obiect este caracterizat
de următoarele trei proprietăţi:
Încapsularea: se combină o înregistrare cu funcţiile şi
procedurile care manipulează această înregistrare, formând
un nou tip de dată care se numeşte obiect;
Moştenire: se defineşte un obiect şi se foloseşte această
definiţie pentru a se construi o ierahie de obiecte, fiecare
descendent moştenind accesul la datele şi instrucţiunile
strămoşilor;
Polimorfismul: se defineşte o acţiune cu un singur nume care
poate fi partajată de obiectele din ierarhie, fiecare obiect
implementând această acţiune corespunzător cu propriile
necesităţi.
8. Prin încapsulare se înţelege mecanismul prin care datele si
subprogramele sunt plasate împreună, într-o unică structură.
Pentru realizarea acestui obiectiv în limbajul Pascal există
tipul object.
O structură de tip obiect se defineste astfel:
object
list1;
list2;
...
metoda1;
metoda2;
...
end
O astfel de structură are două tipuri de componente:
Datele - reprezentate de elementele declarate în cadrul
listelor list1, list2, .... sub forma: nume_câmp:tip_câmp.
Aceste date se mai numesc şi atributele obiectului.
9. Metodele - sunt reprezentate de antetele subprogramelor
care acţionează asupra datelor. Ele pot fi de forma:
procedure nume_metoda (lista de parametri)
function nume_metoda(lista de parametri):tip_functie
constructor nume_metoda(lista de parametri)
destructor nume_metoda(lista de parametri)
Notă:
În general nu avem acces direct la date, ci numai prin
intermediul metodelor.
Odată ce a fost definit un obiect, pot fi declarate instanţe ale
sale. Acestea pot fi valorile unor variabile-obiect statice sau
ale unor variabile dinamice create prin aplicarea procedurilor
new şi getmem unor variabile referinţe la obiectul declarat.
11. Prin moştenire se înţelege acea proprietate a tipului object
prin care un tip nou poate prelua datele şi metodele unui tip
mai vechi.
Tipul nou construit păstrează datele şi metodele vechiului tip
la care se adauga date şi metode noi.
Tipul obiect care moşteneşte un alt tip object se mai numeşte
şi tip descendent
Tipul obiect care este moştenit se mai numeşte şi strămoş.
O dată a obiectului descendent nu poate avea acelaşi nume
cu o altă dată a obiectului strămoş. În astfel de cazuri se
semnalează eroare.
Dacă obiectul descendent are o metodă cu acelaşi nume ca
strămoşul, la apelare este apelată metoda descendentului.
12. Unei variabile de tip obiect strămoş i se poate atribui un
obiect de tip descendent, dar invers nu este posibil.
Subprogramele care lucrează cu parametri formali de tip
obiect ai strămoşului pot lucra cu obiecte descendente ale
acestuia, dar invers nu este posibil.
Notă:
Membrii publici ai tipului obiect strămoş rămân publici pentru
tipul obiect descendent
Membrii privaţi ai tipului obiect strămoş rămân privaţi pentru
tipul obiect descendent
Metodele tipului descendent au acces la datele şi metodele
private ale strămoşului.
14. Polimorfismul presupune definirea unei acţiuni cu un singur
nume care poate fi partajată de obiectele din ierarhie, fiecare
obiect implementând această acţiune corespunzător cu
propriile necesităţi.
Presupune ca avem un tip obiect obiect1 derivat din tipul
obiect2. Cele două obiecte conţin fiecare câte o metodă cu
acelaşi nume met2 care apelează o metoda met1 definită
doar în obiect1. Dacă declarăm un obiect de tip obiect2 care
apelează metoda met1, metoda apelată de aceasta va fi met2
din obiect1 sau met2 din obiect2?
Răspunsul este următorul: este apelată met2 din obiect1.
O astfel de metodă de selecţie a metodei prin obiectul care o
apelează se numeşte selecţie statică. Explicaţia este
următoarea: atunci când a fost compilat obiectul obiect2,
deci şi metoda met1, ea apela metoda met2 din obiectul
obiect1.
15. Pentru realizarea selecţiei în momentul execuţiei şi nu al
compilării se foloseşte selecţia dinamică sau virtuală.
Pentru a realiza selecţia dinamică trebuie procedat astfel:
Când se declară, în cadrul obiectului strămoş, o metodă ce va
fi redefinită, se adaugă după declaraţie cuvântul VIRTUAL
Orice redefinire a metodei, în cadrul obiectelor
descendente, se face utilizând cuvântul VIRTUAL
Fiecare obiect ce conţine o metodă redefinită va avea o
metodă specifică numită CONSTRUCTOR. Constructorul este
prima care se va apela din cadrul obiectului. După apelul
ei, relativ la un alt obiect, o metodă care apare redefinită este
apelată din cadrul obiectului pentru care s-a făcut apelul
constructorului.
16. Metoda constructor execută şi alte operaţii, cum ar fi
iniţializarea câmpurilor obiectului, alocarea unor variabile
dinamice etc. Sintactic, constructorul diferă de celelalte
metode prin prezenţa cuvântului rezervat constructor, în loc
de procedure sau function.
Spre deosebire de alte metode constructorii nu pot fi virtuali.
Un obiect poate avea mai mulţi constructori, cu antete diferite.
Constructorii pot fi moşteniţi.
Funcţia inversă celei a constructorului este realizată de o altă
metodă specială, numită DESTRUCTOR. Sintactic, ea se
deosebeşte prin cuvântul rezervat destructor folosit în locul
cuvintelor procedure sau function.
Destructorul este ultima metodă apelată a unui obiect.
Uzual, destructorul nu are parametri.
17. Mecanismul metodelor virtuale se bazează pe construirea şi
utilizarea unei tabele de metode virtuale (VMT - Virtual Methods
Table) pentru fiecare obiect. Ea are următoarea alcătuire:
dimensiunea obiectului (1 cuvânt);
valoarea negativă a primului cuvânt;
adresa primei metode virtuale (2 cuvinte: segment + deplasare);
adresa celei de-a doua metode virtuale etc.
Exemplu:
Fie obiectele persoana şi elev, obiectul elev derivat din persoana
cu redefinirea metodei afisare:
persoana
nume
prenume
varsta
VMT dimensiune
- dimensiune
persoana.afisare
18. CONCLUZII
Programarea orientată pe obiect este o metodă de
programare care duce la creşterea productivităţii
construirii produselor software. Ea reprezintă o
evoluţie naturală de la metodele de programare
anterioare:
Este mai structurată decât încercările anterioare de
structurare a programelor.
Este mai modulară şi mai abstractă decât
încercările anterioare de ascundere a datelor şi de
abstractizare.
20. Ce se înţelege prin noţiunea de încapsulare a datelor ?
Care sunt componentele tipului object ?
Ce este o instanţă a tipului obiect ?
Ce se înţelege prin noţiunea de moştenire ? Cum se
realizează ea ?
Ce se înţelege prin polimorfism ?
Ce sunt metodele statice? Dar cele virtuale ?
Ce sunt constructorii şi destructorii ? Care este rolul lor ?
22. Folosind structura descrisă pentru tipul complex, realizaţi un
program care să efectueze următoarele:
a) Ordonarea crescă toare după modul a n numere complexe;
b) Calcul sumei a n numere complexe;
c) Ridicarea la putere a unui număr complex;
d) Calculul lui .
n
z1
z2
Descrieţi un tip object care să permită prelucrări asupra
matricelor de dimensiune n x m: citirea; iniţializarea
dimensiunii matricei; citirea şi afişarea elementelor matricei;
calculul transpusei; suma a două matrici; produsul a două
matrici.
Folosind structura de la problema 2 realizaţi un program
ghidat de meniu care să opereze asupra matricilor.
Realizaţi un obiect care să permită lucru cu liste liniare simplu
înlănţuite.
23. Derivaţi obiectul rational prezentat la exemplu cu metode
pentru amplificarea fracţiei cu un număr natural, pentru
tipărirea unui număr raţional, pentru verificarea următoarelor
situaţii: dacă este fracţie subunitară sau supraunitară, dacă
are numărătorul sau numitorul unitar.
Realizaţi un obiect care să permită operaţii cu numere mari
reprezentate sub formă de listă liniară. Tipul obiectul creat
poate fi derivat din tipul listă creat anterior. Cu ajutorul acestui
tip pot fi realizate operaţii de citire, scriere a unui număr
mare, adunare, scădere şi comparaţia a două numre mari.
Folosind tipul definit la problema 6, scrieţi un program care
exemplifică operaţiile cu numere mari.
Realizaţi un obiect numit polinom care permite lucru cu
polinoame. Polinoamele sunt memorate sub forma listelor
liniare simplu înlănţuite, memorându-se ca date coeficientul şi
exponentul fiecărui termen al polinomului.
25. BIBLIOGRAFIE
Atanasiu Adrian, Pintea Rodica – „Culegere de probleme
Pascal”, Editura Petrion, Bucureşti, 1997.
Burdescu Dumitru Dan – „Algoritmi şi structuri de date”,
Editura Mirton, Timişoara, 1992.
Mateescu George Daniel, Moraru Pavel Florin – „Informatică.
Manual pentru clasa a XI-a – varianta Pascal”, Editura
Niculescu, Bucureşti, 2001
Oprescu Daniela, Pintea Rodica, Grigoroiu Dan, Bălănescu
Cecilia, Voicu Anca – „Teste de sinteză în programare”,
Editura L&S Infomat, Bucureşti, 2000.
Pătrăşcoiu Octavian, Marian Gheorghe, Mitroi Nicolae –
„Elemente de grafuri şi combinatorică. Metode, algoritmi şi
programe”, Editura ALL, Bucureşti, 1994
Popescu E., Codreş. D, Codreş M., Boarna E. s.a Metode de
programare, Structuri dinamice de date, Grafuri şi POO,
Editura Else, Craiova, 2005.
26. RECAPITULARE
Un limbaj de programare orientat pe obiect este
caracterizat de următoarele trei proprietăţi:
Încapsularea: se combină o înregistrare cu funcţiile şi
procedurile care manipulează această înregistrare,
formând un nou tip de dată care se numeşte obiect;
Moştenire: se defineşte un obiect şi se foloseşte
această definiţie pentru a se construi o ierahie de
obiecte, fiecare descendent moştenind accesul la datele
şi instrucţiunile strămoşilor;
Polimorfismul: se defineşte o acţiune cu un singur
nume care poate fi partajată de obiectele din ierarhie,
fiecare obiect implementând această acţiune
corespunzător cu propriile necesităţi.