SlideShare a Scribd company logo
1 of 24
ACADEMY 2015
Concepte OOP si DP
- Iszlai Zoltan
Cuprins
• Concepte despre clase si obiecte
• Principii de baza:
• Abstractizarea
• Incapsularea
• Mostenirea
• Polimorfizmul
• Design patterns
• Singleton
• Abstract factory
• Adapter
Pagina 1 din 22
Clase si obiecte
• Obiectele sunt de obicei reprezentari ale obiectelor din viata
reala, astfel incat programele realizate prin tehnica POO sunt
mai usor de inteles, de depanat si de extins decat programele
procedurale
• O clasa este definitia unui obiect
• Un obiect este o instanta unei clase
• Poate sa aiba atribute -> variabile
• Poate sa aiba metode -> functii
Pagina 2 din 22
Clase si obiecte ex.
Pagina 3 din 22
Abstractizare, clasa abstracta si interfata
• Abstractizarea este posibilitatea ca un program sa ignore
unele aspecte ale informatiei pe care o manipuleaza, adica
posibilitatea de a se concentra asupra esentialului
• Fiecare obiect in sistem are rolul unui “actor” abstract, care
poate executa actiuni, isi poate modifica si comunica starea si
poate comunica cu alte obiecte din sistem fara a dezvalui cum
au fost implementate acele facilitati
• O clasa abstracta este o clasa ce nu poate fi initiata si poate
contine metode goale sau abstracte
• O interfata este o clasa abstract pura, deci poate continue
numai definitiile metodelor fara implementarea acestora
Pagina 4 din 22
Abstractizare, clasa abstracta, interfata ex.
Pagina 5 din 22
Incapsularea
• Incapsularea asigura faptul ca obiectele nu pot schimba starea
interna a altor obiecte in mod direct
• Ei pot face acest lucru doar prin metode puse la dispozitie de
obiectul respectiv, doar metodele proprii ale obiectului pot
accesa starea acestuia
• Fiecare tip de obiect expune o interfata pentru celelalte obiecte
care specifica modul cum acele obiecte pot interactiona cu el
• Drepturi de acces:
• Private – contine date si functii member care pot fi folosite
doar de catre celelalte functii apartinand clasei
• Protected – similar cu private, dar da depturi de acces si
functiilor membre ale claselor derivate din clasa respectiva
• Public – da drepturi de access tuturor
Pagina 6 din 22
Incapsulare ex.
Pagina 7 din 22
Public
Any other object
Protected
An object that is
descendant from
the original object
Private
The Object Itself
Mostenirea
• Mostenirea permite definirea si crearea unor clase specializate
plecand de la clase deja definite - acestea pot impartasi (si extinde)
comportamentul lor, fara a fi nevoie de a-l redefini
• Daca un obiect A mosteneste de la un Obiect B, asta inseamna ca A
este tot ce B este, plus mai mult
• Daca A este compus din obiectul B si mai mult, inseamna ca A si B
sunt in compozitie
• O clasa/metoda poate sa fie marcat cu keywordul sealed daca nu
vrem sa se mosteneasca
• Mostenirea in C# se poate face numai de la o singura clasa, dar o
clasa poate sa implementeze mai multe interfete
Pagina 8 din 22
Mostenirea ex.
Pagina 9 din 22
Inheritor
Class
Class
Composite
Class
Some
Class
Some
other class
Mostenirea ex. #2
Pagina 10 din 22
Polimorfizmul
• Polimorfizmul este abilitatea de a procesa obiectele in mod
diferit, in functie de tipul sau de clasa lor. Este abilitatea de a
redefini metode pentru clasele derivate
• De exemplu pentru o clasa Figura putem defini o metoda arie
• Daca Cerc, Dreptunghi, etc. ce vor extinde clasa Figura,
acestea pot redefini metoda arie
Pagina 11 din 22
Polimorfizmul ex.
Pagina 12 din 22
Design patterns
• Design Patternurile sunt solutiile ce se repeta pentru o
problema generala in designul sistemelor de software
• Un design pattern nu este o solutie finala ce poate fi
transformata in cod:
• Este o descriere despre cum trebuie rezolvata o
problema ce poate fi folosita in mai multe situatii
Pagina 13 din 22
Design pattern: Singleton
• Asigura ca o clasa sa aiba o singura
instanta si un singur punct global de
acces
• Se foloseste:
• Cand avem nevoie de o singura
instanta la o clasa si trebuie sa
fie accesibili pentru clienti de la
un punct comun
Pagina 14 din 22
-Singleton()
+Instance() : Singleton
+Operation()
-instance : static Singleton
Singleton
return instance
Design pattern: Abstract Factory
• Asigura o interfata pentru a crea o
familie de obiecte care sunt in relatie,
fara a definii clasele concrete
• Se foloseste:
• Cand vrem ca un sistem sa fie
independent de produsele
create, compuse si reprezentate
• Cand un sistem trebuie
configurat cu mai multe familii de
produse
Pagina 15 din 22
Design pattern: Abstract Factory ex. #1
• Building a Car:
• Client = Me
• Factory Selector = Me, through the Dealer
interface
• Factory: Mercedes, Dacia, Opel, etc
• Products:
• The car itself
• The service
• Consumables: engine oil, engine oil filter,
brake fluid, brake pads, air filter, fuel filter, etc.
Pagina 16 din 22
Design pattern: Abstract Factory ex. #2
Pagina 17 din 22
Client
+CreateWindow()
+CreateScrollBar()
+CreateMenu()
+CreateButton()
+CreateDialog()
WidgetFactory
+CreateWindow()
+CreateScrollBar()
FlatWidgetFactory
+CreateWindow()
+CreateScrollBar()
3DWidgetFactory
Window
FlatWindow 3DWindow
ScrollBar
FlatScrollBar 3DScrollBar
• O aplicatie care suporta
mai multe configuratii de
designuri
Cod inainte:
FlatWindow wnd = new FlatWindow();
FlatMenu menu = new FlatMenu();
wnd.SetMenu(menu);
wnd.Show();
Cod cu Factory DP:
Window wnd = factory.CreateWindow();
Menu menu = factory.CreateMenu();
Design pattern: Abstract Factory consecinte
Pagina 18 din 22
• Nu arata implementarea (clase concrete), safe programming,
clean code
• Forteaza faptul ca numai produsele din acelasi “familie” pot sa
lucreze impreuna
• E simplu sa schimbi familiile claselor, numai trebuie sa schimbi
tipul de la Factory
• Adaugare unor noi tipuri de clase (produse) e dificil
Design pattern: Adapter
• Converteste o interfata pentru o clasa intr-o alta interfata pe care
clientul asteapta
• Design pattern-ul ajuta clasele care nu au compatibilitate sa lucreze
impreuna
• Se foloseste:
• Cand vrem sa folosim o clasa existenta si interfata nu e potrivita
cu ceea ce vrem
• Cand vrem sa folosim o clasa ce poate fi refolosita si coopereaza
cu alte clase care nu sunt in relatii si nu se pot prevedea, clase
care au interfete incompatibile
Pagina 19 din 22
Design pattern: Adapter ex. #1
Pagina 20 din 22
Object AdapterClass Adapter
(multiple inheritance)
Client
+Request()
Target
+SpecificRequest()
Adaptee
+Request()
Adapter
SpecificRequest()
Client
+Request()
Target
+SpecificRequest()
Adaptee
+Request()
Adapter
-adaptee
adaptee.SpecificRequest()
Design pattern: Adapter ex. #2
Pagina 21 din 22
Drawing Editor
+BoundingBox()
+CreateManipulator()
Shape
+GetExtent()
TextView
-text
+BoundingBox()
+CreateManipulator()
Line
+BoundingBox()
+CreateManipulator()
TextShape
return text.GetExtent()
return new TextManipulator
• Adaptarea unei 3rd party complex (TextView), control care
trebuie afisat ca si un “shape” in aplicatia “Editorului de Drawing”
Resurse suplimentare
Pagina 22 din 22
• Microsoft MSDN:
• https://msdn.microsoft.com/en-us/library/ms173109.aspx
• TutPlus:
• http://code.tutsplus.com/courses/30-days-to-learn-c
• Programming MF:
• http://programming-motherfucker.com/become.html#C#
• Microsoft Virtual Academy:
• http://www.microsoftvirtualacademy.com/
• Design patterns:
• http://www.dofactory.com/net/design-patterns
Intrebari?
Sfarsit

