440 likes | 703 Views
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 ….
E N D
http://www.infoiasi.ro/~flash/prezentari_cerc Sabloane de proiectare:Singleton CosminVarlan
PE 22 VINE ADOBE :D http://www.infoiasi.ro/~flash/prezentari_cerc VESTEA BUNA:
Ne usureazaviata…. Ne ajutasaorganizammaibinetreaba Putemsaintelegem “maibine” OOP Uneori pot reduce oridunl de complexitate al problemei…. … saufacdefinitiileobietelormaiusor de inteles… http://www.infoiasi.ro/~flash/prezentari_cerc Sabloane de proiectare (design patterns)
http://www.infoiasi.ro/~flash/prezentari_cerc Sabloane de proiectare • … simultealtele….
http://www.infoiasi.ro/~flash/prezentari_cerc Da, o gasitisipetorente… Recomandare:
http://www.infoiasi.ro/~flash/prezentari_cerc Sabloane de proiectare Despreastavomvorbiazi…
public static varvaloare:uint; Variabila “valoare” vafiaccesibila de oriunde, fara a finevoie de creare a uneiinstante din clasa din cre face parte. De exempludacaesteproprietate a clasei “Culoare”, putemsa o accesamastfel: Culoare.valoare = 5; http://www.infoiasi.ro/~flash/prezentari_cerc But first….. Ce e cu staticul ala ?!?!
Putemaveasifunctiistatice: public static function f():val { …… } Intrebare: avemvoiesafolosim “this” in aceastafunctie ?! http://www.infoiasi.ro/~flash/prezentari_cerc But first….. Ce e cu staticul ala ?!?!
Putemaveasifunctiistatice: public static function f():uint { …… } Raspuns: NU, deoarece nu exista o instantaatuncicand se face apelul; Apeleuleste tot de forma: Ceva:uint = Culoarea.f(); http://www.infoiasi.ro/~flash/prezentari_cerc But first….. Ce e cu staticul ala ?!?!
Putemaveasifunctiistatice: public static function f():uint { …… } Interbare: Putemsaaccesam o proprietatepublica/privata a claseiCuloare ? http://www.infoiasi.ro/~flash/prezentari_cerc But first….. Ce e cu staticul ala ?!?!
Putemaveasifunctiistatice: public static function f():uint { …… } Raspuns: NU ! Nu putem, deoarece o proprietateeste data numaiunuiobiect. Cum aici nu avemnici un obiect, inseamna ca nu avemnici o proprietateprivata (saupublica) – e ca si cum atiscrie[null].proprietate http://www.infoiasi.ro/~flash/prezentari_cerc But first….. Ce e cu staticul ala ?!?!
Putemaveasifunctiistatice: public static function f():uint { …… } Interbare: Dar putemapelaaltafunctie (publica/privata) ? Raspuns: … tot NU (metodelesunt de asemeneaspecificeinstantei nu clasei) http://www.infoiasi.ro/~flash/prezentari_cerc But first….. Ce e cu staticul ala ?!?!
Putemaveasifunctiistatice: public static function f():uint { …… } Intrebare: TOTUSI, maiputemaccesaaltceva din clasaasta (cea din care face parte functiastatica) ?! http://www.infoiasi.ro/~flash/prezentari_cerc But first….. Ce e cu staticul ala ?!?!
Putemaveasifunctiistatice: public static function f():uint { …… } Raspuns: da, altemetodesauproprietatistatice… [ele nu au nevoie de o instantapentru a fiapelate] http://www.infoiasi.ro/~flash/prezentari_cerc But first….. Ce e cu staticul ala ?!?!
La ce e bun ? Pai de multeori nu avetinevoiesainstantiati un obiectpentru a face ceva. De exemplu, nu avetinevoiesainstantiati un obiect din clasa Math pentru a face Math.sin(Math.PI); (sin estemetodastatica din math, PI esteconstantastatica din Math) http://www.infoiasi.ro/~flash/prezentari_cerc But first….. Ce e cu staticul ala ?!?!
La ce e bun ? Decifolosestepentru a creaproprietatisimetode ale clasei (un fel de metaproprietati). Exercitiu: ConstruiticlasaCulori care saaibaconstantestatice: Rosu, Verde, Albastrusi o metoda de asemeneastatica “combineColors” care vareturnaculoareaobtinutaprinamestecarea RGB a culorilorprimite ca parametri. http://www.infoiasi.ro/~flash/prezentari_cerc But first….. Ce e cu staticul ala ?!?!
OK, am scapat de “But first”, savedemce e cu Singleton-ul ala…. http://www.infoiasi.ro/~flash/prezentari_cerc
Am facut un “moozic player” … sauatifacut (voi cu Alex) Obiectul de tip Sound desiesteunulsingurilreciclatimereu (incarcand de fiecare data altamelodie)… De multeori nu esteaccesibil de oriunde, (Sound-ulasta) Atiputeagresisiinstantiadouaobiectesunet care suprapuseartransforma 2 melodiiintr-un balamuc… http://www.infoiasi.ro/~flash/prezentari_cerc Problema:
Un Sablon de proiectare care vausureazaviataatuncicandtrebuiesaimplementatiobiecte “Unice” este Singleton Daca un obiectesteconstruitdupaacestsablon, nu poateaveaniciodatadouainstante… Pe cat pare de simplu, peatat e de complex “inside” http://www.infoiasi.ro/~flash/prezentari_cerc Problema:
Codulcelmai basic arfiurmatorul: http://www.infoiasi.ro/~flash/prezentari_cerc Singleton - codding:
http://www.infoiasi.ro/~flash/prezentari_cerc Singleton - codding:
http://www.infoiasi.ro/~flash/prezentari_cerc Singleton - codding: Eusunt un Singleton… micsirau
http://www.infoiasi.ro/~flash/prezentari_cerc Singleton - codding: Mereuestenevoiesa se tina ca variabilaprivata o variabila de tipul….
http://www.infoiasi.ro/~flash/prezentari_cerc Singleton - codding: Hei, are acelasi tip ca siclasa…
http://www.infoiasi.ro/~flash/prezentari_cerc Singleton - codding: In plus, cerost are sa fie privatasistatica ?!?!
http://www.infoiasi.ro/~flash/prezentari_cerc Singleton - codding: Doar static inseamna ca vreausaaccesezasa: Single._instance = …..
http://www.infoiasi.ro/~flash/prezentari_cerc Singleton - codding: Single._instance = ….. Dar nu pot face astadecat din clasa (pentru ca e privata)
http://www.infoiasi.ro/~flash/prezentari_cerc Singleton - codding: Singurainstantacevaficreatapentru un singleton esteaceasta… Da, nu poatefiaccesata din exterior (e privata)
http://www.infoiasi.ro/~flash/prezentari_cerc Singleton - codding: Pentru a o accesa, ii construim o metodataspeciala: getInstance()
http://www.infoiasi.ro/~flash/prezentari_cerc Singleton - codding: Care nu are nici un parametrusireturneazachiarobiectul _instance (vedetitipulreturnat ?)
http://www.infoiasi.ro/~flash/prezentari_cerc Singleton - codding: Binebine, darinstantanoastra nu a fostinca “instantiata” :D [adica nu am facut: _instance = new (Single);]
http://www.infoiasi.ro/~flash/prezentari_cerc Singleton - codding: Facemnew NUMAI daca ea nu a fostcreata [adicadaca are valoarea null].
http://www.infoiasi.ro/~flash/prezentari_cerc Singleton - codding: Fie ca e abiacreata, fie ca dejaexista, returnaminstanta.
http://www.infoiasi.ro/~flash/prezentari_cerc Singleton - codding: De ce e astastatica?!
http://www.infoiasi.ro/~flash/prezentari_cerc Singleton - codding: Pentru a puteaapela sub forma: Single.getInstance().ceva [ceva = metodasauproprietate]
http://www.infoiasi.ro/~flash/prezentari_cerc Singleton - codding: Vomputea face “new” si din afaraclasei ?!?!
http://www.infoiasi.ro/~flash/prezentari_cerc Singleton - codding: Practicda… Teoreticconstructorularfitrebuitsa fie privat… (asa e in Java de ex). In Flex esteimposibil.
http://www.infoiasi.ro/~flash/prezentari_cerc Singleton - codding: Daca as fiputut face constructorulprivatatunci nu as fiputut face new dinafaraclasei…
Singleton se invata la Facultatea de Informatica la un curs numit “Ingineriaprogramarii” ? 80% din studenti nu stiunimicdespre singleton candsuntintrebati in licenta ? [de fapt la fel se intamplasi cu celelaltesabloane de proiectare care par prea simple sauprea inutile…] http://www.infoiasi.ro/~flash/prezentari_cerc Stiati ca…
http://www.infoiasi.ro/~flash/prezentari_cerc Pare usordar e celmai “smart”: Intrebari…
http://www.infoiasi.ro/~flash/prezentari_cerc Exemplu de utilizare a clasei de maisus:
http://www.infoiasi.ro/~flash/prezentari_cerc Exemplu de utilizare a casei de maisus: Da, atighicit, A si B sunt de faptpointericatreaceeasiinstanta (_instance din Single) sivoraveaaceeasivaloare a proprietatiiadaugatedinamic “txt”
Exercitiu: Incercatisafaceti o clasa care saincarce o imagine sisa o afiseze. Clasasa fie Singleton sipentru a incarcaimaginisapoatafiapelataastfel: Imagine.getInstance().loadImage(“imagine.jpg”); Si cand am facutapelulasta, imagineasaaparadeja in scena… ;) http://www.infoiasi.ro/~flash/prezentari_cerc
END http://www.infoiasi.ro/~flash/prezentari_cerc