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?
Clasa este modelul; obiectul este o instanță concretă construită după acel model.
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
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.
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
Stabilește datele care descriu entitatea.
Stabilește operațiile necesare.
Definește clasa și datele inițializate în __init__.
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
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.
Definește clasa Carte, cu titlu, autor și metoda prezentare(). Creează două obiecte.
Definește clasa Cerc, cu raza și metodele diametru() și lungime(), folosind π = 3.14.
Definește clasa Produs, cu nume, pret și metoda reducere(p).
Definește clasa Student, cu nume și trei note, și metoda medie().
Definește clasa Masina, cu marca și viteza, și metoda accelereaza(x).
Definește clasa Dreapta, cu lungimea și metoda este_mai_lunga_decat(x).
Definește clasa Temperatura, cu valoarea Celsius și metodele in_fahrenheit() și este_negativa().
09
EXERCIȚII DE APROFUNDARE
Urmărește starea obiectelor
Definește clasa ContBancar cu titular și sold; depunere(suma) și retragere(suma) modifică soldul, dar retragerea se face numai dacă soldul este suficient.
Definește clasa Interval cu capetele stânga și dreapta și metode pentru lungime și apartenență.
Creează trei obiecte Student și determină studentul cu media cea mai mare. Precizează regula pentru egalitate.
Explică de ce modificarea unui atribut al primului obiect nu trebuie să modifice starea celui de-al doilea.
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.
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.
Creează cel puțin cinci obiecte.
Afișează mediile.
Determină elevul cu cea mai mare medie.
Include un test cu două medii egale.
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.