Avatar billede f5 Nybegynder
12. januar 2003 - 18:06 Der er 23 kommentarer og
2 løsninger

Termonologi i Flash

Jeg har et spørgsmål omkring Flash termonology. I objekt orienteret programering arbejder man med klasser og instancer af en klasse kaldes så objekter....

Hvor er klasserne i Flash? FilmKlip, date osv kaldes objekter i Flash og ikke klasser. Hvorfor laver man denne skildring. Arbejder Flash ikke med klasser eller  har jeg misforstået.

Håber der er nogen der kan hjælpe.

VH
Michael
Avatar billede mat Nybegynder
12. januar 2003 - 19:29 #1
Det her emne er jeg helt sikkert ikke den bedste til at svare på, men jeg kan da udgyde hvad jeg tror jeg ved :)

Actionscript har ikke "rigtige" klasser, det har prototyper, som gør det ud for klasser (det er jo et scriptsprog det her). Men jeg tænker på dem som klasser, og det er der heller ikke noget i vejen for.

Når du bruger new-constructoren instansierer du så en af disse klasser og står med et objekt (som du sikkert ved). Når du mener at, det som du ville betegne som klasser, kaldes objekter i flash kunne det være en fordi prototyper i realiteten er objekter. Men almen OOP-terminologi bruges af flashudviklere fordi de samme principper gør sig gældende, derfor er der ikke noget galt i at betegne flash´s indbyggede objekter som klasser (du instancierer dem jo stadig i flash). Og her kunne jeg så tilføje et eller andet om terminolgi på objektniveau kontra klasseniveau, men så siger jeg sikkert noget forkert. 

Du kan osse lave dine egne "klasser" i flash lige såvel som du kan manipulere med de indbyggede. Function objektet bruges til "hjemmelavede" klasser, som du så kan instanciere ligeså tovligt du vil. .prototype bruges til at tilskrive metoder til de eksisterende "klasser".


..håber det giver nogen mening (for andre end mig). Og korrektioner til mine selvindbildte forestillinger om terminologien i flash må naturligvis gerne af eller bekræftes. En OOP diskussion i flash på dansk ville være meget velset :)

mvh mat
Avatar billede barklund Nybegynder
13. januar 2003 - 09:51 #2
Kunne ikke have sagt det bedre selv...

se eventuelt den engelske ressource http://www.debreuil.com/docs/ch01_Intro.htm for en komplet gennemgang af OOP i Flash5...
Avatar billede f5 Nybegynder
13. januar 2003 - 12:51 #3
Tak for forklaring, den var god og bekrafter min, svage, intuition om hvad der foregår. Problemet for mig er nok at Flash jo ikke er  rigtigt OOP for der er ligsome kun en overordnet klasse (super) hvis jeg har forstået det rigigt, og det gør at man ikke helt kan overføre OOP termonolgien - ikke????? (har set på linket :-)) Kan i ikke også indsætte nogle svar, i skal jo have jeres point...
Avatar billede barklund Nybegynder
13. januar 2003 - 12:57 #4
Du kan sagtens lave en underklasse, så det er flere led. Øverste led er Object, under den er der for eksempel Array og Movieclip, og under disse kan du sagtens lave specielle klasser, der nedarver alle funktioner fra Array og tilføjer nogle nye eller ændrer nogle, som ikke normalt findes i Array... For eksempel er Vector-klasse eller lignende...
Avatar billede barklund Nybegynder
13. januar 2003 - 12:57 #5
Hopla...
Avatar billede mat Nybegynder
13. januar 2003 - 13:39 #6
vupti.. :)
Avatar billede mat Nybegynder
13. januar 2003 - 13:45 #7
Barklund forresten, når man bruger prototype til at tilføje funktionalitet til en given klasse, forurenes denne jo, hvis jeg nu vil lave en subklasse, og nedarve funktionaliteten, istedet for at forurene superklassen, opsættes arv-forholdet såvidt jeg er informeret med __proto__, kan du evt give et konkret eksempel på dette - Jeg har ikke selv forsøgt mig med dette (og jeg har ikke flash her, og et eksempel kunne være fedt :)

mvh mat
Avatar billede f5 Nybegynder
13. januar 2003 - 14:04 #8
Mat > for også at være lidt konstruktiv i debatten her ;-), har jeg haft en diskusion kørende her inde om lige præcis dit spørgsmål. Det endte med at jeg skrev en mail til manden hamselv, Colin Moock, som skrev tilbage. Mailen er posted på http://www.eksperten.dk/spm/133585

