UML korrekt umgesetzt?

Status
Nicht offen für weitere Antworten.

shizzzle*

Mitglied
Komme mit einer HA nicht weiter.

Die Aufgabenstellung gibts hier:
Aufgabe (PDF)


Und das habe ich soweit Prgrammiert:


Klasse Maschine:

Code:
package ueb001;

public class Maschine {

private int dauer;
private double tarifTag;


public Maschine(double tarifTagIn, int dauerIn){
	this.tarifTag = tarifTagIn;
	this.dauer = dauerIn;
	}

public double getMietpreis(){
	return 0;
	}
}




Klasse Kfz:

Code:
package ueb001;

public class Kfz extends ueb001.Maschine {


//Attribute
private int km;
private double tarifKm;

//Konstruktor
public Kfz(double tarifTagIn, int dauerIn, double tarifKmIn, int kmIn){
	super(tarifTagIn, dauerIn);
	this.tarifKm = tarifKmIn;
	this.km = kmIn;
}

//get Methode
public double getMieptreis(){
	return 0;
		 }
}



Erstmal, ist das reine UML richtig von mir umgesetzt?
Eine weitere Frage:
Wo mache ich die Berechnung? Muss ich dafür eine dritte Klasse mit set-Methoden erstellen? Aber davon steht ja nichts drin. Steh grade auf dem Schlauch :)
 

shizzzle*

Mitglied
Code:
public class Kfz extends ueb001.Maschine {



private int km;
private double tarifKm;

public Kfz(double tarifTagIn, int dauerIn, double tarifKmIn, int kmIn){
	super(tarifTagIn, dauerIn);
	this.tarifKm = tarifKmIn;
	this.km = kmIn;
}

public double getMieptreis(){
	return (tarifTag * dauer) + (tarifKm * km);
		 }
}



Quasi so? Bekomme ne Fehlermeldung

"The Field Maschine.tarifTag is not visible"
"The Field Maschine.dauer is not visible"
 
M

maki

Gast
Das UML Diagramm ist falsch :)

imho sollte tarifTag und dauer protected anstatt private sein.

Entweder das oder du nutzt die getter und setter der Oberklasse (super.get...), aber dann wäre Vererbung wohl falsch und Komposition zu bevorzugen.
 
G

Guest

Gast
maki hat gesagt.:
Das UML Diagramm ist falsch :)

imho sollte tarifTag und dauer protected anstatt private sein.

Entweder das oder du nutzt die getter und setter der Oberklasse (super.get...), aber dann wäre Vererbung wohl falsch und Komposition zu bevorzugen.


Wie UML ist falsch? Ich habe leider keine Ahnung was du meinst ;-)

set methoden stehen doch nicht in der aufgabe oder? Und variable als protected gesetzt hatten wir im unterricht noch nicht also kanns daran nicht liegen.
 
M

maki

Gast
Wie UML ist falsch?
Aus wikipedia:
Falschheit bezeichnet im Allgemeinen die Eigenschaft eines Gedankens oder einer Aussage, nicht mit der Realität übereinzustimmen.

Ich habe leider keine Ahnung was du meinst icon_wink.gif
Offensichtlich ;)

Und variable als protected gesetzt hatten wir im unterricht noch nicht also kanns daran nicht liegen.
Ach, und dort wird festgelegt was geht und was nicht? :D
Ich möchte jetzt nicht auf die PISA Studie eingehen, aber das UML Diagramm ist nunmal nicht richtig so.
 

VuuRWerK

Aktives Mitglied
In der Tat ist hier die Vererbung nicht richtig eingesetzt wurden. Aber vllt will Dein Lehrer soetwas sehen:

Code:
public class Maschine
{
    private double tarifTag;
    private int dauer;

    public Maschine( double tarifTagIn, int dauerIn ) {
        this.tarifTag = tarifTagIn;
        this.dauer = dauerIn;
    }

    public double getMietpreis() {
        return( this.tarifTag * this.dauer );
    }
}

public class Kfz extends Maschine
{
    private int km;
    private double tarifKm;

    public Kfz( double tarifTagIn, int dauerIn, double tarifKmIn, int kmIn ) {
        super( tarifTagIn, dauerIn );
        this.tarifKm = tarifKmIn;
        this.km = kmIn;
    }

    public double getMietpreis() {
        return( super.getMietpreis() + this.tarifKm * this.km );
    }
}

Wie gesagt keine wirkliche Vererbung dabei aber vllt meinte es Dein Lehrer so oder er hat schlichtweg das UML falsch gemacht ;)

Gut Schuß
VuuRWerK ;)
 
G

Guest

