2013-09-16 1 views
1

Я хотел бы, чтобы смоделировать следующий код с использованием UML диаграммы:Композиции в UML для поля типа Dictionary <Bar, Quux>

public class Bar { /* ... */ } 
public class Quux { /* ... */ } 
public class Foo { 
    public Dictionary<Bar, Quux> aField; 
} 

Foo класса состоят многих Bar/Quux пара, в том смысле, состава и агрегации. Как я могу представить это с помощью UML?

только "правильно", что я могу думать о довольно громоздко:

Foo is composed of KeyValuePair<Bar, Quux>, which has a 1-1 relation with Bar, and a 1-1 relation with Quux

Но я предпочел бы что-то вдоль линий этого:

Foo is composed of ... and the line splits, one line goes to Bar, and the other to Quux

Я мог бы также использовать возможно слишком очевидное решение, показывающее поле в Foo, но я бы потерял состав информацию, и я хотел бы иметь некоторую линию, которая визуально соединяет Foo, Bar и Quux:

Putting the Dictionary<Bar, Quux> field in Foo, without any lines between the classes.

ответ

0

Почему вы не можете поставить ключ и значение на первой диаграмме? Поэтому на первой диаграмме замените верхний «1» (рядом с «Бар») на «ключ» и 1 следующий qo Quux с «Value».

Вторая диаграмма неверна, так как может быть несколько баров и несколько Quux, но сумма не обязательно должна быть одинаковой; и нет никакой связи между ними.

+0

Ну, я хочу избежать большой «KeyValuePair » на моей первой диаграмме, потому что она отвлекает и чувствует себя как детали реализации, которых не должно быть. Моя забота заключается не в ярлыках 'key' и' value', а о том, как представить композицию с использованием словаря/ассоциативного списка/... в элегантном стиле. –

+2

В этом случае я бы пошел на второе решение ... может быть, добавить рядом с Foo 'Dictionary', так что ясно, что Bar и Quux имеют отношение. Это может быть не 100% UML, но я уверен, что все будут знать, что имеется в виду. –

+1

Вы можете назначить это как стереотип для Foo: > – observer