Sunteți pe pagina 1din 18

Cap.

Clasa in Python. OOP.


OOP

1. Introducere in OOP

2. Clase. Obiecte. Metode. Atribute

Copyright - InfoAcademy - 2016 2


Introducere in OOP

- Necesitate: Daca dorim sa rezolvam problem mai complexe (Ex:


gestiunea stocurilor) utilizand tipurile de date cunoscute:
Am utea utiliza notiunile deja cunoscute (liste, dictionare, etc);
Solutie complicata, ineficienta si nesigura;
Cod destul de greu si neintuitiv, greu de administrat;
Posibil greu de validat si de asigurarea coerentei.

Avem nevoie de o solutie eleganta, cum ar fi un nou tip de


date, care sa inglobeze toate caracteristicile si functionalitatile de
care avem nevoie.

OOP permite acest lucru.


Copyright - InfoAcademy - 2016 3
Introducere in OOP continuare

- Caracteristici:
- Structureaza codul
- usor de utilizat;
- usor de inteles;
- usor de intretinut;
- usor de extins;
- usurinta in colaborare - modularizare;

- Scalabilitate adaugarea de noi tipuri de date, inexistente;

- Refolosirea codului - Un nou tip de date, odata definit, testat si


functional, poate fi refolosit in cadrul altor aplicatii.
Copyright - InfoAcademy - 2016 4
Introducere in OOP continuare

- OOP este urmatoarea etapa in dezvoltarea unui programator.


Practic, cu programarea procedurala putem face cate ceva, de
regula programe de mici dimensiuni, dar nu suficient.

- OOP are patru piloni principali:


- Abstractizare

- Incapsulare

- Mostenire (Inheritance)

- Polymorfism
Copyright - InfoAcademy - 2016 5
Introducere in OOP continuare

- OOP principala modalitate pentru design de software

- Datele sunt organizate in obiecte, functionalitatile sunt incluse in


metode aplicabile obiectelor. Obiectele si metodele impreuna
formeaza clasa, schema, "cutia".

- Clasa reprezinta abstractizarea caracteristicilor unui lucru din viata


reala;

- In viata reala un obiect este ceva tangibil. In software obiectul este


destinat sa faca ceva. Este o colectie de date si functionalitati;

Copyright - InfoAcademy - 2016 6


Introducere in OOP continuare

- Un obiect definit intr-o clasa poarta numele de instanta;

- O valoare atribuita obiectului poarta denumirea de atribut.

- Fiecare instanta poate avea:


- atribute definite de clasa
- atribute proprii;

- Metoda este o functie care poate fi aplicata obiectului;

Copyright - InfoAcademy - 2016 7


Introducere in OOP continuare

- OOA (analiza) procesul de identificare a obiectelor si a relatiilor


dintre acestea. Determina ce trebuie sa faca. Necesitatile;

- OOD (design) transforma necesitatile in specificatii. Cum se face.


Se definesc obiectele, functionalitatile, relatiile dintre ele;

- OOP se implementeaza OOD. Practic se realizeaza programul;

- In practica procesul este unul iterativ, aplicandu-se la fiecare modul


in parte;

Copyright - InfoAcademy - 2016 8


OOP

1. Introducere in OOP

2. Clase. Obiecte. Metode. Atribute

Copyright - InfoAcademy - 2016 9


Clasa in Python

- Definitie: Un nou tip de date, compus, definit de programator, care are


unul sau mai multe atribute si caruia i se pot aplica diferite metode.

- Spre deosebire de alte limbaje de programare in care avem primitive


(ex: string, intreg, lista, etc), in Python toate acestea sunt obiecte. Cu
type() determinam ce fel de obiect este, carei clase ii apartine, cu dir()
ce metode i se aplica;

- Sintaxa:
class NumeClasa ():
"""doc_string"""
bloc de instructiuni
Copyright - InfoAcademy - 2016 10
Obiectul unei clase 505-01-02

- Definitie: Obiectul este o instanta a unei clase (instantiere). Putem crea


cate obiecte dorim. Fiecare obiect are atat atribute generale, specifice
clasei din care face parte cat si atribute specifice (stare) obtinute prin
aplicarea metodelor acceptate.

