Avatar billede doktoren Nybegynder
06. juni 2003 - 21:48 Der er 17 kommentarer og
1 løsning

problemer med klasser i et program

Hej!

Jeg er igang med at lave en opgave i java, men har lidt problemer med den...Jeg har lavet en basis klasse som hedder "brev" og fra den har jeg så lavet nogle afledte klasser som hedder "standard", "stor" og "maxi". I disse tre klasser har jeg så lavet nogle javakoder, f.eks. i "maxi" ser mine koder ind til videre således ud:

/**
* Write a description of class MAXI here.
*
* @author Anders
* @version
*/
public class MAXI /* extends BREV */ {
    // instance variables - replace the example below with your own
    private double længde;
    private double bredde;
    private double tykkelse;
    private double vægt;
    private String destination;

    /**
    * Constructor for objects of class MAXI
    */
    public MAXI(double v, String d) {
        vægt = v;
        destination = d;
    }

    /**
    * An example of a method - replace this comment with your own
    *
    * @param  y  a sample parameter for a method
    * @return    the sum of x and y
    */
    public double getVægt() {
        return vægt;
    }
    public void setVægt(double v) {
        vægt = v;
    }
    public String getDestination() {
        return destination;
    }
    public void setDestination(String d) {
        destination = d;
    }
    public String toString() {
        double porto = 0; // <-----
        if (vægt <= 50)
            if (destination.equals("Danmark")) {
                porto = 7.00;
            }

        if (vægt <= 50)
            if (destination.equals("Europa")) {
                porto = 14.00;
            }

        if (vægt <= 50)
            if (destination.equals("Øvrigeudland")) {
                porto = 19.00;
            }
              if (vægt > 50 <= 100)
            if (destination.equals("Danmark")) {
                porto = 9.00;
            }

        if (vægt > 50 <= 100)
            if (destination.equals("Europa")) {
                porto = 19.00;
            }

        if (vægt > 50 <= 100)
            if (destination.equals("Øvrigeudland")) {
                porto = 27.00;
            }
                  if (vægt > 100 <= 250)
            if (destination.equals("Danmark")) {
                porto = 15.00;
            }

        if (vægt > 100 <= 250)
            if (destination.equals("Europa")) {
                porto = 26.00;
            }

        if (vægt > 100 <= 250)
            if (destination.equals("Øvrigeudland")) {
                porto = 41.00;
            }
                      if (vægt > 250 <= 500)
            if (destination.equals("Danmark")) {
                porto = 24.00;
            }

        if (vægt > 250 <= 500)
            if (destination.equals("Europa")) {
                porto = 41.00;
            }

        if (vægt > 250 <= 500)
            if (destination.equals("Øvrigeudland")) {
                porto = 61.00;
            }
        if (vægt > 500 <= 1000)
            if (destination.equals("Danmark")) {
                porto = 32.00;
            }

        if (vægt > 500 <= 1000)
            if (destination.equals("Europa")) {
                porto = 65.00;
            }

        if (vægt > 500 <= 1000)
            if (destination.equals("Øvrigeudland")) {
                porto = 105.00;
            }
              if (vægt > 1000 <= 2000)
            if (destination.equals("Danmark")) {
                porto = 40.00;
            }

        if (vægt > 1000 <= 2000)
            if (destination.equals("Europa")) {
                porto = 100.00;
            }

        if (vægt > 1000 <= 2000)
            if (destination.equals("Øvrigeudland")) {
                porto = 175.00;
            }
        return " Vægt: " + vægt + " Porto: " + porto;

    }
}

Men det jeg så er i tvivl om er, hvad der egentligt skal stå i klassen "brev" eller om den overhovedet er nødvendig at have med....
Avatar billede arne_v Ekspert
06. juni 2003 - 21:53 #1
Nu er "extends BREV" jo udkommenteret så den er slet ikke med.

Ideen med BREV som basis klasse og STANDARD, STOR og MAXI som
afledte klasser er at du kan samle den funktionalitet som logisk
set er fælles for alle breve i klassen BREV (og undgå duplikeret funktionalitet).
Avatar billede arne_v Ekspert
06. juni 2003 - 21:55 #2
getVægt/setVægt/getDetsination/setDestination må ihvertfald være fælles for alle
breve og derfor kunne flyttes til BREV (sammen med variablene vægt og desitination).
Avatar billede arne_v Ekspert
06. juni 2003 - 21:56 #3
Noget som slet ikke relaterer sig til klasse hiraki logikken: du bruger
ikke længde, bredde og tykkelse.
Avatar billede arne_v Ekspert
06. juni 2003 - 21:57 #4
if (vægt > 50 <= 100)

er ikke legal Java syntax - du mener:

if ((vægt > 50) && (vægt <= 100))
Avatar billede arne_v Ekspert
06. juni 2003 - 21:59 #5
Så ville jeg nok overveje at flytte toString op i brev og kalde
en abstrakt metode calcPorto som du så implementerer i de 3
afledte klasser.

[men hvis du er ny i Java kan det måske godt være lidt avanceret]
Avatar billede doktoren Nybegynder
06. juni 2003 - 21:59 #6
ok -men som jeg har lavet det nu behøver jeg vel egentligt ikke at have en klasse der hedder brev?
Avatar billede jakoba Nybegynder
06. juni 2003 - 21:59 #7
fx vil alle dine breve have en vægt og en destination, så de variable kunne du definere i klassen brev (sammen med metoderne til at håndtere dem.

Din store  toString  metode nederst ser også ud til at gælde for alle størrelser breve, så mon ikke den kan defineres i klassen Brev
Avatar billede doktoren Nybegynder
06. juni 2003 - 22:00 #8
men jeg er meget ny i java, så jeg må hellere gøre det så enkelt som muligt...
ved godt jeg ikke bruger længde, bredde og tykkelse, men det kommer. Jeg er bare ikke nået til det endnu
Avatar billede arne_v Ekspert
06. juni 2003 - 22:01 #9
Og hvis det skal være rigtigt avanceret kunne du jo lave
en factory der kunne returnere en implementation af brev
baseret på mål og vægt.

[men det er også i den mere avancerede ende, så vent med det
indtil du har noget der virker nogenlunde !]
Avatar billede arne_v Ekspert
06. juni 2003 - 22:02 #10
Du har et meget fornuftigt approach - start stille og roligt og sikker
dig at du hele tiden har noget der virker.
Avatar billede doktoren Nybegynder
06. juni 2003 - 22:03 #11
tror også det er det bedste, for ellers er det ikke til at finde fejlen til sidst..
Avatar billede arne_v Ekspert
06. juni 2003 - 22:04 #12
Netop !
Avatar billede doktoren Nybegynder
06. juni 2003 - 22:07 #13
men tror ikke jeg vil rode mig ud i det alt for avancerede....men det er altså ikke forkert at definere det i alle klasserne og droppe en basisklasse? Ved godt at det er dobbeltarbejde, men som det ser ud for mig lige nu, kan jeg bedst holde styr på det, hvis jeg gør det på den måde
Avatar billede arne_v Ekspert
06. juni 2003 - 22:10 #14
Du kan godt:
  - lave 3 klasser
  - checke at de virker
  - lave en tom basis klasse og lade de 3 arve fra den
  - check at alt stadig virker
  - flytte fælles funktionalitet op i basis klassen
  - check at alt stadig virker
Avatar billede arne_v Ekspert
06. juni 2003 - 22:10 #15
Den process kan du jo ligefrem kalde "refactoring" !
Avatar billede arne_v Ekspert
06. juni 2003 - 22:11 #16
Men jeg har en fornemmelse af at det er en opgave og formentlig forventes
det at der bliver noget med arv i løsningen.
Avatar billede arne_v Ekspert
06. juni 2003 - 22:13 #17
Jeg vil tillade mig at ligge et svar.
Avatar billede doktoren Nybegynder
06. juni 2003 - 22:19 #18
kan godt se, hvad du mener...det ville jo være meget smart at gøre det på den måde. Det er en opgave ja...men kurset har ikke varet så lang tid, så forventningerne er ikke så store, men kan selvfølgelig være at det giver lidt ekstra points, hvis man viser at man også kan finde ud af det.
Men du har i hvert fald været en stor hjælp...jeg vender evt. tilbage med et nyt spørgsmål på et andet tidspunkt..
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