You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 11 Next »

Denne siden skisserer hvordan n-n-assosiasjoner, også kalt mange-til-mange-assosiasjoner, kan kodes.

n-n-assosiasjoner er koblinger mellom objekter hvor ett objekt av en type kan ha flere av en navngitt kobling til andre objekter av en annen eller samme type, og disse objektene også har en kobling tilbake men kan også ha flere koblinger til andre objekter. Et eksempel er at et emne kan undervises av flere personer, og at en person kan undervise i flere fag. Et Person-objekt kan altså ha ingen, én eller flere foreleser-koblinger til Emne-objekter, mens et Emne-objekt kan ha en eller flere forelest av-koblinger til Person-objekter.

n-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 bl.a. add og remove-metoder som er viktig. Her er diagrammet for en generell n-n-assosiasjon og kode-malen for de to klassene som deltar i den:

Rolle1KlasseRolle2Klasseassosiasjonrolle1 0:nrolle2 0:n
public class Rolle1Klasse {

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

	public void addRolle2(Rolle2Klasse rolle2) {
		// unngå duplikat
		if (! roller2.contains(rolle2)) {
			this.roller2.add(rolle2);
		}
	}

	public void removeRolle2(Rolle2Klasse rolle2) {
		this.roller2.remove(rolle2);
	}
}
public class Rolle2Klasse {

	private Collection<Rolle1Klasse> roller1 = new ArrayList<Rolle1Klasse>();

	public void addRolle1(Rolle1Klasse rolle1) {
		// unngå duplikat
		if (! roller1.contains(rolle1)) {
			this.roller1.add(rolle1);
		}
	}

	public void removeRolle1(Rolle1Klasse rolle1) {
		this.roller1.remove(rolle1);
	}
}

For å sette opp en gjensidig kobling, så må en opprette en eller flere av den ene typen og en eller flere av den andre og kalle add-metoder med objekt av den andre typen som argument:

 

  • No labels