- Sintaxa pentru crearea unui obiect:

NumeObiect = NumeClasa([parametrii]) # mai intai cream ob.

- Sintaxa pentru aplicarea unei metode:

NumeObiect.Metoda([parametrii]) # apoi aplicam metode


Copyright - InfoAcademy - 2016 11
Metoda scalabilitate validare mentenanta usoara

- Definitie: Metoda este o functie definita in interiorul unei clase, cu


ajutorul careia dam atribute obiectelor (instantelor).

- Daca o clasa este "cutia" metoda constituie interfata, butonul cu ajutorul


caruia executam diferite functii ale aparatului;

- Codul acesteia este ascuns. Aplicam metoda prin numele ei si parametri;

- Functionalitatea este data de aplicarea metodei. Toate instantele unei


clase au acces la metodele acesteia. Aplicarea metodei - starea;

- Automat, instanta preia primul argument (bound method); 505-03


Copyright - InfoAcademy - 2016 12
Atribut

- O instanta poate accesa atat variabilele definite in clasa cat si pe cele


definite in instanta (metode);

- Aceste valori modifica starea instantei;

- Practic, instanta preia valorile atributelor primite.

- O instant va prelua cu prioritate atributul propriu fata de al clasei;

- Daca in instanta avem o variabila cu un nume similar cu al unei variabile


a clasei, variabila clasei va fi ascunsa temporar, cat timp exista cea a
instantei.
Copyright - InfoAcademy - 2016 13
Namespace

- Exista mai multe niveluri de namespace:


- Al functiilor predefinite, creat la start si niciodata oprit;
- Al modulelor, creat la pornirea acestora;
- Local, al functiilor, disponibil in timpul apelarii acestora.

- Fiecare clasa, obiect sau metoda au namespace proprii.

- O functie care apartine de global namespace, e vizibila oriunde avem


nevoie de ea;

- O metoda e vizibila doar in namespace-ul clasei in care a fost creata.


Diferenta este facuta prin modul de accesare;
Copyright - InfoAcademy - 2016 14
Scope (domeniu)

- Clasa este un obiect ca oricare altul si se comporta in acelasi mod ca


orice variabila (string, integer, etc).Timpul de viata al acesteia se
numeste scope. Timpul de viata al functionalitatilor clasei (metodei) este
exact acelasi cu al variabilelor;

- Practic, scope reprezinta locul din program unde este vizibila o anumita
variabila. Acesta poate fi:
- Domeniul cel mai apropiat, accesat primul (exemplu instanta unei
clase);
- Domeniul functiilor incorporate (exemplu metoda, clasa);
- Domeniul functiilor globale de la nivelul modulelor;
- Domeniul cel mai indepartat, accesat ultimul (functii predefinite).
Copyright - InfoAcademy - 2016 15
Metode speciale

Metode speciale (constructor): __init__

- Metoda __init__ este o metoda speciala, privata, care este rulata de


fiecare data cnd un obiect este creat, initializand diferite attribute
(variabile);

- Metoda speciala __init__ nu poate folosi return.

- Python nu are explicit o metoda constructor. Metoda __init__ poate fi


asimilata cu o metoda constructor. Totusi, instanta este create deja
cand se apeleaza (automat) aceasta metoda;
505-04-05
Copyright - InfoAcademy - 2016 16
Metode speciale

Metode speciale (printare): __str__

- Metoda __str__ este o metoda speciala care este rulata de fiecare


data printam un obiect. Nu se apeleaza direct. Pur si simplu cu print;

- Metoda speciala __str__ are obligatoriu un return la finalul unui sir de


caractere.

Metode speciale (destructor): __del__

- Metoda __del__ este o metoda speciala pentru stergerea unui obiect;


del obiect - apelare 505-05
Copyright - InfoAcademy - 2016 17
Clasa cu parametri default

- Putem crea clase cu parametri default;

- Valorile parametrilor default vor fi setate in metoda __init__;

- La crearea unei instante valorile parametrilor default vor fi preluate


automat sau vor fi specificate valori proprii;

505-06

Copyright - InfoAcademy - 2016 18