Python clasa a 9-a · Manual Python
Laborator Python
LECȚIE · CAPITOLUL 4

4.1. Clase și obiecte

Definire, instanțiere, membri, date și metode

MODEL
→
CLASĂ
→
OBIECT
→
METODĂ
→
TESTARE
01
OBIECTIVE

La finalul lecției vei putea...

  • să explici, printr-un exemplu, diferența dintre o clasă și un obiect;
  • să definești în Python o clasă simplă, cu date și metode;
  • să creezi obiecte prin instanțiere și să accesezi membrii acestora;
  • să utilizezi constructorul __init__ și parametrul self;
  • să urmărești execuția unui program bazat pe obiecte și să testezi rezultatele.
✓
Checkpoint

Care este diferența esențială dintre o clasă și un obiect?

02
EXPLICAȚIE

De la date izolate la obiecte

2.1. De ce folosim clase?

În problemele întâlnite până acum, datele și prelucrările lor au fost organizate prin variabile, instrucțiuni și funcții. Când aceeași structură de date și aceleași operații apar pentru mai multe entități, este util să le grupăm.

O clasă este un model după care pot fi construite obiecte. Un obiect este o instanță a unei clase, adică o entitate concretă creată pe baza modelului.

2.2. Membrii unei clase

O clasă poate avea membri care reprezintă date și membri care reprezintă metode. Datele descriu starea obiectului, iar metodele descriu operațiile pe care obiectul le poate efectua.

Model

Clasa Elev stabilește că un elev are anumite date și operații comune.

Instanțe

elev1 și elev2 sunt obiecte diferite, cu stări proprii.

2.3. Definirea unei clase

În Python, o clasă se definește cu class. O metodă este o funcție definită în interiorul clasei.

2.4. Constructorul și self

Metoda specială __init__ este utilizată pentru inițializarea unui obiect în momentul creării sale. Parametrul self reprezintă obiectul asupra căruia se execută metoda.

2.5. Instanțierea și starea

Expresia Elev("Ana", "a IX-a") creează un obiect și transmite valorile către __init__. Două obiecte ale aceleiași clase au aceeași structură, dar pot avea valori diferite pentru aceleași atribute.

2.6. Metode și parametri

O metodă poate calcula și returna o valoare sau poate modifica starea obiectului. Într-un apel precum p.pret_reducere(10), obiectul p este asociat automat lui self, iar 10 este valoarea parametrului procent.

03
EXEMPLU INTUITIV

Formularul unui elev

Imaginează-ți un formular pentru un elev. Modelul formularului are aceleași câmpuri pentru fiecare elev: nume și note.

Fiecare formular completat este un obiect. Dacă schimbăm o notă într-un formular, modificăm starea acelui obiect, nu modelul și nu celelalte formulare.

Clasa = modelul comun; obiectele = elevii concreți; atributele = datele; metodele = operațiile.

Activitate: clasifică noțiunea

În expresia elev1.nume, ce este nume?

04
PYTHON

Definirea și folosirea claselor

4.1. Exemplu minimal

class Carte:
    def __init__(self, titlu):
        self.titlu = titlu

c = Carte("Algoritmi")
print(c.titlu)

La construirea lui c, Python execută __init__ și memorează titlul în atributul self.titlu.

4.2. Mai multe obiecte

class Elev:
    def __init__(self, nume, clasa):
        self.nume = nume
        self.clasa = clasa

    def prezentare(self):
        print("Nume:", self.nume)
        print("Clasa:", self.clasa)

elev1 = Elev("Ana", "a IX-a")
elev2 = Elev("Vlad", "a IX-a")
elev1.prezentare()
elev2.prezentare()

Operatorul punct . este folosit pentru accesarea unui membru al obiectului: elev1.nume, elev1.clasa sau elev1.prezentare().

4.3. Metodă cu parametru

class Produs:
    def __init__(self, nume, pret):
        self.nume = nume
        self.pret = pret

    def pret_reducere(self, procent):
        return self.pret * (1 - procent / 100)

p = Produs("Caiet", 20)
print(p.pret_reducere(10))

Simulează rularea

Pentru Produs("Caiet", 20) și reducere de 10%, ce rezultat returnează metoda?

05
ALGORITM / PSEUDOCOD

Modelarea unei entități

În această lecție, pseudocodul descrie modelarea. Sintaxa exactă pentru definirea unei clase aparține limbajului Python.

clasa Elev
    definește datele nume și clasa
    definește metoda prezentare

citește datele primului elev
creează obiectul elev1
citește datele celui de-al doilea elev
creează obiectul elev2
apelează prezentare pentru elev1
apelează prezentare pentru elev2
  1. Stabilește datele care descriu entitatea.
  2. Stabilește operațiile necesare.
  3. Definește clasa și datele inițializate în __init__.
  4. Definește metodele necesare.
  5. Creează obiectele prin instanțiere.
  6. Apelează metodele și/sau accesează datele obiectelor.
  7. Testează rezultatele.
