Documente Academic
Documente Profesional
Documente Cultură
2014
E-learn.ro
14.09.2009
Programarea in general se bazeaza foarte mult pe reutilizarea codului. De obicei, aceasta se realizeaza cu ajutorul functiilor. Daca ai
scris deja un cod ce indeplineste o anumita sarcina, atunci il poti executa de oricate ori vrei daca il incluzi intr-o functie. In plus, o
functie poate fi apelata de oriunde din cod si computerul va sti intotdeauna la ce te referi.
5659 afisari
Rating
(0 voturi)
30 min
Introducere
Programarea in general se bazeaza foarte mult pe reutilizarea codului. De obicei, aceasta se realizeaza cu
ajutorul functiilor. Daca ai scris deja un cod ce indeplineste o anumita sarcina, atunci il poti executa de oricate
ori vrei daca il incluzi intr-o functie. In plus, o functie poate fi apelata de oriunde din cod si computerul va sti
intotdeauna la ce te referi.
Desigur, functiile isi au limitele lor. Ele nu stocheaza informatii cum ar valorile variabilelor, ceea ce inseamna ca
de fiecare data cand este rulata, o functie incepe de la zero. Atunci, ce se intampla daca anumite functii si
variabile se afla in stransa legatura si trebuie sa interactioneze destul de mult?
Obiectele din lumea reala au doua caracteristici: stare si comportament. Cainii au stare (nume, culoare, rasa,
le este foame) si comportament (latra, alearga, dau din coada). Si bicicletele au stare (trepte de viteza,
cadenta a pedalei, frane) si comportament (schimbarea vitezei, schimbarea cadentei pedalei, aplicarea franei).
Comportamentul unui obiect poate fi modelat cu usurinta cu ajutorul functiilor. Dar ce se intampla atunci cand
vrei sa retii starea unui obiect? Ce se intampla daca de fiecare data cand te plimbi cu bicicleta, lantul slabeste,
materialul de pe sa se uzeaza cate putin, devii din ce in ce mai frustrat si apare o noua zgarietura pe ghidon?
O functie nu poate face asta. O functie conduce la un singur rezultat, nu la patru, cinci sau cinci sute. Avem
nevoie de o modalitate de grupare a functiilor si a variabilelor intr-un singur loc, pentru a putea interactiona
intre ele.
Identificarea starii si a comportamentului in cazul obiectelor reale reprezinta o metoda minunata de a incepe
sa gandesti in termenii programarii orientate pe obiecte. Obiectele software sunt din punct de vedere
conceptual similare obiectelor lumii reale: si acestea au stare si comportament. Un obiect isi pastreaza starea
in campuri (variabile in anumite limbaje de programare) si isi expun comportamentul prin metode (functii in
anumite limbaje de programare). Metodele opereaza asupra starii interne a unui obiect si servesc ca mecanism
primar in cazul comunicarii de la obiect la obiect. Ascunderea starii interne si solicitarea ca orice interactiune sa
se execute prin intermediul metodelor obiectelor poarta numele de incapsulare a datelor - principiul
fundamental al programarii orientate pe obiecte.
1/5
3.12.2014
[instructiune 1]
[instructiune 2]
[instructiune 3]
[etc]
E-learn.ro
#Exemplu de clasa
class FormaGeometrica:
def __init__(self,x,y):
self.x = x
self.y = y
descriere = "Aceasta forma nu a fost descrisa inca"
autor = "Nu exista un autor al acestei forme "
def aria(self):
return self.x * self.y
def perimetrul(self):
return 2 * self.x + 2 * self.y
def seteazaDescriere(self,text):
self.descriere = text
def seteazaAutor(self,text):
self.autor = text
def scaleaza(self,scale):
self.x = self.x * scale
self.y = self.y * scale
Dupa cum poti vedea, clasa Shape contine o descriere a unei forme geometrice (data de variabile) si
operatiunile pe care le poti efectua cu forma (date de functii). Acesta este un aspect foarte important - nu ai
creat de fapt o forma, ci descrierea unei forme. Forma are o latime (x), o inaltime (y) si metode cu ajutorul
caruia ii poti calcula aria si perimetrul.
Ceea ce trebuie sa retii este ca definirea unei clase nu ruleaza nici un cod, ci are rolul de a grupa functii si
variabile intr-o singura entitate.
Functia denumita __init__ este apelata cand cream o instanta a clasei FormaGeometrica - adica, atunci cand
cream o forma propriu-zisa, conform sablonului pe care il avem. Functia __init__ poarta denumirea de
constructorul clasei.
Pentru a te referi la elementele unei clase din interiorul acesteia, trebuie sa utilizezi operatorul self. De
asemenea, self reprezinta primul parametru pentru orice functie definita in cadrul unei clase. Orice functie sau
variabila creata pe primul nivel de indentare apartine automat clasei. Pentru a accesa aceste functii si variabile
in alta locatie din cadrul clasei, denumirea lor trebuie sa fie precedata de self si de un punct (ex.
self.nume_variabila).
http://www.e-learn.ro/printare-tutorial/python/introducere-in-python-partea-a-iv-a-clase-si-obiecte/149/1/379.htm
2/5
3.12.2014
E-learn.ro
Desigur, poti crea oricat de multe instante ale unei clase. Iata un exemplu:
dreptunghi_lung = Shape(120,10)
dreptunghi_inalt = Shape(130,120)
Ambele obiecte, dreptunghi_lung cat si dreptunghi_inalt, au propriile functii si variabile - sunt total
independente una de alta.
Iata cativa termeni specifici pentru programarea orientata pe obiecte:
Mostenirea
Cunoastem modul in care clasele grupeaza variabile si functii, cunoscute sub denumirea de atribute si metode,
in asa fel incat datele si codul care le proceseaza sa se afle in aceeasi locatie. Putem crea oricate instante ale
acelei clase, pentru a nu mai fi necesar sa scriem un nou cod pentru fiecare obiect pe care il cream. Dar in cazul
adaugarii de noi elemente designului unei biciclete? Aici intervine mostenirea.
Programarea orientata pe obiecte le permite claselor sa mosteneasca starile si comportamentele comune din
alte clase, ceea ce inseamna crearea unei clase copil pe baza unei clase parinte. Clasa copil contine toate
proprietatile si metodele clasei parinte, dar poate include si elemente noi. In cazul in care vreuna dintre noile
proprietati sau metode are aceeasi denumire ca o proprietate sau metoda din clasa parinte, vor fi utilizate cele
din clasa copil.
Python face mostenirea foarte usoara. Iti amintesti de clasa FormaGeometrica? Sa zicem ca am vrea sa definim
o clasa noua, sa spunem un patrat, pe baza clasei precedente:
class Patrat(FormaGeometrica):
def __init__(self,x):
self.x = x
self.y = x
http://www.e-learn.ro/printare-tutorial/python/introducere-in-python-partea-a-iv-a-clase-si-obiecte/149/1/379.htm
3/5
3.12.2014
E-learn.ro
Dupa cum poti observa, numele clasei parinte a fost trecut intre paranteze dupa numele clasei copil. Aceasta
inseamna ca noua clasa Patrat va contine toate proprietatile si metodele clasei FormaGeometrica. Singurul
lucru pe care trebuie sa-l mai faci este sa redefinesti functia __init__, astfel incat latimea (x) si inaltimea(y)
obiectului de tip Patrat sa fie egale.
Sa aplicam ce am invatat si sa cream o noua clasa, de aceasta data mostenita din Patrat:
class PatratDublu(Patrat):
def __init__(self,y):
self.x = 2 * y
self.y = y
def perimetrul(self):
return 2 * self.x + 3 * self.y
Aceasta clasa va reprezenta doua patrate lipite, ceea ce inseamna ca trebuie sa redefinim si functia ce
calculeaza perimetrul. Ca exercitiu, incearca sa creezi o instanta a acestei clase.
Dupa cum poti observa, pur si simplu am inlocuit numele de variabila din partea stanga cu un element din
dictionar. Interesant, nu?
Cam atat despre clase si obiecte. In urmatorul tutorial vei putea citi despre module si utilizarea lor in Python.
http://www.e-learn.ro/printare-tutorial/python/introducere-in-python-partea-a-iv-a-clase-si-obiecte/149/1/379.htm
4/5
3.12.2014
E-learn.ro
Copyright 2008-2010 E-LEARN.ro. Toate drepturile rezervate. Conceput si realizat de Neokinetics Software.
http://www.e-learn.ro/printare-tutorial/python/introducere-in-python-partea-a-iv-a-clase-si-obiecte/149/1/379.htm
5/5