2016-05-23 9 views
0

In der Schule sollten wir ein UML-Klassen-Diagramm für eine Klasse zeichnen, die wir schreiben wollen (wir sollten die Planung tun).Vertrag mehrere ähnliche Attribute in UML

Ich habe jetzt 10 JLabels, die Attribute der Klasse Game sind und jedes zeigt ein anderes Bild, aber alle von ihnen dienen dem gleichen Zweck. Um es etwas übersichtlicher zu halten, werden die Etiketten Player1Throw1 bis Player1Throw5 und Player2Throw1 bis Player2Throw5 genannt.

Meine Frage ist, ob es eine richtige Art und Weise in UML ist diese 10-Etikett zu kontrahieren, so dass ich muß nicht schreiben

Game 
-------- 
-Player1Throw1: JLabel 
-Player1Throw2: JLabel 
-Player1Throw3: JLabel 
-Player1Throw4: JLabel 
-Player1Throw5: JLabel 
-Player2Throw1: JLabel 
-Player2Throw2: JLabel 
-Player2Throw3: JLabel 
-Player2Throw4: JLabel 
-Player2Throw5: JLabel 

Oder mit anderen Worten: Gibt es eine Möglichkeit, diese zu kontrahieren 10 Zeilen in vielleicht 2 Zeilen?

Danke für jede Hilfe!

+0

Versuchen Sie, sie Arrays zu machen. –

Antwort

0

Sie konnten die folgende Notation in UML verwenden:

- Player1Throw: JLabel [5]

- Player2Throw: JLabel [5]

+0

Ich benutze Arrays für diese JLabels, also passt dein Vorschlag am besten zu mir. Vielen Dank! – Streusselhirni

0

Sie sollten in der Lage sein, Code aus dem Klassendiagramm zu generieren. Wie können Sie das tun, wenn Sie nicht alle Attribute separat definieren? Wenn Sie diese Frage beantworten können, wissen Sie, wie sie angezeigt werden.

Das Entwerfen in OOP versucht herauszufinden, ob Sie das Verhalten abstrakter gestalten können. Wenn Sie 10 ebenfalls Etiketten haben, können Sie dann eine weitere Gruppe von Klassen basierend auf einer gemeinsamen Schnittstelle erstellen, die diese Aufgabe auch erledigen kann? Tauchen Sie in Designmuster ein. Es gibt ein Muster, das für diese Situation gemacht wird.

0

keine globalen Variablen für lokale Attribute anwenden. Auf Code-Ebene verwenden Sie Sammlungen (Arrays, Sets, Taschen usw.) für mehrere Objekte der gleichen Rolle.

Sie sollten eine Klasse Player definieren (was ich verstehe, ist ein Teil des Spiels) und Klasse Spiel sollte eine Sammlung (Array?) Spieler von zwei Objekten des Typs Player enthalten. Player sollte ein Attribut werfen mit der Multiplizität 5 (oder vielleicht 0..5 - ich weiß keine Details Ihres Projekts, aber auf Code-Ebene hat es nicht wirklich Auswirkungen auf die Klassenstruktur) vom Typ JLabel.

So kann Ihr UML-Klassendiagramm aussehen wird wie die

class diagram for answer

+0

Ich habe diese zwei Klassen (sie sind sogar gleich benannt). Wie ich es verstehe, meinst du, ich sollte die JLabels Attribute der Spieler machen? Ich habe bereits die Deadline für das Projekt erreicht (es ist nur ein kleines 4-Wochen-Projekt) und endete mit allen GUI-bezogenen Attributen in der Game-Klasse. Ich denke, das ist dann keine schöne Lösung? – Streusselhirni

+0

Ja. Erstellen Sie auch keine Attribute throw1, throw2 usw. Verwenden Sie eine Art von Sammlung (Liste/Satz/Tasche/Array/Was auch immer). Dies ist sehr nützlich, wenn Sie eine solche Liste wiederholen müssen, kann aber auch die Wiederverwendung von Code vereinfachen. Und natürlich nein, alle GUI-bezogenen Attribute in der Game-Klasse sind eine sehr schlechte Lösung (Sie sollten Klassen dafür haben), aber mein Wissen über die GUI-Entwicklung ist begrenzt. – Ister