Cercul De Rich Internet Applications Constructor, Getter,Setter, Display List

Post on 22-Jun-2015

1,133 views 1 download

Tags:

transcript

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 ?