Sunteți pe pagina 1din 33

OBJECT

ORIENTED
PROGRAMMING
DE BOTNARU VICTOR
1. Introducere
• Vrem să facem un carusel
• Ce îi trebuie unui carusel?
• Ce probleme pot apărea?
• Soluția - OOP

2. Principii OOP
Cuprins • Terminologie
• Grade de protecție
• Principiul de encapsulare
• Principiul de abstracție
• Principiul de moștenire

3. Recapitulare
VREM SĂ
FACEM UN
CARUSEL
Exemplu folosit: 
https://serenader2014.github.io/flutter_carousel_slider/#/
• O listă de imagini prin care să
circule
Ce îi trebuie • Două funcții, pentru a schimba
imaginea arătată cu cea din
unui carusel stânga/dreapta
pentru a
funcționa?
Hai să facem un carusel!
Ce probleme pot apărea?
• Dacă vrem să facem 5 carusele diferite? Trebuie să rescirem funcțiile
pentru fiecare in parte?
• Dacă vrem să avem și carusele verticale, și carusele orizontale? Cum
facem diferența dintre cele două?
• Dacă nu vrem ca imaginile să fie globale, la îndemâna oricărei părți
din program?
CUM AR
A RĂTA
CODUL CU
5
CARUSELE:
SOLUȚIE - OBJECT ORIENTED
PROGRAMMING
• Observăm că fiecare carusel are o strcutră similară, fiecare are
nevoie de un set de imagini, o funcție de animat, și două funcții de
mișcare.
• Putem să creem o structură de bază a caruselelor, o diagramă, pe
care toate să le urmeze.
• Când avem nevoie de un carusel nou, pur și simplu generăm
unul după schemă.
• Schema se numește CLASĂ  iar caruselul generat se numește
OBIECT.
C U M A R
A R ĂT A
C O D U L C U
5
C A R U S E L E
A C U M :
Exemplu de folosire ale celor 5 carusele:
PRINCIPII
OOP
1. Terminologie
• O CLASĂ este schema după care se pot construi obiecte - funcționează ca
un tip de date, cum ar fi string, int, etc. , cu adăugirea de funcții.
• Un OBIECT este o instanță a unei clase.
• O PROPRIETATE este o variabilă definită într-o clasă. Fiecare obiect va
avea versiunea sa proprie a proprietății.
• O METODĂ  este o funcție definită într-o clasă. La fel ca la proprietăți,
metodele acționează diferit pentru fiecare obiect în parte.
• Uniunea proprietăților și metodelor unei clase se
numește MEMBRII clasei.
2. Protecția metodelor/ proprietăților
• Există situații în care nu vrem să avem puterea de a
modifica proprietăți /  accesa metode în afara claselor, deoarece ar
putea duce la unwanted behavior, și ne ajută în urmărirea
principiilor definite mai jos.
• De aceea există 3 grade de protecție pentru metode/variabile:
• Public: Membrul poate fi accesat oriunde în program;
• Private: Membrul poate fi accesat numai înăuntrul clasei;
• Protected: La fel ca private, numai că membrul poate fi accesat și de
subclase (explicate mai târziu).
• Principiul de Encapsulare spune
că un obiect ar trebui să-și
mențină starea privată.
• Cu alte cuvinte, niciun alt obiect
nu ar trebui să aibă acces la
3. Principiul proprietățile sale direct, ci, să îi
de Encapsulare poată schimba starea indirect,
prin metode.
• Presupunem următorul exemplu:
De ce am • Ea este Ana.
• Ana a definit clasa Carusel, in
urma acest care membrul currentImage e public.
principiu? • La un moment dat în cod, Ana
a schimbat variabila să fie 0.

• Ana nu și-
a dat seama că, dacă schimbă variabila, 
nu schimbă și imaginea afișată pe
moment. 
• Acum, imaginea afișată și cea care crede
programul că este curentă nu coincid,
ceea ce va duce la                             
• Dacă currentImage ar fi fost un membru privat, iar clasa ar fi
conținut următoarea metodă:

• Nu ar mai fi apărut nicio eroare, nici acum, și nici în viitor.


• Abstracția apare ca o extensie a
encapsulării - și spune că
singurele metode expuse ale
unei clase ar trebui să fie cele
high-level. 
4. Principiul de • Cu alte cuvinte, implementarea
Abstractizare metodelor ar trbuie să fie
complexă, iar folosirea
metodelor ar trebui să fie
simplă.
• Presupunem următorul exemplu:

De ce am • Acesta este Bob.


• Bob a implementat și el clasa Carusel,
urma acest  numai că Bob a făcut o animație  de
principiu? tranziție super-epică, cu rotire,
mărire, efecte de fundal și explozii.
• De aceea, a trebuit să adauge mai
multe metode low-level în clasa sa.

• Aceste metode nu vor fi folosite – sau nu ar trebui


folosite - decât  în metoda AnimateTrasition(). Niciun
obiect dinafara caruselului nu are nevoie să știe cum
funcționează caruselul, ci doar că funcționează.
PAUZĂ DE
R E S P I R AT
5. Principiul de Moștenire și overwrite-ul
• Principiul de moștenire se aplică în momentul în care vrem
să construim foarte multe obiecte cu diferențe mici între ele. În acest
caz, ne putem folosi de un sistem care ne lasă să creem clase ca
extensii ale altor clase. 
Lăsăm puțin caruselele
• Să ne imaginăm că vrem să creem clasele
”Profesor” și ”Student”. Persoană:
• Vrem să știm vârsta/înălțimea atât pentru vârstă +
înălțime
profesor, cât și pentru student.
• În loc să scriem două variabile diferite pentru
fiecare clasă, putem creea o clasă-mamă numită Profesor: Tot de Student: Tot de
”Persoană” care să conțină datele comune, la personă +
materie
la persoană +
media_notelor
iar alte clase să se extindă din aceasta.
Ne întoarcem la carusele - overwrite
• Am văzut cum putem adăuga metode și variablie clasei-părinte prin
clasele derivate, dar dacă vrem să schimbăm, nu să adăugăm
metode?
• De exemplu, dacă am vrea ca metoda noastră ”AnimateTransition”
să animeze caruselul vertical, nu orizontal?
• Modul prin care putem atinge acest obiectiv este prin OVERWRITE,
adică redefinirea metodei în clasa copil.
• În execuție, când apelăm un obiect, mai întâi se verifică dacă există
o definiție în clasa sa, iar dacă nu, se folosește definiția din clasa
părinte. Clasa copil are prioritate.
INTREBARI?
Recapitulare
• Ce este o clasă? Ce este un obiect?
• Care sunt membrii unei clase? Ce înseamnă grad de protecție a unui
membru?
• Care sunt cele trei principii discuate ale programării orientate pe
obiecte?
• Ce înseamnă encapsulare?
• Ce înseamnă abstractizare?
• Ce înseamnă moștenire?
M U LȚ U M E S C
PENTRU
AT E N Ț I E !
Extras
• Concepte avansate:
• Principiul de Polimorfism
• Interfețe
• Clase abstracte
• Responsabilitate proprie
• IMPORTANT!!!
• Dacă sunteți intrebați la un
interview care sunt principiile
OOP, să spuneți encapsulare,
abstracție, moștenire
ȘI  Polimorfism.
Bibliografie
• https://www.pixilart.com/art/jevil-w-background-w-shadow-a81313
7e530f5ec
• https://preview.redd.it/8jcj2z7h61741.png?width=960&crop=smart&
auto=webp&s=5bfa70641b1931e312c03765d2768be703ddfcea
• https://www.freecodecamp.org/news/object-oriented-programmin
g-concepts-21bb035f7260/
• https://serenader2014.github.io/flutter_carousel_slider/#/
• https://www.partech.nl/en/publications/2020/10/basic-principles-of
-object-oriented-programming#:~:text=The%20basic%20principles
%20of%20OOP,any%20object%2Doriented%20programming%20la
nguage
.

S-ar putea să vă placă și