Programarea Orientată pe Obiecte – Clase și Obiecte 16
1. Obiectivele lecției:
- Să înțeleagă conceptul de programare orientată pe obiecte (POO).
- Să învețe definiția claselor și obiectelor.
- Să implementeze exemple practice care utilizează clase și obiecte.
2. Ce este Programarea Orientată pe Obiecte (POO)?
- Definiție:
Programarea orientată pe obiecte este un stil de programare care se concentrează pe utilizarea obiectelor – entități care combină date (atribute) și comportament (metode). - Principiile POO:
- Încapsulare: Gruparea datelor și metodelor care le operează într-o clasă.
- Moștenire: Posibilitatea de a crea noi clase bazate pe clase existente.
- Polimorfism: Capacitatea de a utiliza aceeași interfață pentru diferite tipuri de obiecte.
- Abstracție: Ascunderea detaliilor complexe ale implementării.
3. Clase și Obiecte
1. Clase
- Definiție:
- O clasă este un șablon care definește structura și comportamentul obiectelor. Ea descrie ce atribute și metode vor avea obiectele create pe baza sa.
- Structura unei clase:
class NumeClasa {
private:
// Atribute private
public:
// Constructori
// Metode publice
};
- Exemplu:
class Masina {
private:
string marca;
int vitezaMaxima;
public:
// Constructor
Masina(string m, int v) {
marca = m;
vitezaMaxima = v;
}
// Metodă pentru afișare
void afiseazaDetalii() {
cout << „Marca: ” << marca << „, Viteza maxima: ” << vitezaMaxima << ” km/h” << endl;
}
};
2. Obiecte
- Definiție:
- Un obiect este o instanță a unei clase. El reprezintă o entitate concretă care urmează structura și comportamentul definite de clasă.
- Crearea unui obiect:
Masina masina1(„Toyota”, 180); // Obiect de tip Masina
masina1.afiseazaDetalii();
4. Exemple practice
Exemplu 1: Crearea unei clase simple
- Definiția clasei:
class Student {
private:
string nume;
int varsta;
public:
// Constructor
Student(string n, int v) {
nume = n;
varsta = v;
}
// Metodă pentru afișare
void afiseazaDetalii() {
cout << „Nume: ” << nume << „, Varsta: ” << varsta << ” ani” << endl;
}
};
- Utilizarea obiectelor:
int main() {
Student s1(„Andrei”, 20);
Student s2(„Maria”, 22);
s1.afiseazaDetalii();
s2.afiseazaDetalii();
return 0;
}
Exemplu 2: Clase cu metode pentru operații
- Definiția clasei:
class Dreptunghi {
private:
int lungime;
int latime;
public:
// Constructor
Dreptunghi(int l, int L) {
lungime = l;
latime = L;
}
// Metode pentru calcul
int calculeazaAria() {
return lungime * latime;
}
int calculeazaPerimetrul() {
return 2 * (lungime + latime);
}
};
- Utilizarea obiectelor:
int main() {
Dreptunghi d(5, 10);
cout << „Aria: ” << d.calculeazaAria() << endl;
cout << „Perimetrul: ” << d.calculeazaPerimetrul() << endl;
return 0;
}
Exemplu 3: Încapsularea datelor
- Definiția clasei:
class ContBancar {
private:
string titular;
double sold;
public:
// Constructor
ContBancar(string t, double s) {
titular = t;
sold = s;
}
// Metode pentru operare
void depune(double suma) {
sold += suma;
}
void retrage(double suma) {
if (suma <= sold) {
sold -= suma;
} else {
cout << „Fonduri insuficiente!” << endl;
}
}
void afiseazaSold() {
cout << „Titular: ” << titular << „, Sold: ” << sold << ” lei” << endl;
}
};
- Utilizarea obiectelor:
int main() {
ContBancar cont(„Ioan Popescu”, 1000.0);
cont.afiseazaSold();
cont.depune(500);
cont.afiseazaSold();
cont.retrage(2000);
cont.retrage(100);
cont.afiseazaSold();
return 0;
}
5. Avantajele utilizării claselor și obiectelor
Avantaj | Descriere |
Modularitate | Codul este organizat în module independente. |
Reutilizare | Clasele pot fi utilizate în mai multe programe. |
Întreținere ușoară | Modificările în cod sunt izolate și ușor de gestionat. |
Abstracție | Ascunde detaliile implementării, punând accent pe utilizare. |
Moștenire și extensibilitate | Clasele pot fi extinse pentru a adăuga funcționalități noi. |
6. Activități practice pentru elevi
- Creați o clasă Carte cu atributele titlu, autor și numarPagini. Implementați metode pentru afișarea detaliilor și actualizarea numărului de pagini.
- Implementați o clasă Cerc care calculează aria și circumferința.
- Scrieți un program care folosește o clasă Elev pentru a gestiona numele, vârsta și media elevilor.
7. Scheme logice
- Crearea unui obiect:
- Start -> Declarare clasă -> Definire constructor -> Inițializare obiect -> Utilizare metode -> Stop.
- Flux de utilizare a unei clase:
- Definiție clasă -> Declarare metode -> Creare obiect -> Apelare metode.
8. Concluzie
- Clasele și obiectele sunt fundamentul programării orientate pe obiecte.
- Încapsularea datelor și metodelor permite organizarea clară a codului și reducerea erorilor.
- Practica este esențială pentru a înțelege și a aplica eficient conceptul de clase și obiecte.