More Related Content

More from Zoltan Iszlai

Java Code Quality Improvements - DevWeek
Java Code Quality Improvements - DevWeekJava Code Quality Improvements - DevWeek
Java Code Quality Improvements - DevWeekZoltan Iszlai
 
Scrum Walkthrough Internship Course
Scrum Walkthrough Internship CourseScrum Walkthrough Internship Course
Scrum Walkthrough Internship CourseZoltan Iszlai
 
HTML Walkthrough Internship Course
HTML Walkthrough Internship CourseHTML Walkthrough Internship Course
HTML Walkthrough Internship CourseZoltan Iszlai
 
CSS Walktrough Internship Course
CSS Walktrough Internship CourseCSS Walktrough Internship Course
CSS Walktrough Internship CourseZoltan Iszlai
 
Java Study Group Report
Java Study Group ReportJava Study Group Report
Java Study Group ReportZoltan Iszlai
 
[Romanian] Git Branching Strategies
[Romanian] Git Branching Strategies[Romanian] Git Branching Strategies
[Romanian] Git Branching StrategiesZoltan Iszlai
 
Php Internship Course
Php Internship CoursePhp Internship Course
Php Internship CourseZoltan Iszlai
 
Using Scrum Internship Course
Using Scrum Internship CourseUsing Scrum Internship Course
Using Scrum Internship CourseZoltan Iszlai
 
