InfoBook.ro ← Harta anului
Modul 11 · Introducere în POO
Modul 11 · Conținut 3.2

Primul contact cu obiectele

Orice obiect are proprietăți (date) și comportamente (metode) — exact ca în viața reală. Surpriza lecției: folosești obiecte de luni de zile fără să știi. Azi le vezi pe față.

🎯 Obiectiv 1Deosebești clasa (tiparul) de obiect (instanța concretă) și le identifici membrii.
🎯 Obiectiv 2Recunoști clasele predefinite folosite deja: list, TextIOWrapper, ifstream.
🎯 Obiectiv 3Instanțiezi obiecte și le accesezi membrii cu punct: obiect.metoda().
1

Clasă vs obiect — rețeta vs prăjitura

Clasa e tiparul: descrie CE proprietăți și CE comportamente are un tip nou. Obiectul e prăjitura concretă. Apasă pe un elev!

CLASA: Elev

tiparul / rețeta — scrisă O SINGURĂ dată
numestr
varstaint
mediefloat
afiseaza()metodă
promovat()metodă
— instanțiere →
👆 apasă pe un obiect — membrii lui vin direct din tiparul clasei
Vocabular oficial (programa 3.2): clasă = tiparul; membri = datele (proprietățile) + metodele (funcțiile) descrise în tipar; obiect = o instanță concretă; instanțiere = crearea obiectului din clasă.
2

Plot twist: folosești obiecte de luni de zile

Programa cere „utilizarea claselor predefinite" — și exact asta ai făcut tot anul, fără să știi numele conceptului:

Tk (Tkinter)

fereastra = tk.Tk() — chiar modulul următor instanțiază obiecte-fereastră cu metode ca .mainloop(). (M12)

list

v.append(5), v.sort() — lista e obiect al clasei list; metodele le știi pe de rost. (M05c)

TextIOWrapper

f = open(...) creează un obiect; f.readline() și f.close() sunt metodele lui. (M10)

ifstream (C++)

fin e un obiect al clasei ifstream; fin.close() e apel de metodă — POO există și în C++!

🔬 Dovada live — lista ta e un obiect

v = []
apelează o metodă a obiectului 👆
Punctul = poarta spre membri. De fiecare dată când ai scris ceva.ceva(), ai făcut POO: obiect.metodă(). Singura noutate de azi e că poți construi TU tiparul.
3

Instanțierea și accesul la membri

Definești clasa o dată, apoi creezi câte obiecte vrei. Fiecare acces trece prin punct: obiect.proprietate, obiect.metoda().

1class Elev:
2 def __init__(self, nume, nota):
3 self.nume = nume # proprietăți
4 self.nota = nota
5 def afiseaza(self): # metodă
6 print(self.nume, self.nota)
7 
8e1 = Elev("Maria", 9.5) # INSTANȚIERE
9e1.afiseaza() # acces cu punct
Cine e __init__? Constructorul — metoda specială care rulează AUTOMAT la instanțiere și umple proprietățile obiectului nou. self = „obiectul însuși": self.nume înseamnă „numele MEU", al obiectului care tocmai se naște. De-asta e1 și e2 pot avea nume diferite din același tipar.
Greșeala clasică: uiți self ca prim parametru la metode → „takes 1 positional argument but 2 were given". Python trimite obiectul automat, dar TU trebuie să-i lași locul.
4

Mini-proiectul: fabrica de obiecte

Clasa Elev e definită mai sus. Instanțiaz-o chiar aici: dă-i nume și notă unui elev nou, apoi apelează-i metodele.

nume = "" nota =
instanțiază primul obiect 👆 — apoi apasă-i metodele
Observă: toate obiectele au ACELEAȘI metode (vin din tipar), dar date DIFERITE (primite la instanțiere). Exact ca prăjiturile din aceeași rețetă cu ingrediente diferite.
5

Verificare rapidă

Cinci întrebări — vocabularul POO trebuie să fie beton.

6

Fișa de sinteză

POO în șase idei.

Clasa = tiparul (rețeta): descrie proprietățile și metodele. Se scrie O dată.
Obiectul = instanța concretă (prăjitura): date proprii, comportamente din tipar.
Membri = proprietăți (date) + metode (funcții). Acces cu punct: obiect.membru.
Instanțiere: e1 = Elev("Maria", 9.5) — constructorul __init__ rulează automat; self = obiectul însuși.
Ai folosit deja clase predefinite: list, TextIOWrapper, ifstream/ofstream — iar Tk (Tkinter) urmează imediat.
De ce contează: tot liceul de aici încolo (și Tkinter, chiar următorul modul!) e construit pe obiecte.
Exersează pe pbinfo.ro — cu adaptările POO din lecție:
#832 · ușoară

Nota

Corigent sau promovat? Adaptare: clasa Elev cu metoda verifica_promovare().

Rezolvă pe pbinfo.ro →
#813 · ușoară

Globuri

Globuri albe, roșii și verzi în brad. Adaptare: clasa Brad cu proprietăți.

Rezolvă pe pbinfo.ro →
#2240 · ușoară

Animale

Câini, pisici, găini în curte. Adaptare: clasa Ferma.

Rezolvă pe pbinfo.ro →
#3180 · medie

Marte1

Monedele lui Iggle. Adaptare: clasa Portofel cu metoda total().

Rezolvă pe pbinfo.ro →
7

📌 Temă pentru acasă

Trei exerciții în Python, exact în stilul lecției. Fiecare = o clasă cu date + o metodă care „face ceva".

Reamintește-ți rețeta: class Nume: · constructorul __init__(self, …) umple proprietățile prin self. · metodele primesc și ele self ca prim parametru.
  1. Clasa Elev. Proprietăți: nume, media. Metodă promovat() care returnează True dacă media ≥ 5. Creează 3 obiecte și afișează, pentru fiecare, numele și „promovat/corigent".
  2. Clasa Dreptunghi. Proprietăți: lungime, lățime. Metode arie() și perimetru(). Creează un dreptunghi 5×3 și afișează cele două rezultate.
  3. Clasa CosCumparaturi. Proprietate: o listă de prețuri (începe goală). Metode adauga(pret) și total(). Adaugă 3 produse și afișează totalul — folosește o LISTĂ ca proprietate (X·M08 revine!).
Provocare bonus: la clasa Elev, adaugă metoda __str__(self) care returnează un text frumos (ex: "Maria — media 9.5"). Apoi print(e1) îl folosește automat!
Puntea către C++: în Python ai grupat date + acțiuni într-o CLASĂ. În C++, echivalentul care grupează mai multe date sub un nume este struct — chiar tipul cerut la BAC. Îl înveți în modulul următor, 11a.
← anteriorModul 10 · Fișiere text urmează →Modul 11a · Tipul struct (C++)