Programare Orientata pe Obiecte (OOP)

OOP e un paradigma de programare care organizeaza codul in jurul obiectelor care contin atat date cat si comportament. Cele 4 principii fundamentale: incapsulare, mostenire, polimorfism si abstractizare.

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.