12. januar 2003 - 18:06Der 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.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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 :)
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...
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...
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 :)
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.
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
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 :)
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!!
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...)
"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)
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....
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...
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...
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.
Jeg laver et nyt spørgsmål. Hvis i svare får i nogle flere, velfortjente, point
tak
Michael
Synes godt om
Ny brugerNybegynder
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.