Datenkapselung, Vererbung und UML

Henri8855

Mitglied
Hallo, ich brauche dringend Eure Hilfe. Ich habe leider keine Ahnung, was ich hier machen muss. Es wäre sehr nett, wenn jemand mir helfen könnte.
Liebe Grüße
 

Anhänge

  • 500CCD16-6BDD-4B1A-A0EF-AB96643AFE55.jpeg
    500CCD16-6BDD-4B1A-A0EF-AB96643AFE55.jpeg
    615,5 KB · Aufrufe: 34
Beste Antwort
K
Ja, sieht erst einmal gut aus.

Bezüglich Naming evtl. noch auf camelCase achten: setLeistung / setAnzahlInsassen.

Und evtl. an der Stelle noch einen Hinweis bezüglich möglicher Probleme:

Es kann problematisch sein, wenn ein Konstruktor eine Methode aufruft, die überschrieben werden kann. Also einfach mal ein Beispiel aus dem Fingern saugen:

Von Deiner Klasse Auto leite ich eine Klasse RennAuto ab. Das wird etwas in der Art:
Java:
public class RennAuto extends Auto {
    private Fahrgestell fahrgestell;
    
    public RennAuto(int leistung, int anzInsassen) {
        super(leistung, anzInsassen);
        
        fahrgestell = new SuperTollesFahrgestell();
    }
    
