Sunteți pe pagina 1din 33

Curs 2

Principiile Programrii Orientate pe


Obiecte

Programare Orientat pe Obiecte


Tehnici de programare
Programarea procedural

Modul n care este abordat programarea, din punct


de vedere al descompunerii programelor
Paradigme

Programarea procedural
prima modalitate de programare, nc frecvent
folosit
descompunerea programului n proceduri (funcii)
care sunt apelate n ordinea de desfurare a
algoritmului
sunt prevzute posibiliti de transfer a
argumentelor ctre funcii i de returnare a valorilor
rezultate
limbajul Fortran: primul limbaj de programare
procedural .
au urmat Algol60, Algol68, Pascal, iar C este unul
din ultimele invenii n acest domeniu.
Programarea modular (structurat)

accentul s-a deplasat de la proiectarea


procedurilor ctre organizarea datelor, datorit
creterii dimensiunii programelor.
stilul de programare este n continuare
procedural
datele i procedurile sunt grupate n module,
nu implic ns i o asociere strict ntre
acestea
Modul: o mulime de proceduri corelate,
mpreun cu datele pe care le manevreaz
tehnic de ascundere a datelor (data-hiding):
posibilitatea de ascundere a unor informaii
definite ntr-un modul fa de celelalte module.
modularitatea i ascunderea informaiilor sunt
caracteristici implicite n programarea orientat
pe obiecte.
Programarea orientat pe obiecte

programarea procedural i structurat:


descriere a algoritmilor ca o secven de
pai care duc de la datele iniiale la
rezultatul cutat.

limbaje de programare orientate la o clas


concret de probleme: sisteme de dirijare cu
baze de date, modelare .a.

a aprut necesitatea sporirii siguranei


programelor - interzicerea accesului
neautorizat la date.
Programarea orientat pe obiecte

dezvoltarea sistemelor orientate pe


obiecte, bazate pe programarea orientat
pe obiecte a cunoscut o amploare
deosebit n anii 90

programarea orientat pe obiecte


presupune:
1. determinarea i descrierea claselor
utilizate n program
2. crearea exemplarelor de obiecte
necesare
3. determinarea interaciunii dintre ele.
Modelul obiect

Reprezint aplicarea n domeniul programrii a


unei metode din tehnic (tehnologia orientat
pe obiecte, care se bazeaz pe modelul obiect)
Primele aplicaii: limbajul Simula (a stat la baza
Smaltalk), Object Pascal, C++, Clos, Ada, Eiffel
Modelul obiect al unei aplicaii implic patru
principii importante:
abstractizare;
ncapsulare;
modularitate;
ierarhizare.
Modelul obiect: un concept unificator n tiina
calculatoarelor, aplicabil nu numai n
programare, ci i n arhitectura calculatoarelor,
n proiectarea interfeelor utilizator, n baze de
date.
Programarea orientat pe obiecte

Object-oriented programming: metod de


programare n care programele sunt organizate
ca i colecii de obiecte cooperante, fiecare
dintre ele reprezentnd o instan a unei clase,
iar clasele sunt membre ale unei ierarhii de
clase, corelate ntre ele prin relaii de motenire.
Se folosesc obiecte, nu algoritmi, ca uniti
constructive de baz.
Fiecare obiect este o instan (un exemplar) al
unei clase.
Clasele sunt componente ale unei ierarhii de
tip, fiind corelate ntre ele prin relaii de
motenire.
Obs: Dac lipsete una din aceste caracteristici:
programare prin abstractizarea datelor (o
clas este un tip de date abstract)
Limbaj de programare orientat pe
obiecte

Cerine:
1. Suport obiecte (instane ale unor
clase), clasele fiind tipuri definite de
utilizator (numite i tipuri abstracte de
date)
2. Tipurile (clasele) pot moteni atribute de
la alte clase, numite clase de baz

Dac un limbaj nu suport direct


motenirea ntre clase se numete limbaj
de programare bazat pe obiecte (object-
based), cum este, de exemplu, limbajul
Ada.
Principii POO: Abstractizarea

