4. Codegenerierung durch Rational Rose

Werbung
Reverse Engineering bei Rational Rose für Java
Lars Hofer
Hinweis: In der aktuellen Version dieses Dokuments wird nur beschrieben, wie man für eine
schon unter Rational Rose angelegte Klasse (bzw. Komponente) Reverse Engineering
durchführen kann. Wie man Klassen u.U. aus anderen Dateien einbindet, wird noch folgen.
Hinweis: Wie Java-Klassen und -Komponenten unter Rational Rose angelegt werden können
ist ebenfalls und ausführlicher im Dokument
http://ebola.ifs.univie.ac.at/~hofer/rational/Wuerfelspiel.doc
ersichtlich.
Im folgenden wird nun für eine einzige Klasse aufgezeigt, wie nachträglich eingeführte
Variablen (Attribute) und Methoden (Operationen) in das Rational Rose Modell übernehmen
kann – also Reverse Engineering durchführen kann.
1. Anlegen des Projektes und Einstellungen für Java
Beim Anlegen des Projektes sollte gleich angegeben werden, dass es sich um ein Java-Projekt
(jdk-116) handelt, da dadurch die Definitionen der Java-Klassen und deren Packages des
Java-APIs geladen wird und diese dann als Variablentyp, Rückgabewerttyp und dergleichen
angegeben werden können.
Als nächstes wird der für das Projekt notwendige CLASSPATH angegeben und auch
kontrolliert, ob der CLASSPATH auch auf die Klassen der Java-API zeigt.
Wichtige Hinweise:
Es ist besonders wichtig, dass der CLASSPATH zumindest auf die Klassen der Java-API
zeigt. Ist dies nicht der Fall, dann können später beim Reverse Engineering die Java-Klassen
nicht aufgelöst werden und somit kein Reverse Engineering durchgeführt werden.
Dieser CLASSPATH wird von der Windows-Umgebungsvariable CLASSPATH übernommen
und muss dort vorhanden und korrekt gesetzt sein. Des weiteren muss der CLASSPATH
bei Rose98 und Rose98i auf nicht komprimierte Klassen zeigen – diese dürfen also nicht in
einer classes.zip enthalten sein, sondern müssen für diese Version von Rational Rose
gegebenenfalls entpackt werden, da sonst auch nicht die Java-Klassen aufgelöst werden
können und somit auch kein Reverse Engineering durchgeführt werden kann (im Gegensatz
zu Rational Rose2000, welches auch mit komprimierten Klassen arbeiten kann).
Nachdem angegeben wurde, dass es sich hier um ein Java-Projekt handelt, wird als nächstes
kontrolliert, ob der CLASSPATH für die Java-API-Klassen korrekt gesetzt ist und es wird für
das eigene Projekt der CLASSPATH entsprechend gesetzt:
Dazu öffnet man:
Tools (Hauptmenü) | Java | Project Specification | Class Path
Hier sollte unter
Enviroment Settings
unbedingt die korrekt gesetzte Windows-Umgebungsvariable CLASSPATH vorhanden sein.
Unter
Directories
kann dann das Verzeichnis angegeben werden, wohin das eigene Projekt ausgegeben werden
soll.
2. Anlegen der Java-Klasse
Im Logical View Teilzweig wird nur per Kontextmenü (rechte Maustaste) und
New | Class
eine neue Klasse angelegt. Diese könnte natürlich in einem Package enthalten sein, aber bei
diesem Beispiel wird darauf verzichtet.
Dann wird die Klasse in das Class Diagram der Logical View gezogen, um sie auch
dort sichtbar zu machen und weiter zu bearbeiten.
In diesem Fall wurde eine Klasse „Hallo“ angelegt, für die dann später Reverse Engineering
durchgeführt wird.
3. Anlegen der Java-Komponente
Um die Java-Klasse Hallo in einer Java-Datei Hallo.java zu generieren, muss eine
Komponente gleichen Namens im Component View Teilzweig per Kontextmenü (rechte
Maustaste) und
New | Component
angelegt werden (befindet sich die Java-Klasse in einem Package, so sollte auch hier ein
Package mit dem selben Namen angelegt und die Komponente in diesem Package erzeugt
werden). Die Komponente wird dann in das Component Diagram der Component
View gezogen, um sie dort auch sichtbar zu machen.
In diesem Beispiel wird eine Komponente „Hallo“ angelegt:
Damit die Java-Klasse Hallo in dieser Komponente Hallo.java durch Rational Rose
erzeugt werden kann, muss durch ziehen der Hallo-Komponente vom Component View
Teilzweig auf die Klasse Hallo im Logical View Teilzweig in Relation gesetzt werden.
Dass dies durchgeführt wurde, sieht man daran, dass der Komponentenname in Klammern
dem Klassenname folgt.
4. Codegenerierung durch Rational Rose
Als nächstes wird diese Hallo-Klasse in einer Hallo.java-Datei angelegt.
Dies wird durch das Kontextmenü (rechte Maustaste) der Hallo-Klasse im Logical
View Teilzweig und
Java | Generate Java
durchgeführt.
Wenn dies zum ersten mal ausgeführt wird, so fragt Rational Rose nach dem Pfad, wohin
dieses Projekt ausgegeben werden soll:
Dazu wählt man einfach einen CLASSPATH der linken Seite und mappt die Klasse auf ihn.
Sind keine Fehler enthalten, so wird der jetzt notwendige Java-Code generiert, andernfalls
muss man die im Log-Fenster angeführten Fehler beachten und beseitigen.
5. Implementieren durchführen
Jetzt werden für diese Klasse Methoden und Variablen angelegt, die nicht im Rational Rose
Modell enthalten sind, um diese dann in dieses zu übernehmen.
Dies kann zum Beispiel anhand des Rational-Rose-eigenen Editor erfolgen. Hier kann auch
gleich kontrolliert werden, ob die Klasse entsprechend angelegt wurde.
Man geht so vor:
Öffnen des Kontextmenü (rechte Maustaste) der Hallo-Klasse im Logical View
Teilzweig und
Java | Browse Java Sourse.
Dies zeigt dann den durch Rational Rose erzeugen Code :
Für diese Klasse werden nun ein paar Variablen (Attribute) und Methoden (Operationen)
implementiert:
z.B:
//Source file: D:\Eigene Dateien\Rational Rose\Wuerfelspiel\Hallo.java
import java.util.Vector;
public class Hallo {
public int i = 0;
public String s = "hallo";
private long l;
private Vector v = new Vector();
public Hallo() {
}
public static void main(String[] args) {
l = 1.234;
System.out.println("Hallo:
}
}
i = " +
i +
", s = " +
s +
", l = " +
l +
" v = " +
v);
Die Änderungen werden gespeichert und das Editor-Fenster geschlossen.
6. Reverse Engineering – Externe Änderungen übernehmen:
Die an einer Klasse extern durchgeführten Änderungen, das sind




