InfoBook.ro ← Harta anului
Modul 12 · POO în Python
Modul 12 · Conținuturi 1.3 + 3.1 · 🐍 Python

Cine face acțiunea?

Până acum programul era o listă de pași: „ce se face". Modelul obiectual mută întrebarea: „CINE face?" — cartea își știe singură exemplarele, biblioteca își știe cărțile. Datele și acțiunile lor locuiesc împreună: în OBIECTE.

🎯 Obiectiv 1Definești clase în Python: __init__, self, atribute, metode.
🎯 Obiectiv 2Aplici nivelurile de acces — datele sensibile stau protejate în spatele metodelor.
🎯 Obiectiv 3Derivezi clase: Vehicul → Autoturism / Camion — moștenire și specializare.
1

Clasa = tiparul · obiectul = exemplarul

Clasa „Carte" descrie CE ARE (titlu, exemplare) și CE ȘTIE SĂ FACĂ (imprumuta, returneaza) orice carte. Obiectele sunt cărțile concrete.

1class Carte:
2 def __init__(self, titlu, exemplare): # CONSTRUCTORUL
3 self.titlu = titlu # atribute — datele obiectului
4 self.exemplare = exemplare
5 def imprumuta(self): # metodă — acțiunea obiectului
6 if self.exemplare > 0:
7 self.exemplare -= 1
8 return True
9 return False
10 
11c = Carte("Ion", 3) # obiect nou — __init__ rulează automat
12c.imprumuta() # „cartea, împrumută-te!"
self = „eu, obiectul acesta" — primul parametru al oricărei metode; prin el metoda își găsește PROPRIILE atribute. La apel nu-l scrii: c.imprumuta() îl trimite pe c drept self automat.

🏭 Biblioteca vie — fabrica de obiecte

titlu = "" exemplare =
fiecare card = un OBIECT; apasă „.imprumuta()" pe oricare și privește-i atributul scăzând 👆
2

Niveluri de acces — datele sensibile stau la seif

Scenariul programei: datele personale ale elevilor. Cine are voie să le modifice — și pe ce ușă?

1class Elev:
2 def __init__(self, nume):
3 self.nume = nume # public
4 self._scoala = "CNI" # _protejat (convenție)
5 self.__medie = 0 # __privat!
6 def set_medie(self, m): # ușa oficială
7 if 1 <= m <= 10: # cu VALIDARE
8 self.__medie = m
9 def get_medie(self):
10 return self.__medie
e = Elev("Ana")
e.__medie = 15 # NU modifică media reală!
print(e.__medie)... AttributeError
e.set_medie(9.50) # corect: prin metodă ✔
De ce? Accesul liber ar permite medie = 15 sau −3. Metoda publică VALIDEAZĂ înainte să scrie — datele rămân mereu consistente. Exact argumentul cerut la evaluări: comparație acces liber vs date private + metode publice.
Cinstit despre Python: _ e doar convenție („nu umbla aici"), iar __ funcționează prin „name mangling" (atributul devine _Elev__medie) — o barieră serioasă, nu un zid absolut. Spiritul contează: din afară, folosește metodele!
3

Moștenirea — specializarea claselor

Exemplul din programă: Vehicul, derivat în Autoturism și Camion. Ce e comun urcă în părinte; ce e specific rămâne în copil.

1class Vehicul: # clasa de BAZĂ
2 def __init__(self, marca, viteza):
3 self.marca = marca; self.viteza = viteza
4 def descrie(self):
5 return f"{self.marca}, max {self.viteza} km/h"
6 
7class Camion(Vehicul): # clasa DERIVATĂ
8 def __init__(self, marca, viteza, tone):
9 super().__init__(marca, viteza) # constructorul părintelui!
10 self.tone = tone # atribut SPECIFIC
11 def descrie(self): # SUPRASCRIE — polimorfism
12 return super().descrie() + f", {self.tone} t"
creează vehicule, apoi cere-le tuturor să se descrie — fiecare răspunde în felul lui 👆
Asta e polimorfismul din programă: același apel — v.descrie() — dar fiecare obiect răspunde după clasa lui. Codul care parcurge lista de vehicule nici nu trebuie să știe cine e camion și cine e autoturism.
Și destructorul? Programa îl amintește: __del__ rulează când obiectul e distrus (Python îl cheamă automat la curățenie — „finalizer"). Se folosește rar; constructorul e vedeta.
4

Verificare rapidă

Cinci întrebări despre POO.

5

Fișa de sinteză

POO în Python, condensat.

Clasa = tiparul (date + acțiuni) · obiectul = exemplarul concret; oricâte obiecte dintr-o clasă.
__init__(self, …) = constructorul, rulează automat la creare; self = obiectul însuși, primul parametru peste tot.
Acces: public · _protejat (convenție) · __privat (name mangling) — datele sensibile doar prin metode cu validare.
Moștenirea: class Derivată(Bază) — preia tot; super().__init__(…) cheamă constructorul părintelui.
Polimorfism: metoda suprascrisă în derivată — același apel, comportament specific fiecărei clase.
Când POO? Multe „fișe" cu date + acțiuni proprii (cărți, vehicule, elevi) — codul devine modular și ușor de întreținut.
Ultima stație: paradigmele de programare — procedural, obiectual, declarativ — și marea recapitulare a anului. Aproape ai terminat clasa a XI-a!
← anteriorModul 11 · Arborele binar de căutare urmează →Modul 13 · Paradigme & Recapitulare