You are on page 1of 31

Curs 2 Principiile Programrii Orientate pe Obiecte

Programare Orientat pe Obiecte

Tehnici de programare Programarea procedural


l l

Modul n care este abordat programarea, din punct de vedere al descompunerii programelor Paradigme

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

Programarea modular (structurat)


l

l l

accentul n proiectarea programelor s-a deplasat de la proiectarea procedurilor ctre organizarea datelor, datorit creterii dimensiunii programelor. stilul de programare este n continuare procedural, dar datele i procedurile sunt grupate n module. Gruparea de date i proceduri n module nu implic 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


l

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 necesitatatea sporirii siguranei programelor - interzicerea accesului neautorizat la date. dezvoltarea sistemelor orientate pe obiecte, bazate pe programarea orientat pe obiecte, care a cunoscut o amploare deosebit n anii 90. programarea orientat pe obiecte presupune: determinarea i descrierea claselor utilizate n program crearea exemplarelor de obiecte necesare determinarea interaciunii dintre ele.

Programarea orientat pe obiecte


l

Reprezint aplicarea n domeniul programrii a unei metode din tehnic (tehnologia orientat pe obiecte, care se bazeaz pe modelul obiect) Modelul obiect al unei aplicaii implic patru principii importante i anume:

abstractizare; ncapsulare; modularitate; ierarhizare.

Primele aplicaii: llimbajul Simula, care a stat la baza Smaltalk, Object Pascal, C++, Clos, Ada, Eiffel. 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


Programarea orientat pe obiecte (object-oriented programming) este o 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. Exist trei pri importante ale acestei definiii: l Se folosesc obiecte, nu algoritmi, ca uniti constructive de baz , obiectele fiind componente ale unei ierarhii de agregare. l Fiecare obiect este o instan (un exemplar) al unei clase. l Clasele sunt componente ale unei ierarhii de tip, fiind corelate ntre ele prin relaii de motenire.
l

Obs: Dac lipsete una din aceste caracteristici, programarea nu se mai numete orientat pe obiecte, ci programare prin abstactizarea datelor, deoarece o clas este un tip de date abstract.

Limbaj de programare orientat pe obiecte


l

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


l

posibilitatea ca un program s ignore unele aspecte ale informaiei pe care o manipuleaz, adic posibilitatea de a se concentra asupra esenialului. nseamn identificarea similitudinilor ntre diferite entiti, situaii sau procese din lumea real , concentrarea ateniei asupra acestor aspecte comune i ignorarea pentru nceput a detaliilor. identific trsturile 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


l l

l l

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


l

este procesul de partiionare a unui program n componente individuale (module) ceea ce 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


l l

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


l

l l l l

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


l

Proprietatea de motenire: proprietatea claselor prin care o clas nou construit poate prelua datele i metodele clasei mai vechi. l Clasa derivat se afl ntotdeauna pe un nivel imediat inferior celui corespunztor clasei de baz. l n Java exist doar motenire simpl, o ierarhie de clase n care fiecare clas derivat are o singur clas de baz. Exemplu. parallelogram

dreptunghi patrat
l

romb

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


l

l l

l l

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


l

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. l double abs(double); l int abs(int); l abs(1); // apeleaza abs(int) l 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.

l l

Concluzii POO
l

Ideea POO este de a crea programele ca 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 snt de obicei reprezentri ale obiectelor din viaa real, astfel nct programele realizate prin tehnica POO snt 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
l

O clas definete un tip abstract de date.

Definiie clas: class nume{ lista_elementelor_membru } Lista elementelor membru poate conine: declaraii de date; implementari 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
l

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 Protected X X* Public X X X X Implicit X X

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
l

Un obiect este o dat de un tip definit printro 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
l

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 de 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(); Complex z1= new Complex(1,0);

// z = 0 + 0*i // z1 = 1 + 0*

Realizarea ncapsulrii datelor


l

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


l

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) { re = x; im = y; } public void setre(double x) { re = x;} public void setim(double y) { im = y; } public double getre(){ return re;} public double getim() { return im;}

Realizarea ncapsulrii datelor


public void display(){ System.out.println(re+++im+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
l l l l l

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.

You might also like