Methoden Methode einer Abstrakten Klasse

Corben

Mitglied
Hallo, Comunity.

Ich habe diesen UML Diagramm vorgegeben (Anhang, ja es ist klein, aber größer hab ichs selbst nich)

In der abstrakten Klasse Medium befindet sich die Methode setAusleihdatum, nur wie verknüpfe ich z.B. mein erzeugtes buch1 mit dem Datum a?
Eigentlich will ich dem Medium ja das Datum in der main Methode mit geben, nur ist in Medium.java alles protected. Woher bekommt setAusleihdatum dann das leihdatum?
Ich muss ja meinen Medien verschiedene Daten zuweisen können.
Dann steht in dem UML Diagramm dass setAusleihdatum keinen return Wert hat, muss ich dann nicht
Code:
protected void setAusleihdatum (Datum leihdatum){...}
schreiben?

Vielen Dank euch :)

Die Klassen sehn bei mir wie folgt aus:

BibVerwaltung, mit der main Methode:
Java:
public class BibVerwaltung {
	public static void main(String[] args){
		Datum a=new Datum (2011, 5, 3);
		
		Medium buch1  = new Buch("EI2", "Blanz", 1000);
		Medium buch2 = new Buch("Analysis", "Michel", 1500);
		Medium dvd1 = new DVD ("Der Exorzist", "William Friedkin", 122);
		Medium dvd2 = new DVD ("film2", "rg", 104);
		
	}

}

Die abstrakte Klasse:
Java:
abstract class Medium {
	
	protected String Mediumstitel;
	protected Datum Ausleihdatum;
	
	protected Medium (String title){
		this.Mediumstitel=title;
	}
	
	protected String getTitle(){
		return Mediumstitel;
	}
	
	protected abstract double berechneStrafgeld();

	protected setAusleihdatum (Datum leihdatum){
		Ausleihdatum=leihdatum;
		
	}
}

DVD (buch ist sehr ähnlich)
Java:
public class DVD extends Medium{
	
	private String DVD_Regisseur;
	private int DVD_Laenge;
	
	public DVD (String title, String regisseur, int laenge){
		super(title);
		this.DVD_Regisseur = regisseur;
		this.DVD_Laenge = laenge;
		
	}
	
	public double berechneStrafgeld(){
		
	}
	
	public String getRegisseur(){
		return DVD_Regisseur;
	}
	
	public int getLaenge(){
		return DVD_Laenge;
	}

}

Java:
import java.util.*;
import java.io.*;

public class Datum {
	private int Jahr;
	private int Monat;
	private int Tag;
	private Calendar cal;
	
	public Datum() {
		cal=Calendar.getInstance();
		Jahr=cal.get(1);
		Monat=cal.get(2)+1;
		Tag=cal.get(5);
	}	
	
	public Datum(int jahr, int monat, int tag){
		cal=Calendar.getInstance();
		this.Jahr=jahr;
		this.Monat=monat;
		this.Tag=tag;
   }
	
	public int getJahr() {
		return Jahr;
	}
	
	public int getMonat() {
		return Monat;
    }
    
    public int getTag() {
    	return Tag;
	}
	
	public int calcDiffDays(Datum ausleih) {
		int daysDiff=0;
		
		int a = ausleih.getJahr();
		int b = ausleih.getMonat();
		int c = ausleih.getTag();
		
		int anow = cal.get(Calendar.YEAR);
		int bnow = cal.get(Calendar.MONTH);
		int cnow = cal.get(Calendar.DAY_OF_MONTH);
		
		daysDiff = (anow-a)+30*(bnow-b)+365*(cnow-c);
		
		return daysDiff;
	}
}
 

Anhänge

  • Bib.jpg
    Bib.jpg
    29,7 KB · Aufrufe: 40

eLwoodianer

Mitglied
Das Ausleihdatum kannst du dem Konstruktor von DVD übergeben. Da DVD eine Unterklasse von Medium ist kannst du auf "protected Datum Ausleihdatum;" von dort aus zugreifen.

