Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

1-n-assosiasjoner kodes i Java med et Collection-felt spesialisert med < > til riktig type og med navn tilsvarende rollen (gjerne i flertall). Navngivingen av feltet er forsåvidt underordnet, siden det er innkapslingen i form av get-, bl.a. add og remove-metoder som er viktig. Her er diagrammet for en generell 1-n-assosiasjon og kode-malen for de to klassene som deltar i den:

PlantUML Macro
class Rolle1Klasse {
}
class Rolle2Klasse {
}

Rolle1Klasse "rolle1 0:1" -- "rolle2 0:n" Rolle2Klasse: assosiasjon


Code Block
languagejava
public class Rolle1Klasse {

	private Collection<Rolle2Klasse rolle2Collection<Rolle2Klasse> roller2 = new ArrayList<Rolle2Klasse>();

	public void addRolle2(Rolle2Klasse getRolle2( rolle2) {
		if (! roller2.contains(rolle2)) {
			return rolle2this.roller2.add(rolle2);
		}
	}

	public void setRolle2removeRolle2(Rolle2Klasse rolle2) {
		this.rolle2 = rolle2roller2.remove(rolle2);
	}
}
Code Block
languagejava
public class Rolle2Klasse {

	private Rolle1Klasse rolle1;

	public Rolle1Klasse getRolle1() {
		return rolle1;
	}
	public void setRolle1(Rolle1Klasse rolle1) {
		this.rolle1 = rolle1;
	}
}

For å sette opp en gjensidig kobling, så må en opprette ett objekt av hver type og kalle dere respektive et objekt av den ene typen og flere av den andre og kalle henholdsvis add- og set-metoder med det objekt av den andre objektet typen som argument:

PlantUML Macro
object "r21 : Rolle2Klasse" as r21 {
}
object "r1 : Rolle1Klasse" as r1 {
}
object "r2r22 : Rolle2Klasse" as r2r22 {
}

r1 -left-> "rolle2" r2
r2 r21
r1 -right-> "rolle2" r22
r21 --> "rolle1" r1
r22 --> "rolle1" r1


Code Block
languagejava
Rolle1Klasse r1 = new Rolle1Klasse();
Rolle2Klasse r2r21 = new Rolle2Klasse(), r22 = new Rolle2Klasse();
r1.setRolle2(r2addRolle2(r21);
r1.addRolle2(r22);
r21.setRolle1(r1);
r2r22.setRolle1(r1);

Med koden i klassene over, så må en altså selv sørge for konsistens, dvs. at hvis r1 er koblet til r2 gjennom rolle2, så er r2 koblet til r1 gjennom rolle1. Det er bedre om dette skjer automatisk, så en er sikret konsistens. Merk at dette bare gjelder når assosiasjonen er to-veis, noe den ikke alltid er.

...