Gast
maki hat gesagt.:
Wie UML ist falsch?
Aus wikipedia:
Falschheit bezeichnet im Allgemeinen die Eigenschaft eines Gedankens oder einer Aussage, nicht mit der Realität übereinzustimmen.

Ich habe leider keine Ahnung was du meinst icon_wink.gif
Offensichtlich ;)

Und variable als protected gesetzt hatten wir im unterricht noch nicht also kanns daran nicht liegen.
Ach, und dort wird festgelegt was geht und was nicht? :D
Ich möchte jetzt nicht auf die PISA Studie eingehen, aber das UML Diagramm ist nunmal nicht richtig so.

Schlaumeier!

Ne das vielleicht nicht aber mein Lehrer wird sich bei der Aufgabe ja schon etwas gedacht haben.
 
M

maki

Gast
Menschen machen Fehler.

Wir haben ein paar Lehrer hier, vielleicht vertraust du deren Autorität eher als mir.

In dieser Aufgabe ist definitiv der Wurm drinn, so oder so.
 
G

Gast

Gast
Und was soll bitteschön falsch an dem UML sein?

tarifTag und dauer sind doch so lange sie private sind ganz gut gekapselt.

Wenn man zuerst Maschine implementiert, ohne von KFZ etwas zu erahnen, wird man die Variablen privat setzen. Hat man dies gemacht ist Maschine fertig, korrekt, getestet und man sollte auch nichts mehr daran ändern.

Teile der Berechnung von Maschine#getMietpreis(), also tarifTag * dauer wären im falle von protected doch redundant implementiert. Obwohl es sich hier nur um eine einfache Multiplikation handelt.

Und wenn man meint das das statt private protected sein muß, dann muß!!! man auch so konsequent sein und auf private vollkommen verzichten und darf nur noch protected verwenden.
 
M

maki

Gast
Und was soll bitteschön falsch an dem UML sein?
Ich finde das sehr unüblich (in Java), schliesslich wird in der Vererbungshierachie nur getMietpreis() vererbt.
Dafür sind Interfaces besser geeignet.

tarifTag und dauer sind doch so lange sie private sind ganz gut gekapselt.
Eben, so "gut" dass nicht mal abgeleitete Klasen darauf zugreifen können, sie werden ja nicht vererbt.
Vererbung und Kapselung beissen sich regelmässig.
In so einem Fall nimmt man doch lieber Komposition anstatt Vererbung.

Wenn man zuerst Maschine implementiert, ohne von KFZ etwas zu erahnen, wird man die Variablen privat setzen. Hat man dies gemacht ist Maschine fertig, korrekt, getestet und man sollte auch nichts mehr daran ändern.
Man könnte jetzt einfach ein Maschine Objekt instanziieren, ist das sinnvoll?
Das man daran nichts mehr ändern kann ist übrigens kein Vorteil.
Unittests bleiben, prüfen ob die Klasse nach einem refactoring immer noch funktioniert.

Teile der Berechnung von Maschine#getMietpreis(), also tarifTag * dauer wären im falle von protected doch redundant implementiert. Obwohl es sich hier nur um eine einfache Multiplikation handelt.
Nicht redundant, sondern die Basisklasse bietet eine Standardimplementierung welche von abgeleiteten Klassen entweder benutzt werden kann oder ganz anders implementiert.

Und wenn man meint das das statt private protected sein muß, dann muß!!! man auch so konsequent sein und auf private vollkommen verzichten und darf nur noch protected verwenden.
Ja, und so kenn ich das aus Java heraus ;)

Wie wäre es damit:
Ein Interface Maschine
Code:
public interface Maschine {
    public double getMietPreis();
}
Ein abstrakte Klasse AbstractMaschine, weche das Interface Implementiert
Code:
public abstract AbstractMaschine 
implements Maschine {
    
    protected double tarifTag;

    protected int dauer;

    public double getMietPreis() {
        return (tarifTag * dauer); 
    }
}

So, jetzt kommen die konkreten Implementierungen, wie KFZ:
Code:
public class KFZ
extends AbstractMaschine {
 
    protected double tarifKm;
    protected int km;

    public double getMietPreis() {
        return super.getMietPreis() + (tarifKm * km); 
    }

}
So ist man wirklich flexibel ;)
Auf diese Art kann man jederzeit Funktionalität zur Basisklasse hinzufügen, ohne notwendigerweise alle Unterklassen mitabzuändern. Das ist wichtig für Klassenhierarchien die von anderen mitverwendet werden.
Es reicht zB eine neue Methode im Interface zu definieren und diese Methode dann in der abstrakten Basisklasse implentieren.
Als Beispiel seien hier die Java Collections genannt ;)
 
G

Gast

Gast
Man könnte jetzt einfach ein Maschine Objekt instanziieren, ist das sinnvoll?

JA.