Edit: Bzw. im Konstruktor von DVD die Methode setAusleihdatum der super-Klasse aufrufen.
 
Zuletzt bearbeitet:

tagedieb

Top Contributor
Das Ausleihdatum kannst du dem Konstruktor von DVD übergeben. Da DVD eine Unterklasse von Medium ist kannst du auf "protected Datum Ausleihdatum;" von dort aus zugreifen.

Edit: Bzw. im Konstruktor von DVD die Methode setAusleihdatum der super-Klasse aufrufen.

Das hängt stark von der Aufgabenstellund und dementsprechend vom Applikationsdesign ab. Wenn man fuer jedes Ausleihen eines Mediums eine neue Instanz erzeugt ist dies ok, ansonsten ist es ein schlechtes Design. Mit dieser Lösung kann man ja auch später das Datum nicht mehr verändern.

Wenn eine Methode 'protected' ist soll damit natuerlich der Zugriff kontrolliert werden und unterbinden, dass fremde Programteile das Ausleihdatum verändern können.

Wenn deine Klasse BibVerwaltung im gleichen Package liegt wie Medium kannst du ohne Probleme die Methode setAusleihdatum(..) aufrufen. Klassen in andern Package ist der Zugriff jedoch untersagt.


Aber vielleicht ist dies ja auch ein Designfehler in der UML-Vorgabe :D
Variablennamen schreibt man normalerweise klein und
Code:
camelCase
(siehe Java Namingconventions)

Desweiteren ist auch die Funktion der Klasse Datum aus dem UML nicht ersichtlich. Das Datum speichert man entweder als Tag, Monat und Jahr oder als Calendar!! Aber nicht beides! Das is doppelte Datenhaltung und kann zu Dateninkonsitenz führen.

Ausserdem würde ich für die Berechnung der Ausleihdauer die Methode
Code:
cal.getTimeInMillis()
verwenden, die beiden Werte subtrahieren und durch die Anzahl MilisekundenProTag teilen.
 

Corben

Mitglied
Die Datum.java ist vorgegeben, bis auf den Inhalt von
Code:
public int calcDiffDays(Datum ausleih) {}
Ich habe das jetzt einfach mal in das Package bib gepackt. Somit kann ich das datum jetzt in der BibVerwaltung festlegen, weil sonst machts für mich keinen Sinn wie du ja auch meinst.

Ok, dann muss ich jetzt noch
Code:
public double berechneStrafgeld(){...}
füllen :D

