Curs OOP si Design Patterns
-
Upload
zoltan-iszlai -
Category
Internet
-
view
217 -
download
2
Transcript of Curs OOP si Design Patterns
![Page 1: Curs OOP si Design Patterns](https://reader035.fdocument.pub/reader035/viewer/2022062220/55c636d5bb61eb8e7e8b46b5/html5/thumbnails/1.jpg)
ACADEMY 2015
Concepte OOP si DP
- Iszlai Zoltan
![Page 2: Curs OOP si Design Patterns](https://reader035.fdocument.pub/reader035/viewer/2022062220/55c636d5bb61eb8e7e8b46b5/html5/thumbnails/2.jpg)
Cuprins
• Concepte despre clase si obiecte
• Principii de baza:
• Abstractizarea
• Incapsularea
• Mostenirea
• Polimorfizmul
• Design patterns
• Singleton
• Abstract factory
• Adapter
Pagina 1 din 22
![Page 3: Curs OOP si Design Patterns](https://reader035.fdocument.pub/reader035/viewer/2022062220/55c636d5bb61eb8e7e8b46b5/html5/thumbnails/3.jpg)
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
![Page 4: Curs OOP si Design Patterns](https://reader035.fdocument.pub/reader035/viewer/2022062220/55c636d5bb61eb8e7e8b46b5/html5/thumbnails/4.jpg)
Clase si obiecte ex.
Pagina 3 din 22
![Page 5: Curs OOP si Design Patterns](https://reader035.fdocument.pub/reader035/viewer/2022062220/55c636d5bb61eb8e7e8b46b5/html5/thumbnails/5.jpg)
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
![Page 6: Curs OOP si Design Patterns](https://reader035.fdocument.pub/reader035/viewer/2022062220/55c636d5bb61eb8e7e8b46b5/html5/thumbnails/6.jpg)
Abstractizare, clasa abstracta, interfata ex.
Pagina 5 din 22
![Page 7: Curs OOP si Design Patterns](https://reader035.fdocument.pub/reader035/viewer/2022062220/55c636d5bb61eb8e7e8b46b5/html5/thumbnails/7.jpg)
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
![Page 8: Curs OOP si Design Patterns](https://reader035.fdocument.pub/reader035/viewer/2022062220/55c636d5bb61eb8e7e8b46b5/html5/thumbnails/8.jpg)
Incapsulare ex.
Pagina 7 din 22
Public
Any other objectProtected
An object that is descendant from the original object
Private
The Object Itself
![Page 9: Curs OOP si Design Patterns](https://reader035.fdocument.pub/reader035/viewer/2022062220/55c636d5bb61eb8e7e8b46b5/html5/thumbnails/9.jpg)
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
![Page 10: Curs OOP si Design Patterns](https://reader035.fdocument.pub/reader035/viewer/2022062220/55c636d5bb61eb8e7e8b46b5/html5/thumbnails/10.jpg)
Mostenirea ex.
Pagina 9 din 22
Inheritor Class
Class
Composite Class
Some Class
Some other class
![Page 11: Curs OOP si Design Patterns](https://reader035.fdocument.pub/reader035/viewer/2022062220/55c636d5bb61eb8e7e8b46b5/html5/thumbnails/11.jpg)
Mostenirea ex. #2
Pagina 10 din 22
![Page 12: Curs OOP si Design Patterns](https://reader035.fdocument.pub/reader035/viewer/2022062220/55c636d5bb61eb8e7e8b46b5/html5/thumbnails/12.jpg)
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
![Page 13: Curs OOP si Design Patterns](https://reader035.fdocument.pub/reader035/viewer/2022062220/55c636d5bb61eb8e7e8b46b5/html5/thumbnails/13.jpg)
Polimorfizmul ex.
Pagina 12 din 22
![Page 14: Curs OOP si Design Patterns](https://reader035.fdocument.pub/reader035/viewer/2022062220/55c636d5bb61eb8e7e8b46b5/html5/thumbnails/14.jpg)
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
![Page 15: Curs OOP si Design Patterns](https://reader035.fdocument.pub/reader035/viewer/2022062220/55c636d5bb61eb8e7e8b46b5/html5/thumbnails/15.jpg)
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
![Page 16: Curs OOP si Design Patterns](https://reader035.fdocument.pub/reader035/viewer/2022062220/55c636d5bb61eb8e7e8b46b5/html5/thumbnails/16.jpg)
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
![Page 17: Curs OOP si Design Patterns](https://reader035.fdocument.pub/reader035/viewer/2022062220/55c636d5bb61eb8e7e8b46b5/html5/thumbnails/17.jpg)
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
![Page 18: Curs OOP si Design Patterns](https://reader035.fdocument.pub/reader035/viewer/2022062220/55c636d5bb61eb8e7e8b46b5/html5/thumbnails/18.jpg)
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();
![Page 19: Curs OOP si Design Patterns](https://reader035.fdocument.pub/reader035/viewer/2022062220/55c636d5bb61eb8e7e8b46b5/html5/thumbnails/19.jpg)
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
![Page 20: Curs OOP si Design Patterns](https://reader035.fdocument.pub/reader035/viewer/2022062220/55c636d5bb61eb8e7e8b46b5/html5/thumbnails/20.jpg)
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
![Page 21: Curs OOP si Design Patterns](https://reader035.fdocument.pub/reader035/viewer/2022062220/55c636d5bb61eb8e7e8b46b5/html5/thumbnails/21.jpg)
Design pattern: Adapter ex. #1
Pagina 20 din 22
Object AdapterClass Adapter (multiple inheritance)
Client
+Request()
Target
+SpecificRequest()
Adaptee
+Request()
AdapterSpecificRequest()
Client
+Request()
Target
+SpecificRequest()
Adaptee
+Request()
Adapter
-adaptee
adaptee.SpecificRequest()
![Page 22: Curs OOP si Design Patterns](https://reader035.fdocument.pub/reader035/viewer/2022062220/55c636d5bb61eb8e7e8b46b5/html5/thumbnails/22.jpg)
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”
![Page 23: Curs OOP si Design Patterns](https://reader035.fdocument.pub/reader035/viewer/2022062220/55c636d5bb61eb8e7e8b46b5/html5/thumbnails/23.jpg)
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
![Page 24: Curs OOP si Design Patterns](https://reader035.fdocument.pub/reader035/viewer/2022062220/55c636d5bb61eb8e7e8b46b5/html5/thumbnails/24.jpg)
Intrebari?
Sfarsit