sabloane de proiectare: singletonflash/prezentari_cerc/6/...incercatisafacetio clasa care sa incarce...
TRANSCRIPT
http://www.infoiasi.ro/~flash/prezentari_cerc
Sabloane de proiectare:Singleton
Cosmin Varlan
Cosmin Vârlan 1
VESTEA BUNA:http://www.infoiasi.ro/~flash/prezentari_cerc
VESTEA BUNA:
PE 22 VINE ADOBE DPE 22 VINE ADOBE :D
Cosmin Vârlan 2
Sabloane de proiectare (design )
http://www.infoiasi.ro/~flash/prezentari_cerc
patterns) • Ne usureaza viataNe usureaza viata….
• Ne ajuta sa organizam mai bine treaba
i l “ i bi ” OO• 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 3
Sabloane de proiectarehttp://www.infoiasi.ro/~flash/prezentari_cerc
Sabloane de proiectare
Sabloane… Sabloane… Sabloane…
Strategy Adapter Proxy
Decorator Facade Command
Factory Template MediatorFactory Template Mediator
Observer Builder Model‐View‐Controller
Chain of responsibility Iterator Recycle Bin
Singleton Composite The Circular
Fly Weight State Bridge
… si multe altele….
Cosmin Vârlan 4
Recomandare:http://www.infoiasi.ro/~flash/prezentari_cerc
Recomandare:
Da, o gasiti si petorente
Cosmin Vârlan 5
torente…
Sabloane de proiectarehttp://www.infoiasi.ro/~flash/prezentari_cerc
Sabloane de proiectare
Sabloane… Sabloane… Sabloane…
Strategy Adapter Proxy
Decorator Facade Command
Factory Template MediatorFactory Template Mediator
Observer Builder Model‐Viwev‐Controller
Chain of responsibility Iterator Recycle Bin
Singleton Composite The Circular
Fly Weight State Brydge
Despre asta vom vorbi azi…
Cosmin Vârlan 6
p
But first….. Ce e cu staticul ala ?!?!http://www.infoiasi.ro/~flash/prezentari_cerc
But first….. Ce e cu staticul ala ?!?!
public static var valoare:uint;public static var valoare:uint;
i bil “ l ” fi ibil d i dVariabila “valoare” va fi accesibila de oriunde, fara a fi nevoie de creare a unei instante din l di fclasa din cre face parte.
De exemplu daca este proprietate a clasei“Culoare”, putem sa o accesam astfel:
Culoare.valoare = 5;
Cosmin Vârlan 7
But first….. Ce e cu staticul ala ?!?!http://www.infoiasi.ro/~flash/prezentari_cerc
But first….. Ce e cu staticul ala ?!?!
Putem avea si functii statice:Putem avea si functii statice:public static function f():val{{……
}
Intrebare: avem voie sa folosim “this” in aceastaIntrebare: avem voie sa folosim this in aceastafunctie ?!
Cosmin Vârlan 8
But first….. Ce e cu staticul ala ?!?!http://www.infoiasi.ro/~flash/prezentari_cerc
But first….. Ce e cu staticul ala ?!?!
Putem avea si functii statice:Putem avea si functii statice:public static function f():uint{{……}
Raspuns: NU, deoarece nu exista o instanta atuncicand se face apelul; Apeleul este tot de forma:
Ceva:uint = Culoarea.f();
Cosmin Vârlan 9
But first….. Ce e cu staticul ala ?!?!http://www.infoiasi.ro/~flash/prezentari_cerc
But first….. Ce e cu staticul ala ?!?!
Putem avea si functii statice:Putem avea si functii statice:public static function f():uint{{……
}
Interbare: Putem sa accesam o proprietateInterbare: Putem sa accesam o proprietatepublica/privata a clasei Culoare ?
Cosmin Vârlan 10
But first….. Ce e cu staticul ala ?!?!http://www.infoiasi.ro/~flash/prezentari_cerc
But first….. Ce e cu staticul ala ?!?!
Putem avea si functii statice:public static function f():uint{……}Raspuns: NU ! Nu putem, deoarece o proprietateeste data numai unui obiect. Cum aici nu avemnici un obiect inseamna ca nu avem nici onici un obiect, inseamna ca nu avem nici o proprietate privata (sau publica) – e ca si cum atiscrie [null].proprietate
Cosmin Vârlan 11
But first….. Ce e cu staticul ala ?!?!http://www.infoiasi.ro/~flash/prezentari_cerc
But first….. Ce e cu staticul ala ?!?!
Putem avea si functii statice:ute a ea s u ct stat ce:public static function f():uint{{……}}Interbare: Dar putem apela alta functie(publica/privata) ?(p /p )
Raspuns: … tot NU (metodele sunt de asemeneaspecifice instantei nu clasei)
Cosmin Vârlan 12
But first….. Ce e cu staticul ala ?!?!http://www.infoiasi.ro/~flash/prezentari_cerc
But first….. Ce e cu staticul ala ?!?!
Putem avea si functii statice:Putem avea si functii statice:public static function f():uint{{……
}
Intrebare: TOTUSI mai putem accesa altceva dinIntrebare: TOTUSI, mai putem accesa altceva din clasa asta (cea din care face parte functiastatica) ?!statica) ?!
Cosmin Vârlan 13
But first….. Ce e cu staticul ala ?!?!http://www.infoiasi.ro/~flash/prezentari_cerc
But first….. Ce e cu staticul ala ?!?!
Putem avea si functii statice:Putem avea si functii statice:public static function f():uint{{……
}
Raspuns: da alte metode sau proprietatiRaspuns: da, alte metode sau proprietatistatice… [ele nu au nevoie de o instantapentru a fi apelate]pentru a fi apelate]
Cosmin Vârlan 14
But first….. Ce e cu staticul ala ?!?!http://www.infoiasi.ro/~flash/prezentari_cerc
But first….. Ce e cu staticul ala ?!?!
La ce e bun ?La ce e bun ?
Pai de multe ori nu aveti nevoie sa instantiatiun obiect pentru a face cevaun obiect pentru a face ceva.
De exemplu, nu aveti nevoie sa instantiati un bi di l M h fobiect din clasa Math pentru a face
Math.sin(Math.PI);
(sin este metoda statica din math, PI esteconstanta statica din Math)
Cosmin Vârlan 15
But first….. Ce e cu staticul ala ?!?!http://www.infoiasi.ro/~flash/prezentari_cerc
But first….. Ce e cu staticul ala ?!?!
La ce e bun ?Deci foloseste pentru a crea proprietati si metodeale clasei (un fel de metaproprietati).
Exercitiu:C t iti l C l i ib t tConstruiti clasa Culori care sa aiba constantestatice: Rosu, Verde, Albastru si o metoda de asemenea statica “combineColors” care vareturna culoarea obtinuta prin amestecarea RGB a culorilor primite ca parametri.
Cosmin Vârlan 16
http://www.infoiasi.ro/~flash/prezentari_cerc
• OK am scapat de “But first” sa vedem ce e cuOK, am scapat de But first , sa vedem ce e cu Singleton‐ul ala….
Cosmin Vârlan 17
Problema:http://www.infoiasi.ro/~flash/prezentari_cerc
Problema:
• Am facut un “moozic player” … sau ati facut (voiacut u oo c p aye … sau at acut ( ocu Alex)
• Obiectul de tip Sound desi este unul singur ilp greciclati mereu (incarcand de fiecare data altamelodie)…
• De multe ori nu este accesibil de oriunde, (Sound‐ul asta)Ati t i i i t ti d bi t t• Ati putea gresi si instantia doua obiecte sunetcare suprapuse ar transforma 2 melodii intr‐un balamucbalamuc…
Cosmin Vârlan 18
Problema:http://www.infoiasi.ro/~flash/prezentari_cerc
Problema:
• Un Sablon de proiectare care va usureaza viataUn Sablon de proiectare care va usureaza viataatunci cand trebuie sa implementati obiecte“Unice” este SingletonUnice este Singleton
• Daca un obiect este construit dupa acestsablon nu poate avea niciodata douasablon, nu poate avea niciodata douainstante…
P d i l d l• Pe cat pare de simplu, pe atat e de complex “inside”
Cosmin Vârlan 19
Singleton ‐ codding:http://www.infoiasi.ro/~flash/prezentari_cerc
Singleton codding:
• Codul cel mai basic ar fi urmatorul:Codul cel mai basic ar fi urmatorul:
Cosmin Vârlan 20
Singleton ‐ codding:http://www.infoiasi.ro/~flash/prezentari_cerc
Singleton codding:
Cosmin Vârlan 21
Singleton ‐ codding:http://www.infoiasi.ro/~flash/prezentari_cerc
Singleton codding:
Eu sunt un Singleton mic siSingleton… mic si
rau
Cosmin Vârlan 22
Singleton ‐ codding:http://www.infoiasi.ro/~flash/prezentari_cerc
Singleton codding:
Mereu este nevoiesa se tina ca
variabila privata o
Cosmin Vârlan 23
pvariabila de tipul….
Singleton ‐ codding:http://www.infoiasi.ro/~flash/prezentari_cerc
Singleton codding:
Hei, are acelasi tip ca si clasa…
Cosmin Vârlan 24
Singleton ‐ codding:http://www.infoiasi.ro/~flash/prezentari_cerc
Singleton codding:
I lIn plus, ce rost are sa fie privata si
t ti ?!?!Cosmin Vârlan 25
statica ?!?!
Singleton ‐ codding:http://www.infoiasi.ro/~flash/prezentari_cerc
Singleton codding:
D i iDoar static inseamna ca vreau saaccesez asa:
Si l i tCosmin Vârlan 26
Single._instance = …..
Singleton ‐ codding:http://www.infoiasi.ro/~flash/prezentari_cerc
Singleton codding:
Si l iSingle._instance = …..Dar nu pot face asta decat din
l ( t i t )Cosmin Vârlan 27
clasa (pentru ca e privata)
Singleton ‐ codding:http://www.infoiasi.ro/~flash/prezentari_cerc
Singleton codding:
Singura instanta ce va fi creatagpentru un singleton este aceasta…
Da, nu poate fi accesata din
Cosmin Vârlan 28
, pexterior (e privata)
Singleton ‐ codding:http://www.infoiasi.ro/~flash/prezentari_cerc
Singleton codding:
Pentru a o accesa, ii construim o metodata speciala: getInstance()
Cosmin Vârlan 29
p g ()
Singleton ‐ codding:http://www.infoiasi.ro/~flash/prezentari_cerc
Singleton codding:
C i i iCare nu are nici un parametru sireturneaza chiar obiectul
i t ( d ti ti l t t ?)Cosmin Vârlan 30
_instance (vedeti tipul returnat ?)
Singleton ‐ codding:http://www.infoiasi.ro/~flash/prezentari_cerc
Singleton codding:
Bine bine, dar instanta noastra nu ,a fost inca “instantiata” :D
[adica nu am facut:
Cosmin Vârlan 31
[_instance = new (Single);]
Singleton ‐ codding:http://www.infoiasi.ro/~flash/prezentari_cerc
Singleton codding:
Facem new NUMAI daca ea nu a fost creata [adica daca are
valoarea null].
Cosmin Vârlan 32
Singleton ‐ codding:http://www.infoiasi.ro/~flash/prezentari_cerc
Singleton codding:
Fie ca e abia creata fie ca dejaFie ca e abia creata, fie ca dejaexista, returnam instanta.
Cosmin Vârlan 33
Singleton ‐ codding:http://www.infoiasi.ro/~flash/prezentari_cerc
Singleton codding:De ce e asta statica?!
Cosmin Vârlan 34
Singleton ‐ codding:http://www.infoiasi.ro/~flash/prezentari_cerc
Singleton codding:Pentru a putea apela sub forma:
Single.getInstance().ceva[ceva = metoda sau proprietate]
Cosmin Vârlan 35
Singleton ‐ codding:http://www.infoiasi.ro/~flash/prezentari_cerc
Singleton codding:Vom putea face “new” si din afara
clasei ?!?!clasei ?!?!
Cosmin Vârlan 36
Singleton ‐ codding:http://www.infoiasi.ro/~flash/prezentari_cerc
Singleton codding:
Practic da…Teoretic constructorul ar fi trebuitsa fie privat… (asa e in Java de ex).
In Flex este imposibil.
Cosmin Vârlan 37
p
Singleton ‐ codding:http://www.infoiasi.ro/~flash/prezentari_cerc
Singleton codding:
Daca as fi putut face constructoruli t t i fi t t fprivat atunci nu as fi putut face
new dinafara clasei…
Cosmin Vârlan 38
Stiati ca…http://www.infoiasi.ro/~flash/prezentari_cerc
Stiati ca…
• Singleton se invata la Facultatea deSingleton se invata la Facultatea de Informatica la un curs numit “Ingineriaprogramarii” ?programarii ?
• 80% din studenti nu stiu nimic despresingleton cand sunt intrebati in licenta ?singleton cand sunt intrebati in licenta ?
• [de fapt la fel se intampla si cu celelaltebl d i i lsabloane de proiectare care par prea simple
sau prea inutile…]
Cosmin Vârlan 39
Pare usor dar e cel mai “smart”:http://www.infoiasi.ro/~flash/prezentari_cerc
Pare usor dar e cel mai smart :
Cosmin Vârlan 40
Intrebari…
Exemplu de utilizare a clasei de maihttp://www.infoiasi.ro/~flash/prezentari_cerc
sus:
Cosmin Vârlan 41
Exemplu de utilizare a casei de maihttp://www.infoiasi.ro/~flash/prezentari_cerc
sus:Da ati ghicit A si B sunt deDa, ati ghicit, A si B sunt de fapt pointeri catre aceeasiinstanta ( instance dininstanta (_instance din
Single) si vor avea aceeasivaloare a proprietatiivaloare a proprietatiiadaugate dinamic “txt”
Cosmin Vârlan 42
• Exercitiu:
http://www.infoiasi.ro/~flash/prezentari_cerc
Incercati sa faceti o clasa care sa incarce o imagine si sa o afisezeimagine si sa o afiseze.
Clasa sa fie Singleton si pentru a incarca imaginisa poata fi apelata astfel:sa poata fi apelata astfel:
Imagine.getInstance().loadImage(“imagine.jpg”);
Si cand am facut apelul asta imaginea sa aparaSi cand am facut apelul asta, imaginea sa aparadeja in scena… ;)
Cosmin Vârlan 43
http://www.infoiasi.ro/~flash/prezentari_cerc
ENDEND
Cosmin Vârlan 44