Curs OOP si Design Patterns

24
ACADEMY 2015 Concepte OOP si DP - Iszlai Zoltan

Transcript of Curs OOP si Design Patterns

Page 1: Curs OOP si Design Patterns

ACADEMY 2015

Concepte OOP si DP

- Iszlai Zoltan

Page 2: Curs OOP si Design Patterns

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

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

Clase si obiecte ex.

Pagina 3 din 22

Page 5: Curs OOP si Design Patterns

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

Abstractizare, clasa abstracta, interfata ex.

Pagina 5 din 22

Page 7: Curs OOP si Design Patterns

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

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

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

Mostenirea ex.

Pagina 9 din 22

Inheritor Class

Class

Composite Class

Some Class

Some other class

Page 11: Curs OOP si Design Patterns

Mostenirea ex. #2

Pagina 10 din 22

Page 12: Curs OOP si Design Patterns

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

Polimorfizmul ex.

Pagina 12 din 22

Page 14: Curs OOP si Design Patterns

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

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

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

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

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

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

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

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

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

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

Intrebari?

Sfarsit