0 votes
> Seie eine folgende Aufgabenstellung vorliegend:
> Wir wollen einen Online-Shop fuer digitale Medien modellieren. Die
> Medien in unserem Shop sind dabei Videos, Hoerbuecher und Ebooks.
> Videos und Hoerbuecher haben eine Laufzeit (in Minuten als double),
> die jeweils direkt angegeben ist. Ebooks dagegen haben eine
> Seitenzahl. Es wird angenommen, dass man durchschnittlich 0,75 Seiten
> pro Minute lesen kann. Es soll fuer jedes Medium moeglich sein, die
> durchschnittliche Konsumdauer zu erhalten. Alle Videos, Hoerbuecher
> und Ebooks haben außerdem eine Speichergroeße (in kB als long).
>
> a) Implementieren Sie einen Typen Medium. Erstellen Sie Klassen fuer
> Videos, Hörbücher und Ebooks als Subtypen von Medium. Ihr Code soll
> geeignet sein, die Medien in unserem Online-Shop zu modellieren.
> Achten Sie dabei auf gute Kapselung und vermeiden Sie unnoetige
> Redundanz. Die Eigenschaften der verschiedenen Medien soll bei der
> Erstellung durch den Konstruktor angegeben werden.

Frage 1:   (bitte auch Frage2 beachten)

Kann eine Klasse gleichzeitig ein Interface implementieren und eine Superklasse haben.
Speichergroesse kommt in Videos, Hoerbuch und Ebook vor. Daher könnte eine Klasse dieses Attribut an alle drei (Subklassen) vererben.
Problem ist allerdings, dass Abspielbare dann von Speichergr erbt und auch das interface implementieren muss:

interface Medium{
    double mUseTime();
}

class SpeicherGr{
    long speichergr;
    SpeicherGr(){
        this.speichergr = speichergr;
    }

class Abspielbare extends Speichergr implements Medium{
    int laufzeit;
   
    Abspielbare(long speicherge, int laufzeit){
        super(speichergr);
        this.laufzeit = laufzeit;
    }
    double mUseTime(){
        return this.laufzeit;
    }
}

class Videos extends Abspielbare{
    Videos(int laufzeit, long speicher){
        super(laufzeit, speichergr);
    }
}

class Hoerbuecher extends Abspielbare{
    Hoerbuecher(int laufzeit, long speicher){
        super(laufzeit, speichergr);
    }
}

class Ebooks extends Speichergr implements Medium{
    int seitenzahl;
    Ebooks(int seitenzahl){
        this.seitenzahl = seitenzahl;
    }
    mUseTime(){
        return (Seitenzahl*1.25);
    }
}   
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   

Frage 2: Ist diese Lösung dann richtig, so dass volle Punktzahl erreicht wird?

interface Medium{
    double mUseTime();
}

    class Abspielbare implements Medium{
        long speichergr;
        int laufzeit;
       
        Abspielbare(int laufzeit, long speichergr){
            this.laufzeit = laufzeit;
            this.speichergr = speichergr;
        }
        double mUseTime(){
            return this.laufzeit;
        }
    }

class Videos extends Abspielbare{
    Videos(int laufzeit, long speichergr){
        super(laufzeit, speichergr);
    }
}

class Hoerbuecher extends Abspielbare{
    Hoerbuecher(int laufzeit, long speichergr){
        super(laufzeit, speichergr);
    }
}

class Ebooks implements Medium{
    int seitenzahl;
    long speichergr;
    Ebooks(int seitenzahl, long speichergr){
        this.seitenzahl = seitenzahl;
        this.speichergr = speichergr;
    }
    mUseTime(){
        return (Seitenzahl*1.25);
    }
}   

Vielen Dank für eure Antworten
in # Mandatory Modules Bachelor by (200 points)

1 Answer

0 votes
Zu Frage 1:

Ja, eine Klasse kann gleichzeitig ein oder mehrere Interface implementieren und eine Superklasse haben.

Im Code fehlt ein Parameter beim Konstruktor von SpeicherGr und wenn ich das richtig sehe kompiliert er auch nicht.

Zu Frage 2:

- Sie haben den Punkt "Achten Sie dabei auf gute Kapselung" nicht beachtet. Im Allgemeinen ist es in Java eine gute Idee die Attribute private zu halten, um dann mit Methoden entscheiden zu können, wie der Zustand von außen verändert werden kann.

- Das Attribut "speichergr" gibt es zweimal, da ist die Lösung oben besser. Außerdem wäre es sinnvoll, wenn der Typ Medium eine Methode hätte um den Speicherverbrauch zu bekommen.

- Die Rechnung für Ebooks stimmt so nicht. Wenn man 0.75 Seiten pro Minute liest, dann sollte man für 75 Seiten 100 Minuten brauchen. Mit Ihrer Rechnung kommt man aber auf ca 94 Minuten.

- Die Laufzeit wird als int gespeichert und nicht wie gefordert als double.
by (930 points)

Related questions

0 votes
1 answer
asked Sep 10, 2018 in # Mandatory Modules Bachelor by LerntNieAus (200 points)
0 votes
1 answer
asked Sep 8, 2018 in # Mandatory Modules Bachelor by LerntNieAus (200 points)
0 votes
1 answer
asked Sep 17, 2018 in * TF "Softw.-Eng." by davidschulz (410 points)
+2 votes
1 answer
0 votes
1 answer
asked Sep 16, 2018 in * TF "Softw.-Eng." by davidschulz (410 points)
Imprint | Privacy Policy
...