Școala Româno-Britanică
Modulul 5 Clasa a IX-a | Python

Ora 7: Introducere în programarea orientată pe obiecte

Ce vei învăța astăzi: Clase predefinite, obiecte, instanțiere, acces la membri

Rezultat practic: Identifici clase, obiecte și instanțiere și folosești obiecte ale claselor predefinite din Python (Competența 4.5).

Competența 4.5 Săptămâna 27

Înainte de a începe

De ce contează? Orice obiect din Python, de la o listă până la o fereastră Tkinter, are membri apelați cu punctul; înțelegând clasele, înțelegi cum funcționează tot ce ai folosit până acum.

Ce știi deja?

În lecția trecută ai construit o fereastră cu Tk() și i-ai adăugat etichete și butoane. După ce tip de model crezi că s-a creat fereastra aceea?

Ideea-cheie: O clasă este un tip de date, un obiect este realizarea concretă a clasei, iar instanțierea înseamnă crearea obiectului prin apelarea clasei.
SINTEZĂ TEORETICĂ ȘI EXEMPLE GHIDATE

Ce vei învăța astăzi?

După această lecție vei înțelege ce este o clasă (tip de date care descrie o structură), ce este un obiect (realizare concretă a unei clase, numită și instanță), cum instanțiem (creăm obiecte prin apelarea clasei) obiecte și cum accesăm membrii (datele și metodele) lor cu punctul.

Ce este o clasă și ce este un obiect (instanță)
Membrii unei clase: date (atribute) și metode
Clase predefinite: list, Tk, Label, Button
Instanțierea unui obiect prin apelarea clasei
Accesul la membri cu punctul (.)

Clasa și obiectul

O clasă este un tip de date care descrie o structură (predefinită sau definită de utilizator). Un obiect este o instanță a unei clase, adică o realizare concretă a ei.

Analogie:

Clasa este ca un plan de casă: descrie cum arată. Obiectul este casa construită după plan: concretă, folosibilă. Dintr-un singur plan putem construi multe case, adică multe obiecte.

Membrii unei clase sunt datele (atributele) și metodele (acțiunile) ei. De exemplu, un obiect list are date (elementele) și metode (append, sort, reverse).

Clase predefinite și instanțiere

Python are multe clase predefinite, deja construite: list, int, str, iar în biblioteca tkinter clasele Tk, Label, Button, Entry.

Start program v <- [3, 1, 2] # v este un obiect al clasei list v.adauga(4) # metoda append scrie v v.sorteaza() # metoda sort scrie v v.inverseaza() # metoda reverse scrie v Stop program
Exemplu complet - un obiect list și metodele lui
v = [3, 1, 2]   # v este un obiect al clasei list

v.append(4)      # apelăm metoda append
print(v)

v.sort()         # metoda sort
print(v)

v.reverse()      # metoda reverse
print(v)

Observă: obiectul v se creează prin apelarea clasei list. Metodele se apelează cu punctul: v.append(4).

Instanțierea și accesul cu punctul

Instanțierea înseamnă crearea unui obiect prin apelarea clasei. Pentru clasa list scriem v = [1, 2, 3] sau v = list(). Pentru o fereastră Tk: f = Tk(). Accesăm membrii obiectului cu punctul: obiect.membru.

Exemplu complet - obiecte din tkinter
from tkinter import *

f = Tk()            # f este un obiect al clasei Tk
f.title("Fereastra mea")   # accesăm metoda title

eticheta = Label(f, text="Salut")   # obiect al clasei Label
eticheta.pack()

f.mainloop()

Reține: Label(f, text="Salut") instanțiază un obiect Label, iar eticheta.pack() apelează metoda lui pack. Punctul leagă obiectul de membrii lui.

Exercițiu de completare

Completează enunțul cu cuvintele potrivite:

Un tip de date care descrie o structură se numește ______. Un ______ este o realizare concretă a clasei, numită și ______. Membrii unui obiect se accesează cu ______ (punctul).

Bancă de cuvinte:
clasă obiect instanță .

Test de înțelegere

Test rapid - programarea orientată pe obiecte:

1. Un obiect este:

2. Accesăm metoda unui obiect folosind:

3. Care este rezultatul codului v = [1, 2, 3]; v.append(4); print(v)?

Test suplimentar

Test suplimentar - programarea orientată pe obiecte:

1. O clasă se definește cu cuvântul cheie:

2. Constructorul unei clase în Python este metoda:

3. Într-o metodă, parametrul self reprezintă:

Ai grijă la: v2 = v1 nu copiază lista: ambele nume indică același obiect, deci o modificare făcută prin v2 se vede și în v1.

Aprofundare

Aliasing (alias): scrierea v2 = v1 nu copiază lista; ambele nume indică același obiect. O modificare prin v2 se vede și în v1. Pentru o copie reală folosim v1.copy() sau v1[:].

  • Metode care modifică versus metode care întorc valori: v.append(4) și v.sort() modifică obiectul și întorc None, deci nu pot fi puse în print. Metodele clasei str (upper, replace) întorc obiecte noi, fără a modifica șirul original.
  • Verificarea tipului: type(x) întoarce clasa obiectului, iar isinstance(x, list) verifică dacă x este obiect al clasei list.
  • Explorarea clasei: dir(list) listează metodele clasei, iar help(list) arată documentația lor.
  • Obiecte imuabile: numerele și șirurile sunt imuabile - orice operație întoarce un obiect nou, originalul rămâne neatins.
  • Caz particular: chiar și print este o funcție care primește obiecte; print întoarce None, de aceea nu are rost să scriem print(print(...)).
APLICARE ȘI REZOLVARE DE PROBLEME

PbInfo - Metode pe obiecte list

Enunț:

Cerință: Se citește o listă de numere. Folosind obiectul list și metodele sale (sort, append, reverse), să se sorteze lista, să se adauge valoarea 99 la final, să se inverseze lista și să se afișeze rezultatul.

Date de intrare:

Programul citește de la tastatură elementele listei, pe o singură linie.

Date de ieșire:

Programul va afișa lista sortată, cu 99 adăugat la final și inversată.

Restricții și precizări:

Valorile citite sunt numere întregi, iar n este un număr natural, cu 1 <= n <= 1000.

Exemplu:

Intrare:

5 3 8 1

Ieșire:

99 8 5 3 1
Cum gândim soluția:
  1. Citim lista și o salvăm în obiectul v
  2. Sortăm obiectul cu v.sort()
  3. Adăugăm 99 cu v.append(99) și inversăm cu v.reverse()
  4. Afișăm cu print(*v)
Scrie soluția în Python:
Soluție corectă:
Soluția completă
v = [int(x) for x in input().split()]

v.sort()
v.append(99)
v.reverse()

print(*v)

Ce învățăm: obiectul v al clasei list are metode predefinite pe care le apelăm cu punctul.

PbInfo - Obiecte din clasa list

Enunț:

Cerință: Se citește o listă de numere, apoi o valoare x. Folosind obiectul v și metoda count, să se afișeze de câte ori apare x în listă.

Date de intrare:

Programul citește elementele listei, apoi valoarea x, pe linii separate.

Date de ieșire:

Programul va afișa numărul de apariții ale lui x în listă.

Restricții și precizări:

Valorile citite sunt numere întregi, iar n este un număr natural, cu 1 <= n <= 1000.

Exemplu:

Intrare:

3 1 3 4 3
3

Ieșire:

3
Cum gândim soluția:
  1. Citim lista și o salvăm în obiectul v
  2. Citim valoarea x
  3. Folosim metoda v.count(x) pentru a număra aparițiile
  4. Afișăm rezultatul
Scrie soluția în Python:
Soluție corectă:
Soluția completă
v = [int(x) for x in input().split()]

x = int(input())

print(v.count(x))

Ce învățăm: metoda count face parte din clasa list și numără aparițiile unei valori în obiect.

EXERCIȚII PRACTICE

Exercițiul Practic: Obiecte și metode

Sarcini de lucru

Lucrează cu obiecte din clasele list și tkinter

Sarcina 1: Obiect list cu append

Cerință: Scrie un program care creează un obiect list gol, adaugă 5 valori citite de la tastatură cu metoda append, apoi afișează numărul de elemente (len) și suma lor (sum), folosind obiectul.

Soluție:
v = []

for i in range(5):
    n = int(input())
    v.append(n)

print("Numar elemente:", len(v))
print("Suma:", sum(v))

Verifică: v este un obiect al clasei list, iar append adaugă câte un element la fiecare iterație.

Sarcina 2: Mini-aplicație Tkinter cu obiecte

Cerință: Construiește o aplicație Tkinter în care obiectele (Label, Entry, Button) sunt definite separat, iar butonul citește textul din Entry cu get() și îl afișează în MessageBox.

Soluție:
from tkinter import *
from tkinter import messagebox

fereastra = Tk()

eticheta = Label(fereastra, text="Numele tau:")
caseta = Entry(fereastra)

eticheta.pack()
caseta.pack()

def afiseaza():
    messagebox.showinfo("Mesaj", caseta.get())

buton = Button(fereastra, text="Saluta-ma", command=afiseaza)
buton.pack()

fereastra.mainloop()

Verifică: eticheta, caseta și butonul sunt obiecte ale claselor Tkinter, iar butonul apelează funcția care citește Entry-ul.

Scrie pe caiet - De reținut

Titlul lecției

Introducere în programarea orientată pe obiecte.

Definiția lecției

Programarea orientată pe obiecte (OOP) organizează programul în jurul claselor și obiectelor. O clasă este un tip de date care descrie o structură, iar un obiect este o instanță a clasei, adică o realizare concretă a ei. Instanțierea înseamnă crearea unui obiect prin apelarea clasei: v = [1, 2, 3] creează un obiect al clasei list, iar f = Tk() un obiect al clasei Tk. Membrii unei clase sunt datele (atributele) și acțiunile (metodele), accesate cu punctul: v.append(4). Python oferă clase predefinite precum list, int, str, iar biblioteca tkinter aduce clasele Tk, Label, Button, Entry. De exemplu, fiecare listă folosită până acum a fost, de fapt, un obiect cu metode proprii.

Definiții esențiale

Algoritmul cheie - pseudocod

Start program v <- [3, 1, 2] # obiect al clasei list v.adauga(4) # metoda append scrie v v.sorteaza() # metoda sort scrie v v.inverseaza() # metoda reverse scrie v Stop program

Algoritmul cheie - cod Python

v = [3, 1, 2]

v.append(4)
print(v)

v.sort()
print(v)

v.reverse()
print(v)

Greșeli comune de evitat

Exemplu practic

Un program care gestionează coada de la bibliotecă folosește o listă ca obiect al clasei list: un cititor nou se adaugă la coadă cu append, apoi primul cititor este servit:

coada = ["Ana", "Bogdan"]
coada.append("Cristina")
print(coada)
coada.pop(0)
print(coada)

Sfaturi practice și trucuri