Sunteți pe pagina 1din 12

Cap.

OOP avansat
Variabila statica

- class NumeClasa:
'''Aceasta clasa are o variabila proprie - variabila statica, sau
variabila de clasa'''
var_1 = 0

- Variabila este creata in afara unei metode. Poate fi accesata prin


apelarea : NumeClasa.var_1;

- Aceasta metoda ne permite sa cream un atribut care sa nu fie afectat


de metode (atribuit unei instante anume) ci sa fie atribuit tuturor
instantelor.
Exemplul 601
Copyright - InfoAcademy - 2016 2
Variabila statica - continuare

- Atributul 'self' / versus atribut propriu instantei / versus atribut clasa:

Exemplul 602

- Putem atribui instantelor nume identice de variabile cu cele ale claselor:

Exemplul 603

- Putem valida valorile de intrare ale unui obiect:

Exemplul 604 - 605

Copyright - InfoAcademy - 2016 3


Variabila statica - continuare

- 'self' sau NumeClasa pot fi utilizate interschimbabil in interiorul clasei;


NumeClasa sau NumeObiect in exteriorul clasei. Atentie, instantele
pot atribui valori proprii unor variabile cu acelasi nume, caz in care
starea instantei va fi data de aceste valori proprii;
Exemplul 606

- Regula:
valoarea proprie a atributului unei instante precede valoarea data
de clasa:
Exemplul 607

Copyright - InfoAcademy - 2016 4


'
'
Variabila globala

- globals() dictionary care contine variabile din namespace-ul


global.

- verificare xistenta:

if 'NumeVar' in globals():
print 'OK'

- creare variabila globala:

globals()['NumeVar'] = valoare
Exemplul 608
Copyright - InfoAcademy - 2016 5
'
'
Recursivitatea intr-o clasa

- Recursiv ceva ce se repeat la infinit;

- Functie recursiva functie ce se apleleaza ea insasi de una sau mai


multe ori. Este o metoda de programare.
Exemplul 609

- Clasa recursiva o clasa este recursiva daca se poate apela pe


sine fara sa produca o eroare.
Exemplul 610

- Apelarea unei clase din alta clasa


Exemplul 611
Copyright - InfoAcademy - 2016 6
Incapsularea

- Unul din pilonii OOP;

- Asigura introducerea corecta a datelor in instante (atribute);

- Datele trebuie accesate doar prin intermediul metodelor.


Reprezentarea interna a obiectelor nu poate fi vazuta din exterior;

- Datele trebuie validate si sa ne asiguram ca nu sunt modificate prin


interventii externe. Acces de tip getters /setters;

- In mod normal atributele unei instante isi pot modifica valoarea


oriunde. Oricate masuri de precautie ne luam pot fi ocolite;
Copyright - InfoAcademy - 2016 7
Incapsularea

- In Python, spre deosebire de alte limbaje de programaree, nu exista


informatii ascunse;

- Incapsularea este o alegere pentru a restrictiona acest lucru si pentru


a pastra integritatea obiectelor;

- Metoda privata Exemplul 612

- Variabila privata Exemplul 613

- Metode speciale Exemplul 614

Copyright - InfoAcademy - 2016 8


Mostenirea

- Al doilea pilon al OOP

- Termeni:
- Clasa parinte / Clasa de baza / Superclasa
- Clasa copil / Clasa derivata / Subclasa

- Atributele si metodele uneia sau mai multor clase parinte sunt


mostenite si in consecinta accesate de instantele clasei copil;

- Pot exista mai multe niveluri de mostenire (ierarhie) ;

- Nu trebuie sa existe portiuni de cod dublat;


Copyright - InfoAcademy - 2016 9
Mostenirea - continuare

- Ierarhia de cautare a atributelor (obiect.atribut) in cazul claselor


mostenite este urmatoarea:
1 in propria instanta (atributele proprii);
2 in propria clasa (metodele proprii);
3 in clase mostenite (metodele mostenite).

- issubclass(sub, sup) - Boolean, verifica daca subclasa apartine


superclasei

- isinstance(obj, Class) - Boolean, verifica daca instanta apartine


clasei

Copyright - InfoAcademy - 2016 10


Mostenirea - continuare

- Daca o clasa nu are __init__ - constructor cauta ierarhic, la clasa


parinte si urmatoarele, pana gaseste;

- Putem initializa atribute atat in clasa parinte cat si in propria clasa;

- Mostenire multipla. In cazul existentei a doua atribute cu acelasi


nume va cauta prima data in adancime, in ordinea claselor
mostenite. Daca o clasa mosteneste doua clase, prima, in ordinea
normala, va fi eliminata (method resolution order mro);

- Obiectele(instantele) NU se mostenesc in clasa copil. In clasa parinte


NU se mosteneste nimic. Exemplul 615
Copyright - InfoAcademy - 2016 11
Polimorfism

- Al treilea pilon in OOP;

- Metode cu denumiri identice, utilizate in clase diferite, cu


functionalitati diferite;

- Fiecare metoda e diferita, dar similara din punct de vedere


conceptual;

- In toate clasele face acelasi lucru;

- Cel mai bun exemplu functia len():


Exemplul 616
Copyright - InfoAcademy - 2016 12