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
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