Curs OOP si Design Patterns
-
Upload
zoltan-iszlai -
Category
Internet
-
view
219 -
download
2
Transcript of Curs OOP si Design Patterns
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 objectProtected
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()
AdapterSpecificRequest()
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