OOP Einige Fragen zu UML-Klassendiagrammen

thousands

Mitglied
Hi,

zu Dokumentationszwecken möchte ich die Architektur eines von mir erstellten Programmes in Form von UML-Klassendiagrammen darstellen. Dabei sind mir ein paar Dinge nicht so 100%ig klar, gibts hier denn ein paar UML-Profis die mir evtl. weiterhelfen könnten?

Meine Fragen wären im Einzelnen:

1. Da meine Klassendiagramme z.T. recht umfangreich sind, würde ich gerne auf die Aufführung von Vererbungen und implementierten Interfaces (jeweils von "Java-eigenen" Komponenten) verzichten, wäre dies gemäß UML Konvention denn "zulässig"? Wenn also z.B. eine meiner Controller-Klassen vier verschiedene Listener-Interfaces implementiert (ActionListener, MouseListener, etc...), muss ich diese Listener dann alle einzeln im Klassendiagramm aufführen oder kann man soetwas getrost weglassen? Wie siehts bei Vererbungen aus, wenn also z.B. meine Views von JFrame erben, muss ich die Vererbung dann zwangsweise im Klassendiagramm aufführen oder kann auch diese aus Gründen der Übersichtlichkeit weggelassen werden?

2. Mein Programm ist in mehrere (voneinander unabhänginge) Module aufgeteilt, zur Kommunikation zwischen diesen Modulen verwende ich einen eigenen Singleton, der einfach an einer beliebigen Stelle per .getInstance() aufgerufen werden (also genau so wie bspw. der java-eigene Logger) und zur programminternen Kommunikation benutzt werden kann. Mir ist nun nicht ganz klar, wie ich dies in einem Klassendiagramm darstelle. Wenn ich in einer Klasse dieses Singleton verwende, besteht dann einfach eine unidirektionale Assotiation von der Klasse zu dem Singleton oder gibt es dafür eine andere Lösung (evtl. sogar eine Lösung speziell für Singletons)?

3. Daten und Informationen, welche in meinem Programm verwendet oder gespeichert werden, werden grundsätzlich nicht in ihrem "Rohzustand" verwendet, sondern in eigene Objekte "gewrapped". Ein BufferedImage würde also z.B. nicht einfach als BufferedImage verwendet, sondern ich würde eine Klasse ImageObject erstellen, welche das BufferedImage im Konstruktor als Nutzdatum bekommt. Im folgenden arbeite ich dann einfach mit dem ImageObject, welches das darin enthaltene BufferedImage per get()-Methode bereitstellt. Wenn also eine Klasse irgendwo in ihrem Code nun new ImageObject(...) aufruft um ein BufferedImage zu wrappen, welche Art von Beziehung hat diese Klasse dann zu der Klasse ImageObject?

4. Wie kann ich kennzeichnen, ob eine Komposition bidirektional oder unidirektional ist? Manche meiner Klassen erstellen kleine "Helper-Klassen" und lagern in diese eine bestimmte Aufgabe aus. Dabei bekommt die Helper-Klasse manchmal eine Referenz auf die erstellende Klasse übergeben (es ist also bidirektionale Kommunikation möglich), manchmal auch nicht. Wie unterscheide ich zwischen diesen Fällen im Klassendiagramm bzw. muss ich dazwischen überhaupt unterscheiden, oder ist es in beiden Fällen einfach eine normale Komposition (also "ausgefüllte Raute" auf der Erstellerseite)?


Schonmal vielen Dank!

Gruß, thousands
 
M

Marcinek

Gast
Hi,

1) Nein musst du nicht. Die Inhalte eines UML- Diagramms kannst du selbst bestimmen. Wie du sie darstellst legt die Konvention fest.

2) Du kannst den stereotype angeben. <<singleton>>.

3) 1:1 unidierektionale Verbindung

4) --> unidirektional <----> bidirektional

Gruß,

Martin
 

thousands

Mitglied
Hi,

1) Nein musst du nicht. Die Inhalte eines UML- Diagramms kannst du selbst bestimmen. Wie du sie darstellst legt die Konvention fest.

2) Du kannst den stereotype angeben. <<singleton>>.

3) 1:1 unidierektionale Verbindung

4) --> unidirektional <----> bidirektional

Gruß,

Martin

Danke schonmal! Punkt 1) wäre damit eigentlich geklärt.
Zu den Punkten 2) und 3): das ist also jeweils eine unidirektionale Assosziation, richtig?
Zu Punkt 4): Das Problem bei der Sache ist ja, dass bei der Komposition auf der Erstellerseite bereits die (ausgefüllte) Raute ist, für den Richtungspfeil ist gewissermaßen einfach "kein Platz". Das mit den Pfeilen am Ende geht also (afaik) nur bei der Assoziation. Wie kann ich aber bei der Komposition angeben, ob diese uni- oder bidirektional ist?

