# Verständnissproblem Objekte/Klassen



## sgu (15. Jan 2013)

Hallo,

habe ein Verständnissproblem bezüglich einer Aufgabe. In der Aufgabe geht es darum eine Kartei zu programmieren die aus den Klassen Geburtstagskartei, Geburtstag, Person und Date besteht. Dabei soll ein Objekt der Klasse Geburtstagskartei eine Reihe von Objekten der Klasse Geburtstag enthalten. Eine Objekt der Klasse Geburtstag besteht aus Objekten der Klasse Person und Date. Über die Klasse Geburtstagskartei soll man dann die Datensätze hinzufügen, ausgeben, suchen und löschen können (habe die ausführliche Beschreibung im Anhang hochgeladen).
Ich verstehe jetzt vom Prinzip her nicht wie man es bewerkstelligen soll, dass ein Objekt der Klasse Geburtstagskartei aus Objekten der Klasse Geburtstag und das wiederum aus Objekten der Klasse Person und Date besteht.
Wäre euch über einen kleinen Gedankenanstoß oder eine Quelle mit einem Beispielprogramm sehr dankbar um die Aufgabenstellung nachvollziehen zu können.
Vielen Dank schon mal im voraus !!!


----------



## Crian (15. Jan 2013)

Geburtstagskartei enthält wohl am besten eine Datenstruktur (Liste, Array) mit Geburtstagen.


----------



## sgu (15. Jan 2013)

So habe ich mir das auch schon gedacht. Mittels vector wollte ich das realisieren.
Mein Problem ist aber, dass ich nicht weiß, wie ich die einzelnen Objekte miteinander verknüpfen muß, also das ein Objekt Geburtstagkartei aus Objekten Geburtstag und die wiederum aus Objekten Date und Person bestehen.

Sagen wir mal ich erstelle ein Objekt Person und ein Datum:


```
Person per1 = new Person("Max Mustermann", "Mustermannstr. 8 11111 Musterstadt");
GregorianCalendar cal1 = new GregorianCalendar();
```

Laut Aufgabe soll ein Objekt der Klasse Geburtstag aus Objekten der Klasse Date und Person bestehen.
Wie bekomme ich den Zusammenhang zwischen Objekt Geburtstag und Objekt Klasse und Date hergestellt, wenn ich ein Objekt Geburtstag erzeuge.

```
Geburtstag geb1 = new Geburtstag();
```

Mir ist da das Prinzip noch nicht klar. Hoffe ihr versteht jetzt mein Problem.


----------



## Timothy Truckle (15. Jan 2013)

sgu;980603aus Objekten der Klasse Geburtstag und das wiederum aus Objekten der Klasse Person und Date besteht.[/QUOTE hat gesagt.:
			
		

> Die Beschreibung "_besteht aus_" bedeutet, dass das Subjekt (hier die Klasse Geburtstag) die Objekte (hier Person und Date) enthält. Man muss also eine Ablage dafür schaffen. In Java sind das Referenzen vom jeweiligen Typ:
> 
> 
> 
> ...


----------



## sgu (17. Jan 2013)

Ich jetzt mal die drei Klassen erstellt und die Objekte per Referenz übergeben. Die Klasse Date aus der Aufgabenstellung habe ich erst mal noch weg gelassen.


```
public class Person {
	private String name;
	private String adresse;
	
	public Person() {   }

	public Person(String name, String adresse) {
		this.name = name;
		this.adresse = adresse;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public void setAdresse(String adresse) {
		this.adresse = adresse;
	}
	
	public String getName() {
		return name;
	}
	
	public String getAdresse() {
		return adresse;
	}
}
```



```
public class Geburtstag {
	private Person person;
	
	public Geburtstag(Person person) {
		this.person = person;
	}
	

}
```



```
public class Geburtstagskartei {
	private Geburtstag geburtstag;
	private Person person;
	
	
	public Geburtstagskartei() {   }
	
	public Geburtstagskartei(Person person, Geburtstag geburtstag) {
		this.person = person;
		this.geburtstag = geburtstag;
	}
	
	public void hinzufuegen() {
		
	}
	
	public void ausgabe() {
		
	}

	public static void main(String[] args) {
	
	}

}
```


Habe jetzt aber noch ein Verständnissproblem bezüglich der Objekterzeugung. Wenn ich jetzt in der Main-Methode ein Objekt der Klasse Geburtstagskartei erzeuge (es soll laut Aufgabenstellung ja nur ein Objekt der Klasse Geburtstagskartei erstellt werden, dass aus vielen Objekten der Klasse Geburtstag besteht) wie kann ich dann z.B. über die Methode geburtstagskartei.hinzufuegen() einen komplett neuen Datensatz mit einer Person (später auch noch mit einem Datum) erstellen. Mir ist noch nicht klar wo und wann ich ein Objekt der Klasse Person und Geburtstag erzeugen muss und wie das mit der Klasse Geburtstagskartei verknüpft werden muss, damit ich Zugriff aus dem Hauptprogramm auf die anderen Klassen habe.


----------



## SlaterB (17. Jan 2013)

wo und wann alles passiert ist dir überlassen, so wichtig ist das am Anfang nicht,
der einfachste Weg ist meist, dass in der main alles steht:

```
main {
   // erstelle Geburtstagskartei k
   // erstelle Person p
   // erstelle Geburstag g mit p
   // k.hinzufügen(g);


}
```
usw.

eher zu vermeiden ist, zuviele Variablen zu erzeugen, etwa danach p2, g2 für nächsten Geburstag usw.,
vielleicht Schleife möglich, anderseits auch nicht wenn man verschiedene Einzeldaten hat,

genauso kann aber auch die main an der Geburtstagsdatei eine Methode befuelleDichMitTestDaten() aufrufen
und da steht dann eben vergleichbares,

will man von der Konsole einlesen wird es komplizierter
usw. usf.


----------



## Timothy Truckle (17. Jan 2013)

sgu hat gesagt.:


> ```
> public class Person {
> private String name;
> private String adresse;
> ...


Lass diese leeren Konstruktoren weg. Die führen dazu, dass Du ungültige Objekte erzeugen kannst und folglich später beim Zugriff auf die Objektvariablen immer prüfen musst, ob die 
	
	
	
	





```
null
```
 sind.

Und nein, in den Zeilen 2 und 3 vorläufige dummy-Strings zuzuweisen ist keine gute Lösung!





sgu hat gesagt.:


> [JAVA=12]	public void setName(String name) {
> this.name = name;
> }
> 
> ...


Setter sollten nur dann erzeugt werden, wenn sie wirklich notwendig sind, d.h. dass es einen wirklich wirklich guten Grund geben muss, warum eine Objektvariable nachträglich von außen geändert werden muss. Getter sind nicht ganz so problematisch, sollten aber auch nicht "auf Vorrat" erzeugt werden. 

bye
TT


----------

