Skapa egna klasser

Att skapa klasser för ett projekt kan verka skrämmande. Den svåraste delen med att skapa en klass är att utforma dess metoder, egenskaper och händelser.

Strategier för att utforma en klass

Avsnittet objektorienterad design är mycket komplext. Det finns en hel akademisk kurs och professionell träning i det här ämnet. Här föreslår vi i alla fall några alternativ som hjälper dig att komma igång.

  1. Fundera på vilken roll den här klassens instanser ska ha i programmet. Vanligtvis har objekt någon av dessa roller:

    • Värdeobjekt: De här objekten fungerar i huvudsak som databehållare. De har förmodligen flera egenskaper och färre metoder (och ibland inga metoder alls). De utgör vanligtvis kodrepresentationer av tydligt definierade objekt. Ett musikuppspelningsprogram kan till exempel innehålla klassen Song, som representerar en faktisk sång, och klassen Playlist, som representerar en begreppsmässig grupp med sånger.

    • Visningsobjekt: Dessa objekt visas på skärmen. Dessa kan vara användargränssnittselement, till exempel listrutor och statusavläsningar eller grafiska element, som djur i ett videospel.

    • Programstruktur: Dessa objekt har många olika stödjande roller i den logik eller bearbetning som utförs av program. Du kan till exempel skapa ett objekt som ska utföra vissa beräkningar i en biologisk simulering. Du kan skapa ett som sköter synkroniseringen av värden mellan en kontroll och en volymavläsning i ett musikprogram. Ett annat kan hantera reglerna i ett videospel. Eller så kan du skapa en klass för att läsa in en sparad bild i ett ritprogram.

  2. Bestäm dig för vilka funktioner som klassen behöver. De olika funktionerna blir ofta klassens metoder.

  3. Om klassen ska fungera som ett värdeobjekt fastställer du vilka data som instanserna ska innehålla. Dessa element kan få bli egenskaper.

  4. Eftersom din klass utformas speciellt för ditt projekt är det viktigt att du anger de funktioner som programmet behöver. Försök att besvara följande frågor:

    • Vilken storts information ska programmet spara, spåra och hantera? Genom att besvara den här frågan kan du lättare identifiera de värdeobjekt och egenskaper som behövs.

    • Vilka åtgärder ska programmet utföra? Vad händer till exempel när programmet först läses in, när någon klickar på en viss knapp eller när en filmuppspelning tar slut? Dessa saker kan få bli metoder. De kan också vara egenskaper om ”åtgärderna” medför att enskilda värden ändras.

    • Vilken information krävs för att utföra en viss åtgärd? Denna information blir metodens parametrar.

    • Efterhand som programmet utför sina funktioner: Vilka saker ändras i klassen som andra delar av programmet måste känna till? Dessa saker kan få bli händelser.

  5. Finns det ett befintligt objekt som liknar det objekt du behöver, men som kanske saknar någon extrafunktion som du vill lägga till? Fundera på om du ska skapa en underklass. (En underklass är en klass som bygger på funktionerna i en befintlig klass, i stället för att ha egna definierade funktioner.) Om du till exempel vill skapa en klass som är ett visuellt objekt på skärmen använder du beteendet hos ett befintligt visningsobjekt som utgångspunkt för klassen. I så fall blir visningsobjektet (t.ex. MovieClip eller Sprite) basklassen, och din klass utökar den klassen.

Skriva kod för en klass

När du väl har en design för klassen, eller åtminstone en uppfattning om vilken information som ska sparas i den och vilka åtgärder den ska utföra, är arbetet med att skriva klassen relativt enkelt.

Detta är vad som minst krävs när du vill skapa en egen ActionScript-klass:

  1. Öppna ett nytt textdokument i ActionScript-textredigeraren.

  2. Ange en class-programsats för att definiera namnet på klassen. Om du vill lägga till en class-programsats skriver du orden public class och sedan klassens namn. Lägg till inledande och avslutande klammerparenteser för att omge innehållet i klassen (metoden och egenskapsdefinitionerna). Till exempel:

    public class MyClass 
    { 
    }

    Ordet public anger att klassen kan nås från vilken kod som helst. Andra alternativ beskrivs i Namnutrymmesattribut för åtkomstkontroll.

  3. Skriv en package-programsats för att ange namnet på det paket som innehåller klassen. Syntaxen är ordet package, följt av det fullständiga paketnamnet, följt av inledande och avslutande klammerparentes runt class-programsatsblocket. Ändra till exempel koden i föregående steg till följande:

    package mypackage 
    { 
        public class MyClass 
        { 
        } 
    }
  4. Definiera varje egenskap i klassen med programsatsen var inuti klassbrödtexten. Syntaxen är densamma som när du deklarerar variabler (plus modifieraren public). Om du till exempel lägger till dessa rader mellan den inledande och avslutande klammerparentesen för klassdefinitionen skapas egenskaperna textProperty, numericProperty och dateProperty:

    public var textProperty:String = "some default value"; 
    public var numericProperty:Number = 17; 
    public var dateProperty:Date;
  5. Definiera varje metod i klassen med samma syntax som används för att definiera en funktion. Till exempel:

    • Om du vill skapa metoden myMethod() anger du:

      public function myMethod(param1:String, param2:Number):void 
      { 
          // do something with parameters 
      }
    • Om du vill skapa en konstruktor (den speciella metod som anropas som en del av processen med att skapa en instans av en klass) skapar du en metod vars namn ska matcha namnet på klassen:

      public function MyClass() 
      { 
          // do stuff to set initial values for properties 
          // and otherwise set up the object 
          textVariable = "Hello there!"; 
          dateVariable = new Date(2001, 5, 11); 
      }

      Om du inte inkluderar någon konstruktormetod i klassen skapas en tom konstruktor i klassen automatiskt vid kompileringen. (Alltså en konstruktor utan parametrar och utan programsatser.)

    Det finns några fler klasselement som du kan definiera. De här elementen är mer komplicerade.

    • En åtkomstmetod är en korsning mellan en metod och en egenskap. När du skriver koden för att definiera klassen skriver du åtkomstmetoden som en metod. Du kan utföra flera åtgärder, i stället för att bara läsa eller tilldela ett värde, vilket är det enda du kan göra när du definierar en egenskap. När du skapar en instans av klassen hanterar du åtkomstmetoden som en egenskap och använder namnet för att läsa eller tilldela värdet.

    • Händelser i ActionScript definieras inte med hjälp av en särskild syntax. I stället definierar du händelser i klassen med hjälp av funktionerna i klassen EventDispatcher.