Gruß, thousands
 
N

nillehammer

Gast
Zu Punkt 4): Das Problem bei der Sache ist ja, dass bei der Komposition auf der Erstellerseite bereits die (ausgefüllte) Raute ist, für den Richtungspfeil ist gewissermaßen einfach "kein Platz". Das mit den Pfeilen am Ende geht also (afaik) nur bei der Assoziation. Wie kann ich aber bei der Komposition angeben, ob diese uni- oder bidirektional ist?
Eine Komposition ist eine spezielle Form der Assoziation, die aussagtm dass ein Teil existenziell Abhängig von einem Ganzen ist. Das hat mit der Navigationsrichtung erstmal nichts zu tun. Genau wie bei normalen Assoziationen kann auch die Komposition bidirektional sein. Auch wenn das im Diagramm vielleicht blöd ausieht, weil Raute und Pfeil sich überlagern.
 

thousands

Mitglied
Eine Komposition ist eine spezielle Form der Assoziation, die aussagtm dass ein Teil existenziell Abhängig von einem Ganzen ist. Das hat mit der Navigationsrichtung erstmal nichts zu tun. Genau wie bei normalen Assoziationen kann auch die Komposition bidirektional sein. Auch wenn das im Diagramm vielleicht blöd ausieht, weil Raute und Pfeil sich überlagern.


Ok, das leuchtet ein. Die Frage ist aber halt, ob Kompositionen (bzw. auch Aggregationen) inhärent (also ohne Angabe der Navigationsrichtung, sozusagen ohne Pfeile) uni- oder bidirektional sind.

Da sie ja nichts anderes als Sonderformen von Assoziationen sind, und Assoziationen ohne Pfeile als bidirektional angesehen werden (richtig?), dann sollten ja auch Kompositionen/Aggregationen ohne spezifisch angegebene Navigationsrichtung erstmal bidirektional sein ( wird z.B. hier (s. Navigation) oder hier (s. Aggregation) auch so bestätigt).

Eine unidirektionale Komposition/Aggregation könnte man dann durch die Raute auf der Erzeugerseite und einen Pfeil auf der Hilfsobjektseite angeben, also z.B. so:
Preu-uml09.png


Das Problem an der Sache ist, dass ich mittlerweile einen meiner Profs. konsultiert habe, und dieser meint, eine Komposition/Aggregation sei grundsätzlich erstmal inhärent unidirektional. Das ganze wird auch durch automatische Codegenerierung (Enterprise Architect) bestätigt, wenn man eine (ganze normale, also "Pfeil-lose" :)) Komposition in Code umwandeln lässt, dann kennt die erzeugte Klasse die Erzeugerklasse nicht, die Koposition ist hier also tatsächlich inhärent unidirektional.

Das ganze ist echt zum Haare raufen! Kanns sein, dass die UML in so manchen Dingen (wie z.B. auch hier) arg "schwammige" Definitionen bereitstellt?
 
Zuletzt bearbeitet:
N

nillehammer

Gast
Da sie ja nichts anderes als Sonderformen von Assoziationen sind, und Assoziationen ohne Pfeile als bidirektional angesehen werden (richtig?)
Ich hab mal meine UML-Referenz (B. Ooestereich) herangezogen. Bei der Beschreibung der Assoziation ist das zwar nicht explizig so geschrieben, aber ich verstehe es auch so.

Das Problem an der Sache ist, dass ich mittlerweile einen meiner Profs. konsultiert habe, und dieser meint, eine Komposition/Aggregation sei grundsätzlich erstmal inhärent unidirektional.
Bei der Beschreibung der Komposition/Aggregation steht das nicht explizit. Es steht aber, dass (abgesehen von den Besonderheiten) alles gilt, was auch bei Assoziationen gilt. Also würde ich nach meiner Quell-Lage sagen, Dein Prof hat unrecht.
Das ganze wird auch durch automatische Codegenerierung (Enterprise Architect) bestätigt,
Das würde ich als Referenz nicht gelten lassen. Klassendiagramme laden zwar zur automatischen Codegenerierung ein, aber ob der EA hier nur einen möglichen Weg beschreitet oder es tatsächlich der einzige UML-Konforme Weg ist?

Die UML ist übrigens selbst in UML formal Beschrieben. Ich werd mal schauen, ob ich das Metamodell irgendwo finde und meld mich dann nochmal.
 

thousands

Mitglied
Die UML ist übrigens selbst in UML formal Beschrieben. Ich werd mal schauen, ob ich das Metamodell irgendwo finde und meld mich dann nochmal.