In der Aufgabenstellung steht, es sollen auch Maschinen ausgeleiht werden können. Kein Grund AbstractMaschine abstract sein zu lassen. Noch dazu, das AbstractMaschine keine abstracte Methode beinhaltet.

Das nur eine Methode vererbt wird, soll eher der Übersichtlichkeit der Übungsaufgabe dienen.

Wenn es keinen Sinn macht private zu verwenden macht es ebensowenig Sinn protected, oder default zu verwenden. Dann bitteschön alles public.

Unittests bleiben, prüfen ob die Klasse nach einem refactoring immer noch funktioniert.

Unittests bedeuten immer Aufwand. Und wenn es nur die 2 sec. sind die man benötigt um ihn unnötigerweise laufen zu lassen.
 
G

Guest

Gast
VuuRWerK hat gesagt.:
In der Tat ist hier die Vererbung nicht richtig eingesetzt wurden. Aber vllt will Dein Lehrer soetwas sehen:

Code:
public class Maschine
{
    private double tarifTag;
    private int dauer;

    public Maschine( double tarifTagIn, int dauerIn ) {
        this.tarifTag = tarifTagIn;
        this.dauer = dauerIn;
    }

    public double getMietpreis() {
        return( this.tarifTag * this.dauer );
    }
}

public class Kfz extends Maschine
{
    private int km;
    private double tarifKm;

    public Kfz( double tarifTagIn, int dauerIn, double tarifKmIn, int kmIn ) {
        super( tarifTagIn, dauerIn );
        this.tarifKm = tarifKmIn;
        this.km = kmIn;
    }

    public double getMietpreis() {
        return( super.getMietpreis() + this.tarifKm * this.km );
    }
}

Wie gesagt keine wirkliche Vererbung dabei aber vllt meinte es Dein Lehrer so oder er hat schlichtweg das UML falsch gemacht ;)

Gut Schuß
VuuRWerK ;)



Und wie geb ich das jetzt in der Konsole aus?

System.out.println(getMiepreis()); ?
 

shizzzle*

Mitglied
Code:
package ueb002;

public class Maschine {

    private double tarifTag;
    private int dauer;
    
    public Maschine(double tarifTagIn, int dauerIn){
    	this.tarifTag = tarifTagIn;
    	this.dauer = dauerIn;
    }
    
    public double getMietpreis(){    	
    	return this.tarifTag * this.dauer;
    }
}






Code:
package ueb002;

public class Kfz extends Maschine {

	private double tarifKm;
	private int km;
    
    public Kfz(double tarifTagIn, int dauerIn, double tarifKmIn, int kmIn){
    	super(tarifTagIn, dauerIn);
    	this.tarifKm = tarifKmIn;
    	this.km = kmIn;
    }
    
    public double getMietpreis(){    	
    	return super.getMietpreis() + this.tarifKm * this.km;
    }
    public static void main(String []args){
    	System.out.println("Der Miepreis beträgt: " +getMietpreis());
    }
 }


Soweit funktioniert jetzt alles. Bis auf den Test ob die Berechnung wirklich funktioniert. Bei der Ausgabe kommt vom Compiler folgender Fehler:

"Cannot make a static reference to the non-static method getMietpreis() from the type Kfz"

Habe schon alles möglich ausprobiert. Bekomme es aber nicht hin.[/code]
 

Ariol