ignorarea unor aspecte ale informaiei


manipulate, adic posibilitatea de a se
concentra asupra esenialului
identificarea similitudinilor ntre diferite entiti,
situaii sau procese din lumea real,
concentrarea ateniei asupra acestor aspecte
comune i ignorarea pentru nceput a detaliilor
identificarea trsturilor caracteristice eseniale
ale unui obiect, care l deosebesc de toate
celelalte feluri de obiecte
fiecare obiect n sistem are rolul unui actor
abstract, care poate executa aciuni, i poate
modifica i comunica starea i poate comunica
cu alte obiecte din sistem fr a dezvlui cum
au fost implementate acele facilitai
procesele, funciile sau metodele pot fi de
asemenea abstracte
Principii POO: ncapsularea

ascunderea de informaii (data-hiding)


obiectele nu pot schimba starea intern a
altor obiecte n mod direct (ci doar prin
metode puse la dispoziie de obiectul
respectiv)
doar metodele proprii ale obiectului pot
accesa starea acestuia
procesul de compartimentare a elementelor
unei abstractizri n dou pri: structura i
comportarea
ncapsularea separ comportarea (accesat
prin interfa) de structur, definit prin
implementare
fiecare tip de obiect expune o interfa
pentru celelalte obiecte care specific modul
cum acele obiecte pot interaciona cu el
Principii POO: Modularizarea

este procesul de partiionare a unui program


n componente individuale (module)
permite reducerea complexitii programului
prin definirea unor granie bine stabilite i
documentate n program.

modularizarea const n partiionarea


programului n module care pot fi
compilate separat, dar care au conexiuni
cu alte module ale programului.

modulele servesc ca i containere n care


sunt declarate clasele i obiectele
programului.
Principii POO: Ierarhizarea

Modalitatea de a ordona abstractizrile


(tipurile abstracte de date).
Ierarhiile pot s denote relaii de tip sau
relaii de agregare.
Relaiile de tip sunt definite prin motenirile
ntre clase, prin care o clas (clasa derivat)
motenete structura sau comportarea
definit n alt clas (clasa de baz )
Relaiile de agregare specific compunerea
unui obiect din mai multe obiecte mai
simple.
Obs: n limbajele de programare
procedural agregarea se realiza prin
structuri de tip nregistrare (record n Pascal,
struct n C, etc).
Principii POO: Motenirea

permite definirea i crearea unor clase


specializate plecnd de la clase (generale)
care sunt deja definite
permite construirea unor clase noi, care
pstreaz caracteristicile i comportarea,
deci datele i funciile membru, de la una
sau mai multe clase definite anterior, numite
clase de baz, fiind posibil redefinirea sau
adugarea unor date i funcii noi.
o clas ce motenete una sau mai multe
clase de baz se numete clasa derivat.
posibilitatea refolosirii lucrurilor care
funcioneaz
organizeaz i faciliteaz polimorfismul i
ncapsularea
Anumite obiecte sunt similare dar n
acelai timp diferite.
Principii POO: Motenirea

Proprietatea de motenire: proprietatea


claselor prin care o clas nou construit
poate prelua datele i metodele clasei mai
vechi.

Clasa derivat se afl ntotdeauna pe un


nivel imediat inferior celui corespunztor
clasei de baz.

n Java exist doar motenire simpl, o


ierarhie de clase n care fiecare clas
derivat are o singur clas de baz.
Principii POO: Motenirea

Exemplu.
paralelogram

dreptunghi romb

patrat

Clasa dreptunghi este o clas derivat


(subclas) a clasei paralelogram, iar clasa
paralelogram este o clas de baz
(supraclas) a clasei dreptunghi
Astfel, o ierarhie de concepte conduce la o
ierarhie ntre clasele care implementeaz
conceptele ierarhice respective.
Principii POO:
Polimorfismul, suprancrcarea

Mai multe funcii pot avea acelai nume n