Jeg spørger egentlig fordi jeg underviser i Flash. Jeg har ikke noget problem med selv at forstå, eller hvert faldet gøre, det, og har da også kastet mig ud i prototype swiching før. Problemet er bare at jeg ikke er programør og er lidt bange for at jeg forklare det forkert. Her er min paragraf om objekter og instances - er den helt gal?


ActionScripting er opbygget som et Objekt-Orienteret scripting sprog hvor information er organiseret i objekter som du selv skaber. Det smarte er så at disse objekter kan genbruges, og kaldes instances, og disse instances kan så behandles hver i sær individuelt. Nogle af disse klasser er specielle i Flash fordi de er grafiske repræsentationer på scenen og du kender faktisk allerede den vigitgste: FilmKlipet. Et FilmKlip er et objekt og du kan bruge flere instancer af samme objekt ved at trække dem fra biblioteket og ud på scene.
Avatar billede f5 Nybegynder
13. januar 2003 - 14:06 #9
Rettelse > hvor der står klasser i min tekst skal der stå objekter
Avatar billede barklund Nybegynder
13. januar 2003 - 14:41 #10
>> f5

Tjaa... Det er ikke helt galt...

>> mat

Triangle = function(w,h) {
    this.w = w;
    this.h = h;
}
Triangle.prototype.getArea = function() {
    return this.w*this.h/2;
}
ASSetPropFlags(Triangle.prototype,null,7);

RightTriangle = function(w,h) {
    this.w = w;
    this.h = h;
}
RightTriangle.prototype.__proto__ = Triangle.prototype;
RightTriangle.prototype.getHypo = function() {
    return Math.sqrt(this.w*this.w+this.h*this.h);
}
ASSetPropFlags(RightTriangle.prototype,null,7);


tri = new Triangle(3,4);
trace(tri.getArea()); // 6


rtri = new RightTriangle(3,4);
trace(rtri.getArea()); // 6
trace(rtri.getHypo()); // 5

De indbyggede objekter kan du ikke extente på samme måder, da de udover at ændre nogle interne properties også laver andre ændringer... Derfor kan man ikke sådan uden videre extente Array til en Vector og så tilføje metoder med ovenstående model - det er først muligt i MX
Avatar billede mat Nybegynder
13. januar 2003 - 15:41 #11
f5 > Nu ved jeg ikke hvor meget du har skrevet om prototypes før dette afsnit men det kan måske skabe lidt forvirring at du refererer til instancer af objekter (selvom dette, på et plan, er korrekt nok). Hvorfor ikke holde terminologien helt objektorienteret og kalde dem klasser (det gør de fleste alligevel - og det er med til at skabe et sprog de fleste kan relatere til).

Med udgangspunkt i barklunds udemærkede eksempel (tak for det btw :) er "klassen" Triangle skrevet med stort selvom det i realiteten er et function objekt (eller er det? men det er ihvertfald ikke en "rigtig" klasse), og vi kalder det osse en klasse.

..men barklund har jo sagt god for den, og så er det jo nok ikke helt ved siden af :)

barklund > takker mange gange, det ser faktisk helt logisk ud der :)

(og jeg er forresten slet heller ikke programmør, jeg er studerende :)

mvh mat
Avatar billede f5 Nybegynder
13. januar 2003 - 15:58 #12
Mat> grunden til at jeg skriver det på den måde er at de slet ikke kender til sådan noget advanceret scripting, de kan lige nogel basale Actions og skal til at lære dotsyntaks. Forklareing går så lidt videre og taler lidt om metode kald - det er sådan mest for at give dem det store billed inden de skal igang.

Men det er præcis den del med Instances af objekter som jeg er lidt bange for. Det skal nok give god mening i deres øre, men jeg vil jo helst ikke fortælle dem noget forkert. Jeg smider jeg 15 point hver. Hvis i nu begge syndes den er fin, så er den vel. Hvis i har nogle kommentare vil jeg stadig meget gerne høre dem men mange tak!!

Jeg er forresten også selv studerende :)

/Michael
Avatar billede barklund Nybegynder
13. januar 2003 - 16:52 #13
Jeg er da også studerende... DTU informatik-civil... :o)

Og tark for point...
Avatar billede f5 Nybegynder
13. januar 2003 - 17:22 #14
Barklund> Du syndes altså ikke det der med instances af et objekt er helt hen i vejret???
Avatar billede barklund Nybegynder
13. januar 2003 - 17:33 #15
Ethvert objekt er en instans af præcis en klasse.

