Avatar billede backupmand Nybegynder
29. december 2000 - 19:48 Der er 14 kommentarer og
1 løsning

problem med klasser


Hej,
Jeg sidder med en opgave-se nedenfor- men jeg kan simpelthen ikke
visualisere hvordan klasserne skal se ud.. er det banalt eller er
det mig eller ?
Please hjælp.
Jeg går ud fra at hver sin drik skal have sin klasse med attributter
som pris og maengde, da dette er forskelligt for hver drik. Men jeg
kan ikke se om der her er tale om noget arv ? eller lister ?
Det er muligt at der er nogen der har set denne opgave før, da den
er fra et eksamenssæt fra en eksamen på datamatiker.


_____________________________________________
Varm drikautomat.
Et firma ved navn HotnTasty har fremstillet en automat til servering af varme drikke.
Automaten skal kunne servere følgende drikke: kaffe, te, chokoloade og bouillon.

Alle drikkene er vandbaserede og har en individuel pris. Mængden af varm drik og dermed
af vand er ligeledes individuel. Udover vand indeholder drikkene et pulver, der giver
smagen.

Automaten skal kunne føre statistik over, hvor mange kopper af de forskellige drikke den
har serveret.

spg. a

Opstil den eller de klasser, med angivelse af data- og metodebehov, der skal til for at
modellere de ovenfor beskrevne varme drikke

spg. b

Hvor længe behøver et objekt af en varm kop varm drik at eksistere i systemet? Begrund
svaret.

spg. c

Realiser klassehierarkiet fra spg. a.
Du kan forudsætte, at du har en klasse Automat med flg. metoder til din rådighed, som
du blot kan kalde for at få automaten til at udføre en handling:
void tilsætPulver (String type)
    hvor type kan være \"Kaffe\", \"The\", \"Chokolade\" eller \"bouillon\".
void tilsætmaengde (int maengde)
    hvor mængde er i cl

Disse to metoder skal du ikke implementere, men hvis du tilføjere yderligere metoder
til Automat, skal de ekstra metoder implementeres.

Avatar billede pstric Nybegynder
29. december 2000 - 20:06 #1
Ja, prøv nu at læse opgaven ordentligt.

spg. a:
Firmaet HotnTasty ville måske være en oplagt klasse, hvis ikke det lige var fordi, den ligger udenfor opgaven.
Men Automat er da helt oplagt; det er jo sådan en størrelse der serverer de forskellige drikke.
Kaffe, Te m.m. er også helt oplagte - det står jo i opgaven!!!
Og at de alle sammen er varme drikke gør det jo ligeså oplagt, at du nok skal have en superklasse - vi kunne jo kalde den VarmDrik - som de varme drikke skal være subklasser til.
Avatar billede el_gnu Nybegynder
29. december 2000 - 20:12 #2
Jeg ville nok lave følgende klasser:

Drikkeautomat

Drik
  *Bouillon
  *Chokolade
  *The
  *Kaffe


En god måde man kan bruge som nybegynder er at skrive alle navneord i programbeskrivelsen på en liste. Denne liste indeholder så de klasser der skal laves. Dette er en grov måde, men god hvis man har svært ved at opfatte programmer objekt-opdelt.
Avatar billede pstric Nybegynder
29. december 2000 - 20:32 #3
Opstil et UML klassediagram, så du får et bedre overblik over klasserne. Se på http://www.rational.com/uml/resources/quick/uml_poster.jsp hvordan du laver et UML diagram, hvis du endnu ikke er klar over det.

Start med klassen Automat. Tegn derunder klassen VarmDrik, og forbind de to med en aggregering. I Automat enden af aggregeringen - den ende med diamanten - skriver du \"1\" og i VarmDrik enden skriver du \"0..*\". Disse kardinaliteter angiver, at en automat kan servere 0 til mange varme drikke, og at en varm drik kommer fra én automat.

Placer klasserne for de konkrete typer af varme drikke - altså Kaffe m.m. - på en række under VarmDrik og forbind de fire varme drikke med VarmDrik med generaliseringer.

Endelig skal du skrive VarmDrik med kursiv for at markere at det er en abstrakt klasse, og så er version 1 af dit klassediagram færdig.
Avatar billede nico26 Nybegynder
29. december 2000 - 20:47 #4
du kan lave en superklasse der f.eks. hedder Drik, og en subklasse af denne for hver enkelt drik. Hvis du så laver en klasse der har en metode til oprettelse af et object af hver subklasse, og som lægger objektet i en liste. Når du så skal lave statistik kan du løbe listen igennem og se om elementet er den ene eller anden subklasse, hvilket samtidig besvarer spg. b.
Avatar billede backupmand Nybegynder
30. december 2000 - 02:04 #5
Jeg vil lige forsøge noget af det i siger...
Avatar billede pstric Nybegynder
30. december 2000 - 02:08 #6
backupmand>> det vi siger er såmænd bare, at du skal læse opgaven ;-)
Avatar billede backupmand Nybegynder
30. december 2000 - 18:16 #7
Yes! Jeg har forsøgt at lave dette med lister,
men der opstår et problem på et givet tidspunkt.
Det er når jeg skal kalde metoden tilsaetMangde(),
der er ingen problemer når jeg skal tilsaetPulver() - dette er egentlig bare en tilfoejElement-
metode (push/enqueue) som opretter en ny instans
af den klasse, der svarer til den streng (type)
den får med som parameter. Programmet er iøvrigt
langt nu, da hver drik-klasse (arver fra en
superklasse) modellerer et element i en hægtet
liste.
Avatar billede nico26 Nybegynder
30. december 2000 - 19:34 #8
backupmand>> kan du ikke præcisere problemet
Avatar billede backupmand Nybegynder
31. december 2000 - 01:27 #9
jeg bruger de forskellige klasser (kaffe, the osv)
som \"noder\"/\"elementer\" der har en next-reference
i sig og en reference til sig selv.
Jeg bruger automat til tilSaetpulver metoderne,
public void tilsaetPulver (String type)
      {
      if (type.equalsIgnoreCase(\"Kaffe\"))
          Kaffe k = new Kaffe();
      }
men hvis jeg opretter et objekt til af samme
\"type\" under tilsaetMaengde er der jo ingen der ved om den maengde tilhører objektet kaffe..
Avatar billede nico26 Nybegynder
31. december 2000 - 01:59 #10
backupmand>> er du sikker på at det er i tilsaetPulver du skal oprette objekterne???
Avatar billede pstric Nybegynder
31. december 2000 - 12:56 #11
Hvis du nu f.eks. har lavet typen
public abstract class VarmDrik {
  public abstract void tilsætMængde();
  ...
}
og du så nedarver fra VarmDrik i de klasser der repræsenterer den enkelte type drik
public class Kaffe extends VarmDrik {
  public void tilsætMængde() {
    vandMængde = 20;
  }
  private int vandMængde;
  ...
}
så kan du udnytte polymorfien i dine klasser til at tilsætte den rigtige mængde vand til din kaffe. I Automat ændrer du tilsætPulver, så den instantierer et objekt af en af de konkrete typer og tildeler det til en variabel af den abstrakte superklasse
public class Automat {
  // Her har du en eller anden container, der indeholder de serverede varme drikke
  // det skal IKKE være et array som her; find selv på en bedre container
  private VarmDrik[] drikke;
  public Automat() {
    drikke = new VarmDrik[1000]; // Her ses tydeligt, hvorfor du skal finde en anden container
  }
  public void lavDrik(final String type) {
    VarmDrik drik = tilsætPulver(type);
    drik.tilsætMængde();
    drikke.add(drik); // eller noget tilsvarende, der passer til den container, du har valgt
  }
  private VarmDrik tilsætPulver(final String type) {
    if (type.equalsIgnoreCase(\"Kaffe\")) {
      VarmDrik resultat = new Kaffe();
    }
    ...
    return resultat;
  }
}

Nu er returværdien for metoden tilsætPulver ændret og metoden tilsætMængde ligger ikke længere i klassen Automat, men er flyttet ud til de varme drikke.
Du behøver ikke at have dårlig samvittighed over ikke at holde dig præcist til opgaveformuleringen hvis du finder svagheder i den (og dem har du jo fundet), men du skal huske i dit svar at gøre det klart hvorfor du ikke har holdt dig til det der står i spørgsmål c.
Avatar billede pstric Nybegynder
08. januar 2001 - 18:06 #12
Fik du noget ud af det?
Avatar billede backupmand Nybegynder
08. januar 2001 - 18:30 #13
Jeg har været så nervøs både før og efter min
eksamen, at jeg nu, efter eksamen overhovedt ikke
har kigget på noget java.... jeg forstår stadig
ikke denne opgave, men det skylder mit manglende
overblik generelt, jeg synes heller ikke det er
en god opgave, men det er jo en dårlig undskyldning. Sorry.
Avatar billede pstric Nybegynder
08. januar 2001 - 18:38 #14
Vil du arbejde videre med opgaven nu, hvor din eksamen er overstået? Ellers synes jeg at du skulle lukke spørgsmålet.

Du har vist nogle flere spørgsmål der ikke er lukkede.
Avatar billede backupmand Nybegynder
01. marts 2001 - 13:40 #15
Der fik du dine point, hvis det var det....

Næ, jeg arbejder ikke videre med denne opgave,
da jeg synes den er dum.

Det er da en god grund. Jeg kunne sikkert godt
løse den nu, men det er bare kedeligt at vende
tilbage til den...

Hvis det har din interesse roder jeg med avancerede datastrukturer i øjeblikket, så det er
ikke fordi jeg har gjort det nemmere for mig selv,
men man er jo nødt til at komme videre på en eller anden måde.
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
Kurser inden for grundlæggende programmering

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