Objektkommunikation

Slaid

Mitglied
Hey,

Ich habe ein kleines Problem und weiß nicht wie ich genau weiter vorgehen soll.

folgendes UML Diagramm ist gegebenen.



Der ganze Kram soll nun so auszugeben sein.

Java:
public class Aufgabe17_3 
{		
	public static void main (String[]args)
	{
		
		Uhrzeit u = new Uhrzeit(12, 54);
		System.out.println(u);
		
		Mitarbeiter m = new Mitarbeiter("Max", "Mustermann", "mustermann@beispiel.com");
		
		System.out.println(m);
		
		Raum r = new Raum(18, 0, 1);
		System.out.println(r);
		
		Mitarbeiter m1 = new Mitarbeiter("Max", "Mustermann", "mustermann@ex.com");
		Mitarbeiter m2 = new Mitarbeiter("Tessa", "Loniki", "loniki@ex.com");
		Raum r1 = new Raum(18,0,1);
		Raum r2 = new Raum(2,1,9);
		Raum r3 = new Raum(2,1,10);
		
		m1.reserviere(r1, new Uhrzeit(12, 30), new Uhrzeit(14, 30), "VOOP");
		m1.reserviere(r2, new Uhrzeit(14, 30), new Uhrzeit(16, 30), "WebTech");
		m2.reserviere(r2, new Uhrzeit(12, 30), new Uhrzeit(13, 30), "Prog II");
		m2.reserviere(r3, new Uhrzeit(9, 30), new Uhrzeit(11,30), "ITM");
	
		System.out.println(r1);
		System.out.println(r2);
		System.out.println(r3);	
	}
}

bei
Java:
System.out.println(r1);
soll
Raum 18-0.1
gebucht von Max Mustermann (max.mustermann@beispiel.com) von 12:30 Uhr bis 14:30 für VOOP

ausgegeben werden.
Da ich nicht genau weiß wo mein Problem ist... werde ich einfach alle Klassen hier posten und hoffe, dass jemand was findet


Die Uhrzeit ist klar...
Java:
package Aufgabe17_3;

public class Uhrzeit 
	{
		private int uhr;
		private int minute;
		private int stunde;
		
		
		public Uhrzeit(int m, int s) 
		{
			this.minute = m;
			this.stunde = s;
		}
		
		public String toString() 
		{
			return this.minute + ":" + this.stunde;
		}
		
	}


Java:
package Aufgabe17_3;

import java.util.LinkedList;
import java.util.List;

	public class Mitarbeiter extends Person
	{
		
		protected List<Reservierung> buchung = new LinkedList<Reservierung>();
		private String email;
	
		public Mitarbeiter(String v, String n, String e) 
		{
			super(v,n);
			this.email = e;
		}
		
		public String toString() 
		{
			return super.toString() + " (" + email + ")";
		}

		public void reserviere(Raum r1, Uhrzeit uhrzeit, Uhrzeit uhrzeit2,
				String string) 
		{
			return;	
		}	
	}

beim Public reserviere habe ich überhaupt keine Ahnung wie ich jetzt alles ausgeben kann ... Ich habe nun einfach mal mit return; den Befehl beendet, damit es keine Fehlermeldung gibt.


Class Person dürfte auch richtig sein.
Java:
package Aufgabe17_3;

public class Person {
		
		private String vorname;
		private String nachname;
		
		public Person (String v, String n) {
			this.vorname = v;
			this.nachname = n;
		}
		
		public String toString() {
			return vorname + " " + nachname;
		}
	}



Bei der Reservierung bin ich mir schon wieder unsicher ... :bahnhof:
Java:
package Aufgabe17_3;

import java.util.LinkedList;
import java.util.List;


public class Reservierung {
	
	protected Raum raum;
	protected Mitarbeiter von;
	
	private String bemerkung;
	private Uhrzeit beginn;
	private Uhrzeit ende;
	
	public Reservierung(String b, Uhrzeit a, Uhrzeit e) {
		this.bemerkung = b;
		this.beginn = a;
		this.ende = e;
	}
	
	public void setBemerkung(String b) {
		this.bemerkung = b;
	}
	
