# UML bei innerer Klasse?



## Stephan Christoph (27. Jan 2008)

Hallo

Ich frage mich gerade wie die UML-Notation bei einer inneren Klasse aussieht?

Hier mal ein standard-Beispiel damit ihr versteht was ich meine:

Man hat drei Klassen: 

1.) Die Klasse Bankkonto. In der hat man privat deklariert den Kontostand und die methode abheben, einzahlen und getKontostand.

2.) Man hat die Klasse BankkontoGUI die von JFrame abgeleitet ist. Darin gibts zwei TextFields die Kontostand und Betrag bezeichen und zwei Buttons für einzahlen und abheben. Diese sind als private Instanzvariablen deklariert. Dann habe ich als innere Klasse dieser Klasse die Klasse actionlistener. Diese implementiert das Interface ActionListener mit der MEthode actionPerformed. Die hab ich halt als innere Klasse gemacht dass es etwas weniger umständlich ist auf die Textfelder und Buttons zuzugreifen.

3.) Die Main Klasse. In der wird ein Objekt von Bankkonto erzeugt und dann noch ein Objekt von BankkontoGUI. BankkontoGUI wird im Konstruktor das Bankkonto Objekt übergeben, damit man von BankkontoGUI auf einzahlen und abheben zugreifen kann.

So sieht mein UML - Diagramm bis jetzt aus:





Also das BankkontoGUI eine Subclass von JFrame ist ist klar.
Ebenso das actionlistener von ActionListener das Interface ActionListener implementiert.

Doch ist der "Is-A" Pfeil zwischen actionlistener und BankkontoGUI korrekt wenn es sich bei actionlistener um eine innere Klasse handelt? Welcher Pfeil muss da hin?

Und noch etwas: Über die Main-Klasse hat BankkontoGUI ja Zugriff auf die public Methoden von Bankkonto. Muss man das auch mit einem Pfeil signalisieren oder wird das also logisch vorrausgesetzt?

Und ist das so okay wenn man die Main-Klasse nicht mit ins Diagramm nimmt? Wenn nicht dann müsste die Main Klasse ja einein Pfeil auf BankkontoGUI und einen Pfeil auf Bankkonto bekommen. Welche Pfeilart wäre das dann wieder?

Vielen Dank.


----------



## Evolver (27. Jan 2008)

Nein, also da finde ich die Bezeichnung "is_a" auch irreführend. Du solltest dir vor augen halten, das dieser Pfeil eine Vererbung darstellt. Und dein actionlistener (Anfangsbuchstaben von Klassennamen bitte ausnahmslos groß schreiben) erbt ja nciht von deinem GUI. Eigentlich erlaubt die aktuelle UML innere Klassen. Diese würden in einem Feld unter den Attributen und Methoden der Klasse eingetragen.
Falls dein UML-Tool das nicht unterstützt, füge erstmal keine Beziehung ein. Da du denn aber in BankkontoGUI sicher eine Referenz auf ein Actionlistener-Objekthälst, köbnntest du eine Assoziation/Aggregation/Komposition einfügen.


----------



## Stephan Christoph (27. Jan 2008)

Hm, okay, danke schonmal...

Du hast von einem UML Tool gesprochen, ich hab sowas nicht, aber das wäre ja ungemein praktisch dann könnte ich mir ja von allen möglichen Beispielen die mir einfallen UML Diagramme erzeugen lassen. Kannst du mir das was empfehlen? Ich hab von Eclipse.org das UML2-Tool heruntergeladen, aber ich weiss nicht wie man das installiert... :roll:


----------



## Wildcard (27. Jan 2008)

1. Du solltest Plugins grundsätzlich über den Update Manager installieren
2. UML2.0 ist ein Ecore Metamodell für die UML2.0 Spezifikation, *kein* UML Editor.
Wenn du einen UML Editor suchst, dann zum Beispiel dieser:
http://www.soyatec.com/


----------



## Stephan Christoph (27. Jan 2008)

hi!

Wie installiert man das denn mit dem Pluginmanager? Wo find ich den überhaupt? 

Edit: Ich hab den Update-Manager gefunden, erhalte aber folgenden "Fehler":

 Graphical Modeling Framework (Europa Edition) (2.0.0.v20070605-1400-7X77_7EIn-hz0YMz0kw8NgN_4bz0) requires plug-in "org.eclipse.pde.ui (3.3.0)", or compatible.


Sorry, aber ich kenne mich überhaupt nicht gut aus...was soll ich da jetzt machen? danke.


----------



## Wildcard (27. Jan 2008)

UML2 nützt dir nichts.
Geh auf die Europa discovery site, wähl dein Feature aus und drück select required.


----------



## Stephan Christoph (27. Jan 2008)

Moin!

Soo jetzt hab ichs hinbekommen, ist ja ein ziemlich praktisches Programm! 

Dieses eUML zeigt übrigens nicht an das BankkontoGUI eine Unterklasse von JFrame ist. Und auch nicht das actionlistener (sorry, das nächste mal merk ich mir das mim grossschreiben von Klassen) eine implementierung von ActionListener ist.

Jetzt frag ich mich ob das daran liegt, dass die beiden Klassen (Interface) nicht mit in dem Projekt liegen oder ob man das bei diesen speziellen Klassen einfach nicht einzuzeichnen braucht?

Und noch was: Das Programm zeigt mir in seinem UML Diagramm wirklich nur die Verbindungen bei Vererbung / Interface-Beziehung. Aber da gibt es doch mehr!

Angenommen ich erstelle in der Klasse Main ein Objekt der Klasse Bankkonto und übergebe dieses dann der Klasse BankkontoGUI im Konstruktor, damit man über die GUI z.B. auf den Kontostand zugreifen kann, muss dann da eine Verbindung angezeigt werden? Wie gesagt, das Eclipse-Plugin "sagt" nein, zumindest macht es keine Verbindung.


Merci.

Achja: Das Eclipse Plugin stellt die innere Klasse eine wörtlich innerhalb der Klasse Bankkonto dar 


LG.


----------



## Evolver (28. Jan 2008)

1. Also ich denke es ist üblich, nur projektinterne Klassen in das Diagramm aufzunehmen. Darum sind wahrscheinlich JFram etc. nicht dabei. So mache ich das zumindest bei meine ReverseEngineeringTool.

2. Das das Programm keine sonstigen Assoziationen anzeigt ist schlecht. Vielleicht kann man das in den Optionen irgendwo einstellen, für welche Fälle Assoziationen erzeugt werden? Also in meinem Tool kann man einstellen, für welche Fälle Assoziationen erzeugt werden.


----------



## Wildcard (28. Jan 2008)

Evolver hat gesagt.:
			
		

> 1. Also ich denke es ist üblich, nur projektinterne Klassen in das Diagramm aufzunehmen. Darum sind wahrscheinlich JFram etc. nicht dabei. So mache ich das zumindest bei meine ReverseEngineeringTool.


Davon abgesehen ist es üblich, dass UML *vor* der Implementierung steht, reverse engineering also obsolete ist  :wink:


----------



## Evolver (28. Jan 2008)

Wildcard hat gesagt.:
			
		

> Evolver hat gesagt.:
> 
> 
> 
> ...


Ich weiß nicht, was du damit sagen willst. Klar wird gewöhnlich das UML-Modell zuerst erzeugt. Aber wir sprechen ja hier die ganze Zeit davon, aus Quellcode Diagramme zu erzeugen.


----------



## HannesG (30. Jan 2008)

@Evolver wie heißt denn dein tool?


----------

