Conectează-te Înregistrare gratuită
Informatică Liceu (9-12)

Programare orientata pe obiecte (clase, obiecte, mostenire, polimorfism)

Pe scurt

Programarea orientată pe obiecte (POO) organizează codul în jurul claselor și obiectelor, spre deosebire de programarea procedurală. Cele patru principii fundamentale sunt: încapsularea, moștenirea, polimorfismul și abstractizarea, care permit scrierea de cod modular, reutilizabil și ușor de întreținut.

Definiții fundamentale

Clasa este un șablon sau un tip de date definit de programator, care conține atribute (variabile membre) și metode (funcții membre).

Obiectul este o instanță a unei clase, adică o entitate concretă care ocupă memorie și are propria stare.

Exemplu: Clasa "Mașină" poate avea atribute precum marca, modelul și viteza, iar metode precum accelerare() sau franează(). Prin crearea mai multor obiecte de tip Mașină, fiecare își păstrează propriile valori ale atributelor.

Moștenirea (Inheritance)

Moștenirea permite definirea unei clase părinte (bază) și a unei clase copil (derivată) care preia atributele și metodele părintelui, putând să le extindă sau să le suprascrie (override).

Exemplu: Clasa "Vehicul" (părinte) are metoda deplasează(), iar clasa "Mașină" (copil) moștenește această metodă și poate adăuga propriul comportament.

În C++, moștenirea publică se realizează prin sintaxa: class Derived : public Base

Polimorfismul (Polymorphism)

Polimorfismul se referă la capacitatea unui obiect de a se comporta în moduri diferite în funcție de context. În C++ și Java, polimorfismul se realizează prin:

  • Funcții virtuale (metode virtuale)
  • Pointeri/referințe la clasa de bază
  • Legare dinamică (dynamic binding)

Exemplu: Un vector de pointeri de tip Vehicul* poate conține obiecte de tip "Mașină" și "Bicicletă"; apelarea metodei deplasează() pe fiecare element va duce la executarea versiunii corespunzătoare din clasa derivată.

Încapsularea (Encapsulation)

Încapsularea este un pilon al POO prin care datele sunt ascunse (private) și accesate doar prin metode publice (getteri/setteri). Se utilizează specificatorii de acces:

  • private - accesibil doar în cadrul clasei
  • public - accesibil din exterior
  • protected - accesibil în clasă și în clasele derivate

Concepte avansate

  • Constructor/Destructor - metode speciale pentru inițializare și curățare
  • Constructor de copiere - pentru crearea de obiecte prin copiere
  • Supraîncărcarea operatorilor - redefinirea comportamentului operatorilor
  • Funcții virtuale pure și clase abstracte - pentru polimorfism dinamic

Exemple practice

Exemplul 1: Clasă simplă și obiect în C++

Definim clasa Student cu atribute private: nume (string) și notă (int). Metode publice: constructor cu parametri, getteri, o metodă afișează(). În main() cream un obiect s1 cu nume 'Ana' și notă 9, apoi apelăm metoda de afișare.

Exemplul 2: Moștenire în C++

Clasa de bază Animal cu metoda virtuală sunet(). Clasa derivată Caine care moștenește Animal și suprascrie metoda sunet(). Clasa Pisica similar. În main(), cream un vector de pointeri Animal* și adăugăm obiecte de tip Caine și Pisica. Datorită virtual, se execută versiunile corecte ale metodelor.

Exemplul 3: Polimorfism cu funcții virtuale pure

Clasa abstractă Forma are o metodă virtuală pură arie(). Derivăm clasele Cerc și Dreptunghi, fiecare implementând arie(). În main(), cream un vector de pointeri Forma* și apelăm arie() pentru fiecare, obținând rezultate diferite.

Verifică-te!

  1. Care este diferența fundamentală între o clasă și un obiect în programarea orientată pe obiecte?

  1. Ce rol joacă specificatorul virtual în cadrul polimorfismului dinamic?

  1. Cum se realizează încapsularea datelor într-o clasă și de ce este importantă?

Vrei exerciții pe lecția asta + AI care te ajută pas cu pas?
Cont gratuit — 20 întrebări AI/zi, exerciții nelimitate.

Creează cont