    @Override
    public void setLeistung(int leistung) {...
Aufgabe 1 habe ich probiert probiert, aber ich weiß nicht, ob das überhaupt Sinn ergibt? Nun weiß ich auch nicht, wie ich mit Aufgabe 2 weiter machen soll. Wie kann ich denn die Klasse PKW von meiner Klasse Auto abhängig machen?

Java:
public class Auto {
private int leistung;
private int anzahlInsassen;

public void setleistung(int value) {
this.leistung = value;
}
public int getleistung() {
return this.leistung;
}

public void setanzahlInsassen(int value) {
this.anzahlInsassen= value;
}
public int getanzahlInsassen() {
return this.anzahlInsassen;
}
public Auto ()
{
leistung= 75;
anzahlInsassen= 1;
}

public Auto (int leist, int anz)
{
this.leistung=leist;
this.anzahlInsassen=anz;
}


}
 
Zuletzt bearbeitet von einem Moderator:
Das sieht erst einmal gut aus, aber die Aufgabe gibt vor, dass im Konstruktor die Setter benutzt werden sollen.

Aber ansonsten kannst Du mit der zweiten Aufgabe ja weiter machen.
 
public Auto(){
leistung=75;
anzahlInsassen=1;
}
public Auto(int leist, int anz){
setleistung(leist); //set Methode richtig angewandt?
setanzahlInsassen(anz);
}
Danke für die Antwort, habe nun probiert die set-Methode im Konstrukor zu benutzen, richtig angwandt?
Das sieht erst einmal gut aus, aber die Aufgabe gibt vor, dass im Konstruktor die Setter benutzt werden sollen.

Aber ansonsten kannst Du mit der zweiten Aufgabe ja weiter machen.
 
Ja, sieht erst einmal gut aus.

Bezüglich Naming evtl. noch auf camelCase achten: setLeistung / setAnzahlInsassen.

Und evtl. an der Stelle noch einen Hinweis bezüglich möglicher Probleme:

Es kann problematisch sein, wenn ein Konstruktor eine Methode aufruft, die überschrieben werden kann. Also einfach mal ein Beispiel aus dem Fingern saugen:

Von Deiner Klasse Auto leite ich eine Klasse RennAuto ab. Das wird etwas in der Art:
Java:
public class RennAuto extends Auto {
    private Fahrgestell fahrgestell;
    
    public RennAuto(int leistung, int anzInsassen) {
        super(leistung, anzInsassen);
        
        fahrgestell = new SuperTollesFahrgestell();
    }
    
    @Override
    public void setLeistung(int leistung) {
        super.setLeistung(leistung);
        
        if (leistung > 100) {
            fahrgestell.setSportMode(true);
        }
    }
}
(Ist jetzt aus dem Kopf geschrieben ohne IDE und so ... Fehler bitte entschuldigen - ich mache zu viel Dart und Flutter in letzter Zeit.)

Mein RennAuto hat halt ein super tolles Fahrgestell. Und bei höherer Leistung muss das in ein speziellen Sport-Modus gehen, damit das Fahrverhalten ok ist. Das habe ich geschrieben als ich noch die Auto Klasse ohne Deine Setter Anpassung hatte und alles funktionierte ...

Nun kommt von Dir ein kleines Update und nun geht nichts mehr! (Da es weltweit genutzt wurde, passiert etwas in der Art: Die Erde hat sich sozusagen aufgehört zu drehen und alle AKW sind explodiert, Kalifornien ist im St. Andreas Graben verschwunden und und und ... Also Thema von Emmerichs neuem Kinofilm. (Ok, alles etwas übertrieben, ich frühstücke manchmal einen Clown ...)

Siehst Du denn das Problem? Thema des Threads ist ja Vererbung und so und da gehört das mit rein.
 
Beste Antwort
Ja, sieht erst einmal gut aus.

Bezüglich Naming evtl. noch auf camelCase achten: setLeistung / setAnzahlInsassen.

Und evtl. an der Stelle noch einen Hinweis bezüglich möglicher Probleme:

Es kann problematisch sein, wenn ein Konstruktor eine Methode aufruft, die überschrieben werden kann. Also einfach mal ein Beispiel aus dem Fingern saugen:

Von Deiner Klasse Auto leite ich eine Klasse RennAuto ab. Das wird etwas in der Art:
Java:
public class RennAuto extends Auto {
    private Fahrgestell fahrgestell;
   
    public RennAuto(int leistung, int anzInsassen) {
        super(leistung, anzInsassen);
       
        fahrgestell = new SuperTollesFahrgestell();
    }
   
    @Override
    public void setLeistung(int leistung) {
        super.setLeistung(leistung);
       
        if (leistung > 100) {
            fahrgestell.setSportMode(true);
        }
    }
}
(Ist jetzt aus dem Kopf geschrieben ohne IDE und so ... Fehler bitte entschuldigen - ich mache zu viel Dart und Flutter in letzter Zeit.)

Mein RennAuto hat halt ein super tolles Fahrgestell. Und bei höherer Leistung muss das in ein speziellen Sport-Modus gehen, damit das Fahrverhalten ok ist. Das habe ich geschrieben als ich noch die Auto Klasse ohne Deine Setter Anpassung hatte und alles funktionierte ...

Nun kommt von Dir ein kleines Update und nun geht nichts mehr! (Da es weltweit genutzt wurde, passiert etwas in der Art: Die Erde hat sich sozusagen aufgehört zu drehen und alle AKW sind explodiert, Kalifornien ist im St. Andreas Graben verschwunden und und und ... Also Thema von Emmerichs neuem Kinofilm. (Ok, alles etwas übertrieben, ich frühstücke manchmal einen Clown ...)

Siehst Du denn das Problem? Thema des Threads ist ja Vererbung und so und da gehört das mit rein.
Danke für die ausführliche Antwort. 🙂 Ich glaube ich verstehe, wo das Problem liegt, aber ich weiß nicht, was ich jetzt ändern müsste. Die set-Methode bereitet mir irgendwie noch Schwierigkeiten... 🙁
 
Die Aufgabe ist korrekt gelöst und da musst du nichts mehr ändern. Das war nur eine Anmerkung, da die Aufgabe etwas gefordert hat, das auch durchaus problematisch sein kann.

Sollte Dich das verwirrt haben, dann tut es mir leid - dann könntest du die Anmerkung erst einmal ignorieren.
 
Hallo, ich melde mich nun mit der Test-Klasse wieder. Ich bin am Verzweifeln wegen dem Array und den Objekten. Die Test- Klasse ist immer mein Kryptonit. 🙁 Es wäre sehr nett, wenn mir jemand helfen könnte. LG

public class AutoTest{
public static void main(String[] args) {
//
PKW[auto];
auto[0]=new auto ("75,2,"VW","Golf");
//

PKW erstesAuto=new PKW(75,5,"Opel","Adam");
PKW zweitesAuto=new PKW(100,4, "Audi"," Avant");
PKW drittesAuto=new PKW(50, 5, "Renault","Zoe");
PKW viertesAuto=new PKW(101,5, "Skoda","Fabia");
PKW fünftesAuto=new PKW(70,4, "VW","Golf");


for (int i=0; i<auto.length;i++) {
System.println("Anzahl Insassen: "+ auto .getInsassen());
// usw.
}

}
}
 
Da dann einfach noch einmal schauen:
- Wie erzeugst Du eine Variable die ein Array eines bestimmten Typs aufnehmen kann?
- Wie erzeugst Du dann so ein Array?

Den Zugriff selbst hast Du mit dem auto[0]=.... ja prinzipiell schon richtig gemacht. Aber PKW[auto]; erzeugt keine gewünschte Variable ...
 
Da dann einfach noch einmal schauen:
- Wie erzeugst Du eine Variable die ein Array eines bestimmten Typs aufnehmen kann?
- Wie erzeugst Du dann so ein Array?

Den Zugriff selbst hast Du mit dem auto[0]=.... ja prinzipiell schon richtig gemacht. Aber PKW[auto]; erzeugt keine gewünschte Variable ...
So? Es wird mir nun wenigstens auch kein Fehler mehr angezeigt 🙂

public class AutoTest{
public static void main(String[] args) {
//
PKW[] array= new PKW[5];
array[0]=new PKW(75,2,"Ford","Focus");
array[1]=new PKW(75,5,"Opel","Adam");
array[2]=new PKW(100,4, "Audi"," Avant");
array[3]=new PKW(50, 5, "Renault","Zoe");
array[4]=new PKW(101,5, "Skoda","Fabia");
array[5]=new PKW(70,4, "VW","Golf");


for (int i=0; i<array.length;i++) {
System.out.println("leistung: "+ array.getleistung());
System.out.println("Anzahl Insassen: "+ array.getanzahlInsassen());
System.out.println("Hersteller: "+ array.gethersteller());
System.out.println("Modell: "+ array.getmodell());

}

}
}
 
So? Es wird mir nun wenigstens auch kein Fehler mehr angezeigt 🙂

public class AutoTest{
public static void main(String[] args) {
//
PKW[] array= new PKW[5];
array[0]=new PKW(75,2,"Ford","Focus");
array[1]=new PKW(75,5,"Opel","Adam");
array[2]=new PKW(100,4, "Audi"," Avant");
array[3]=new PKW(50, 5, "Renault","Zoe");
array[4]=new PKW(101,5, "Skoda","Fabia");
array[5]=new PKW(70,4, "VW","Golf");


for (int i=0; i<array.length;i++) {
System.out.println("leistung: "+ array.getleistung());
System.out.println("Anzahl Insassen: "+ array.getanzahlInsassen());
System.out.println("Hersteller: "+ array.gethersteller());
System.out.println("Modell: "+ array.getmodell());

}

}
}
Wenn ich aber es ausprobiere, bekomme ich leider eine Fehlermeldung
 

Zurück
Oben