44
Sabloane de proiectare: Singleton Cosmin Varlan Cosmin Vârlan http://www.infoiasi.ro/~flash/ prezentari_cerc 1

Sabloane de proiectare : Singleton

Embed Size (px)

DESCRIPTION

Sabloane de proiectare : Singleton. Cosmin Varlan. PE 22 VINE ADOBE :D. VESTEA BUNA:. Ne usureaza viata …. Ne ajuta sa organizam mai bine treaba Putem sa intelegem “ mai bine ” OOP Uneori pot reduce oridunl de complexitate al problemei …. - PowerPoint PPT Presentation

Citation preview

Page 1: Sabloane  de  proiectare : Singleton

1

Sabloane de proiectare:Singleton

Cosmin Varlan

Cosmin Vârlan

http://www.infoiasi.ro/~flash/prezentari_cerc

Page 2: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

2

VESTEA BUNA:

PE 22 VINE ADOBE :D

Cosmin Vârlan

Page 3: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

3

Sabloane de proiectare (design patterns)

• Ne usureaza viata….• Ne ajuta sa organizam mai bine treaba• Putem sa intelegem “mai bine” OOP• Uneori pot reduce oridunl de complexitate al

problemei….• … sau fac definitiile obietelor mai usor de

inteles…

Cosmin Vârlan

Page 4: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

4

Sabloane de proiectare Sabloane… Sabloane… Sabloane…

Strategy Adapter Proxy

Decorator Facade Command

Factory Template Mediator

Observer Builder Model-View-Controller

Chain of responsibility Iterator Recycle Bin

Singleton Composite The Circular

Fly Weight State Bridge

Cosmin Vârlan

… si multe altele….

Page 5: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

5

Recomandare:

Cosmin Vârlan

Da, o gasiti si pe torente…

Page 6: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

6

Sabloane de proiectare Sabloane… Sabloane… Sabloane…

Strategy Adapter Proxy

Decorator Facade Command

Factory Template Mediator

Observer Builder Model-Viwev-Controller

Chain of responsibility Iterator Recycle Bin

Singleton Composite The Circular

Fly Weight State Brydge

Cosmin Vârlan

Despre asta vom vorbi azi…

Page 7: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

7

But first….. Ce e cu staticul ala ?!?!

public static var valoare:uint;

Variabila “valoare” va fi accesibila de oriunde, fara a fi nevoie de creare a unei instante din clasa din cre face parte.

De exemplu daca este proprietate a clasei “Culoare”, putem sa o accesam astfel:

Culoare.valoare = 5;

Cosmin Vârlan

Page 8: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

8

But first….. Ce e cu staticul ala ?!?!

Putem avea si functii statice:public static function f():val{ ……}Intrebare: avem voie sa folosim “this” in aceasta

functie ?!

Cosmin Vârlan

Page 9: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

9

But first….. Ce e cu staticul ala ?!?!

Putem avea si functii statice:public static function f():uint{ ……}Raspuns: NU, deoarece nu exista o instanta atunci

cand se face apelul; Apeleul este tot de forma:Ceva:uint = Culoarea.f();

Cosmin Vârlan

Page 10: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

10

But first….. Ce e cu staticul ala ?!?!

Putem avea si functii statice:public static function f():uint{ ……}Interbare: Putem sa accesam o proprietate

publica/privata a clasei Culoare ?

Cosmin Vârlan

Page 11: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

11

But first….. Ce e cu staticul ala ?!?!

Putem avea si functii statice:public static function f():uint{ ……}Raspuns: NU ! Nu putem, deoarece o proprietate este data

numai unui obiect. Cum aici nu avem nici un obiect, inseamna ca nu avem nici o proprietate privata (sau publica) – e ca si cum ati scrie [null].proprietate

Cosmin Vârlan

Page 12: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

12

But first….. Ce e cu staticul ala ?!?!

Putem avea si functii statice:public static function f():uint{ ……}Interbare: Dar putem apela alta functie

(publica/privata) ?Raspuns: … tot NU (metodele sunt de asemenea

specifice instantei nu clasei)

Cosmin Vârlan

Page 13: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

13

But first….. Ce e cu staticul ala ?!?!

Putem avea si functii statice:public static function f():uint{ ……}Intrebare: TOTUSI, mai putem accesa altceva din

clasa asta (cea din care face parte functia statica) ?!

Cosmin Vârlan

Page 14: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

14

But first….. Ce e cu staticul ala ?!?!

Putem avea si functii statice:public static function f():uint{ ……}Raspuns: da, alte metode sau proprietati

statice… [ele nu au nevoie de o instanta pentru a fi apelate]

Cosmin Vârlan

Page 15: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

15

But first….. Ce e cu staticul ala ?!?!

La ce e bun ? Pai de multe ori nu aveti nevoie sa instantiati

un obiect pentru a face ceva. De exemplu, nu aveti nevoie sa instantiati un

obiect din clasa Math pentru a face Math.sin(Math.PI);

(sin este metoda statica din math, PI este constanta statica din Math)

Cosmin Vârlan

Page 16: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

16

But first….. Ce e cu staticul ala ?!?!

La ce e bun ? Deci foloseste pentru a crea proprietati si metode ale

clasei (un fel de metaproprietati).

Exercitiu: Construiti clasa Culori care sa aiba constante statice:

Rosu, Verde, Albastru si o metoda de asemenea statica “combineColors” care va returna culoarea obtinuta prin amestecarea RGB a culorilor primite ca parametri.

Cosmin Vârlan

Page 17: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

17

• OK, am scapat de “But first”, sa vedem ce e cu Singleton-ul ala….

Cosmin Vârlan

Page 18: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

18

Problema:

• Am facut un “moozic player” … sau ati facut (voi cu Alex)

• Obiectul de tip Sound desi este unul singur il reciclati mereu (incarcand de fiecare data alta melodie)…

• De multe ori nu este accesibil de oriunde, (Sound-ul asta)

• Ati putea gresi si instantia doua obiecte sunet care suprapuse ar transforma 2 melodii intr-un balamuc…

Cosmin Vârlan

Page 19: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

19

Problema:

• Un Sablon de proiectare care va usureaza viata atunci cand trebuie sa implementati obiecte “Unice” este Singleton

• Daca un obiect este construit dupa acest sablon, nu poate avea niciodata doua instante…

• Pe cat pare de simplu, pe atat e de complex “inside”

Cosmin Vârlan

Page 20: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

20

Singleton - codding:

• Codul cel mai basic ar fi urmatorul:

Cosmin Vârlan

Page 21: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

21

Singleton - codding:

Cosmin Vârlan

Page 22: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

22

Singleton - codding:

Cosmin Vârlan

Eu sunt un Singleton… mic si

rau

Page 23: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

23

Singleton - codding:

Cosmin Vârlan

Mereu este nevoie sa se tina ca

variabila privata o variabila de tipul….

Page 24: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

24

Singleton - codding:

Cosmin Vârlan

Hei, are acelasi tip ca si clasa…

Page 25: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

25

Singleton - codding:

Cosmin Vârlan

In plus, ce rost are sa fie privata si

statica ?!?!

Page 26: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

26

Singleton - codding:

Cosmin Vârlan

Doar static inseamna ca vreau sa accesez asa:

Single._instance = …..

Page 27: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

27

Singleton - codding:

Cosmin Vârlan

Single._instance = …..Dar nu pot face asta decat din

clasa (pentru ca e privata)

Page 28: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

28

Singleton - codding:

Cosmin Vârlan

Singura instanta ce va fi creata pentru un singleton este aceasta…

Da, nu poate fi accesata din exterior (e privata)

Page 29: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

29

Singleton - codding:

Cosmin Vârlan

Pentru a o accesa, ii construim o metodata speciala: getInstance()

Page 30: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

30

Singleton - codding:

Cosmin Vârlan

Care nu are nici un parametru si returneaza chiar obiectul

_instance (vedeti tipul returnat ?)

Page 31: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

31

Singleton - codding:

Cosmin Vârlan

Bine bine, dar instanta noastra nu a fost inca “instantiata” :D

[adica nu am facut: _instance = new (Single);]

Page 32: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

32

Singleton - codding:

Cosmin Vârlan

Facem new NUMAI daca ea nu a fost creata [adica daca are

valoarea null].

Page 33: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

33

Singleton - codding:

Cosmin Vârlan

Fie ca e abia creata, fie ca deja exista, returnam instanta.

Page 34: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

34

Singleton - codding:

Cosmin Vârlan

De ce e asta statica?!

Page 35: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

35

Singleton - codding:

Cosmin Vârlan

Pentru a putea apela sub forma:Single.getInstance().ceva

[ceva = metoda sau proprietate]

Page 36: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

36

Singleton - codding:

Cosmin Vârlan

Vom putea face “new” si din afara clasei ?!?!

Page 37: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

37

Singleton - codding:

Cosmin Vârlan

Practic da…Teoretic constructorul ar fi trebuit sa fie privat… (asa e in Java de ex).

In Flex este imposibil.

Page 38: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

38

Singleton - codding:

Cosmin Vârlan

Daca as fi putut face constructorul privat atunci nu as fi putut face

new dinafara clasei…

Page 39: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

39

Stiati ca…

• Singleton se invata la Facultatea de Informatica la un curs numit “Ingineria programarii” ?

• 80% din studenti nu stiu nimic despre singleton cand sunt intrebati in licenta ?

• [de fapt la fel se intampla si cu celelalte sabloane de proiectare care par prea simple sau prea inutile…]

Cosmin Vârlan

Page 40: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

40

Pare usor dar e cel mai “smart”:

Cosmin VârlanIntrebari…

Page 41: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

41

Exemplu de utilizare a clasei de mai sus:

Cosmin Vârlan

Page 42: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

42

Exemplu de utilizare a casei de mai sus:

Cosmin Vârlan

Da, ati ghicit, A si B sunt de fapt pointeri catre aceeasi

instanta (_instance din Single) si vor avea aceeasi

valoare a proprietatii adaugate dinamic “txt”

Page 43: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

43

• Exercitiu:Incercati sa faceti o clasa care sa incarce o

imagine si sa o afiseze.Clasa sa fie Singleton si pentru a incarca imagini

sa poata fi apelata astfel:

Imagine.getInstance().loadImage(“imagine.jpg”);

Si cand am facut apelul asta, imaginea sa apara deja in scena… ;)

Cosmin Vârlan

Page 44: Sabloane  de  proiectare : Singleton

http://www.infoiasi.ro/~flash/prezentari_cerc

44

END

Cosmin Vârlan