Das wollt ich so machen:
Jetzt kann ich aber calcDiffDays nicht aufrufen :( :
Code:
The method calcDiffDays(Datum) is undefined for the type DVD
Tja. Wie komm ich jetzt an den return Wert von calcDiffDays? Den brauch ich ja in
Code:
public double berechneStrafgeld(){...}

[JAVA=15]public double berechneStrafgeld(){
double s;
s= calcDiffDays(super.Ausleihdatum);
if (s>7){
s*=2; //2€ pro Tag
return s;
}
else
return 0;
}[/code]
 
Zuletzt bearbeitet:

tagedieb

Top Contributor
Na du musst ein aktuelles Datum erzeugen von dem du die Differenz zum Ausleihdatum errechnen kannst..


[JAVA=15]public double berechneStrafgeld(){
double s;
s= new Datum().calcDiffDays(Ausleihdatum);
if (s>7){
s*=2; //2€ pro Tag
return s;
}
else
return 0;
}[/code]
 

Corben

Mitglied
cool, danke. Hab das mal so gemacht.
Es geht auch alles soweit. Dann hab ichs mal komiliert und ich habe doch Tatsächlich eine Ausgabe bekommen.
Wenn ich jetzt aber noch den Autor angezeigt haben will mit
Code:
+buch1.getAutor()
bekomm ich einen Compilerfehler. Habe schon wirklich viel probiert aber ich komm nich drauf. Gibts da noch ein Schlüsselwort, welches ich brauche?
Ich versteh das nich. Ich hab doch oben auch schon new Buch benutzt um eins zu erzeugen.

Ausgabe:
Code:
1. Medium:
EI2 ,

1. Medium:
Analysis ,

Java:
package bib;
public class BibVerwaltung {
	public static void main(String[] args){
		Datum a=new Datum (2011, 5, 3);
		
		Medium buch1  = new Buch("EI2", "Blanz", 1000);
		Medium buch2 = new Buch("Analysis", "Michel", 1500);
		Medium dvd1 = new DVD ("Der Exorzist", "William Friedkin", 122);
		Medium dvd2 = new DVD ("Antichrist", "Lars von Trier", 104);
		
		buch1.setAusleihdatum(a);
		buch2.setAusleihdatum(a);
		dvd1.setAusleihdatum(a);
		dvd2.setAusleihdatum(a);
		
		System.out.println("1. Medium:\n"+buch1.getTitle()+" ,"+"\n"/*+buch1.getAutor()*/);
		System.out.println("1. Medium:\n"+buch2.getTitle()+" ,"+"\n");
		
	}

}
 

eLwoodianer

Mitglied
Na du musst ein aktuelles Datum erzeugen von dem du die Differenz zum Ausleihdatum errechnen kannst..


[JAVA=15]public double berechneStrafgeld(){
double s;
s= new Datum().calcDiffDays(Ausleihdatum);
if (s>7){
s*=2; //2€ pro Tag
return s;
}
else
return 0;
}[/code]


In dem Fall ist aber

Java:
        int anow = cal.get(Calendar.YEAR);
        int bnow = cal.get(Calendar.MONTH);
        int cnow = cal.get(Calendar.DAY_OF_MONTH);

in der Methode
Code:
public int calcDiffDays(Datum ausleih)
unnötig, da das aktuelle Datum ja schon im Objekt selbst steht, man also einfach auf die Felder des Objekts zugreifen kann. Also direkt
Code:
 daysDiff = (Jahr-a)+30*(Monat-b)+365*(Tag-c);

Was mir gerade auffällt, muss eigentlich nicht das Jahr mit 365 multipliziert werden... !?

eL
 
Zuletzt bearbeitet:

tagedieb

Top Contributor
buch1 ist als Medium definiert, also kannst du nur Methoden von Medium und seiner Superklassen aufrufen.

In diesem Fall benutze einen cast:
Java:
        System.out.println("1. Medium:\n"+buch1.getTitle()+" ,"+"\n"+((Buch)buch1).getAutor());
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Methode einer Abstrakten Klasse aufrufen Java Basics - Anfänger-Themen 1
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
L Variablenwerte aus einer Methode übergeben Java Basics - Anfänger-Themen 2
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
T Variable von Objekten in einer Methode überprüfen Java Basics - Anfänger-Themen 26
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
V Hilfe bei Implementierung einer boolean Methode Java Basics - Anfänger-Themen 6
berserkerdq2 Wann soll ich den Stream schließen, wenn ich das in einer Methode habe? Java Basics - Anfänger-Themen 8
H Mit setter-Methode JLabel in einer andern Klasse ändern. Java Basics - Anfänger-Themen 40
A Ein Array bearbeiten und in einer anderen Methode nutzen Java Basics - Anfänger-Themen 6
A Ergebnis einer Methode bei einer anderen verwenden Java Basics - Anfänger-Themen 13
M Wie kann die Implementation einer Methode den Wert eines Attributs vermindern? Java Basics - Anfänger-Themen 3
M Wie verknüpfe ich eine Bedingung mit einer Methode ohne if-Verzweigung & Bedingungsoperator? Java Basics - Anfänger-Themen 2
D mehrere Berechnungen in einer Methode Java Basics - Anfänger-Themen 9
I Array einer Methode wiedergeben Java Basics - Anfänger-Themen 2
I Argumente einer Java Methode Java Basics - Anfänger-Themen 14
D Methoden Plathhalter für Integer in einer Methode Java Basics - Anfänger-Themen 19
D Einen boolischen Wert aus einer Methode in einer anderen Klasse aufrufen? Java Basics - Anfänger-Themen 11
C Auf die Methode einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 1
A 2 Strings vergleichen in einer methode wenn man mit Globalen variablen arbeitet Java Basics - Anfänger-Themen 12
T getAttribut in einer Methode aufrufen Java Basics - Anfänger-Themen 8
BorussiaMG1900 Implementation einer Methode Java Basics - Anfänger-Themen 1
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
LetsSebi Methode, die einen arry von objekten speichert in einer datei Java Basics - Anfänger-Themen 6
A Methode in einer anderen Klasse verwenden Java Basics - Anfänger-Themen 1
JD_1998 Array-Position aus einer Methode in einer anderen ausgeben (Kurze Frage) Java Basics - Anfänger-Themen 2
JD_1998 Random Array sortieren mit Hilfe einer Methode Java Basics - Anfänger-Themen 4
K Übergabe von Werten (zweidimensionales Array) aus einer Methode an zweidimensionales Array in main() Java Basics - Anfänger-Themen 3
M this.object in einer parameterlosen Methode verwenden Java Basics - Anfänger-Themen 3
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4
O BiPredicate in einer forEach Methode Java Basics - Anfänger-Themen 10
L Wie greife ich in der Subklasse auf die Parameter einer Methode der Superklasse zu ? Java Basics - Anfänger-Themen 15
N Methode um Objekte einer Liste hinzuzufügen Java Basics - Anfänger-Themen 1
L Variable von einer Methode zu einer anderen Methode inkl. einer "Zwischenmethode" Java Basics - Anfänger-Themen 1
B Hilfe bei einer rekursiven Methode Java Basics - Anfänger-Themen 3
S Auf Methode einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 3
M Implementierung einer getNextId Methode Java Basics - Anfänger-Themen 5
R Signatur einer Methode in JAVA Java Basics - Anfänger-Themen 4
N Methode mit einer Arraylist Java Basics - Anfänger-Themen 106
I ArrayList - Methode zum Speichern eines Eintrags in einer Datei Java Basics - Anfänger-Themen 17
H Arraydaten aus einer anderen Methode ausgeben Java Basics - Anfänger-Themen 4
H Auf Objekte bzw Variabeln aus einer anderen Methode zugreifen Java Basics - Anfänger-Themen 7
T Return einer anderen Methode herausfinden Java Basics - Anfänger-Themen 9
J Fragen zu einer Methode Java Basics - Anfänger-Themen 3
W OOP Vererbung und Problem bei Zählschleife in einer Methode Java Basics - Anfänger-Themen 10
A Mit einer Methode den Konstruktor aufrufen? Java Basics - Anfänger-Themen 2
K Boolean in einer Methode um 2 Objekte zu vergleichen Java Basics - Anfänger-Themen 12
M kann man return in nur einer Methode einsetzen? Java Basics - Anfänger-Themen 7
J NullPointerException beim Klonnen eines Arayys und beim aufrufen einer Methode Java Basics - Anfänger-Themen 2
H Frage zu Parameter einer Methode Java Basics - Anfänger-Themen 2
H Frage zu Parameter einer Methode Java Basics - Anfänger-Themen 3
scratchy1 Kann man in einer Methode eine andere aufrufen? Java Basics - Anfänger-Themen 2
G Die richtige Methode aus einer DTO auszurufen Java Basics - Anfänger-Themen 27
B Klassen Zugriff auf ein Objekt einer Klasse aus einer Methode heraus Java Basics - Anfänger-Themen 4
M BlueJ - Array als Paramter einer Methode eingeben Java Basics - Anfänger-Themen 12
O Arrays sortieren in einer Methode Java Basics - Anfänger-Themen 2
D Zugriff auf Methode einer anderen Klasse Java Basics - Anfänger-Themen 5
A OOP Variable in anderer Klasse durch Methode aufrufen und einer anderen Variable gleichsetzen Java Basics - Anfänger-Themen 2
D Compiler-Fehler Aufrufen einer Methode von Main Java Basics - Anfänger-Themen 4
R Methoden NPE beim Aufruf einer Methode einer anderen Klasse Java Basics - Anfänger-Themen 4
J Aufruf einer Methode über einen String Java Basics - Anfänger-Themen 11
E Threads Methode einer Wartenden Klasse aufrufen Java Basics - Anfänger-Themen 3
P Methode soll Variable einer anderen Klasse ändern. Wie? Java Basics - Anfänger-Themen 1
J Rekursive Methode - Ziffern einer Zahl ausgeben Java Basics - Anfänger-Themen 2
D Methoden JButton und JLabel in einer Methode erstellen Java Basics - Anfänger-Themen 5
C In einer Methode einen Array zurückgeben Java Basics - Anfänger-Themen 2
S Wie erstelle ich eine Vorbedingung für eine Variable einer Methode ? Java Basics - Anfänger-Themen 5
geekex Double zu String umwandeln in einer Methode Java Basics - Anfänger-Themen 28
J String splitten und weiter einarbeiten in einer Methode? Java Basics - Anfänger-Themen 11
D Anfänger-Fragen(Parameter einer Methode) Java Basics - Anfänger-Themen 7
D Aufruf einer Methode einer anderen Klasse Java Basics - Anfänger-Themen 39
B Wie kann ich eine Methode einer selbst erstellten Klasse statisch importieren? Java Basics - Anfänger-Themen 5
M Methoden Int einer Methode an eine andere Methode übergeben Java Basics - Anfänger-Themen 4
S BufferedWriter innerhalb einer Methode Java Basics - Anfänger-Themen 2
H Innerhalb einer Methode eine Variable der aufrufenden Methode ändern? Java Basics - Anfänger-Themen 2
V Methode eines Objekts einer ArrayList ausführen Java Basics - Anfänger-Themen 3
TomatenBrot447 Mit toString eine Ausgabe liefern wie in einer schon implementierten Methode ? Java Basics - Anfänger-Themen 13
TomatenBrot447 Mit toString eine Ausgabe liefern wie in einer schon implementierten Methode ? Java Basics - Anfänger-Themen 1
V for-Schleife in einer void Methode Java Basics - Anfänger-Themen 3
P Instanz mit .add Methode von einer Klasse zur anderen? Java Basics - Anfänger-Themen 6
C Bestimmtes Objekt einer ArrayList in einer Methode selektieren Java Basics - Anfänger-Themen 8
BobbGott Klassen 2 "Objekte" in einer Methode - wie? Java Basics - Anfänger-Themen 7
B Wie speicher ich die Outputs einer Methode in ein Array ein? Java Basics - Anfänger-Themen 1
N Objekt in Methode einer anderen Klasse erzeugen Java Basics - Anfänger-Themen 9
K Compiler-Fehler Objektmethode aus einer statischen Methode heraus aufrufen Java Basics - Anfänger-Themen 34
shiroX Methoden JUnit-Test einer void-Methode Java Basics - Anfänger-Themen 4
S Methoden Methode einer anderen Klasse aufrufen? Java Basics - Anfänger-Themen 5
N Methoden Wohin mit einer Methode die in unterschiedlichen Klassen verwendet wird? Java Basics - Anfänger-Themen 5
L Anonyme Methode in einer ForEach-Schleife Java Basics - Anfänger-Themen 2
M Klassen Main Methode in einer anderen Klasse aufrufen Java Basics - Anfänger-Themen 13
D Methoden Definition einer Methode Java Basics - Anfänger-Themen 3
J Verständnisproblem einer Methode Java Basics - Anfänger-Themen 20
T Signatur einer Methode Java Basics - Anfänger-Themen 10
G Methoden Zugriff auf Methode.. aus einer anderen Klasse Java Basics - Anfänger-Themen 6
P Variablen einer Methode in andere Method übergeben Java Basics - Anfänger-Themen 6
Tacofan Variabel in einer anderen Methode Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben