E-learn.ro
Panou utilizatori
Utilizator Parola
Creeaza cont nou    Recupereaza parola
Login
Newsletter
Introdu adresa ta de email
Inscrie-te
Inchide panoul de utilizatori
Add to Google

Tutoriale Python

Descarca toolbar

Toolbar E-learn.ro Facebook Twitter

DEVELOPMENT  /  Python  /  Introducere in Python (4)

Introducere in Python - Partea a IV-a. Clase si obiecte

14.09.2009
 Introducere in Python - Partea a IV-a. Clase si obiecte

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.

Total vizualizari: 11224 11224 afisari   |   Comentarii  0   |   Rating   |   (0 voturi)   |   Timp necesar: 30 min 30 min   |   Nivel de cunostiinte necesar: Incepator  Incepator

Sursa:  sthurlow  
Autor:  http://www.sthurlow.com/python/lesson08/
Adauga la tutoriale favorit Adauga la tutoriale favorite
Pagina:
1 2 »
comenteaza printeaza

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.

Crearea unei clase

In lumea reala, deseori vei gasi multe obiecte individuale de acelasi fel. Pot exista mii de alte biciclete, toate avand aceleasi caracteristici, fiind acelasi model. Fiecare bicicleta a fost construita dupa acelasi tipar, deci contine aceleasi componente. In termenii programarii orientate pe obiecte, spunem ca bicicleta este o instanta a clasei de obiecte cunoscute sub numele de biciclete. Deci, o clasa reprezinta tiparul dupa care sunt create obiectele individuale, ce poarta numele de instante ale clasei.

Deci cum definesti o clasa? In primul rand, declaratia unei clase trebuie sa inceapa cu operatorul class:

 
# Definitia unei clase
class nume_clasa:
    [instructiune 1]
    [instructiune 2]
    [instructiune 3]
    [etc]

Mai jos poti vedea un exemplu de cod ce defineste o clasa FormaGeometrica:

 
#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).

Utilizarea unei clase

Este interesant ca putem crea o clasa, dar cum o putem utiliza? Iata cum poti crea un obiect de tipul FormaGeometrica:

dreptunghi = FormaGeometrica (100,45)

Valorile furnizate intre paranteze sunt de fapt parametri transmisi functiei __init__. Aceasta va fi executata automat, initializand proprietatile x si y ale obiectului cu valorile 100 si respectiv 45. Instanta clasei este retinuta in variabila rectangle.

In acest moment, iti poti imagina instanta clasei noastre, rectangle, ca fiind o colectie de variabile si de functii. Pentru a accesa proprietatile si metodele obiectului din afara clasei vei inlocui cuvantul cheie self cu numele variabilei, respectiv rectangle. De exemplu:

 
#afiseaza aria dreptunghiului:
print dreptunghi.aria()
 
#afiseaza perimetrul dreptunghiului:
print dreptunghi.perimetrul()
 
#seteaza descrierea dreptunghiului
dreptunghi. seteazaDescriere("Un dreptunghi a carui latime este de doua ori mai \mare decat inaltimea")
 
#scaleaza dreptunghiul cu 50%
dreptunghi.scaleaza(0.5)
 
#afiseaza aria dreptunghiului scalat
print dreptunghi.aria()

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:

• Atunci cand cream o clasa se numeste ca o definim.
• Gruparea variabilelor si metodelor similare poarta numele de incapsulare.
• O variabila definita in interiorul unei clase poarta numele de proprietate.
• O functie definita in interiorul unei clase poarta numele de metoda.
• Un obiect este o instanta a unei clase.
• O clasa reprezinta o structura de date - ea retine informatii si defineste metodele necesare pentru procesarea acestora.

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.


Pagina:
1 2 »
comenteaza printeaza

Cuvinte cheie:   python,   clasa,   obiect,   referinta,   functie,   mostenire,   instantiere,   metoda,   incapsulare,   structura de date

Alte tutoriale Python:
Noteaza acest tutorial
Rating tutorial
 
(0 voturi)
Pentru a nota acest tutorial, trebuie sa fii logat!
Posteaza un comentariu
Pentru a posta un comentariu, trebuie sa fii logat!
0 TOP UTILIZATORI* 0 0
Tutoriale scrise de claibornelara
claibornelara Rang utilizator claibornelara - Incepator
4930
Tutoriale scrise de mcuemica
mcuemica Rang utilizator mcuemica - Incepator
4875
Tutoriale scrise de ellarichards
ellarichards Rang utilizator ellarichards - Incepator
4740
Tutoriale scrise de emonclercheap
emonclercheap Rang utilizator emonclercheap - Incepator
4695
Tutoriale scrise de beacherrosa
beacherrosa Rang utilizator beacherrosa - Incepator
4510
* Acest top reprezinta punctajele acumulate in ultimele 30 de zile.
PSD Illustrator Java Dreamweaver Powerpoint SWF SEO Swift 3D Lightroom RoR Sony Vegas MySQL Verilog Bridge PHP Fotografie XHTML Python Word XML Gimp Ruby on Rails Outlook COREL DRAW Photoshop Fireworks Excel Action Script StyleSheet Vista Flash CSS AJAX HTML Javascript JSON
Promovare:
Daca faci parte din comunitatea E-learn.ro si doresti promovarea acesteia, poti accesa pagina de promovare.
Arhiva newsletter:
Daca ai ratat un numar mai vechi, sau vrei sa revezi care au fost noutatile E-learn.ro la un moment dat, poti accesa arhiva de newslettere.
  Copyright © 2008-2013 E-LEARN.ro. Toate drepturile rezervate. Termeni si conditii.
Conceput si realizat de Neokinetics Software