Seite 1 von 1

[UML] Assoziation mit mehreren Rollennamen

Verfasst: 18.08.2011, 15:14
von reddox
...ist sowas in UML möglich, wenn ja, wie?

Um das Problem mal zu verdeutlichen, hier ein simples, aus der vereinfachten Sicht schon fast sinnloses Beispiel:

Code: Alles auswählen

public class Param {
	public int position;
	public int dataTypeID;
	public int value;
	public Service itsService;
}

public class Service {
	public List<Param> requestParams;
	public List<Param> responseParams;
}
Nun möchte ich dieses Stück Code und passende Accessoren von Rhapsody erzeugen lassen (navigierbar jeweils in beide Richtungen). Dazu müsste ich diese Beziehung erst einmal modellieren. Nun weiss ich aber nicht wie und ob das überhaupt geht - dazu müsste ein Assoziationsende 2 verschiedene Rollennamen haben - oder gibt es eine andere Möglichkeit?

Die einzige die mir einfällt wäre es, dies wie folgt zu gestalten:

Code: Alles auswählen

public class Param {
	public int position;
	public int dataTypeID;
	public int value;
}

public class RqParam extends Param {
	public Service itsService;
}

public class RspParam extends Param {
	public Service itsService;
}

public class Service {
	public List<RqParam> requestParams;
	public List<RspParam> responseParams;
}
Aber so richtg befriedigen will mich diese Lösung auch nicht.

Kennt jemand eine bessere Lösung?

Edit: Codebeispiele etwas angepasst um das eigentliche Problem etwas mehr zu verdeutlichen (ein Assoziatsende 1 Rollenname, das andere 2 verschiedene Rollennamen)

Re: [UML] Assoziation mit mehreren Rollennamen

Verfasst: 18.08.2011, 22:15
von LaBerg
Hmm also das Tool das du verwendest kenn ich nicht. Da kann ich dir nicht helfen, wie man das dort dann einpflegt.
Bezüglich der Modellierung ist es in UML jedoch so, dass es mehrer Assoziationen zwischen den selben Klassen geben kann. Das sind dann eben einfach zwei Linien zwischen den selben Klassen. Die können dann auch unterschiedliche Multiplizitäten haben. Kommt vom Prinzip her auch recht häufig vor.
Da ich zu Faul zum Malen bin verweise ich mal hier drauf: http://de.wikipedia.org/wiki/Assoziation_%28UML%29
Am Ende des Abschnitts "Assoziationsenden" sieht man wie das im Diagramm aussieht.

Ich hoffe das beantwortet deine Frage und ich habe sie nicht völlig falsch verstanden.

Re: [UML] Assoziation mit mehreren Rollennamen

Verfasst: 19.08.2011, 07:16
von reddox
Im Prinzip hast du mich richtig verstanden. Allerdings hab ich mich hier vllt etwas unklar ausgedrückt.
Das Problem daran 2 Assoziationen zu nutzen ist, dass ich gerne das Assoziationsende von Param auf Service nur einmal möchte (im angehängtem Beispiel: itsService)
2 Mal den gleichen Rollennamen (wie im Beispiel angedeutet) nehmen geht nicht, da dann die Zugriffsfunktionen und Attributname doppelt vorhanden wären, was der Codegenerator nicht mag.

Ich sehe hier momentan nur 2 Lösungen:
- das Assoziationsende itsService nicht navigierbar gestalten und händisch implementieren (was allerdings den Dokumentationswert des UML Diagramms vermindert)
- die bereits erwähnten Wrapperklassen (was mich aber in späterer Instanz mit zusätzlichem Typecasts belasten wird...)
problem.png
problem.png (4.55 KiB) 2394 mal betrachtet

Re: [UML] Assoziation mit mehreren Rollennamen

Verfasst: 19.08.2011, 18:14
von LaBerg
Achso du willst im Prinzip für die Navigation der Richtung Param ---> Service immer den gleichen Namen verwenden. Unabhängig davon ob Request oder Response.
Ich würde in dem Fall die beiden Assoziationen Service ---> Param nur in diese Richtung navigierbar machen und eine weitere hinzufügen. Die dann in die Richtung Param ---> Service navigierbar ist.
Ich habe es einfach mal in deine Vorlage mit reingeschmiert, wie ich es denke:
problem.png
problem.png (6.26 KiB) 2358 mal betrachtet

Re: [UML] Assoziation mit mehreren Rollennamen

Verfasst: 22.08.2011, 08:36
von reddox
Klar, darauf hätte ich auch kommen können, danke ;-) Irgendwie war ich zu sehr auf beidseitige Assoziationen fixiert...