0% au considerat acest document util (0 voturi)
9 vizualizări26 pagini

POO (Notiuni Introductive)

Documentul oferă o introducere în programarea orientată pe obiect (POO), explicând conceptele fundamentale precum obiecte, clase, abstractizare, încapsulare, moștenire și polimorfism. Se discută despre structura și caracteristicile obiectelor, inclusiv starea, comportamentul și identitatea acestora, precum și despre modul de definire a claselor și a obiectelor în diverse limbaje de programare. Exemplele incluse ilustrează cum se pot declara și utiliza clasele și obiectele în practică.

Încărcat de

Marcica Dranga
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
9 vizualizări26 pagini

POO (Notiuni Introductive)

Documentul oferă o introducere în programarea orientată pe obiect (POO), explicând conceptele fundamentale precum obiecte, clase, abstractizare, încapsulare, moștenire și polimorfism. Se discută despre structura și caracteristicile obiectelor, inclusiv starea, comportamentul și identitatea acestora, precum și despre modul de definire a claselor și a obiectelor în diverse limbaje de programare. Exemplele incluse ilustrează cum se pot declara și utiliza clasele și obiectele în practică.

Încărcat de

Marcica Dranga
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
Sunteți pe pagina 1/ 26

INTRODUCERE ÎN

PROGRAMAREA ORIENTATĂ
OBIECT (POO)
DR., LECT. UNIV. TÎRȘU V.

1
AGENDĂ

1. Noțiuni introductive pentru POO


2. Obiecte și clase
3. Exemple de definire a claselor

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:

orientată pe proces: orientată de la obiect:


proiectarea pleacă de la cod proiectarea pleacă de la date:
(algoritm): obiecte + mesaje = Program
algoritmi + structuri de date = 3
Program.
1. NOȚIUNI INTRODUCTIVE PENTRU POO (2)
• Ce este programarea orientată pe obiecte?
• Programarea Orientată Obiect (POO) este o metodă de proiectare și implementare în care
programele sunt reprezentate sub forma unor colecții de obiecte (clase) care interacționează
între ele prin intermediul mesajelor.
• Limbaje de programare orientate obiect: C++, C#, Java, …

• Principalele concepte care stau la baza POO sunt:


• Abstractizarea
• Încapsularea
• Moștenirea
• Polimorfismul

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)

• În lumea în care trăim suntem obişnuiţi să numim obiecte acele entităţi


care sunt caracterizate prin masă, adică materie (exemplu: clădiri, animale,
plante)
• Prin extensie, pot fi definite alte obiecte fără masă, care sunt mai degrabă
concepte decât entităţi fizice, de genul formulelor matematice.
• Tot prin extensie, obiectele pot aparţine unei lumi virtuale, de genul unor
evenimente ce pot avea loc, cum ar fi: apăsarea unei taste, producerea unei
explozii intr-un joc sau consultarea unui cont.

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.
•.

Date Metode obiect

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)

• Definirea unei clase înseamnă crearea unui nou


tip de date care apoi poate fi utilizat pentru
declararea obiectelor de acest tip.
• Clasa este elementul de programare care ne permite
transcrierea cât mai bună a unui concept din viaţa
concretă într-un limbaj de programare.
• Ea permite definirea atât a datelor ce descriu o
entitate cât şi a acţiunilor asociate prin metode.

14
2.1. CLASE (5)

Datele sunt informaţii de structură


descrise de o mulţime de atribute ale Date: nume, data nasterii, inaltime, adresa
obiectului şi definesc starea iniţială a
obiectului. Metode: Se_Muta( adresa noua ), Creste(
inaltime_noua )
Metodele (operaţiile) definesc
funcţionalitatea obiectului (operaţiile
permise sau acţiunile asupra datelor) şi
determină comportamentul obiectului .

15
2.1. CLASE (6)
• Definiţia clasei

class NumeleClasei{ corpul 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;}
};

int main (){


carte carte1, carte2, carte3; //declararea biectelor de tipul carte
carte1.seteaza_valori(); //setarea valorior pentru obiectul carte1
carte2.seteaza_valori();
carte3.seteaza_valori();
carte1.show(); //afisarea starii obiectului la ecran 17
carte2.show();
carte3.show();
return 0;
2.2. OBIECTE (1)

Un obiect este caracterizat:

1. Stare
2. Comportament
3. Identitate

18
2.2. OBIECTE (2)
• Un obiect este caracterizat:
1. Stare
2. Comportament
3. Identitate

4. Starea se referă la elementele de date conţinute în obiect şi la valorile asociate acestora.


Acestea formează atributele care descriu proprietăţile unui obiect.

• 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.

obţineTitlu, obţineAutor, modificăPreţ, calculTVA, afişeazăInformaţii ...

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)

• De exemplu, avem 3 instanţe ale clasei cărţi cu diferite


valori date atributelor astfel:

22
2.2. OBIECTE (6)

• Obiectul va fi o instanţă a unei clase.





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;
} }

Punct(double x, double y) { public double distantaOrigine() {


setX(x); return distanta;
setY(y); }
actualizareDistanta();
} private void actualizareDistanta() {
distanta = Math.sqrt(x*x+y*y);
// Metode }
public void setX(double x0) {
x = x0; public String toString() {
actualizareDistanta(); return "<" + x + "," + y + ">"; 25
} }
}
3. EXEMPLE DE DEFINIRE A CLASELOR (3)
• Exemplul 3

#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;
}

int main (){


Carte carte1("Geniu Pustiu", "Polirom",20.0);
Carte carte2;
carte2.setTitlu("Poiezii");
cout<<"\nTitlu: "<<carte1.getTitlu();
cout<<"\nTitlu: "<<carte2.getTitlu();
26
return 0;
}

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