View
106
Download
1
Category
Preview:
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
1
Sabloane de proiectare:Singleton
Cosmin Varlan
Cosmin Vârlan
http://www.infoiasi.ro/~flash/prezentari_cerc
http://www.infoiasi.ro/~flash/prezentari_cerc
2
VESTEA BUNA:
PE 22 VINE ADOBE :D
Cosmin Vârlan
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
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….
http://www.infoiasi.ro/~flash/prezentari_cerc
5
Recomandare:
Cosmin Vârlan
Da, o gasiti si pe torente…
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…
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
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
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
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
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
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
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
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
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
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
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
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
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
http://www.infoiasi.ro/~flash/prezentari_cerc
20
Singleton - codding:
• Codul cel mai basic ar fi urmatorul:
Cosmin Vârlan
http://www.infoiasi.ro/~flash/prezentari_cerc
21
Singleton - codding:
Cosmin Vârlan
http://www.infoiasi.ro/~flash/prezentari_cerc
22
Singleton - codding:
Cosmin Vârlan
Eu sunt un Singleton… mic si
rau
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….
http://www.infoiasi.ro/~flash/prezentari_cerc
24
Singleton - codding:
Cosmin Vârlan
Hei, are acelasi tip ca si clasa…
http://www.infoiasi.ro/~flash/prezentari_cerc
25
Singleton - codding:
Cosmin Vârlan
In plus, ce rost are sa fie privata si
statica ?!?!
http://www.infoiasi.ro/~flash/prezentari_cerc
26
Singleton - codding:
Cosmin Vârlan
Doar static inseamna ca vreau sa accesez asa:
Single._instance = …..
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)
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)
http://www.infoiasi.ro/~flash/prezentari_cerc
29
Singleton - codding:
Cosmin Vârlan
Pentru a o accesa, ii construim o metodata speciala: getInstance()
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 ?)
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);]
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].
http://www.infoiasi.ro/~flash/prezentari_cerc
33
Singleton - codding:
Cosmin Vârlan
Fie ca e abia creata, fie ca deja exista, returnam instanta.
http://www.infoiasi.ro/~flash/prezentari_cerc
34
Singleton - codding:
Cosmin Vârlan
De ce e asta statica?!
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]
http://www.infoiasi.ro/~flash/prezentari_cerc
36
Singleton - codding:
Cosmin Vârlan
Vom putea face “new” si din afara clasei ?!?!
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.
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…
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
http://www.infoiasi.ro/~flash/prezentari_cerc
40
Pare usor dar e cel mai “smart”:
Cosmin VârlanIntrebari…
http://www.infoiasi.ro/~flash/prezentari_cerc
41
Exemplu de utilizare a clasei de mai sus:
Cosmin Vârlan
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”
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
http://www.infoiasi.ro/~flash/prezentari_cerc
44
END
Cosmin Vârlan
Recommended