acelai domeniu de definiie, dac se pot
diferenia prin numrul sau tipul
argumentelor de apel.
O funcie este polimorfic dac se poate
executa cu acelai efect asupra unor valori
de tipuri diferite (ex. operatorul & din C)
Un alt mecanism este suprancrcarea
funciilor( function overloading).
O funcie este suprancrcat dac execut
operaii diferite n contexte diferite (ex.
operatorul + din Java)
Se poate aplica doar funciilor.
Supradefinirea (overriding) ofer
posibilitatea de a redefini metode pentru
clasele derivate, metodele au acelai tip i
aceeai parametri.
Principii POO:
Polimorfismul, suprancrcarea

Dac n acelai domeniu sunt definite mai multe


funcii cu acelai nume, la fiecare apel se
selecteaz funcia corect prin compararea
tipurilor argumentelor reale de apel cu tipurile
argumentelor formale ale funciei.
double abs(double);
int abs(int);
abs(1); // apeleaza abs(int)
abs(1.0); // apeleaza abs(double)

Nu este admis ca funciile s difere doar prin


tipul returnat!
Dou funcii declarate cu acelai nume se
refer la aceeai funcie dac sunt n acelai
domeniu i au numr i tipuri identice de
argumente.
Concluzii POO

Programele: o colecie de obiecte, uniti


individuale de cod care interacioneaz
unele cu altele, n loc de simple liste de
instruciuni sau de apeluri de proceduri

Obiectele POO sunt de obicei reprezentri


ale obiectelor din viaa real

Programele sunt mai uor de neles, de


depanat i de extins dect programele
procedurale (mai ales n cazul proiectelor
software complexe i de dimensiuni mari,
care se gestioneaz fcnd apel la ingineria
programrii).
Tip abstract de date

mulime de date care au aceeai


reprezentare i pentru care este definit setul
de operaii care se pot executa asupra
elementelor mulimii respective.

are dou pri:


o parte care definete reprezentarea
datelor
o parte care definete operaiile asupra
datelor respective.
Noiunea de clas

O clas definete un tip abstract de date.

Definiie clas:
class nume{
lista_elementelor_membru
}

Lista elementelor membru poate conine:


declaraii de date;
implementri de funcii;
prototipuri de funcii abstracte.

Datele declarate printr-o definiie de clas se


numesc date membru
Funciile definite sau pentru care este prezent
numai prototipul n definiia clasei, se numesc
funcii membru sau metode.
Att datele ct i metodele pot avea modificatori
de acces
Modificatorii de acces

Modificatorii de acces sunt cuvinte


rezervate ce controleaz accesul celorlalte
clase la membrii unei clase. Specificatorii de
acces pentru variabilele i metodele unei clase
sunt: public, protected, private i cel implicit (la
nivel de pachet).

Specificator Clasa Subcls* Pachet Oriunde


Private X
Implicit X X
Protected X X X
Public X X X X

*subclas din alt pachet


Clas

Exemplu:
class Complex {
// date membru
float real;
float imag;
// functii membru publice
public void atribuire(float x, float y) {
real = x; imag=y;
}
public double retreal() {
return real;
}
public void afiscomplex(){
System.out.println(real+++imag+*i);
}
}
Obiecte

Un obiect este o dat de un tip definit printr-


o clas. Se spune c obiectul este o
instaniere a clasei respective.

Formatul declaratiei unui obiect:


nume_clas nume_obiect;

Instanierea obiectelor se face folosind


operatorul new.
nume_obiect = new nume_clas(..);
Obiecte

Datele membru se aloc distinct la fiecare


instaniere a clasei. O excepie o constituie
datele membru care au clasa de memorare
static, ea este o parte comun pentru toate
instanierile clasei i exist ntr-un singur
exemplar.

Funciile membru sunt ntr-un singur


exemplar oricte instanieri ar exista.
Legtura dintre funcii membru i obiectul
pentru care se face apelul se realizeaz
folosind operatorul punct.
Obiecte

Exemplu de instanieri pentru clasa


complex:
Complex z;
z=new Complex();

Atunci:
z.atribuire(0,0);
z.afiscomplex();
afieaz numrul complex z (n cazul de
fa 0+0i).
Constructori

Obiectele se genereaz i se pot iniializa la


instaniere cu ajutorul constructorilor
Funcii membru ce au acelai nume cu
numele clasei
Funcii apelate automat la crearea
obiectelor.
Valorile de iniializare se transfer
constructorului i ele joac acelai rol ca
parametrii efectivi de la apelurile funciilor
obinuite.
Se pot defini mai muli constructori pentru o
clas. n acest caz ei au acelai nume, dar
difer prin numrul i/sau tipurile
parametrilor.
Constructori

Dac exist mai muli constructori, atunci la


iniializare se utilizeaz regulile de la
apelurile funciilor suprancrcate.

Funciile constructor nu ntorc valori, dar nu


sunt precedai de cuvntul void.

Dac clasa nu conine constructori, se


genereaz un constructor fr parametri,
adic un constructor implicit. El are rolul
numai de alocare a obiectelor clasei
respective, fr a le iniializa.
Constructori

Exemplu:
class Complex {
double real;
double imag;
public Complex(double x, double y)
{real = x; imag = y;}
public Complex ( )
{real = 0; imag = 0;}
}

Exemple de instaniere:
Complex z= new Complex(); // z = 0 + 0*i
Complex z1= new Complex(1,0); // z1 = 1 + 0*
Realizarea ncapsulrii datelor

accesul la datele sau funciile membre ale


unei clase din orice punct al domeniului de
definiie al clasei s-ar putea rezolva simplu
prin declararea de tip public a acestora
o astfel de implementare nu respect
principiul ncapsulrii datelor i se
recomand s fie evitat
din punct de vedere al dreptului de acces la
membrii clasei, o clas bine definit permite
ncapsularea (sau ascunderea informaiilor),
prin care un obiect poate ascunde celor
care-l folosesc modul de implementare, prin
interzicerea accesului la datele i funciile
private sau protected.
Realizarea ncapsulrii datelor

n general, respectnd principiul


ncapsulrii, datele membre sunt declarate
private sau protected i nu pot fi accesate
direct (pentru citire sau scriere) din funcii
nemembre ale clasei.
Pentru citirea sau modificarea unora dintre
datele membre protejate n clasa respectiv
se pot prevedea funcii membre de tip
public, care pot fi apelate din orice punct al
domeniului de definiie al clasei i fac parte
din interfaa clasei.
De exemplu, pentru clasa Complex , o
implementare care respect principiul
ncapsulrii, dar, n acelai timp permite
accesul la datele private ale clasei poate
arta astfel:
Realizarea ncapsulrii datelor

class Complex {
private double real;
private double imag;
public Complex(double x, double y){
real = x; imag = y;}
public Complex ( ){
real = 0; imag = 0;}
public void set(double x, double y){
real = x; imag = y; }
public void setre(double x){
real = x;}
public void setim(double y){
imag = y; }
public double getre(){
return real ;}
public double getim() {
return imag;}
Realizarea ncapsulrii datelor

public void display(){


System.out.println(real+++ imag +i);
}
}

class test{
public static void main(String arg[]){
Complex c1=new Complex(), c2=new
Complex(1,1);
c1.set(7.2, 9.3);
c1.display(); // afiseaza 7.2 9.3
c1.setre(1.3);
c1.setim(2.8);
c1.display(); // afiseaza 1.3 2.8 }
}
}
Clase abstracte

clasele pentru care programatorul nu


intenioneaz s instanieze obiecte.
clase de baz in ierarhii
se mai numesc clase abstracte de baz
o clas devine abstract dac conine una
sau mai multe declaraii de funcii abstracte
dac o clas ce motenete o clas ce
conine o funcie abstract nu
implementeaz acea funcie abstract
motenit, devine ea nsi o clas
abstract.

OBS: clasele pentru care se pot instania


obiecte se numesc clase concrete.

S-ar putea să vă placă și