Avatar billede Slettet bruger
14. oktober 2005 - 11:12 Der er 9 kommentarer

Klasser og underklasser

Hej eksperter.

Jeg er ved at afdække OOP's "hemmeligheder" - men for at gøre en lang historie kort, har jeg en klasse, kaldet "Spiller" (og som naturligvis hedder "Spiller.as". Heri har jeg defineret en lang række variabler: spilhastighed, konto m.fl. Dvs. basale variabler, der skal bruges forskellige steder i spillet.

class Spiller {
  private var spilhastighed;
  private var konto;
  private var antalbyer;

  function Spiller() {
    spilhastighed = -1;
    konto = 5000;
    antalbyer = 6;
  }
}

Det eneste, jeg har skrevet i min FLA-fil (der blot indeholder en række scener med grafiske baggrunde) er, i første frame på første scene: spiller = new Spiller();

Spillet vil på sigt blive en anelse komplekst - så derfor ønsker jeg nu at oprette 2 UNDER-KLASSE-filer ved navn By.as og Kunde.as. Selve spilstyringen lægger jeg som en eller flere metoder i Spiller - som f.eks.: Spiller.By.visby(hvilkenby);

Jeg kan finde talrige eksempler på en klassestruktur og tilhørende metoder - men ingen på, hvordan man har flere niveauer.

Derfor: Hvordan opretter jeg disse under-klasser? Og tror du, min tankegang er korrekt?
Avatar billede barklund Nybegynder
14. oktober 2005 - 11:15 #1
Hvordan kan By og Kunde være underklasser til Spiller? Jeg forstår ikke lige den logiske sammenhæng? Altså, både By og Kunde har de samme attributter som Spiller - og nogle flere?

Mener du ikke blot at klasserne (og instanser heraf) anvendes i Spiller som egenskaber af en art?

--
Morten Barklund
Avatar billede Slettet bruger
14. oktober 2005 - 12:04 #2
Spiller
          By                              Kunde

konstr  se by  køb by        konsrt  vis kunder  hverv kunde

(Håber, skemaet vises efter hensigten på Eksperten.dk)

Normalt, når man OOP'er - så er min forståelse, at man kun har ét diagram. Jeg ønsker at spilleren skal kunne købe en by. Herudover skal spilleren også kunne hverve en kunde. Blot til info, hhv. By og Kunde virker på forskellig måde - men eksempelvis skal både køb af en by - samt hvervning af kunde - reducere din konto (klassen Spiller) med et vist beløb.

Et konkret eksempel:
Spilleren skal kunne "eje" forskellige byer i DK samt have langt flere kunder i de pågældende byer - og kan komme ud i situationer, hvor kunderne (grafisk) skal vises i den købte by, man klikker på.
Her går jeg så ud fra, vores game-engine i Spiller skal kalde Spiller.By.visby(hvilkenby) samtidig med at den iterativt kalder de oprettede kunde-instances ved kald til Spiller.Kunde.viskunder

konst <- Konstruktør
visby <- Viser baggrunden
viskunder <- viser alle vore kunder i den pågældende by

Men er diagrammet rigtigt skruet sammen? Eller taler jeg sludder :-)  ?
Avatar billede Slettet bruger
14. oktober 2005 - 12:09 #3
...men iøvrigt, variablen "antalbyer" er måske også lidt malplaceret. Den bør vel ligge i klassen By som (statisk) variabel.
Avatar billede barklund Nybegynder
14. oktober 2005 - 12:33 #4
Hm, det lyder som en smule misforstået OOP. Hvis spilleren skal kunne have nogle byer, så vil man lave det som:

import By;
class Spiller {
  private var spilhastighed:Number;
  private var konto:Number;
  private var byer:Array;

  function Spiller() {
    spilhastighed = -1;
    konto = 5000;
    byer= new Array;
  }
  function købBy(b:By):Void {
    byer.push(b);
    konto -= 1000;
  }
}

Så kalder man enSpiller.købBy(enBy); og så vil byen blive tilføjet til listen over byer, som spilleren har og kontoen reduceret.

Det er selvfølgelig kun en lille del, men jeg kan ikke se, hvorfor du snakker om underklasser og tilsvarende. Det kunne man bruge, hvis man havde en generel klasse Spiller og så underklasserne Bank og Deltager, som var to forskellige spillertyper i samme spil - men som begge havde brug for de generelle attributter og metoder, som Spiller har.

--
Morten Barklund
Avatar billede Slettet bruger
14. oktober 2005 - 15:37 #5
Det begynder så småt at give mening...

Jeg vil blot nævne, jeg nu tager udgangspunkt i en tutorial på http://moock.org/lectures/introToOOP der for tiden gennemgås minutiøst.

Skal herudover til lidt privat OOP-undervisning i morgen, men vender frygteligt tilbage om et par dage med flere, "kloge" spørgsmål (mod point, naturligvis).
Avatar billede barklund Nybegynder
14. oktober 2005 - 15:44 #6
Ville du for eksempel være interesseret i en dansk bog om OOP i ActionScript - om en sådan blev udgivet? :)
Avatar billede Slettet bruger
14. oktober 2005 - 20:24 #7
Ja, JEG ville helt sikkert! Hvis du spørger, fordi du har tænkt dig at forfatte en på et tidspunkt, har jeg et par tips udover de obligatoriske OOP-ting...

- Beskrivelse, ikke kun af OOP som sådan, men også diagrammering og dokumentation - med rigeligt af illustrationer.
- Henvisning til et website, hvor projektfiler, diagrammer m.m. kan hentes, men også et lille forum, hvor læsere af netop DIN bog kan udveksle erfaringer.
- En indledende fase, der slår fast med syvtommersøm, hvorfor det er så vigtigt at strukturere sine programmer, suppleret af cases hvor det hhv. går galt - samt går godt, alt afhængig af sine forberedelser og projektets omfang.


Mvh. Anders Weile
www.vandret.dk
Avatar billede barklund Nybegynder
15. oktober 2005 - 10:05 #8
Jeg påtænker og sidder og bakser pt. med synopsis for en ny bog - der er jo allerede 1 fra min hånd: http://globe.dk/?action=detail&vare=FG227-7

Og hvad du nævner herover er absolut med i min synopsis. :)
Avatar billede barklund Nybegynder
25. oktober 2005 - 01:02 #9
Er du kommet videre med dette spørgsmål? :)
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