Date post: | 22-Jun-2015 |
Category: |
Technology |
Upload: | university-al-i-cuza-of-iasi-romania |
View: | 1,133 times |
Download: | 1 times |
Cercul de Rich Internet ApplicationsConstructor, getteri, setteri, toString,
Display List
Facultatea de InformaticăIași
http://www.info.uaic.ro/~flash 2
• Discutat despre variabile și funcţii• Despre clase• Despre proprietăţi și metode (ale obiectelor)• Văzut ce e ăla un constructor (da mai vedem și
azi)• Chinuit un căţel• Spart câteva baloane
Data trecută… am…
http://www.info.uaic.ro/~flash 3
• Continua puţin cu constructorul (ca să mă asigur că s-a înţeles)
• Discuta despre câteva funcţii speciale• Cum se formează ierarhia obiectelor din scenă
Tura asta vom…
http://www.info.uaic.ro/~flash 4
• Comănescu Ștefan• Ionuţ Striban
… pentru tutorialele video adăugate pe situl nostru: http://flash.info.uaic.ro
Mulţumesc…
http://www.info.uaic.ro/~flash 5
• În AS3 nu avem metoda main ... Totuși, din proprietăţile proiectului pot seta care clasă poate fi rulată.
Setarea clasei principale
http://www.info.uaic.ro/~flash 6
1. Click dreapta > proprietati
2
3
http://www.info.uaic.ro/~flash 7
4
http://www.info.uaic.ro/~flash 8
Constructor
Asta este clasa :D
http://www.info.uaic.ro/~flash 9
Constructor
Constructorul este executat primul…
http://www.info.uaic.ro/~flash 10
Constructor
Dacă aplicaţia este “default”, ar putea fi considerata ca fiind
punctul de plecare al aplicaţiei
http://www.info.uaic.ro/~flash 11
Constructor
Un fel de main din C / C++
http://www.info.uaic.ro/~flash 12
• Constructorul este metoda care se executa prima…
• Este executată NUMAI când este creat obiectul (şi nu ar trebui să o utilizaţi ulterior)
• Are mereu același nume ca și clasa (care are același nume ca fișierul în care este stocată)
• Atunci când clasa este “default”, constructorul este “running point” al aplicatiei
Constructor
http://www.info.uaic.ro/~flash 13
• Constructorul poate avea o serie de parametri dar niciodată nu returnează nimic.
• Atunci când clasa este cea principală (de la care începe rularea aplicaţiei, constructorul nu are nici un parametru).
Constructorul este MEREU metodă publică.
• De câţi constructori este nevoie pentru a crea un obiect ?
Constructor
http://www.info.uaic.ro/~flash 14
ÎNTREBĂRI PE TEMA CONSTRUCTORILOR ?
Constructori..
http://www.info.uaic.ro/~flash 15
• În programarea obiectuală modernă, nu există variabile publice.
• Așa cum zicea cineva data trecută, unui obiect, în mod normal, nu ar trebui să-i fie schimbate proprietăţile fără a fi notificat. [bine zis, Cătălin]
Getteri / Setteri
http://www.info.uaic.ro/~flash 16
• Să presupunem că avem o mașină… căreia dorim să-i schimbăm o proprietate (culoare).
• Pentru ca proprietatea să poată fi schimbată de alt obiect (de exemplu obiectul “vopsitor”) ar trebui să fie declarată publică (și de tip String: “roșu”, “alb”, “verde”).
• Dacă e publică oricine poate să o acceseze (și să o modifice). Am putea avea așadar:
masina.culoare = castravete;
Getteri / Setteri
Asta e o legumă !!!
http://www.info.uaic.ro/~flash 17
http://www.info.uaic.ro/~flash 18
• Scăpăm de buba dacă am utiliza o variabilă privată care să poată fi modificată doar de o metodă (publică) care ar putea testa dacă este vorba sau nu de o culoare validă.
• Pentru că nu e chiar frumos să scriem de fiecare dată ceva de genul:
masina.schimbaCuloarea(“verde”); …ci ne-ar place mai degrabă: masina.culoare = “verde”; … s-au inventat setterii și getterii
Getteri / Setteri
http://www.info.uaic.ro/~flash 19
• Cele două sunt funcţii speciale ce au numele proprietăţii pe care o substituie (în cazul nostru culoare). Din acest motiv, nu trebuie să existe o altă proprietate cu același nume (vom denumi proprietatea privată drept “_culoare”.
• Metoda setter are rolul de a seta culoarea;• Metoda getter are rolul de a returna culoarea.
Getteri / Setteri
http://www.info.uaic.ro/~flash 20
• Să zicem că variabila _prop este cea privată (cea care vrem să fie accesată dar prin set/get).
• Și să mai zicem că proprietatea asta este de tip “tipProp”. Atunci:
1. Setterul pentru _prop trebuie neapărat să primească ca parametru o valoare de acelasi tip ca și _prop (de tip tipProp) și să nu returneze nimic.
2. Getterul nu are parametru și returnează valoarea lui _prop (deci o valoare de tip tipProp)
Get / Set sunt MEREU de tip public !!!
Getteri / Setteri
http://www.info.uaic.ro/~flash 21
Exemplu: Getteri / Setteri
http://www.info.uaic.ro/~flash 22
Exemplu: Getteri / Setteri
Proprietatea privată – nu poate fi accesată din exterior
http://www.info.uaic.ro/~flash 23
Exemplu: Getteri / Setteri
Proprietatea privată
http://www.info.uaic.ro/~flash 24
Exemplu: Getteri / Setteri
setter
Accesibil ca și cum ar fi proprietatea culoare De tip String
http://www.info.uaic.ro/~flash 25
Exemplu: Getteri / Setteri
Acum în setter putem verifica validitatea culorii
Dacă e ok, o memorăm
http://www.info.uaic.ro/~flash 26
Exemplu: Getteri / Setteri
Pentru a prelua culoarea utilizăm getterul
Care returnează valoarea
http://www.info.uaic.ro/~flash 27
• Dacă “proprietatea” este apelată în “stânga” se apelează automat setterul:
masina.culoare = “alb”;
• Dacă “proprietatea” este apelată în “dreapta” se apelează automat getterul:
trace ( masina.culoare );
Getteri / Setteri
http://www.info.uaic.ro/~flash 28
• Atunci când clasa este utilizată într-o operaţie drept șir de caractere, reprezentarea acestuia ca String se realizează prin apelul (implicit) al metodei toString. Aceasta există în orice obiect fiind moștenită din …..
… să vedem cine știe ?!?!
toString()
http://www.info.uaic.ro/~flash 29
• Atunci când clasa este utilizată într-o operaţie drept șir de caractere, reprezentarea acestuia ca String se realizează prin apelul (implicit) al metodei toString. Aceasta există în orice obiect fiind moștenită din …..
Object
toString()
http://www.info.uaic.ro/~flash 30
• Dacă nu este suprascrisă, metoda toString() va afișa ceva de genul [object <tipObiect>], unde tipObiect este tipul obiectului ce a fost utilizat ca un șir de caractere.
• Atunci când este suprascrisă (nu necesită nepărat override.
• Metoda toString() trebuie NEAPARAT să fie publică, să returneze un String și NU ARE parametri de intrare.
toString()
http://www.info.uaic.ro/~flash 31
Exemplu toString()
http://www.info.uaic.ro/~flash 32
PAUZĂ ?
http://www.info.uaic.ro/~flash 33
Ierarhia de obiecte din scenă
http://www.info.uaic.ro/~flash 34
Obiecte grafice
• Obiectele grafice sunt de două tipuri: - scalare sau raster (fiecare pixel este
reprezentat în memorie) - vectoriale (numai anumite date importante
sunt memorate in memorie, imaginea fiind construită pe baza acestora: pt un cerc: coordonatele centrului și raza)
http://www.info.uaic.ro/~flash 35
Obiecte grafice
Raster vs. Vectorial a a
a
http://www.info.uaic.ro/~flash 36
Obiecte grafice
• E clar că pentru a reprezenta un obiect raster e nevoie de mai multă memorie / spaţiu de stocare.
• Atunci când sunt mărite, obiectele vectoriale arată la fel de bine (nu ca cele raster care devin mozaicuri).
• Timpul de afișare a unei imagini raster este mult mai mic… procesorul nu trebuie să gândească cum să construiască imaginea.
http://www.info.uaic.ro/~flash 37
Obiecte grafice
• Raster – bune pentru: poze (din lumea reală), aplicare de filtre de tip shadow, blur etc., afișarea rapidă a imaginilor
• Vectorial – bune la afișarea unor scheme, a literelor
http://www.info.uaic.ro/~flash 38
Obiecte grafice
• Obiectele pe care le vedem într-o aplicaţie Flash sunt organizat într-o ierarhie (arborescentă).
• Există o singură rădăcină (root).• root-ul este de obicei de tip Sprite (aplicaţia
principală, cea care extinde Sprite) și este adăugat automat scenei de către player-ul Flash în momentul lansării în execuţie.
http://www.info.uaic.ro/~flash 39
Obiecte grafice
http://www.info.uaic.ro/~flash 40
Obiecte grafice
http://www.info.uaic.ro/~flash 41
Afisate Neafisate
http://www.info.uaic.ro/~flash 42
addChild() – adaugă la ierarhie
http://www.info.uaic.ro/~flash 43
Afisate Neafisate
http://www.info.uaic.ro/~flash 44
Obiecte grafice
• După crearea în memorie (cu new), obiectul grafic trebuie să fie adăugat în ierarhia de obiecte din scenă.
• Acest lucru se realizează cu metoda addChild.• (addChild e din DisplayObjectContainer)
http://www.info.uaic.ro/~flash 45
Obiecte grafice
Pachetul ce conţine obiectele de tip grafic (sau care au legătură
cu grafica)
Deși publică, această clasă nu se poate instanţia, ea oferind un cadru de container pentru
subclasele sale
http://www.info.uaic.ro/~flash 46
Obiecte grafice
Moștenește toate porprietăţile și metodele din
Object
http://www.info.uaic.ro/~flash 47
Obiecte grafice
Sau din EventDispatcher prin intermediul căreia se pot
arunca evenimente
http://www.info.uaic.ro/~flash 48
Obiecte grafice
DisplayObject aduce o serie de proprietăţi cum ar fi
poziţia imaginii sau gradul de transparenţă
http://www.info.uaic.ro/~flash 49
Obiecte grafice În Clasa InteractiveObject sutn definite evenimentele la care containerul poate răspunde
(click, keypressed, etc)
http://www.info.uaic.ro/~flash 50
Obiecte grafice DisplayObjectContainer oferă
posibilitatea adăugării obiectelor grafice sau a altor
containere grafice în interiorul său
http://www.info.uaic.ro/~flash 51
Obiecte grafice
Acestea sunt câteva containere grafice….
http://www.info.uaic.ro/~flash 52
Obiecte grafice Cel mai important: Stage (containerul principal).
Următorul: Sprite (probabil cel mai utilizat)
http://www.info.uaic.ro/~flash 53
Obiecte grafice
• La începutul prezentării povesteam despre o clasă considerată principală (de la care se pornește execuţia aplicaţiei).
• Această clasă extindea Sprite – deci era și ea de tip Sprite – deci un container.
• Acest container este containerul principal, în el vom adăuga mereu obiecte – denumit și root.
http://www.info.uaic.ro/~flash 54
Obiecte grafice
• root-ul este adăgat automat scenei• Dacă un obiect grafic este adăugat ierarhiei de
obiecte grafice, el este vizibil, proprietatea root va face referinţă către containerul principal (root), proprietatea stage va face referire chiar la scena aplicaţiei.
• Un obiect care nu a fost adăugat ierarhiei are proprietăţile de mai sus null.
http://www.info.uaic.ro/~flash 55
Întrebări ?