Wie genau programmiere ich eine Assoziationsklasse?

DennisXX

Bekanntes Mitglied
Code:
-------   *                                     * --------------
|Leser|  -----------------------------------------|Buchexemplar|
-------                           |               --------------
                                  |
                             ----------
                             |Ausleihe|
                             ----------

Ich hoffe, dass Bild kann jeder sehen. zwischen den Klassen Leser (Attribute "name" und "adresse", Multiplizität *) und Buchexemplar (Attribute "sigantur", Multiplizität *) bestehe eine n:m Beziehung, die mithilfe der Assoziationsklasse Ausleihe (Attribute "beginn" und "ende") gebildet wird.

Dieses Beispiel habe ich aus Heide Balzert, Lehrbuch der Objektmodellierung, Seite 173. Diese Buch ist leider sehr theoretisch und ich habe keinerlei Ahnung, wie man so etwas in Java programmieren könnte. Kann mir vielelicht jemand hier im Forum ganz einfache Beipsielcode posten, wie ich so etwas machen könnte? Was ist weiß ist nur, dass in den Objekten der Klassen Leser und Buchexemplar so etwas wie Vector oder Arraylists sein müssen.

Besten Dank für eure Unterstützung !!
 
Zuletzt bearbeitet:
ganz einfaches Beispiel wäre:

Das Objekt leser hat eine eindeutige ID

Das Objekt Buch hat eine eindeutige ID

Die Klasse ausleihe besteht z.b. aus einer arraylist die jeweils einen integer-array mit 2 feldern aufnimmt
1. feld: =leserid
2. feld = buchid

somit kennt ausleihe welcher leser gerade welches buch hat bzw umgekehrt.

wie du das ganze dann einließt bzw ausließt ist dann wieder syntaxkram und hat wenig mit der logik zu tun, man kann es sicherlich auch eleganter als mit der arraylist lösen, aber das wäre mein 1. ansatz (als anfänger).

Gruß Firephoenix
 
Das wäre eher die Variante, wie man das in eine Datenbank packen würde.

Die Frage ist immer, in welcher Richtung man auf was zugreifen will. Hier wäre interessant zu wissen, welche "Ausleihen" ein Leser hat (z.B. um zu sehen, ob er Strafe zahlen muss oder noch ein weiteres Buch ausleihen darf) und andersherum würde einen interessieren, wer ein bestimmtes Buch ausgeliehen hat. Also wäre der praktischste Ansatz, das jeder Leser und jedes Buch eine Liste von Ausleihen besitzt. Aber das kommt natürlich immer auch auf den konkreten Anwendungsfall (und die verwendete Technologie, z.B. Persistenz-Frameworks wie JPA, Hibernate u.s.w.) an.
 
Hallo Dennis,

die einfachste minimal-Variante für die Ausleihe würde etwa so aussehen:

Java:
package library;

public class Ausleihe {
	
	private Leser leser;
	private Buchexemplar exemplar;
	
	public Leser getLeser() {
		return leser;
	}

	public Buchexemplar getExemplar() {
		return exemplar;
	}

	public Ausleihe(Leser leser, Buchexemplar exemplar){
		this.leser = leser;
		this.exemplar = exemplar;
	}
}

Normalerweise benutzt man eine solche assoziative Klasse um noch weitere Informationen abzuspeichern. Z.B. von wann bis wann wurde das Buch ausgeliehen, aber das musst Du dann selbst entscheiden.

Wenn Du jetzt im Hauptprogramm irgendwo jeweils eine ArrayList für Leser und Buchexemplare hast, dann könntest Du die Assoziation z.B. so herstellen:

Java:
package library;

import java.util.ArrayList;

public class Main {

	private ArrayList<Leser> leserListe = new ArrayList<Leser>();
	private ArrayList<Buchexemplar> exemplarListe = new ArrayList<Buchexemplar>();
	private ArrayList<Ausleihe> leihListe = new ArrayList<Ausleihe>();
	
	...
	
	public void irgendeineMethode(){
		
		...
		
		//Es müssen jeweils mindestens ein Leser und ein Exemplar in den jeweiligen Listen vorhanden sein.
		
		Leser leser = leserListe.get(0);
		Buchexemplar exemplar = exemplarListe.get(0);
		
		Ausleihe leihe = new Ausleihe(leser, exemplar);
		leihListe.add(leihe);
	}
}

Die "leihListe" könnte alternativ, bzw. zusätzlich auch beim Leser selber oder beim Exemplam gespeichert sein. Diese Designentscheidung hängt aber von der jeweiligen Situation ab. Gruß, Phill
 

Zurück
Oben