Alle klasser er organiseret i en hierarkisk struktur, hvor det øverste element hedder Object.

Alle de foruddefinerede klasser kan ikke kopieres, da de i forvejen har en speciel sideeffekt, som ikke kan klaves uden dette objekt... (Movieclip relaterer automatisk til et movieclip osv...)
Avatar billede mat Nybegynder
13. januar 2003 - 23:20 #16
f5 > En anden lille korrektion. Når du skriver:

"Flash jo ikke er  rigtigt OOP for der er ligsome kun en overordnet klasse (super) hvis jeg har forstået det rigigt, og det gør at man ikke helt kan overføre OOP termonolgien"

- så passer det ikke, i f.eks java (som i allerhøjeste grad er objektorienteret) er der osse een overordnet klasse, og den hedder, tadaa: Object, og alle klasser er direkte eller indirekte subklasser af denne, præcis som vi beskriver det i flash hvor, som barklund påpeger, Object osse er i toppen af hierakiet. Så jo, man kan godt overføre, i bred udstrækning, OOP terminologien til flash :)

(og denne hierakistruktur gør sig sikkert gældende i alle objektorienterede sprog, uden at jeg ved det med sikkerhed, jeg er java-rookie)

mvh mat
Avatar billede mat Nybegynder
13. januar 2003 - 23:23 #17
..og nu ligger der selvfølgelig en hvis dualisme i det citat, jeg har taget fra din kommentar, så hvis jeg har misforstået dig undskylder jeg :)
Avatar billede f5 Nybegynder
14. januar 2003 - 11:02 #18
Mit problem er stadig movieclips (som jo er et objekt og ikke en klasse i ren Flash forstand). Når jeg laver et MC, laver jeg vel et nyt object og kan så bruge instances af dette object. Er det ikke rigitigt?

Mat> problemet er jo præcis denne dualitet. For der er jo ikke rigitg klasser i Flash....

MVH
Michael
Avatar billede barklund Nybegynder
14. januar 2003 - 11:34 #19
NEJ!

Når du laver et movieclip, javer du et objekt, der er en instans af movieclip-klassen!!! Som jeg skrev tidligere: "Ethvert objekt er en instans af præcis en klasse." Det er værd at have i baghovedet hele tiden...
Avatar billede barklund Nybegynder
14. januar 2003 - 11:34 #20
Du kan IKKE lave instanser af et objekt - kun af en klasse!
Avatar billede barklund Nybegynder
14. januar 2003 - 11:36 #21
...med mindre du mener library symbolet som "klasse" og de eventuelle instanser af dette som "objekter"
Avatar billede f5 Nybegynder
14. januar 2003 - 11:56 #22
Jeg tænkte nok jeg ville for at høre for det....

Men Barklund, som dit sidste kommentat viser, er det lidt forvirrende.

Når jeg laver et MovieClip, laver jeg et object som er et instance af MovieClip klassen - got it!

Når jeg så trækker et "instance" af mit MovieClip fra biblioteket ud på scenen, hvad er det så???

PS - jeg vil geren sætte nogle flere point af til spørgsmålet, jeg har bare lidt svært ved at få det helt på plads...
Avatar billede barklund Nybegynder
14. januar 2003 - 12:04 #23
Når du i dit library laver et movieclip, så har det rent programmeringsmæssigt INTET med klasser eller objekter at gøre!!! Du har stadigvæk ikke lavet et programmerings-objekt... Når du trækker en "instance" af dit symbol ind på scenen, så laver du et objekt, der er en instance af movieclip-klassen, som er en "kopi" er den "movieclip-specifikation" som symbolet udgør...

Måske bør du holde betegnelsen symbol for ethvert movieclips i library, og movieclip-objekterne, dannet af dette symbol, er blot "kopier" af symbolet tilføjet movieclip-klasse-prototypen...
Avatar billede barklund Nybegynder
14. januar 2003 - 12:07 #24
Altså i Library er der symboler.
På scenen er der objekter.
Objekterne er kopier af et bestemt symbol samtidig med at de er instanser af movieclip-klassen.
Avatar billede f5 Nybegynder
14. januar 2003 - 12:39 #25
Super, der faldt den på plads.

Jeg laver et nyt spørgsmål. Hvis i svare får i nogle flere, velfortjente, point

tak

Michael
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester