POO (Notiuni Introductive)
POO (Notiuni Introductive)
PROGRAMAREA ORIENTATĂ
OBIECT (POO)
DR., LECT. UNIV. TÎRȘU V.
1
AGENDĂ
2
1. NOȚIUNI INTRODUCTIVE PENTRU POO (1)
• Paradigme de programare
• John von Neumann a descris arhitectura hardware în care codul şi datele sunt stocate
intr-o unica memorie internă de unde sunt extrase şi prelucrate în procesor.
• paradigma defineşte o strategie de abordare a organizării codului; metodele de
proiectare legate de arhitectura von Neuemann sunt legate strans de organizarea
hardware a acestei arhitecturi şi pleca fie de la date, fie de la cod, rezultând 2
paradigme:
4
1. NOȚIUNI INTRODUCTIVE PENTRU POO (3)
• ABSTRACTIZAREA
• Abstractizarea este procesul de grupare a
datelor şi metodelor de prelucrare specifice
rezolvării unei probleme.
• Abstractizarea:
• exprimă toate caracteristicile esenţiale ale
unui obiect care fac ca acesta să se distingă
de alte obiecte;
• se concentrează asupra caracteristicilor
esențiale ale unui obiect, în raport cu
perspectiva unui observator.
Source: Grady Booch, Object-Oriented Analysis and Design wi
Applications (Second Edition). ntroducere în Programarea
Orientată Obiect
5
1. NOȚIUNI INTRODUCTIVE PENTRU POO (4)
• Încapsularea
• Gruparea datelor şi metodelor aplicabile
acestora într-o singură structură de date -
obiect.
• Constă în separarea aspectelor externe ale
unui obiect care sunt accesibile altor obiecte
de aspectele interne ale obiectului care sunt
ascunse celorlalte obiecte. • nu e nevoie să ştim cum funcţionează un
obiect pentru a-i trimite mesaje;
• este nevoie să ştim ce mesaje înţelege
(adică, care îi sunt capabilităţile), clasa
instanţei determină ce mesaje îi pot 6
fitrimise.
1. NOȚIUNI INTRODUCTIVE PENTRU POO (5)
• Moștenirea
• este un proces, prin intermediul căruia un obiect poate obţine proprietăţile altui obiect. Cu
alte cuvinte, obiectul poate moşteni proprietăţile de bază ale altui obiect şi adăuga la ele
altele noi, caracteristice numai pentru el.
• Exemple de ierarhii
• Creaţie->construcţie->clădire
• Culturi->legume->morcov
• Întreprindere ->angajat->manager
7
1. NOȚIUNI INTRODUCTIVE PENTRU POO (6)
• Polimorfism
• Proprietatea, care permite utilizarea
aceluiaşi nume pentru a soluţiona două sau
mai multe asemănătoare, dar tehnic diferite
probleme.
• Scopul polimorfismului, este utilizarea unui
nume pentru acțiunile generale ale clasei.
• Supraîncărcarea funcţiilor - un singur nume
pentru funcţii ce execută diferite acţiuni și au
parametri de intrare de diferite tipuri.
• Concepţia generală a polimorfismului constă
în „o interfaţă, mai multe metode”
8
2. CLASE ȘI OBIECTE (1)
9
2. CLASE ȘI OBIECTE(2)
• Obiectul este conceptul de bază în programarea orientată obiect (OOP –
Object Oriented Programming) care asociază datele împreună cu operaţiile
necesare prelucrării.
•.
10
2.1. CLASE (1)
• Clasa este un model pentru viitoarele obiecte.
11
2.1. CLASE (2)
• Declararea claselor.
class nume_tip{
modificator_control_acces:
lista_membrilor;
} lista_variabile;
• Exemplu:
class masina{
char *culoare; // dată membru la care accesul este, implicit, private
int capacit_cil; // dată membru la care accesul este, implicit, private
public: //metodele sunt de acces public
void citire_date(); //metodă cu acces public, care permite introducerea
//datelor despre o instanţă a clasei
char* set_culoare(char *sir); //metodă cu acces public 12
};
2.1. CLASE (3)
• Nivelul de acces la membrii unei clase poate fi :
modificator descriere
private • membrii (date şi metode) la care accesul este private pot fi
accesaţi doar prin metodele clasei (nivel acces implicit)
public • membrii la care accesul este public pot fi accesaţi din orice
punct al domeniului de existenţă a clasei respective
protected • aceşti membri pot fi accesaţi prin funcţiile membre ale clasei
şi funcţiile membre ale clasei derivate
friend • aceşti membri pot fi accesaţi prin funcţiile membre ale
funcţiei prietene specificate.
13
2.1. CLASE (4)
14
2.1. CLASE (5)
15
2.1. CLASE (6)
• Definiţia clasei
modificator:
tip camp1; campuri declarate
tip camp2; (starea)
modificator:
tip metoda1 (lista parametrilor)
{
… metode declarate
} (comportamentul)
tip metoda2 (lista parametrilor)
{
…
}
} <lista obiectelor>; 16
2.1. CLASE (7)
• Exemplu:
#include <iostream>
#include <string>
using namespace std;
class carte{
string titlu[30];
string editura[30];
double pret;
public:
void seteaza_valori(){
cout<<"\n titlu :"; getline(cin,titlu);
cout<<"\n editura :"; getline(xin,editura);
cout<<"\n pret :"; cin>>pret; cin.ignore(); }
void show() { cout<<"\nTitlu: "<<titlu<<"\teditura: "<<editura<<"\t pretul: "<<pret;}
};
1. Stare
2. Comportament
3. Identitate
18
2.2. OBIECTE (2)
• Un obiect este caracterizat:
1. Stare
2. Comportament
3. Identitate
• De exemplu, atributele unui obiect „carte” pot fi titlu, autor, editura, număr pagini, anul
apariţiei, ISBN şi preţ atunci starea unei cărţi ar putea fi următoarea:
titlu = Poezii
editura = Polirom
SBN = 973–567–545–1
autor = Mihai Eminescu
număr pagini = 125
preţ = 25
anul apariţiei = 2007
19
2.2. OBIECTE (3)
2. Comportament este determinat de operaţiile pe care obiectul poate
să le execute.
Operaţiile se deduc din acţiunile obiectului pe care trebuie să le
îndeplinească.
• De exemplu, obiectul „carte” trebuie să furnizeze acces la titlu, autor,
an apariţie, etc. adică să furnizeze informaţii de stare a obiectului.
• În plus se poate:
• modifica starea obiectului prin modificare preţ sau altele,
• obţinerea unui grup de informaţii cum ar fi titlu, autor şi editură,
• se poate face un calcul de TVA, etc.
20
2.2. OBIECTE (4)
2. Identitate este un identificator - OID (Object IDentifier) care
caracterizează unic obiectul, permiţând să se construiască referiri spre
obiect şi să se facă distincţia tuturor obiectelor într-o manieră
nonambiguă şi independentă de starea lor.
• Astfel pot fi tratate distinct două obiecte ale căror atribute au valori
identice
21
2.2. OBIECTE (5)
22
2.2. OBIECTE (6)
•
•
•
•
•
•
23
3. EXEMPLE DE DEFINIRE A CLASELOR (1)
• Exemplu 2
int main()
#include <iostream> { dreptunghi a; double l1, l2;
using namespace std; cout<<"\nLungime="; cin>>l1; cout<<"\nLatime=";
cin>>l2;
class dreptunghi{ a.seteaza_dimen(l1, l2);
double Lung, lat; cout<<"\nDimensiunile dreptunghiului sunt:";
public: cout<<a.arata_Lung()<<" si"<<a.arata_Lat()<<'\n';
void seteaza_dimen(double, double ); cout<<"\nAria
double arata_Lung() {return Lung;} dreptunghiului:"<<a.calcul_arie()<<'\n';
double arata_Lat() {return lat;} cout<<"\nDimens :"<<sizeof(a)<<'\n';
double calcul_arie() {return Lung*lat;} dreptunghi *pa;
pa=&a;
}; double arie=pa->calcul_arie();
void dreptunghi::seteaza_dimen(double L, double l) return 0;
{Lung=L; lat=l;} }
24
3. EXEMPLE DE DEFINIRE A CLASELOR (2)
• Exemplul 2
public class Punct { public void setY(double y0) {
//Variabile de instanta y = y0;
private double x; actualizareDistanta();
private double y; }
private double distanta;
public double x() {
//Constructori return x;
Punct() { }
setX(0);
setY(0); public double y() {
distanta = 0; return y;
} }
#include <iostream>
#include <string>
using namespace std;
Membri privati
class Carte{
string titlu;
string editura;
double pret;
public:
Carte(){}; //constructor implicit
Carte(string titlu, string editura, double pret); //constructor explicit
string getTitlu(){return titlu;}
void setTitlu(string titlu){ this->titlu=titlu;}
}; //finalizarea definirii clasei
Carte::Carte(string titlu, string editura, double pret){ //constructor explicit definit inline
this->titlu=titlu;
this->editura=editura;
this->pret= pret;
}