neu eingeführte Methoden (Operationen)
neu eingeführte Klassenvariablen
neue Imports
Änderungen an einer Methodensignatur (Parameter, Rückgabewert)
aber nicht


Variablen innerhalb von Methoden aus dem Rational Rose Modell
Code innerhalb von Methoden aus dem Rational Rose Modell
in das Rational Rose Modell zu übernehmen geht man so vor:
Öffnen des Kontextmenü (rechte Maustaste) der Hallo-Klasse im Logical View
Teilzweig und
Java | Reverse Engineer Java...
Dadurch wird ein Fenster geöffnet, um zu spezifizieren, welche Änderungen übernommen
werden sollen:
Rational Rose hat die zu der ändernden Klasse gehörende Datei ausfindig gemacht – diese
wird markiert und wenn alles fehlerlos klappt, werden durch Drücken auf
Reverse
alle externen Änderungen in das Rational Rose Modell übernommen, wobei dieser Prozess
ein wenig dauern kann.
Konnte alles fehlerfrei durchgeführt werden, so kann dieses Fenster per
Done
geschlossen werden und die Änderungen kontrolliert werden.
Sind dagegen Fehler aufgetreten, so werden diese im Log-Fenster aufgelistet.
Meldet Rational Rose, dass es eine bestimmte Klasse nicht auflösen (resolve) kann, dann ist
vermutlich der Windows-CLASSPATH nicht oder falsch gesetzt, oder bei Rose98i die
benötigten Klassen nicht enpackt worden.
Ob die externen Änderungen korrekt übernommen worden sind, sieht man durch Öffnen des
Hallo-Klassen-Teilzweiges in der Logical View:
Rational Rose hat also eine main-Methode und auch die Variablen i, l, s und v angelgt.
Jetzt wird durch Doppelklich auf diese Methoden und Variablen kontrolliert, ob auch die
Typen und Rückgabewerte der Methoden bzw. Variablen korrekt übernommen wurden:
Zum Beispiel für main:
main ist wie im Quellcode angegeben, public static, hat den Rückgabewert void und
besitzt eine String-Array als Argument: somit alles OK.
Oder für s:
Auch s wurde richtig angelegt und hat auch den korrekten Intialisierungswert.
7. Ressourcen:
Dieses Dokument ist unter
http://ebola.ifs.univie.ac.at/~hofer/rational/ReverseEngineering.doc
die hier entwickelte Projektdatei unter
http://ebola.ifs.univie.ac.at/~hofer/rational/ReverseEngineering.mdl
und die dazugehörende Java-Datei unter
http://ebola.ifs.univie.ac.at/~hofer/rational/Hallo.java
verfügbar.
Herunterladen