Ce este OOP?
Programarea Orientata pe Obiecte (OOP) organizeaza codul in obiecte — entitati care combina date (campuri) cu comportament (metode).
Cele 4 principii fundamentale
1. Incapsulare
Obiectele isi ascund detaliile interne si expun doar o interfata publica.
class ContBancar {
private:
double sold; // ascuns
public:
void depune(double suma); // interfata
double getSold(); // interfata
};
2. Abstractizare
Expui doar ce e relevant pentru utilizator, ascunzi complexitatea.
3. Mostenire (Inheritance)
O clasa poate mosteni proprietati si metode de la o alta clasa.
4. Polimorfism
Acelasi cod poate lucra cu tipuri diferite printr-o interfata comuna.
Avantaje
- Reutilizare de cod — mostenirea permite extinderea claselor existente
- Mentenabilitate — cod organizat, mai usor de inteles
- Modelare naturala — oglindeste modul in care gandim despre entitati
- Incapsulare — reduci efectele secundare si dependentele
Critici si limitari
OOP nu e intotdeauna cea mai buna alegere:
- Mostenirea poate crea dependente fragil — "fragile base class problem"
- Boxing-ul obiectelor in limbaje ca Java/C# adauga overhead
- Memoria — obiectele sunt raspandite in heap, cauzand cache miss-uri
- Alternativa: Data-Oriented Design (DOD) pune performanta pe primul loc
OOP si Memory Wall
Intr-o lume cu Memory Wall, felul in care OOP organizeaza datele poate fi problematic:
// OOP: obiecte individuale, posibil raspandite in memorie
vector<Player> players; // fiecare Player e un obiect
// DOD: date grupate pe câmpuri
struct PlayersDOD {
vector<float> x, y; // toate pozitiile impreuna
vector<float> hp; // toti HP-urile impreuna
};
Accesul secvential la array-uri plate e mult mai rapid decat accesul la obiecte individuale din cauza cache-ului.