Klassen Codeumsetzung einer Komposition

AlexFox

Mitglied
Hallo Liebe Gemeinde,

Ich soll eine für ein Beispiel einer Komposition ein Javacode schreiben.

Als Beispiel habe ich das mit dem Haus und dem Raum gewählt.

Haus <#>1--------------1,*Raum

Wenn das Haus abgerissen wird ist auch der Raum weg.
ich habe bereits die Klassen für die Haus und Raum geschrieben und mit jeweils einen Attribut und einer Methode bestückt. Aber wie setzte ich jetzt die Komposition darin um?

Java:
public class Raum {

	//Attribute 
	private String farbe;
	
	//default Konstruktor
	public Raum() {
	}
		
	//Methoden ausgabe der Raumanzahl
	public void printFarbe() {
		System.out.println(farbe);
	}
}
Java:
public class Haus {
	
	//Attribute 
	private int anzahlRaeume;
	
	//default Konstruktor
	public Haus() {
	}
		
	//Methoden ausgabe der Raumanzahl
	public void printRaeume() {
		System.out.println(anzahlRaeume);
	}
}

Danke schonmal für die Anreize zum weiterdenken !
 

Timothy Truckle

Top Contributor
ich habe bereits die Klassen für die Haus und Raum geschrieben und mit jeweils einen Attribut und einer Methode bestückt. Aber wie setzte ich jetzt die Komposition darin um?
Gib dem Haus einfach eine Referenz auf Raum (oder vielleicht besser eine Liste von Räumen) und initialisiere diese im Konstruktor
Java:
public Haus(String... raumNamen){
  for(String raumName : raumNamen)
    this.raumListe.add(new Raum(raumName ));
}
bye
TT
 

AlexFox

Mitglied
Danke erstmal an TT für deine Rasche Antwort.

Ich habe das mit dem Array berücksichtig.

Es sieht so aus:

Java:
public class Haus {
	
	
	Raum raumliste[] = new Raum[10];
	
	//Attribute 
	private int anzahlRaeume;
	
	//default Konstruktor
	public Haus() {
		
	}
		
	//Methoden ausgabe der Raumanzahl
	public void printRaeume() {
		System.out.println(anzahlRaeume);
	}
	
	// getter setter
	public int getAnzahlRaeume(){
		return anzahlRaeume;
	}
	
	public void setAnzahlRaeume(int anzahlRaeume){
		this.anzahlRaeume = anzahlRaeume;
	}
}
Java:
public class Raum {
	
	//Attribute 
	private String[] raumliste;
	
	//default Konstruktor
	public Raum() {
		
	}
		
	//Methoden ausgabe der Raumanzahl
	public void printNummer() {
		System.out.println();
	}
	
	// getter setter
	public String[] getRaumliste() {
		return raumliste;
	}

	public void setRaumliste(String[] raumliste) {
		this.raumliste = raumliste;
	}
}

Also logisch scheint mir eine Komposition zu sein aber habe ich auch richtig in code umgesetzt?
 

Timothy Truckle

Top Contributor
Ich habe das mit dem Array berücksichtig.
Ich meine zwar, ich schrieb was von "Liste", aber OK...

Es sieht so aus:
Java:
public class Haus {
	Raum raumliste[] = new Raum[10];
Solche "muss"-Variablen sollten immer
Code:
private final
deklariert werden.

[JAVA=6] //Attribute [/code]
bitte keine Trivialkommentare! Kommentiert wird nur um zu sagen warum der Code so ist wie er ist.

[JAVA=7] private int anzahlRaeume;[/code]
mit einer Liste wäre diese Variable unnötig.

[JAVA=10] public Haus() {

}[/code]
Was nützt ein Haus ohne Räume? Den Konstruktor hättest Du aus meinem Post kopieren können...
[JAVA=15] public void printRaeume() {
System.out.println(anzahlRaeume);
}[/code]
Der Methodenname sagt nicht, was die Methode macht. Bitte mehr Sorgfalt bei der Namensfindung.

[JAVA=24] public void setAnzahlRaeume(int anzahlRaeume){
this.anzahlRaeume = anzahlRaeume;
}[/code]
Gaaaanz gefährlich! Objektvariablen von außen zu setzen ist ja im Allgemeinen schon grenzwertig, aber hier wird die Varable geändert ohne das Array, auf dass es sich beziehen soll anzupassen.
Ich wiederhole mich auch gern: mit 'ner Liste brauche ich diese Variable nicht und komme so auch nicht in diese Situation.

Die bessere Lösung wäre hier
Code:
public void fuegeHinzu(Raum raum)
gewesen. da hätte man dann den Zähner passen zum Füllstand des Arrays anpassen können, wenn man denn keine Liste will...

Java:
public class Raum {
	
	//Attribute 
	private String[] raumliste;
Was soll denn ein Raum mit einer Liste (anderer) Räume?
Also logisch scheint mir eine Komposition zu sein aber habe ich auch richtig in code umgesetzt?
Scheint mit leider noch nicht so, dass Du es verstanden hättest.
Aber nur Mut, dass wird schon.

bye
TT
 

AlexFox

Mitglied
Ui vielen Dank für die echt gute und kontruktive Kritik, dass hilft mir sehr.

Na gut ich werde mal versuchen das in meinen kopf auseinander und wieder zusammen zu klamüsern:D
 

Neue Themen


Oben