Top 3 CMS Systems Compared
Top 3 CMS Systems ComparedTop 3 CMS Systems Compared
Top 3 CMS Systems ComparedZoltan Iszlai
 
Entity and NHibernate ORM Frameworks Compared
Entity and NHibernate ORM Frameworks ComparedEntity and NHibernate ORM Frameworks Compared
Entity and NHibernate ORM Frameworks ComparedZoltan Iszlai
 
[Hungarian] HTML Course - Sapientia University
[Hungarian] HTML Course - Sapientia University[Hungarian] HTML Course - Sapientia University
[Hungarian] HTML Course - Sapientia UniversityZoltan Iszlai
 
[Hungarian] CSS Course - Sapientia University
[Hungarian] CSS Course - Sapientia University[Hungarian] CSS Course - Sapientia University
[Hungarian] CSS Course - Sapientia UniversityZoltan Iszlai
 
[Hungarian] Scrum Course - Sapientia University
[Hungarian] Scrum Course - Sapientia University[Hungarian] Scrum Course - Sapientia University
[Hungarian] Scrum Course - Sapientia UniversityZoltan Iszlai
 
[Hungarian] Sysgenic Introduction - Sapientia University
[Hungarian] Sysgenic Introduction - Sapientia University[Hungarian] Sysgenic Introduction - Sapientia University
[Hungarian] Sysgenic Introduction - Sapientia UniversityZoltan Iszlai
 
User Centered Image Management System For Digital Libraries - DIAL 2006
User Centered Image Management System For Digital Libraries - DIAL 2006User Centered Image Management System For Digital Libraries - DIAL 2006
User Centered Image Management System For Digital Libraries - DIAL 2006Zoltan Iszlai
 
[Romanian] HTML Internship Course
[Romanian] HTML Internship Course[Romanian] HTML Internship Course
[Romanian] HTML Internship CourseZoltan Iszlai
 

More from Zoltan Iszlai (16)

Java Code Quality Improvements - DevWeek
Java Code Quality Improvements - DevWeekJava Code Quality Improvements - DevWeek
Java Code Quality Improvements - DevWeek
 
Scrum Walkthrough Internship Course
Scrum Walkthrough Internship CourseScrum Walkthrough Internship Course
Scrum Walkthrough Internship Course
 
HTML Walkthrough Internship Course
HTML Walkthrough Internship CourseHTML Walkthrough Internship Course
HTML Walkthrough Internship Course
 
CSS Walktrough Internship Course
CSS Walktrough Internship CourseCSS Walktrough Internship Course
CSS Walktrough Internship Course
 
Java Study Group Report
Java Study Group ReportJava Study Group Report
Java Study Group Report
 
[Romanian] Git Branching Strategies
[Romanian] Git Branching Strategies[Romanian] Git Branching Strategies
[Romanian] Git Branching Strategies
 
Php Internship Course
Php Internship CoursePhp Internship Course
Php Internship Course
 
Using Scrum Internship Course
Using Scrum Internship CourseUsing Scrum Internship Course
Using Scrum Internship Course
 
Top 3 CMS Systems Compared
Top 3 CMS Systems ComparedTop 3 CMS Systems Compared
Top 3 CMS Systems Compared
 
Entity and NHibernate ORM Frameworks Compared
Entity and NHibernate ORM Frameworks ComparedEntity and NHibernate ORM Frameworks Compared
Entity and NHibernate ORM Frameworks Compared
 
[Hungarian] HTML Course - Sapientia University
[Hungarian] HTML Course - Sapientia University[Hungarian] HTML Course - Sapientia University
[Hungarian] HTML Course - Sapientia University
 
[Hungarian] CSS Course - Sapientia University
[Hungarian] CSS Course - Sapientia University[Hungarian] CSS Course - Sapientia University
[Hungarian] CSS Course - Sapientia University
 
