Documente Academic
Documente Profesional
Documente Cultură
B) Încapsularea.
Încapsularea este conceptul complementar abstractizării. Daca rezultatul operaţiei de
abstractizare pentru un anumit obiect este identificarea protocolului sau, atunci încapsularea are
de a face cu selectarea unei implementări si tratarea acesteia ca pe un secret al respectivei
abstracţiuni. Încapsularea – numită şi ascunderea de informaţii, asigură faptul că obiectele nu
pot schimba starea internă a altor obiecte în mod direct (ci doar prin metode puse la dispoziţie de
obiectul respectiv); doar metodele proprii ale obiectului pot accesa starea acestuia. Fiecare tip de
obiect expune o interfaţă pentru celelalte obiecte care specifică modul cum acele obiecte pot
interacţiona cu el.
Prin urmare, încapsularea este procesul in care are loc ascunderea implementării fata de
majoritatea obiectelor-client. Determinarea protocolului pentru un obiect trebuie sa preceadă
decizia privind implementarea sa. Sintetizând putem defini încapsularea astfel: Încapsularea este
procesul de compartimentare a elementelor care formează structura si comportamentul unei
abstracţiuni ; încapsularea serveşte la separarea interfeţei "contractuale" de implementarea
acesteia.
Interfaţa vs. Implementare
Din definiţia de mai sus rezulta ca un obiect este format din doua părţi distincte: interfaţa
(protocolul) si respectiv implementarea acestei interfeţe. Abstractizarea este procesul prin care
este definita interfaţa obiectului, in timp ce încapsularea defineşte reprezentarea (structura)
obiectului împreuna cu implementarea interfeţei. Ascunderea structurii obiectului si a
implementării metodelor sale este ceea ce se înţelege prin noţiunea de ascundere a informaţiei.
Beneficiile încapsulării
Separarea interfeţei de reprezentarea unui obiect permite modificarea reprezentării
fără a afecta in vreun fel pe nici unul din clienţii săi, întrucât aceştia depind de
interfaţa si nu de reprezentarea obiectului-server.
Încapsularea permite modificarea programelor intr-o maniera eficienta, cu un efort
limitat si bine localizat.
Încapsularea aplică principiul abstracţiei: un obiect nu este accesibil pentru operaţiile
vizibile (interfaţa sa externă) şi implementarea sa (structurile datelor asociate) este ascunsă.
Astfel, modificările datelor rămân locale, la obiecte, fără să afecteze programele utilizatorilor
(fig.1.4).
Aplicaţia 1 Aplicaţia 2
Program Program
Operaţii
Date Operaţii Operaţii
Date Date
D) Ierarhizarea.
Abstractizarea este un lucru bun, dar in majoritatea aplicaţiilor - excepţie făcând doar
aplicaţiile banale - vom descoperi mai multe abstracţiuni decât putem cuprinde la un moment dat.
Încapsularea ne ajuta sa tratam aceasta complexitate prin ascunderea interiorului
abstracţiunilor noastre. Modularitatea ne ajuta si ea, oferindu-ne o modalitate de a grupa
abstracţiuni legate logic intre ele. Toate acestea deşi utile, nu sunt suficiente. Adesea un grup de
abstracţiuni formează o ierarhie, iar prin identificarea acestor ierarhii, putem simplifica
substanţial înţelegerea problemei.
Ierarhizarea reprezintă o ordonare a abstracţiunilor. Cele mai importante ierarhii de clase
in paradigma obiectuala sunt:
o Ierarhia de clase (relaţie de tip "is a")
o Ierarhia de obiecte (relaţie de tip "part of")
Polimorfismul
Este abilitatea de a procesa obiectele diferit în funcţie de tipul lor sau de clasa lor. Mai
exact, este abilitatea de a redefini metode pentru clasele derivate. De exemplu pentru o clasă
Figura putem defini o metodă arie. Dacă Cerc, Dreptunghi, etc. vor extinde clasa Figura, acestea
pot redefini metoda arie.
Moştenirea (ierarhia de clase)
Moştenirea – organizează şi facilitează polimorfismul şi încapsularea permiţând definirea
si crearea unor clase specializate plecând de la clase (generale) care sunt deja definite - acestea
pot împărtăşi (şi extinde) comportamentul lor fără a fi nevoie de redefinirea aceluiaşi
comportament. Aceasta se face de obicei prin gruparea obiectelor în clase şi prin definirea de
clase ca extinderi ale unor clase existente. Conceptul de moştenire permite construirea unor clase
noi, care păstrează caracteristicile şi comportarea, deci datele şi funcţiile membru, de la una sau
mai multe clase definite anterior, numite clase de bază, fiind posibilă redefinirea sau adăugarea
unor date şi funcţii noi. Se utilizează ideea: ”Anumite obiecte sunt similare, dar in acelaşi timp
diferite”. O clasă moştenitoare a uneia sau mai multor clase de bază se numeşte clasă derivată.
Esenţa moştenirii constă în posibilitatea refolosirii lucrurilor care funcţionează.
Moştenirea defineşte o relaţie intre clase in care o clasa împărtăşeşte structura si
comportarea definita in una sau mai multe clase (după caz vorbim de moştenire simpla sau
multipla). Aşa cum aminteam mai sus, relaţia de moştenire este cea care face diferenţa intre
programarea orientata pe obiecte si cea bazata pe obiecte.
Semantic, moştenirea indica o relaţie de tip "is a" ("este un/o"). De exemplu un urs "este
un" mamifer si deci intre clasa urşilor si cea a mamiferelor exista o relaţie de moştenire. Si in
cazul programării acesta este cel mai bun test pentru a detecta o relaţie de moştenire intre doua
clase A si B: A moşteneşte pe B daca si numai daca putem spune ca "A este un fel de B". Daca A
"nu este un" B atunci A nu ar trebui sa moşteneasca pe B. Prin urmare, moştenirea implica o
ierarhie de tip generalizare/specializare, in care clasa derivata specializează structura si
comportamentul mai general al clasei din care a fost derivata.
Agregarea (ierarhia de obiecte)
Agregarea este relaţia intre doua obiecte in care unul dintre obiecte aparţine celuilalt obiect.
Agregarea reda apartenenţa unui obiect la un alt obiect. Semantic, agregarea indica o relaţie de tip
"part of" ("parte din"). De exemplu intre o roata si un automobil exista o astfel de relaţie, întrucât
putem spune ca "o roata este o parte din automobil".