Sunteți pe pagina 1din 37

Universitatea Constantin Brncui Trgu-Jiu Facultatea de Inginerie Departamentul de Automatic, Energie i Mediu

Programare orientat pe obiecte


LECTOR DR. ADRIAN RUNCEANU

Curs 1
Noiuni introductive despre programarea orientat pe obiecte

Programare orientat pe obiecte (C++/Java)

03.10.2012

Introducere n Programarea Orientat pe Obiecte


3

1. Clase 1.1. Programare procedural Programare orientat pe obiecte 1.2. Declararea claselor

Programare orientat pe obiecte (C++/Java)

03.10.2012

1.1. Programare procedural Programare orientat pe obiecte


4

Limbajul C++, ca i Pascal, utilizeaz modelul programrii structurate procedurale, care const n descompunerea programului n proceduri (funcii), apelate n ordinea n care se desfoar algoritmul. Datele sunt separate de funciile care le manipuleaz.
Programare orientat pe obiecte (C++/Java)

03.10.2012

1.1. Programare procedural Programare orientat pe obiecte


5

Odat cu creterea dimensiunii programelor s-a

acordat o atenie sporit organizrii datelor funciile, mpreun cu datele pe care le manevreaz sunt organizate ca un modul.

Programarea modular este tot programare

procedural, cu proceduri i date grupate n module i ascunse altor module.

Programare orientat pe obiecte (C++/Java)

03.10.2012

1.1. Programare procedural Programare orientat pe obiecte


6

Programarea orientat pe obiecte const n

identificarea unor obiecte, cu operaii (metode) specifice asociate i realizarea comunicrii ntre aceste obiecte prin intermediul unor mesaje.

Elementul constructiv obiectul este o instan

a unei clase (tip de dat definit de utilizator). Clasele sunt membre ale unei ierarhii i sunt corelate ntre ele prin relaii de motenire.

Programare orientat pe obiecte (C++/Java)

03.10.2012

1.1. Programare procedural Programare orientat pe obiecte


7

Un limbaj de programare pune la dispoziia

utilizatorilor un numr de tipuri primitive (sau predefinite). Astfel n C++ avem ca tipuri primitive char, int, float, double si void. Un tip de date este precizat:
printr-o mulime finit de valori T (constantele tipului) i o mulime de operatori (aplicaii T T sau T T T)

Programare orientat pe obiecte (C++/Java)

03.10.2012

1.1. Programare procedural Programare orientat pe obiecte


8

ntr-un limbaj de programare un tip de date

reprezint un model matematic.


Exemplu: Tipul int , caracterizat prin:
mulimea

finit de ntregi (-32768, 32767) i operatorii binari +, -, *, / i % ilustreaz conceptul de numr ntreg
Programare orientat pe obiecte (C++/Java)

03.10.2012

1.1. Programare procedural Programare orientat pe obiecte


9

Modelele matematice care nu au reprezentare direct prin tipuri predefinite se pot reprezenta prin tipuri definite de utilizator (numite i tipuri de date abstracte TDA).

Programare orientat pe obiecte (C++/Java)

03.10.2012

Introducere n Programarea Orientat pe Obiecte


10

1. Clase 1.1. Programare procedural Programare orientat pe obiecte 1.2. Declararea claselor

Programare orientat pe obiecte (C++/Java)

03.10.2012

1.2. Declararea claselor


11

O clas reprezint un tip definit de utilizator (TDA).


Declararea unei clase se face ntr-o manier

asemntoare declarrii structurilor i conine att date ct i funcii (metode) Dupa declararea unei clase putem declara variabile avand acest tip nou.

Programare orientat pe obiecte (C++/Java)

03.10.2012

1.2. Declararea claselor


12

Un

obiect este un exemplar sau o instan a unei clase.

Conform programrii obinuite se poate face

urmtoarea analogie: obiect este echivalent cu o variabil clasa este echivalent cu un tip definit de utilizator
Programare orientat pe obiecte (C++/Java)

03.10.2012

1.2. Declararea claselor


13

Termenul de OOP provine din limba englez i are urmtoarea semnificaie:

Object Oriented Programming Programare orientat pe obiecte

Programare orientat pe obiecte (C++/Java)

03.10.2012

1.2. Declararea claselor


14

Acest domeniu al programrii orientate pe

obiecte are la baz unificarea a dou concepte i anume datele aplicaiei i codul necesar prelucrrii lor. utilizatorului cteva faciliti care permit definirea unor tipuri de date proprii i a unor operatori care s utilizeze aceste tipuri de date.
03.10.2012

Pentru a ajunge la acest scop se ofer

Programare orientat pe obiecte (C++/Java)

1.2. Declararea claselor


15

Putem spune ca se vor obine tipuri de date care

se comport la fel ca i tipurile de date i operatorii standard. 1. Tipurile de date standard:


ntregi reale caracter

2. i respectiv, operatorii: adunare scdere nmulire mprire, .a.m.d.


Programare orientat pe obiecte (C++/Java)

03.10.2012

1.2. Declararea claselor


16

De exemplu, un programator poate creea

tipurile de date:
matrice complex

pentru a putea scrie programe n care s

poat prelucra numere complexe i s poat efectua operaii cu matrici.

Programare orientat pe obiecte (C++/Java)

03.10.2012

1.2. Declararea claselor


17

Astfel pot aprea urmtoarele declarri i respectiv

operaii:

complex a, b, c; matrice p, q, r; ... c = a + b; p = q * r;

Tipurile de date complex i matrice se numesc CLASE 2. Variabilele a, b, c, p, q, r se numesc OBIECTE (sau instanieri ale claselor complex i matrice), 3. Operatorii + i * se numesc METODE ale acelorai clase.
1.
Programare orientat pe obiecte (C++/Java)

03.10.2012

1.2. Declararea claselor


18

Din punct de vedere istoric, primele limbaje care au folosit noiunea de CLASA, au fost: - SIMULA (1965) - SIMULA-2 (1967) - SMALLTALK (1970) Ele nu s-au putut impune pe piaa limbajelor de programare deoarece erau limbaje de sine stttoare i muli dintre programatori nu erau dornici s nvee un nou limbaj, n defavoarea limbajelor din acel moment.
Programare orientat pe obiecte (C++/Java)

03.10.2012

1.2. Declararea claselor


19

Astfel de abia n anul 1980, cnd deja limbajul C era acceptat, un colectiv de programatori condus de Bjarne Stroustrup aduce conceptul de CLASA ntr-un dialect al limbajului C, numit C with Classes, iar in 1983 ia natere un nou limbaj numit C++.
Programare orientat pe obiecte (C++/Java)

03.10.2012

1.2. Declararea claselor


20

Aplicaii construite cu ajutorul limbajului C++: grafic interactiv proiectarea interfeelor utilizator exploatarea reelelor de calculatoare tehnicile de proiectare a compilatoarelor Limbajul C++ are un impact foarte mare i se impune pe piaa limbajelor de programare obiectuale.
Programare orientat pe obiecte (C++/Java)

03.10.2012

1.2. Declararea claselor


21

Tipuri de metode

Metodele pot avea acces la starea obiectului i de aceea se comport diferit, n funcie de aciunea acestora asupra strii obiectului.
Programare orientat pe obiecte (C++/Java)

03.10.2012

1.2. Declararea claselor


22

Astfel avem: 1. Constructori metode care creeaz noi instanieri

ale clasei (adic noi obiecte). Spunem c s-a nscut un nou obiect atunci cnd este folosit constructorul unei clase. Este posibil s creem obiecte n mai multe moduri, deoarece unei clase i pot corespunde mai muli constructori. 2. Destructori metode care elimin obiecte din memorie. 3. Selectori metode care nu modific starea obiectului, asemntoare cu accesul read-only. Selectori pot invoca obiecte din mai multe clase. 4. Modificatori metode care modific starea obiectului, efectund operaii de scriere la nivelul datelor obiectului.
Programare orientat pe obiecte (C++/Java)

03.10.2012

1.2. Declararea claselor


23

Clase Clasele sunt de fapt implementarea unor tipuri abstracte de date ( TDA sau Abstract Data Type - ADT). O caracteristic important a unui limbaj de programare este aceea de a oferi programatorului posibilitatea de a-i construi tipuri de date ca cele standard, acestea numindu-se tipuri definite de utilizator (user defined). 03.10.2012
Programare orientat pe obiecte (C++/Java)

1.2. Declararea claselor


24

n limbajul C se poate folosi cuvntul cheie typedef prin intermediul cruia se poate defini orice tip de date utilizator. Se mai poate folosi mpreun cu tipul structur (struct) obinndu-se astfel noi tipuri de date. Cu toate acestea, operaiile care se pot utiliza asupra acestor noi tipuri de date rmn tot cele standard, acestea acionnd numai asupra tipurilor standard.
Programare orientat pe obiecte (C++/Java)

03.10.2012

1.2. Declararea claselor


25

Acest aspect se poate rezolva, n POO, prin

suprancrcarea operatorilor (overloading operators). Introducerea tipurilor abstracte de date ofer o anumit structur i unitate prin punerea laolalt a celor dou elemente, i anume, datele i operaiile.

Programare orientat pe obiecte (C++/Java)

03.10.2012

1.2. Declararea claselor


26

O clas reunete datele i operaiile n cadrul

aceluiai tip de dat. n plus, exist posibilitatea protejrii elementelor componente, att date ct i funcii membre, protejarea nu mpotriva necunoaterii lor de ctre utilizator ci mai ales mpotriva distrugerii lor accidentale.
Acest proprietate se numete ncapsulare.

Concluzie:

clas = date + operaii


Programare orientat pe obiecte (C++/Java)

03.10.2012

1.2. Declararea claselor


27

C++ se distinge de limbajele POO pure prin

faptul c permite controlul accesului att la datele membre (ncapsulare selectiv a datelor), ct i la funciile membre ale unei clase. n acest scop, se pot utiliza specificatorii de control:
1.
2. 3.

Programare orientat pe obiecte (C++/Java)

public private protected

03.10.2012

1.2. Declararea claselor


28

Pentru domeniul n care este valabil declaraia obiectului, efectul specificatorilor asupra accesului la un membru este: 1. public membrul poate fi accesat de orice funcie din domeniul declaraiei clasei 2. private membrul este accesibil numai funciilor membre i prietene ale clasei (funciile prietene ale unei clase vor fi prezentate ulterior) 3. protected similar cu private, dar accesul se extinde pentru functiile membre i prietene ale claselor derivate din clasa respectiv (clasele derivate vor fi tratate ulterior)
Programare orientat pe obiecte (C++/Java)

03.10.2012

1.2. Declararea claselor


29

O clas poate fi declarat, asemntor cu tipul struct sau union, folosind cuvntul cheie class, astfel: class <nume_clasa> : <lista_clase> { <lista_membri>

}<lista_variabile>;
Programare orientat pe obiecte (C++/Java)

03.10.2012

1.2. Declararea claselor


30

Unde: nume_clas este numele tipului clasa ales de ctre utilizator i care trebuie s fie unic lista_clase este lista claselor din care este derivat clasa respectiv (dac este cazul) lista_membri reprezint secvena de declaraii ale membrilor clasei. Lista conine declaraii de date membre i declaraii de funcii membre. Datele membre pot fi de orice tip, mai puin tipul clasa derivat (se admit ns pointeri la tipul clasa derivat). lista_variabile este lista numelor de variabile alese pentru clasa respectiv
Programare orientat pe obiecte (C++/Java)

03.10.2012

1.2. Declararea claselor


31

Dei nume_clasa i lista_variabile apar ca

opionale, ca i n cazul tipurilor din limbajul C, struct i union, cel puin una din specificaii trebuie s existe. De regul nume_clasa nu se omite, pentru a putea declara ulterior obiecte de acest tip. La declararea obiectelor este suficient s se specifice numele clasei fr cuvntul cheie class.
Programare orientat pe obiecte (C++/Java)

03.10.2012

1.2. Declararea claselor


32

Exemplu: // definirea clasei matrice class matrice { <lista_membrii> }; //declararea variabilelor de tip matrice matrice a,b,c;

Programare orientat pe obiecte (C++/Java)

03.10.2012

1.2. Declararea claselor


33

Observaie: Membrii unei clase au implicit atributul de acces private. Metodele asociate datelor trebuie s fie ns accesibile utilizatorului clasei, astfel nct trebuie s fie declarate public. Se admite c n definiia clasei s apar doar prototipurile funciilor membre. Definiiile efective ale funciilor se pot face ulterior, n orice alt loc n cadrul programului.
Programare orientat pe obiecte (C++/Java)

03.10.2012

1.2. Declararea claselor


34

Observaie: Definiia unei clase const din dou pri: declaraia i implementarea sa. 1. Declaraia este o niruire a elementelor componente ale unei clase (date i funcii) 2. Implementarea const n acea seciune n care se implementeaz funciile declarate ca aparinnd clasei. Fiind membre ale unui tip de date, accesul la aceste elemente se realizeaz prin intermediul operatorului de apartenen ..
Programare orientat pe obiecte (C++/Java)

03.10.2012

1.2. Declararea claselor


35

n cadrul definiiei, cuvntul cheie public

indic gradul de libertate la acces la elementele componente ale clasei. Prin public, toate elementele sunt disponibile n exteriorul clasei, o astfel de clas fiind asemntoare cu tipul de date struct, ns asemnrile se opresc aici.

Programare orientat pe obiecte (C++/Java)

03.10.2012

1.2. Declararea claselor


36

n schimb utiliznd cuvintele cheie private sau protected, elementele crora li s-a ataat aceste cuvinte cheie pot fi accesate numai prin intermediul funciilor membre sau prietene.

Programare orientat pe obiecte (C++/Java)

03.10.2012

37

ntrebri?

Programare orientat pe obiecte (C++/Java)

03.10.2012