Top Contributor
Code:
public static void main(String []args){
       KFZ kfz = new KFZ(100.0,3,1.50,350);
       System.out.println("Der Miepreis beträgt: " +kfz.getMietpreis());
    }
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Interface Interface korrekt implementieren Java Basics - Anfänger-Themen 5
F Aus eingelesener Datei korrekt Objekte erzeugen Java Basics - Anfänger-Themen 5
Kotelettklopfer Output korrekt trotz falschem Lösungsweg !? Java Basics - Anfänger-Themen 99
dome385 Ball Ball Kollision physikalisch korrekt Java Basics - Anfänger-Themen 5
H Endkapital wird nicht korrekt ausgegeben. Java Basics - Anfänger-Themen 5
M Warum werden character, die Leerzeichen sind, nicht korrekt verarbeitet? Java Basics - Anfänger-Themen 2
NeoLexx Variable für Array wird nicht korrekt übergeben Java Basics - Anfänger-Themen 45
tom.j85 Map - Values nicht korrekt ersetzt (Abzählspiel) Java Basics - Anfänger-Themen 13
R Compiler-Fehler HalloWelt-Programm korrekt abgeschrieben, trotzdem Fehlermeldungen Java Basics - Anfänger-Themen 2
M Strasse und Huasnummer korrekt eingeben Java Basics - Anfänger-Themen 13
D JAVA JDK korrekt installieren javac wird nicht gefunden Java Basics - Anfänger-Themen 2
C JFreeChart Linie nicht korrekt dargestellt Java Basics - Anfänger-Themen 1
M java.io.FileNotFoundException trotz dass Verzeichnis korrekt angegeben ist! Java Basics - Anfänger-Themen 20
U Ist diese Methode zur Matrix Vektor Multiplikation korrekt ? Java Basics - Anfänger-Themen 5
E Gleitkomma zahlen mathemathisch korrekt multiplizieren Java Basics - Anfänger-Themen 5
D Abfrage ob Variableninhalt korrekt Java Basics - Anfänger-Themen 5
M JMadex funktioniert nicht korrekt Java Basics - Anfänger-Themen 8
G OOP Klassenaufbau korrekt? / MVC Java Basics - Anfänger-Themen 1
S JTabel korrekt mit Datensätzen aus ResultSet füllen Java Basics - Anfänger-Themen 4
R Upload Servlet: Ausgabe nicht korrekt Java Basics - Anfänger-Themen 2
J String Ausgabe nicht-leerer Zeichen nicht korrekt Java Basics - Anfänger-Themen 10
K Wie übergebe ich hier korrekt die Werte Java Basics - Anfänger-Themen 5
U Attributsnamen korrekt oder falsch? Java Basics - Anfänger-Themen 4
G Exe-Datei korrekt in JAR ablegen Java Basics - Anfänger-Themen 4
B func(Object ....args) korrekt weitergeben Java Basics - Anfänger-Themen 4
Burny91 Compiler-Fehler Regular Expressions matchen nicht korrekt Java Basics - Anfänger-Themen 5
M Tag Monat Jahr korrekt berrechnen! Java Basics - Anfänger-Themen 10
M Calendar-Prüfung funktioniert nicht korrekt Java Basics - Anfänger-Themen 6
M String wird nicht korrekt ausgelesen. Java Basics - Anfänger-Themen 11
S Kapselung Member korrekt nach aussen verfügbar machen Java Basics - Anfänger-Themen 6
L Referenced Libraries korrekt in Java Applet einbinden.. Java Basics - Anfänger-Themen 2
M OOP JLabel werden nicht korrekt eingefärbt Java Basics - Anfänger-Themen 6
F JSlider korrekt implementieren Java Basics - Anfänger-Themen 19
G byte[] (Base64) korrekt übergeben Java Basics - Anfänger-Themen 4
R ArrayList(int index, Object) funktioniert nicht korrekt? Java Basics - Anfänger-Themen 7
S Benutzereingabe über Scanner Klasse korrekt behandeln Java Basics - Anfänger-Themen 9
L If/else nicht korrekt ausgeführt. Java Basics - Anfänger-Themen 22
K methode wird nur einmal korrekt durchlaufen Java Basics - Anfänger-Themen 4
F Verschlüsselten Text korrekt ausgeben Java Basics - Anfänger-Themen 2
Developer_X Applikation kann nicht korrekt von anderen Applikationen aufgerufen werden Java Basics - Anfänger-Themen 10
K Symbole werden nicht korrekt angezeigt ? Java Basics - Anfänger-Themen 7
G Maven Dependency für Oracle JDBC-Driver korrekt festlegen Java Basics - Anfänger-Themen 4
0x7F800000 elemente aus einer Collection korrekt löschen Java Basics - Anfänger-Themen 8
Antoras Durchschnitt ist nicht korrekt; Eingaben löschen Java Basics - Anfänger-Themen 7
G Wochentag und Jahrtag werden nicht korrekt ermittelt Java Basics - Anfänger-Themen 8
G SwingWorker funktioniert nicht korrekt Java Basics - Anfänger-Themen 16
J Ein Fenster korrekt schließen? Java Basics - Anfänger-Themen 4
U Double-Variable führt Division nicht korrekt aus Java Basics - Anfänger-Themen 4
U GUI wird nicht korrekt angezeigt Java Basics - Anfänger-Themen 8
M Kommentare - so korrekt? Java Basics - Anfänger-Themen 8
G Geöffnete Datei schreiben korrekt schreiben? Java Basics - Anfänger-Themen 6
G Warum ist der folgende Code korrekt? Java Basics - Anfänger-Themen 2
G Eingabe wird nicht korrekt eingelesen? Java Basics - Anfänger-Themen 2
G Buffered REader, String, ist mein code korrekt? Java Basics - Anfänger-Themen 4
R Look & Feel wird nicht korrekt angezeigt Java Basics - Anfänger-Themen 9
S richtig umgesetzt ? Java Basics - Anfänger-Themen 3
R Einfache MVC-Uhr. MVC richtig umgesetzt? [Überarbeitet] Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben