CATEGORII DOCUMENTE |
Caracteristicile obiectelor si claselor
In majoritatea surselor bibliografice asupra POO, se considera drept principale caracteristici ale obiectelor incapsularea, mostenirea sipolimorfismul. La acestea se mai pot adauga si alte caracteristici importante, cum sunt identitatea, agregarea si clasificarea.
Identitatea (engleza: Identity) se refera la faptul ca datele sunt grupate in entitati discrete, numite obiecte. Fiecare obiect din POO modeleaza starea si comportamentul unui anumit obiect din lumea reala, care poate fi un obiect fizic (de exemplu automobil, calculator, furnal, om, animal etc.) sau unul conceptual (de exemplu figura geometrica, orar etc.). Fiecare obiect are propria lui identitate, astfel ca doua obiecte sunt considerate distincte, chiar daca atributele lor (cum ar fi numele, culoarea etc.), sunt identice. Pentru a face aceasta distinctie, obiectul este indicat printr-o referinta unica. Modul in care este reprezentata aceasta referinta poate sa difere in diverse limbaje de programare (de ex. adresa de memorie, nume etc.), important insa este ca fiecare obiect are o singura referinta si nu exista doua obiecte distincte cu aceeasi referinta.
Incapsularea (engleza: encapsulation) este proprietatea obiectelor de a-si ascunde o parte din date si metode. Din exteriorul obiectului sunt accesibile ('vizibile') numai datele si metodele publice. Putem deci sa ne imaginam obiectul ca fiind format din doua straturi, ca in Figura 1.
- Figura 1 -
Obiectul se comporta ca si cand ar avea doua 'invelisuri': unul 'transparent', care permite accesul la datele si metodele publice ale obiectului, si un al doilea invelis 'opac', care cuprinde datele si metodele invizibile (inaccesibile) din exterior. Starea obiectului depinde atat de datele publice, cat si de cele incapsulate. Metodele publice ale obiectului au acces la datele si metodele incapsulate (ascunse) ale acestuia. In consecinta, starea obiectului poate fi modificata atat prin modificarea directa, din exterior, a valorilor variabilelor publice, fie prin utilizarea unor metode publice care modifica valorile variabilelor incapsulate. In mod similar, valorile variabilelor incapsulate pot fi obtinute numai utilizand metode publice ale obiectului respectiv.
Incapsularea obiectelor prezinta avantaje importante in programare, deoarece mareste siguranta si fiabilitatea programelor, prin eliminarea posibilitatii modificarii accidentale a valorilor acestora, ca urmare a accesului neautorizat din exterior. Din aceasta cauza, programatorii evita in general sa prevada intr-un obiect date publice, preferand ca accesul la date sa se faca numai prin metode.
Partea vizibila (publica) a obiectului constituie interfata acestuia cu 'lumea exterioara'. Este posibil ca doua obiecte diferite sa aiba interfete identice, adica sa prezinte in exterior aceleasi date si metode. Datorita faptului ca partea incapsulata difera, astfel de obiecte pot avea comportament diferit.
Agregarea (engleza: aggregation) este proprietatea obiectelor de a putea incorpora alte obiecte. Asa dar, 'datele' continute intr-un obiect pot fi nu numai date primitive, ci si obiecte. Se pot astfel crea obiecte cu structuri din ce in ce mai complexe.
Clasificarea (engleza: classification) este proprietatea obiectelor care au aceeasi structura de date si acelasi comportament (aceleasi metode) de a putea fi grupate intr-o clasa. Clasa este o abstractizare, care contine acele proprietati ale obiectelor, care sunt importante intr-o aplicatie sau intr-o categorie de aplicatii, si le ignora pe celelalte. De exemplu, in aplicatii privind situatia profesionala a studentilor, clasa Student contine astfel de atribute ca numele si prenumele studentului, facultatea, anul de studii, examenele promovate si notele obtinute, dar ignora atribute ca inaltimea, culoarea ochilor sau a parului, greutatea etc., care nu sunt necesare in aplicatia respectiva. Spre deosebire de agregare, care este o relatie intre obiecte, clasificarea este o relatie intre concepte reprezentate prin clase.
In functie de nivelul de abstractizare, clasele pot forma o structura ierarhica. De exemplu, clasa mijloacelor de transport cuprinde subclasele mijloacelor de transport terestre, navale si aeriene. Clasa mijloacelor de transport terestre le cuprinde pe cele rutiere si feroviare. Clasa mijloacelor de transport rutiere cuprinde clasele automobilelor si autocamioanelor etc. Fiecare subclasa a unei clase este ea insasi o clasa. O astfel de ierarhie de clase este reprezentata in Figura 2.
- Figura 2 -
Cu cat o clasa se afla in aceasta ierarhie pe un nivel mai inalt, cu atat ea este mai abstracta, deci descrie un numar mai mic de atribute ale obiectelor care ii apartin. Clasa A este radacina acestei ierarhii, fiind situata pe cel mai inalt nivel de abstractizare. Clasele B, C si D sunt subclase ale lui A, iar clasele E si F sunt subclase ale clasei B. In acelasi timp, clasa Aestesuperclasa a clasei B, iar aceasta este superclasa a clasei F. In programarea orientata pe obiecte se spune, de asemenea, ca clasa B este derivata din clasa A, iar clasa F este derivata din clasa B sau, in general, o subclasa este derivata din superclasa sa.
Un obiect care apartine unei clase se numeste si instanta a clasei (este o instantiere, o realizare particulara a clasei respective). De exemplu, clasa Barbat si clasa Femeie sunt subclase ale clasei Om. In schimb, Ion_Popescu este o instantaa clasei Barbat (un obiect care apartine acestei clase), iar Maria_Preda este o instanta a clasei Femeie.
In principiu, o clasa poate avea o infinitate de instante. Practic, desigur, numarul lor este finit. Toate instantele unei clase au aceleasi atribute (aceleasi 'campuri'), dar valorile acestora pot sa difere de la o instanta la alta.
Mostenirea (engleza: inheritance) este proprietatea unei clase de a contine toate atributele (campurile) si metodele superclasei sale. In consecinta, trecerea de la clasa la subclasa se face prin adaugarea de atribute si/sau de metode. De exemplu, clasa Barbat si clasa Femeie au ambele toate atributele clasei Om, dar fiecare din acestea are si atribute specifice.
In general, in programarea orientata pe obiecte, mostentirea poate fi simpla sau multipla. In cazul mostenirii simple fiecare clasa are cel mult o superclasa, ca in Figura 2. In cazul mostenirii multiple o clasa poate avea mai multe superclase, ca in Figura 3.
- Figura 3 -
In aceasta figura se observa ca clasa D mosteneste clasele A si B, iar clasa H mosteneste clasele D, E siF. Aceasta corespunde situatiei din lumea reala in care, de exemplu, un student_sportiveste in acelasi timp si student, si sportiv, deci detine atributele ambelor clase. Desi exista limbaje de programare, ca limbajul C++, care admit mostenirea multipla, aceasta creeaza unele dificultati. Astfel, in exemplul din Figura 3, metodele si datele clasei B sunt mostenite de clasa H pe doua cai: pe traseul BDH si pe traseul BEH. Pentru a se evita astfel de situatii, in limbajul Java se admite numai mostenirea simpla. Lipsa mostenirii multiple este compensata in limbajul Java prin introducerea conceptului de interfata care va fi prezentat ulterior.
Polimorfismul (engleza: polymorphism) permite ca aceeasi operatie sa se realizeze in mod diferit in clase diferite. Sa consideram, de exemplu, ca in clasa Figura_geometrica exista metoda arie(), care calculeaza aria figurii respective. Clasele Cerc, Triunghi, Patrat sunt subclase ale clasei Figura_geometrica si vor mosteni, deci, de la aceasta metoda arie(). Este insa evident ca aria cercului se calculeaza in alt mod decat aria patratului sau cea a triunghiului. Pentru fiecare din instantele acestor clase, la calcularea ariei se va aplica metoda specifica clasei respective.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 2329
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved