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


2

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;

1. 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.
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. public
2. private
3. 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

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) 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

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