sabloane de proiectare: singletonflash/prezentari_cerc/6/...incercatisafacetio clasa care sa incarce...

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

Upload: others

Post on 30-Dec-2019

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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

Sabloane de proiectare:Singleton

Cosmin Varlan

Cosmin Vârlan 1

Page 2: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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

VESTEA BUNA:

PE 22 VINE ADOBE DPE 22 VINE ADOBE :D

Cosmin Vârlan 2

Page 3: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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

Page 4: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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

Page 5: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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

Recomandare:

Da, o gasiti si petorente

Cosmin Vârlan 5

torente…

Page 6: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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

Page 7: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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

Page 8: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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

Page 9: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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

Page 10: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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

Page 11: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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

Page 12: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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

Page 13: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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

Page 14: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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

Page 15: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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

Page 16: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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

Page 17: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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

Page 18: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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

Page 19: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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

Page 20: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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

Page 21: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

Singleton ‐ codding:http://www.infoiasi.ro/~flash/prezentari_cerc

Singleton  codding:

Cosmin Vârlan 21

Page 22: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

Singleton ‐ codding:http://www.infoiasi.ro/~flash/prezentari_cerc

Singleton  codding:

Eu sunt un Singleton mic siSingleton… mic si

rau

Cosmin Vârlan 22

Page 23: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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….

Page 24: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

Singleton ‐ codding:http://www.infoiasi.ro/~flash/prezentari_cerc

Singleton  codding:

Hei, are acelasi tip ca si clasa…

Cosmin Vârlan 24

Page 25: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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 ?!?!

Page 26: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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 = …..

Page 27: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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)

Page 28: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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)

Page 29: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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 ()

Page 30: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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 ?)

Page 31: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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);]

Page 32: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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

Page 33: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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

Page 34: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

Singleton ‐ codding:http://www.infoiasi.ro/~flash/prezentari_cerc

Singleton  codding:De ce e asta statica?!

Cosmin Vârlan 34

Page 35: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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

Page 36: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

Singleton ‐ codding:http://www.infoiasi.ro/~flash/prezentari_cerc

Singleton  codding:Vom putea face “new” si din afara

clasei ?!?!clasei ?!?!

Cosmin Vârlan 36

Page 37: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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

Page 38: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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

Page 39: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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

Page 40: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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…

Page 41: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

Exemplu de utilizare a clasei de maihttp://www.infoiasi.ro/~flash/prezentari_cerc

sus:

Cosmin Vârlan 41

Page 42: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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

Page 43: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

• 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

Page 44: Sabloane de proiectare: Singletonflash/prezentari_cerc/6/...Incercatisafacetio clasa care sa incarce o imagine si sa o afiseze. Clasa sa fie Singleton si pentru a incarca imagini sa

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

ENDEND

Cosmin Vârlan 44