23. august 2006 - 12:03Der er
9 kommentarer og 2 løsninger
Introfuktion til objektorienteret programmering
Hej eksperter!
Jeg er begyndt at arbejde lidt med objektorienteret programmering... Men kan jeg ikke få jer til at forklare mig, hvad der helt præcist er så smart ved denne type programmering? Hvad kan man desuden med et brugerdefineret objekt? Fungerer det ligesom som en instans af en brugerdefineret klasse?
Kan jeg f.eks. skrive:
Kat:Object = new Object; var Kat.alder:Number = 38563894569834593485; // Ja, skidt med realismen trace(Kat.alder);
Ligesom med klasser; se eks.:
// Kat.as class Kat { public var alder:Number; }
// flashFil.fla enKat:Kat = new Kat(); enKat.alder = 65569835698345693565665438643564985646785676; // MEGET urealistisk trace(enKat.alder);
Der er vel flere bud på hvorfor OOP er "smart". Det beskrives ofte som "den måde vi i forvejen beskriver verden på", altså vi betragter alt som objekter. Personligt synes jeg det er en måde at få struktureret et komplekst problem i overskuelige delkomponenter. Og en logisk opdeling af funktionalitet.
Du kan alt med brugerdefinerede objekter. Og ja til dit eksempel, det kan du godt.
Der er mange grunde til, at OOP er smart. Ikke kun, at man får struktureret sin kode logisk, men også fordi kernen i OOP er, at man bygger det op i selvstændige enheder, som også vil kunne fungere i andre sammenhænge. Ligeledes bygger man sine klasser op efter anerkendte mønstre, som man selv har god erfaring med og derfor bedre forstår.
Fordelen ved at bruge klassen frem for objektet (i dit eksempel herover) er blandt andet, at hvis nu jeg skriver:
enKat.alder = "tolv";
Så kommer flash med en fejl og siger, at alderen ikke kan være en streng - det skal være et tal. Det ville ikke ske, hvis man brugte et almindeligt objekt, hvor man jo kan skrive hvad som helst. Tilsvarende vil flash også rapportere om fejl, hvis man fik skrevet forkert i egenskabens navn:
enKat.aller = 42;
Dette koncept kaldes fasttypning og typevalidering og er én af fordelene ved objektorienteret programmering og ActionScript 2. Det er én af de mere lavpraktiske, men absolut en vigtig pointe alligevel :)
-- Morten Barklund
Synes godt om
Slettet bruger
24. august 2006 - 08:43#3
Så du anbefaler, at jeg opretter en ny klasse, bare for at kunne lave en enkel instans? Kunne man så ikke bare skrive enKat.alder:Number = 12 // Obs.: ":Number" ?
Og hvis du kun har det ene script og ingen andre scripts overhovedet: nej, lad være med at lave en klasse. Men hvis du har mange scripts, flere hundrede eller tusind linjer: lav klasser :)
-- Morten Barklund
Synes godt om
Slettet bruger
24. august 2006 - 10:31#5
Hmm ok. Og hvis jeg kun har et par linier, kan jeg jo bare lave en enkelt funktion og undlade OOP i det tilfælde. Bare smid et svar begge to!
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.