2016-04-25 12 views
0

Ich habe ein Klassendiagramm, das ein Wörterbuch (in Python-Begriffen) als Attribut hat. Dies ist die Grundstruktur:Darstellen HashMap im Klassendiagramm

serverEntry = { creditCardObj1 : accountBalance1, creditCardobj2 : accountBalance2, ...} 

Um zu klären, ist creditCardObj1 eine Instanz einer Klasse, während Credit accountBalance1 ein Integer-Wert ist und in ähnlicher Weise für die anderen Einträge im Wörterbuch.

Ich lese das in Java, es heißt HashMap. In jedem Fall möchte ich es in meinem UML-Klassendiagramm implementieren. Irgendwelche Tipps, wie man das macht. Ich verwende Visio 2007, daher wäre es noch hilfreicher, wenn jemand dies erklären könnte.

+0

Sie erhalten möglicherweise keine Benachrichtigung über meine neue Antwort, es sei denn, ich gebe hier einen Kommentar ein. Siehe unten. –

Antwort

-1

Es gibt keine einzige Wahrheit und es ist nur eine Designentscheidung. Hier sind ein paar Varianten:

enter image description here

Wenn Sie nur einen Hash in Ihrer Python-Anwendungscode darstellen möchten, können Sie einfach mit der einfachen Klasse nach rechts gehen kann, die durch ihren Namen sagt nur, dass es ein repräsentiert Hash. Und da Sie den Hash nicht implementieren müssen (es ist bereits im Python-Interpreter ausgeführt), wäre das in Ordnung.

Wenn Sie den Python-Interpreter implementieren, müssen Sie Details dazu anzeigen. Die Mittelklasse verwendet einfach zwei Arrays mit den Schlüsseln und den Objektreferenzen. Die linke verwendet ein Schlüssel/Objekt-Paar, das in einer separaten Klasse gebündelt ist. Es gibt wahrscheinlich mehr Möglichkeiten, eine Hash-Implementierung zu zeigen.

+0

Danke. Ich habe erwogen, die mittlere Implementierung zu verwenden, aber mir ist aufgefallen, dass es keine explizite Beziehung zwischen den Schlüsseln und den Werten gibt. Wird davon ausgegangen, dass die Hash-Nomenklatur verwendet wird oder gibt es eine Möglichkeit, das Mapping darzustellen? Ansonsten werde ich nur die ganz linke Implementierung verwenden – SpiderWasp42

+0

Ich würde empfehlen, die richtige zu verwenden. Die Namenskonvention ist gut genug. Alles, was Sie in Ihrem Python-Code wissen müssen, ist, dass Sie einen Hash verwenden. Und das macht deutlich, dass Sie eindeutige Schlüssel/Wert-Paare verwenden. Die mittlere Implementierung ist eigentlich nur eine sehr einfache und wird im Python-Interpreter selbst nicht verwendet. –

1

Ich werde nicht viel Mühe darauf verwenden, da bereits eine andere Antwort gewählt wurde. Diese Antwort deckt nicht die nächste Sache in UML mit einer HashMap ab: der Qualifier. Es wird als Rechteck zwischen einer Klasse und einer Assoziation gezeichnet. Innerhalb des Rechtecks ​​befindet sich ein Name und ein Typ. Was es bedeutet, dass die Assoziation bei einer Instanz dieses Typs eine Anzahl von Instanzen von Dingen am anderen Ende der Assoziation ergeben wird. Diese Anzahl von Instanzen wird mit einer Multiplizität angegeben.

Für Ihre Zwecke würden Sie creditCard: CreditCard innerhalb der Qualifikation Rechtecks ​​und Integer am anderen Ende des Vereins, mit einer Vielzahl von 1 setzen.

0

Ich glaube, dass diese Frage mehr über UML als über die Programmiersprache ist. So gestatten Sie mir die Sprache, die ich in wohler fühlen zu verwenden.

C# nennt es auch Wörterbuch, Dictionary<string, T> zum Beispiel mit einem string für den HashKey. Das UML-Klassendiagramm in Visual Studio (ich benutze hier die Community Edition von VS 2015) ist zum Codieren glücklicherweise nah genug, so dass das UML-Modell grundsätzlich das Metamodell der Sprache ist und das Diagramm nur eine andere Ansicht als der echte Code ist.

Dies ist praktisch, weil echte Programmierprobleme - wie die von Ihnen gewünschte - direkt im Diagramm angesprochen werden können. (Außerdem: keine zusätzliche Code-Generierung oder zusätzliches Parsen notwendig, um das Diagramm zu erhalten oder zu pflegen).

Ich mag die Art, wie Visual Studio dies löste. Sie bieten zwei Möglichkeiten, eine, die auf die technischen Einzelheiten mehr fokussiert ist (show as Association)

enter image description here

und eine, die mehr auf die Domäne fokussiert wird (show as Collection Association).

Show as Association

ich in der Regel die erste bin mit nur, wenn ich ein Diagramm zu betonen, dass die Dictionary Klasse beteiligt ist, in jedem anderen Fall die zweite Option meine bevorzugte Option ist.