06
ATENȚIE!

Confuzii frecvente

  • Clasa este modelul; obiectul este instanța concretă.
  • self.pret este atribut al obiectului, în timp ce pret poate fi parametrul metodei.
  • La apelul p.pret_reducere(10) nu scriem self; obiectul este asociat automat.
  • Două obiecte ale aceleiași clase au aceeași structură, nu neapărat aceeași stare.
  • self trebuie să apară ca primul parametru al unei metode de instanță.
  • __init__ trebuie scris exact cu două caractere _ înainte și după init.
07
EXEMPLU REZOLVAT

Clasa Dreptunghi

Problemă

Se definește clasa Dreptunghi, ale cărei obiecte au lungimea și lățimea. Definiți metode pentru aria și perimetrul unui dreptunghi. Creați două obiecte și afișați rezultatele.

Analiză

Datele lungime și lățime aparțin fiecărui obiect. Metodele arie() și perimetru() folosesc datele obiectului pentru calcul.

Algoritm/pseudocod

clasa Dreptunghi
    definește lungime și lățime
    metoda arie:
        returnează lungime * lățime
    metoda perimetru:
        returnează 2 * (lungime + lățime)
creează primul dreptunghi
creează al doilea dreptunghi
afișează aria și perimetrul fiecărui obiect

Python

class Dreptunghi:
    def __init__(self, lungime, latime):
        self.lungime = lungime
        self.latime = latime

    def arie(self):
        return self.lungime * self.latime

    def perimetru(self):
        return 2 * (self.lungime + self.latime)

d1 = Dreptunghi(6, 4)
d2 = Dreptunghi(10, 3)
print("Dreptunghi 1:", d1.arie(), d1.perimetru())
print("Dreptunghi 2:", d2.arie(), d2.perimetru())

Urmărirea variabilelor

Obiectlungimelățimearieperimetru
d1642420
d21033026

Testare

CazDateRezultat așteptat
normal6, 4aria 24; perimetru 20
particular5, 5aria 25; perimetru 20
limită relevantă1, 1aria 1; perimetru 4

Verificare

Folosim independent formulele A = L·l și P = 2(L+l). Pentru (6,4), obținem 24 și 20, iar pentru (10,3), 30 și 26. Rezultatele programului coincid cu aceste calcule.

08
EXERCIȚII DE BAZĂ

Construiește clase simple

La fiecare exercițiu identifică mai întâi clasa, atributele și metodele.

  1. Definește clasa Carte, cu titlu, autor și metoda prezentare(). Creează două obiecte.
  2. Definește clasa Cerc, cu raza și metodele diametru() și lungime(), folosind π = 3.14.
  3. Definește clasa Produs, cu nume, pret și metoda reducere(p).
  4. Definește clasa Student, cu nume și trei note, și metoda medie().
  5. Definește clasa Masina, cu marca și viteza, și metoda accelereaza(x).
  6. Definește clasa Dreapta, cu lungimea și metoda este_mai_lunga_decat(x).
  7. Definește clasa Temperatura, cu valoarea Celsius și metodele in_fahrenheit() și este_negativa().
09
EXERCIȚII DE APROFUNDARE

Urmărește starea obiectelor

  1. Definește clasa ContBancar cu titular și sold; depunere(suma) și retragere(suma) modifică soldul, dar retragerea se face numai dacă soldul este suficient.
  2. Definește clasa Interval cu capetele stânga și dreapta și metode pentru lungime și apartenență.
  3. Creează trei obiecte Student și determină studentul cu media cea mai mare. Precizează regula pentru egalitate.
  4. Explică de ce modificarea unui atribut al primului obiect nu trebuie să modifice starea celui de-al doilea.
  5. Definește clasa Fractie, cu numărător și numitor, și o metodă valoare(); apoi explică de ce o metodă de simplificare poate modifica ambele atribute.
  6. Proiectează clasa Rezultat, cu numele unui elev și două note, și metodele medie() și promovat(). Testează cel puțin trei cazuri.
10
VERIFICARE

Verifică ce ai înțeles

Item algoritmic

Scrie o clasă Elev cu nume și două note, apoi o metodă medie(). Creează două obiecte și explică de ce e1.medie() folosește starea lui e1, nu a lui e2.

11
MINI-PROIECT

Catalogul unei clase

MISIUNE

Modelează elevii prin obiecte

Realizează o aplicație care modelează un elev prin clasa Elev. Fiecare obiect memorează numele și trei note. Definește metode pentru media elevului și pentru afișarea unei prezentări.

  1. Creează cel puțin cinci obiecte.
  2. Afișează mediile.
  3. Determină elevul cu cea mai mare medie.
  4. Include un test cu două medii egale.
  5. Urmărește separat starea obiectelor.

Criterii

Modelare și clasă25%
Metode și stare25%
Cod25%
Testare și explicație25%

Ai terminat lecția?

Marchează lecția numai după ce poți explica diferența dintre clasă, obiect, atribut, metodă, __init__ și self.