[Hungarian] Scrum Course - Sapientia University
[Hungarian] Scrum Course - Sapientia University[Hungarian] Scrum Course - Sapientia University
[Hungarian] Scrum Course - Sapientia University
 
[Hungarian] Sysgenic Introduction - Sapientia University
[Hungarian] Sysgenic Introduction - Sapientia University[Hungarian] Sysgenic Introduction - Sapientia University
[Hungarian] Sysgenic Introduction - Sapientia University
 
User Centered Image Management System For Digital Libraries - DIAL 2006
User Centered Image Management System For Digital Libraries - DIAL 2006User Centered Image Management System For Digital Libraries - DIAL 2006
User Centered Image Management System For Digital Libraries - DIAL 2006
 
[Romanian] HTML Internship Course
[Romanian] HTML Internship Course[Romanian] HTML Internship Course
[Romanian] HTML Internship Course
 

[Romanian] OOP and Design Patterns Internship Course

  • 1. ACADEMY 2015 Concepte OOP si DP - Iszlai Zoltan
  • 2. Cuprins • Concepte despre clase si obiecte • Principii de baza: • Abstractizarea • Incapsularea • Mostenirea • Polimorfizmul • Design patterns • Singleton • Abstract factory • Adapter Pagina 1 din 22
  • 3. Clase si obiecte • Obiectele sunt de obicei reprezentari ale obiectelor din viata reala, astfel incat programele realizate prin tehnica POO sunt mai usor de inteles, de depanat si de extins decat programele procedurale • O clasa este definitia unui obiect • Un obiect este o instanta unei clase • Poate sa aiba atribute -> variabile • Poate sa aiba metode -> functii Pagina 2 din 22
  • 4. Clase si obiecte ex. Pagina 3 din 22
  • 5. Abstractizare, clasa abstracta si interfata • Abstractizarea este posibilitatea ca un program sa ignore unele aspecte ale informatiei pe care o manipuleaza, adica posibilitatea de a se concentra asupra esentialului • Fiecare obiect in sistem are rolul unui “actor” abstract, care poate executa actiuni, isi poate modifica si comunica starea si poate comunica cu alte obiecte din sistem fara a dezvalui cum au fost implementate acele facilitati • O clasa abstracta este o clasa ce nu poate fi initiata si poate contine metode goale sau abstracte • O interfata este o clasa abstract pura, deci poate continue numai definitiile metodelor fara implementarea acestora Pagina 4 din 22
  • 6. Abstractizare, clasa abstracta, interfata ex. Pagina 5 din 22
  • 7. Incapsularea • Incapsularea asigura faptul ca obiectele nu pot schimba starea interna a altor obiecte in mod direct • Ei pot face acest lucru doar prin metode puse la dispozitie de obiectul respectiv, doar metodele proprii ale obiectului pot accesa starea acestuia • Fiecare tip de obiect expune o interfata pentru celelalte obiecte care specifica modul cum acele obiecte pot interactiona cu el • Drepturi de acces: • Private – contine date si functii member care pot fi folosite doar de catre celelalte functii apartinand clasei • Protected – similar cu private, dar da depturi de acces si functiilor membre ale claselor derivate din clasa respectiva • Public – da drepturi de access tuturor Pagina 6 din 22
  • 8. Incapsulare ex. Pagina 7 din 22 Public Any other object Protected An object that is descendant from the original object Private The Object Itself
  • 9. Mostenirea • Mostenirea permite definirea si crearea unor clase specializate plecand de la clase deja definite - acestea pot impartasi (si extinde) comportamentul lor, fara a fi nevoie de a-l redefini • Daca un obiect A mosteneste de la un Obiect B, asta inseamna ca A este tot ce B este, plus mai mult • Daca A este compus din obiectul B si mai mult, inseamna ca A si B sunt in compozitie • O clasa/metoda poate sa fie marcat cu keywordul sealed daca nu vrem sa se mosteneasca • Mostenirea in C# se poate face numai de la o singura clasa, dar o clasa poate sa implementeze mai multe interfete Pagina 8 din 22
  • 10. Mostenirea ex. Pagina 9 din 22 Inheritor Class Class Composite Class Some Class Some other class
  • 12. Polimorfizmul • Polimorfizmul este abilitatea de a procesa obiectele in mod diferit, in functie de tipul sau de clasa lor. Este abilitatea de a redefini metode pentru clasele derivate • De exemplu pentru o clasa Figura putem defini o metoda arie • Daca Cerc, Dreptunghi, etc. ce vor extinde clasa Figura, acestea pot redefini metoda arie Pagina 11 din 22
  • 14. Design patterns • Design Patternurile sunt solutiile ce se repeta pentru o problema generala in designul sistemelor de software • Un design pattern nu este o solutie finala ce poate fi transformata in cod: • Este o descriere despre cum trebuie rezolvata o problema ce poate fi folosita in mai multe situatii Pagina 13 din 22
  • 15. Design pattern: Singleton • Asigura ca o clasa sa aiba o singura instanta si un singur punct global de acces • Se foloseste: • Cand avem nevoie de o singura instanta la o clasa si trebuie sa fie accesibili pentru clienti de la un punct comun Pagina 14 din 22 -Singleton() +Instance() : Singleton +Operation() -instance : static Singleton Singleton return instance
  • 16. Design pattern: Abstract Factory • Asigura o interfata pentru a crea o familie de obiecte care sunt in relatie, fara a definii clasele concrete • Se foloseste: • Cand vrem ca un sistem sa fie independent de produsele create, compuse si reprezentate • Cand un sistem trebuie configurat cu mai multe familii de produse Pagina 15 din 22
  • 17. Design pattern: Abstract Factory ex. #1 • Building a Car: • Client = Me • Factory Selector = Me, through the Dealer interface • Factory: Mercedes, Dacia, Opel, etc • Products: • The car itself • The service • Consumables: engine oil, engine oil filter, brake fluid, brake pads, air filter, fuel filter, etc. Pagina 16 din 22
  • 18. Design pattern: Abstract Factory ex. #2 Pagina 17 din 22 Client +CreateWindow() +CreateScrollBar() +CreateMenu() +CreateButton() +CreateDialog() WidgetFactory +CreateWindow() +CreateScrollBar() FlatWidgetFactory +CreateWindow() +CreateScrollBar() 3DWidgetFactory Window FlatWindow 3DWindow ScrollBar FlatScrollBar 3DScrollBar • O aplicatie care suporta mai multe configuratii de designuri Cod inainte: FlatWindow wnd = new FlatWindow(); FlatMenu menu = new FlatMenu(); wnd.SetMenu(menu); wnd.Show(); Cod cu Factory DP: Window wnd = factory.CreateWindow(); Menu menu = factory.CreateMenu();
  • 19. Design pattern: Abstract Factory consecinte Pagina 18 din 22 • Nu arata implementarea (clase concrete), safe programming, clean code • Forteaza faptul ca numai produsele din acelasi “familie” pot sa lucreze impreuna • E simplu sa schimbi familiile claselor, numai trebuie sa schimbi tipul de la Factory • Adaugare unor noi tipuri de clase (produse) e dificil
  • 20. Design pattern: Adapter • Converteste o interfata pentru o clasa intr-o alta interfata pe care clientul asteapta • Design pattern-ul ajuta clasele care nu au compatibilitate sa lucreze impreuna • Se foloseste: • Cand vrem sa folosim o clasa existenta si interfata nu e potrivita cu ceea ce vrem • Cand vrem sa folosim o clasa ce poate fi refolosita si coopereaza cu alte clase care nu sunt in relatii si nu se pot prevedea, clase care au interfete incompatibile Pagina 19 din 22
  • 21. Design pattern: Adapter ex. #1 Pagina 20 din 22 Object AdapterClass Adapter (multiple inheritance) Client +Request() Target +SpecificRequest() Adaptee +Request() Adapter SpecificRequest() Client +Request() Target +SpecificRequest() Adaptee +Request() Adapter -adaptee adaptee.SpecificRequest()
  • 22. Design pattern: Adapter ex. #2 Pagina 21 din 22 Drawing Editor +BoundingBox() +CreateManipulator() Shape +GetExtent() TextView -text +BoundingBox() +CreateManipulator() Line +BoundingBox() +CreateManipulator() TextShape return text.GetExtent() return new TextManipulator • Adaptarea unei 3rd party complex (TextView), control care trebuie afisat ca si un “shape” in aplicatia “Editorului de Drawing”
  • 23. Resurse suplimentare Pagina 22 din 22 • Microsoft MSDN: • https://msdn.microsoft.com/en-us/library/ms173109.aspx • TutPlus: • http://code.tutsplus.com/courses/30-days-to-learn-c • Programming MF: • http://programming-motherfucker.com/become.html#C# • Microsoft Virtual Academy: • http://www.microsoftvirtualacademy.com/ • Design patterns: • http://www.dofactory.com/net/design-patterns