	public void setMitarbeiter(Mitarbeiter m) {
		this.von = m;
	}
	
	public void setRaum(Raum r) {
		this.raum = r;
	}
	
	public String toString() {
		return "gebucht von " + von + " von " + beginn + " bis " + ende 
				+ " f??r " + bemerkung;
	}
}

und zum Schluss
Java:
package Aufgabe17_3;

public class Raum 
{
	private int geb;
	private int etage;
	private int raum;
	
	
	public Raum (int g, int e, int r)
	{
		
		this.geb = g;
		this.etage = e;
		this.raum = r;
	}
	public Reservierung addReservierung(Reservierung reserviere)
	{
		return reserviere;
	}
	public String toString()
	{
		return "Raum " + this.geb + "-" + this.etage + "." + this.raum;
	}
	
	
}

dort habe ich überhaupt keine Ahnung, wie ich die Methode addReservierung dort einbinden könnte.

Ich hoffe jemand kann mir helfen ...

Danke im Voraus
 

strußi

Top Contributor
du erstellst eine object vom Typ mitarbeiter
Mitarbeiter maxMuster001 =new Mittarbeiter( "Max", "Mustermann,", "max.mustermann@beispiel.com");

Reservieren geht dann so
Methode maxMuster001.reserviere( "gebäude", "etage", "raum", uhrzeitStart, uhrzeitEnde", "bemerkung", "mitarbeiter");
//in der Methode reserviere erstellst du ein Object vom Typ Reservierung, und rufst dann die Methoden
Java:
public void reserviere( "gebäude", "etage", "raum", uhrzeitStart, uhrzeitEnde", "bemerkung", "mitarbeiter"){
   Reservierung res =new Reservierung(uhrzeitStart, uhrzeitEnde);
   res.setRaum( gebäude, etage, raum);
   res.setBemerkung( bemerkung);
   res.setMitarbeiter( mitarbeiter);

   //und nun noch 
   buchung.add( res.toString); //die reservierung in die LinkedList hinzufügen
}
 

njans

Top Contributor
Naja du brauchst intern im Raum eben eine Liste, die speichert, welche Reservierungen auf den Raum existieren. Generell sollte wohl addReservierung nichts zurückgeben.
 

Slaid

Mitglied
Hm schonmal danke für die schnelle Antwort...

Ich habe dein Quellcode mal eingefügt bekomme aber einen Syntax Error ...

und ja im Raum sollte eine Liste sein. Hab die "add" Funktion erstmal so erstellt damit es keine Fehlermeldung gibt ...

Nur stehe ich gerade so dermaßen auf dem Schlauch, dass ich mittlerweile gar nichts mehr weiß

:bahnhof:???:L
 

strußi

Top Contributor
reservierung muss noch von raum erben

so wie in deinem uml-diagramm

sag ml ist das ein foto, oder hast du dafür eine Software benutzt, und wenn ja, welche?
 
Zuletzt bearbeitet:

Slaid

Mitglied
Hey es handelt sich um eine Grafik ...


Wie lass ich denn Reservierung richtig vom Raum erben ?
Ich stehe gerade so auf dem Schlauch und bekomme gar nichts mehr hin :bahnhof:
 
Zuletzt bearbeitet:

nvidia

Bekanntes Mitglied
Wie lass ich denn Reservierung richtig vom Raum erben ?[...]

Gar nicht, da die eingezeichnete Assoziation keine Vererbungsbeziehung darstellt. Hast du dich schon mal über Assoziationen informiert? Assoziation (UML) ? Wikipedia, http://michael.hahsler.net/JAVA/pdf/beziehungen.pdf, Galileo Computing :: Praxisbuch Objektorientierung – 4.3 Beziehungen zwischen Objekten etc. Es gibt im Netz wirklich dutzende Quellen zu diesem Thema. Und wahrscheinlich wird es sogar in den Materialien beschrieben die du erhalten hast bevor man dir diese Aufgabe stellte...
 

Harry Kane

Top Contributor
Wie lass ich denn Reservierung richtig vom Raum erben ?
Stimme nvidia zu. Reservierung sollte NICHT von Raum erben. Die Linie zwischen Reservierung und Raum zeigt keine Vererbung an, sondern lediglich Komposition, so wie die Linie zwischen Mitarbeiter und Reservierung.
Raum braucht lediglich eine Liste mit Reservierungen (LinkedList/ArrayList o.ä.). Das sollte es schon sein.
Für Extrapunkte:
Wenn du einem Raum eine neue Reservierung hinzufügst, kannst du durch alle Reservierungen gehen, die schon in der Liste stehen und schauen, ob die Startuhrzeit der neuen Reservierung vor dem Ende einer bereits vorhandenen Reservierung liegt. Wenn ja, ist der Raum "überbucht", und du könntest eine IllegalArgumentException werfen.
 
T

trez

Gast
reservierung muss noch von raum erben

so wie in deinem uml-diagramm

Von welchem UML-Diagramm redest du?

Bei dem hier geposteten besteht KEINE Vererbung zwischen Reservierung und Raum, sondern nur eine 1..n Beziehung.

Also muss in der Klasse "Raum" eine Liste von Reservierungen vorhanden sein
 

Slaid

Mitglied
Hey,

Ich hab mit einer weiteren Person den Kram umgebastelt und sind nun nur noch an einer Stelle am rätseln wie wir das Problem lösen können.

Unsere Main
Java:
package Aufgabe17_3LuisaIch;
public class Test {
	public static void main(String[] args) {
		
		Uhrzeit u1 = new Uhrzeit(12, 54);
		System.out.println(u1);
		
		Mitarbeiter m1 = new Mitarbeiter("Max", "Mustermann", "mustermann@ex.com");
		System.out.println(m1);
		
		Raum r1 = new Raum(18, 0, 1);
		System.out.println(r1);
		
		m1.reserviere(r1, new Uhrzeit(12, 30), new Uhrzeit(14, 30), "VOOP");

		
		/*Mitarbeiter m2 = new Mitarbeiter("Tessa", "Loniki", "loniki@ex.com");
		Raum r1 = new Raum(18,0,1);
		Raum r2 = new Raum(2,1,9);
		Raum r3 = new Raum(2,1,10);
		
		m1.reserviere(r2, new Uhrzeit(14, 30), new Uhrzeit(16, 30), "WebTech");
		m2.reserviere(r2, new Uhrzeit(12, 30), new Uhrzeit(13, 30), "Prog II");
		m2.reserviere(r3, new Uhrzeit(9, 30), new Uhrzeit(11,30), "ITM");
	*/
		}
}

Die Raum Klasse
Java:
package Aufgabe17_3LuisaIch;
import java.util.LinkedList;
import java.util.List;

public class Raum {
	
	protected Reservierung reservierung;
	
	protected List<Reservierung> reservierungen = new LinkedList<Reservierung>();
	
	private int geb;
	private int etage;
	private int raum;
	
	public Raum(int g, int e, int r) {
		this.geb = g;
		this.etage = e;
		this.raum = r;
	}

	public String toString() {
		String ret = "";
		if (reservierungen.isEmpty()) {
			ret += "Raum " + geb + "-" + etage + "." + raum;
		}
		else {
			for (Reservierung o : reservierungen) {
				ret += "Raum " + geb + "-" + etage + "." + raum + "\n" +
			reservierung.toString(); //läuft nicht
									
			}
		}
		return ret;
	}
	
	public void addReservierung(Reservierung r) {
			reservierungen.add(r);	
	}
}

Hier sagt er dass Reservierung o:
Variable not used und naja

Java:
else {
			for (Reservierung o : reservierungen) {
				ret += "Raum " + geb + "-" + etage + "." + raum + "\n" +
			reservierung.toString(); //läuft nicht
									
			}
		}
		return ret;

Vllt könnt ihr mir den letzten Schritt verraten ... morgen muss der Kram laufen

Liebe Grüße
 

VfL_Freak

Top Contributor
Mh.
Was muss denn sonst da rein ?
entweder Groß- ODER Kleinschreibung ... Du musst Dich schon für eins entscheiden ;(

Java:
for (Reservierung o : reservierungen)    // hier Großgeschrieben deklariert !!!
{
            ret += "Raum " + geb + "-" + etage + "." + raum + "\n" +
            reservierung.toString();  // hier Kleingeschrieben verwendet !!!
 

Slaid

Mitglied
Okay das habe ich jetzt auch verstanden

:toll:
Java:
else {
			for (Reservierung o : reservierungen) {
				ret += "Raum " + geb + "-" + etage + "." + raum + "\n" +
			Reservierung.toString(); //läuft nicht
									
			}
		}
		return ret;

Nur habe ich jetzt ein Problem mit dem toString ...
 

Slaid

Mitglied
Ich hatte gehofft, dass du mir das beantworten könntest..

Eclipse gibt mir die Fehlermeldung

Cannot make a static reference to the non-static method toString() from the type Reservierung

Java:
package Aufgabe17_3LuisaIch;
public class Reservierung {
	
	protected Raum raum;
	protected Mitarbeiter von;
	
	private String bemerkung;
	private Uhrzeit beginn;
	private Uhrzeit ende;
	
	public Reservierung(String b, Uhrzeit a, Uhrzeit e) {
		this.bemerkung = b;
		this.beginn = a;
		this.ende = e;
	}
	
	public void setBemerkung(String b) {
		this.bemerkung = b;
	}
	
	public void setMitarbeiter(Mitarbeiter m) {
		this.von = m;
	}
	
	public void setRaum(Raum r) {
		this.raum = r;
	}
	
	public String toString() {
		return "gebucht von " + von + " von " + beginn + " bis " + ende 
				+ " für " + bemerkung;
	}
}

In der Klasse Reservierung muss aber toString vorhanden sein ...
Langsam gehen mir die Ideen aus ...
 

Slaid

Mitglied
okay danke erstmal dafür


Hab die Methode nun so verändert und als static deklariert
Java:
public static String ToString() {
		return "gebucht von " + von + " von " + beginn + " bis " + ende 
				+ " für " + bemerkung;
	}


aber nun sagt er wieder dass Reservierung x leer ist ...

Java:
public String toString() {
		String ret = "";
		if (reservierungen.isEmpty()) {
			ret += "Raum " + geb + "-" + etage + "." + raum;
		}
		else {
			for (Reservierung x : reservierungen) {
				ret += "Raum " + geb + "-" + etage + "." + raum + "\n" +
				Reservierung.ToString(); 
									
			}
		}
		return ret;
	}
 
Zuletzt bearbeitet:

Harry Kane

Top Contributor
Was für ein Eiertanz....
Ersetz in der toString()-Methode der Raum-Klasse, genauer in der Schleife über alle für diesen Raum hinterlegten Reservierungen, einfach "reservierung" durch "o".
Die Variable "o" ist eine Referenz auf die aktuelle Reservierung im aktuellen Iterationsschritt, und "reservierung" ist zwar als Instanzvariable deklariert, wird aber nirgends definiert. Deshalb müsste da eine NullPointerException geflogen sein, aus der du (@TE) ein schnödes "//läuft nicht" gemacht hast.
Schmeiss den ganzen Kram mit "Reservierung" (also den Bezug auf die Klasse Reservierung, nicht auf eine bestimmte Instanz) und deine neue statische "ToString" mit großem "T" einfach weg.

Edith hat mich gerade darauf hingewiesen, daß du nach dem Hinzufügen deiner statischen ToString() Methode deine Reservierung-Klasse gar nicht mehr kompilieren können solltest, weil in dieser Methode einige nicht-statische Variable verwendet werden. Von einem solchen Feheler sagst du aber nix. Sehr merkwürdig. Nicht daß jetzt alle in ToString() verwendeten Variablen auch als statisch deklariert sind.
 
Zuletzt bearbeitet:

Slaid

Mitglied
Danke für die Hilfe
ich kenn mich halt nicht so gut aus mit dem Kram... bin quasi noch ein Anfänger

Werd mich da noch mal durchlesen müssen...
Programm läuft zwar immer noch nicht aber das wird morgen denn so hoffe ich besprochen

Schönen Abend noch und danke !
 

Neue Themen


Oben