Sunteți pe pagina 1din 39

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)

14.10.2013

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)

14.10.2013

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)

14.10.2013

1.1. Programare procedural Programare


orientat pe obiecte
5

Odat cu creterea dimensiunii programelor

s-a acordat o atenie sporit organizrii


codurilor surs funciile, mpreun cu
datele pe care le manevreaz, astfel ele 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)

14.10.2013

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)

14.10.2013

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)

14.10.2013

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 este caracterizat prin:
mulimea

finit de ntregi [-32768, 32767]


operatorii binari +, -, *, / i %

i ilustreaz conceptul de numr ntreg


Programare orientat pe obiecte (C++/Java)

14.10.2013

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)

14.10.2013

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)

14.10.2013

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)
care prelucreaz aceste date.
Dup declararea unei clase putem declara

variabile(obiecte) avnd acest tip nou.


Programare orientat pe obiecte (C++/Java)

14.10.2013

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)

14.10.2013

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)

14.10.2013

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.
Pentru a ajunge la acest scop se ofer

utilizatorului cteva faciliti care permit


definirea unor tipuri de date proprii i a unor
operatori care s utilizeze aceste tipuri de
date.

Programare orientat pe obiecte (C++/Java)

14.10.2013

1.2. Declararea claselor


15

Putem spune c 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)

14.10.2013

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)

14.10.2013

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)

14.10.2013

1.2. Declararea claselor


18

Din punct de vedere istoric, primele limbaje


care au folosit noiunea de CLAS, 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)

14.10.2013

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 CLAS ntr-un dialect
al limbajului C, numit C with Classes, iar
n 1983 ia natere un nou limbaj numit
C++.

Programare orientat pe obiecte (C++/Java)

14.10.2013

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)

14.10.2013

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)

14.10.2013

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.
Programare orientat pe obiecte (C++/Java)

14.10.2013

1.2. Declararea claselor


23

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)

14.10.2013

1.2. Declararea claselor


24

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).
Programare orientat pe obiecte (C++/Java)

14.10.2013

1.2. Declararea claselor


25

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)

14.10.2013

1.2. Declararea claselor


26

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)

14.10.2013

1.2. Declararea claselor


27

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.
Programare orientat pe obiecte (C++/Java)

14.10.2013

1.2. Declararea claselor


28

Concluzie:

Date
+
Operaii
CLAS
Programare orientat pe obiecte (C++/Java)

14.10.2013

1.2. Declararea claselor


29

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.

public
private
protected

Programare orientat pe obiecte (C++/Java)

14.10.2013

1.2. Declararea claselor


30

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)

14.10.2013

1.2. Declararea claselor


31

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)

14.10.2013

1.2. Declararea claselor


32

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)

14.10.2013

1.2. Declararea claselor


33

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)

14.10.2013

1.2. Declararea claselor


34

Exemplu:
// definirea clasei matrice
class matrice
{
<lista_membrii>
};
//declararea variabilelor de tip matrice
matrice a,b,c;
Programare orientat pe obiecte (C++/Java)

14.10.2013

1.2. Declararea claselor


35

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)

14.10.2013

1.2. Declararea claselor


36

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)

14.10.2013

1.2. Declararea claselor


37

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)

14.10.2013

1.2. Declararea claselor


38

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)

14.10.2013

39

ntrebri?

Programare orientat pe obiecte (C++/Java)

14.10.2013