Danke danke, ich glaub aber, ich habs mittlerweile sogar selbst gefunden! :)

Ich hab einfach mal bei der Original-Quelle (UML Specifications) nachgeschlagen und da steht, bezogen auf Assoziazionen/Aggregationen/Kompositionen folgendes:

Various options may be chosen for showing navigation arrows on a diagram. In practice, it is often convenient to suppress
some of the arrows and crosses and just show exceptional situations:
  • Show all arrows and x’s. Navigation and its absence are made completely explicit.
  • Suppress all arrows and x’s. No inference can be drawn about navigation. This is similar to any situation in which information is suppressed from a view.
  • Suppress arrows for associations with navigability in both directions, and show arrows only for associations with oneway navigability. In this case, the two-way navigability cannot be distinguished from situations where there is no navigation at all; however, the latter case occurs rarely in practice.


Ich hab den letzten der Punkte mal unterstrichen, da dieser ja auf "meine" Problemstellung passt. So werd ichs dann denk ich auch machen. Nochmals danke für die, wie immer, klasse Hilfe! :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z Einige Fragen Allgemeine Java-Themen 10
G Einige Fragen zu ResourceBundles Allgemeine Java-Themen 2
L Einige Fragen zu Java Allgemeine Java-Themen 9
X Einige Fragen zu Serialisierung Allgemeine Java-Themen 2
S ExecutorService.invokeAll -- was passiert wenn einige Tasks schon ausgefuehrt wurden? Allgemeine Java-Themen 2
Zrebna Fragen zu Testabdeckungs-Metriken Allgemeine Java-Themen 4
MarvinsDepression Unbekanntes Zeichen in fremden Code wirft Fragen auf Allgemeine Java-Themen 4
B HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java Allgemeine Java-Themen 20
K BlueJ - Fragen zu dem Spiel Pacman (Nachprogrammieren) Allgemeine Java-Themen 141
V Ich hätte 2 Fragen Allgemeine Java-Themen 5
ME2002 Fragen aus einer Java Klausur Allgemeine Java-Themen 67
H Fragen zur Kraken Api Allgemeine Java-Themen 1
nonickatall Klassen Grundsätzliche Fragen zu geplanter Programmstruktur Allgemeine Java-Themen 5
W Ein paar Fragen zu .properties und .css Allgemeine Java-Themen 6
W Mal ein paar generelle Fragen zu InputStream und OutputStream Allgemeine Java-Themen 4
X Fragen zur Javamail API und Gmail Allgemeine Java-Themen 4
T Fragen bezgl. Lambdas Allgemeine Java-Themen 20
X Collections Fragen zu gleichen Elementen in TreeSet Allgemeine Java-Themen 35
A Neuerungen in Java 8 StreamAPI- Paar fragen Allgemeine Java-Themen 4
temi Fragen zur Software-Architektur Allgemeine Java-Themen 123
M Diverse Design-Fragen Allgemeine Java-Themen 6
J 2 Fragen zur Vererbung Allgemeine Java-Themen 5
H Java FX 2 Fragen um Programm in mehrere sprachen zu übersetzen in Gluon Framwork Allgemeine Java-Themen 3
M Fragen beantworten über Textfeldeingabe Allgemeine Java-Themen 5
D Grundsätzliche Fragen zum Heap Space Allgemeine Java-Themen 12
J Allgemeine Fragen zu Vererbung Allgemeine Java-Themen 1
M Allgemeine Fragen meinerseits Allgemeine Java-Themen 4
V Wie kann ich die Fragen mit den anderen Klassen verbinden? Allgemeine Java-Themen 1
J Fragen zu generischer doppelt verketteter Liste (bei fehlendem Grundverständnis) Allgemeine Java-Themen 1
R Es gibt keine dummen Fragen (hab ich mal gehört) Allgemeine Java-Themen 11
T Fragen zum Thread-Thema Allgemeine Java-Themen 4
2 2 Klein Fragen Allgemeine Java-Themen 7
alderwaran .jar Code Signing, User-Keystore und Fragen dazu Allgemeine Java-Themen 0
T Fragen zum Thread-Thema Allgemeine Java-Themen 9
A Java Theorie-Fragen Allgemeine Java-Themen 7
K Java QUIZ-Spiel Fragen und Antworten generieren?! Allgemeine Java-Themen 5
R Socket Fragen zu UDP Allgemeine Java-Themen 1
B Noob-Fragen zu Tablets und PC kompatiblität... Allgemeine Java-Themen 6
D Ein paar allgemeine Fragen zu Java Allgemeine Java-Themen 19
L Fragen für Facharbeit: Analyse von Strings in Java Allgemeine Java-Themen 4
R Fragen zu Server + UI Allgemeine Java-Themen 2
U Vier Fragen zu Java Allgemeine Java-Themen 2
H MediaManager Fragen/Probleme Allgemeine Java-Themen 6
D Fragen zum erstellen einer ausführbaren Jar Datei Allgemeine Java-Themen 3
C Polymorphie Fragen zur Annotations von Persistenz Allgemeine Java-Themen 2
O Fragen über Fragen - Bei Änderung XML-Datei -> Anpassung GUI Allgemeine Java-Themen 7
StrikeTom Java Performance Fragen Allgemeine Java-Themen 5
Luk10 Fragen zum ByteBuffer (lwjgl - icons) Allgemeine Java-Themen 2
F Akkumulator Hough-Transformation offene Fragen Allgemeine Java-Themen 4
Luk10 Fragen zu Naming-Conventions Allgemeine Java-Themen 5
S Fragen zu verschiedenen Themen vom JCreator Allgemeine Java-Themen 2
DStrohma Grundsätzliche Fragen zum Aufbau eines komplexeren Programmes Allgemeine Java-Themen 8
Semox Grapheneditor - Allgemeine Fragen zum Logikdesign Allgemeine Java-Themen 3
O kleine Fragen eines Anfängers Allgemeine Java-Themen 2
X Executor fragen ob fertig Allgemeine Java-Themen 13
nrg Swing 2 Fragen zu Swing/AWT Allgemeine Java-Themen 7
K Reflections Fragen Allgemeine Java-Themen 7
S Fragen zum SCJD-Zertifikat Allgemeine Java-Themen 2
M Backend Entwicklung - Konzept fragen Allgemeine Java-Themen 3
E Fragen zu Scala Allgemeine Java-Themen 11
Daniel_L Fragen zu RegEx und URL umwandeln Allgemeine Java-Themen 4
J Diverse Fragen bezüglich Jasper Allgemeine Java-Themen 3
S Fragen zum ShutdownHook Allgemeine Java-Themen 7
V Fragen zu einem Java Browser Allgemeine Java-Themen 7
G Fragen zum eigenen Scheduler Allgemeine Java-Themen 4
M Drag and Drop: 3 Fragen Allgemeine Java-Themen 3
F Linguistische Fragen zu Javadoc bzw. Englisch Allgemeine Java-Themen 4
E Einfache Fragen zu Dateien Allgemeine Java-Themen 7
E Thread Fragen in Verbindung mit Swing Allgemeine Java-Themen 4
M MVC Design Pattern - Verständniss Fragen Allgemeine Java-Themen 3
H Java Multiplicoice Test (10 Fragen) Allgemeine Java-Themen 11
J Viele Fragen. =) Hoffentlich könnt ihr helfen Allgemeine Java-Themen 9
D Grundsätzliche Fragen zur Grafikdarstellung in Spielen Allgemeine Java-Themen 2
J 2 Fragen zu JMF und eine Rechtsfrage Allgemeine Java-Themen 3
S Viele Fragen eines Umsteigers (von .NET) Allgemeine Java-Themen 6
C LinkedList Fragen Allgemeine Java-Themen 7
P Fragen zur JBuilder und den kosten. Allgemeine Java-Themen 7
reibi JVM fragen welche Apps geladen sind Allgemeine Java-Themen 7
I Fragen zum Internetseiten Einlesen/Auswerten Allgemeine Java-Themen 5
F Paket und Software Design Fragen. Allgemeine Java-Themen 5
S 2 Fragen allgemeine fragen zu final und interface Allgemeine Java-Themen 13
M ein paar fragen über JBoss und Catalina Allgemeine Java-Themen 7
D Allgemeine Fragen zum Speichern Allgemeine Java-Themen 3
F allgemeine Fragen zu Java Allgemeine Java-Themen 9
S Fragen zu 4 speziellen Listen Allgemeine Java-Themen 4
U JFrame, JOptionPane - vor dem Schließen Benutzer fragen Allgemeine Java-Themen 10
I zwei simple fragen Allgemeine Java-Themen 22
G 2 Fragen Allgemeine Java-Themen 7
G Fragen zu ausführbaren JAR Files Allgemeine Java-Themen 23
G Fragen zu JTextField bzw. JTextArea Allgemeine Java-Themen 2
J 5 Fragen. Allgemeine Java-Themen 2
P Tausend Fragen... Allgemeine Java-Themen 3
B OOP Schwierigkeiten bei Klassendiagrammen/OOP-Struktur Allgemeine Java-Themen 5

Ähnliche Java Themen


Oben