Arbeiten mit UMLed und Delphi Diese Anleitung soll zeigen, wie man Klassen mit dem UML ( Unified Modeling Language ) Editor UMLed erstellt, in Delphi exportiert und dort so einbindet, dass diese (bis auf den Codeteil) sofort einsatzbereit sind. Als Beispiel wird die hierbei neu erstellte Klasse TBall aus dem Pong-Projekt verwendet. Ein Objekt dieser Klasse soll später der Ball im Pong-Spiel sein. 1. Klasse in UMLed erstellen 1.1 Eine neue Klasse In UMLed muss durch einen Klick auf zuerst ein neues Diagramm erstellt werden. Ein Diagramm enthält meist alle Klassen des Projektes. Als nächstes muss eine neue Klasse (unsere Klasse TBall) erstellt werden. Dazu in der Menüleiste auf Klasse Neue Klasse klicken. UMLed fragt nun nach dem Namen, den die neue Klasse bekommen soll. Für unser Beispiel geben wir TBall ein. Ein neues Klassendiagramm wird erstellt. Da noch keine Methoden und Attribute enthalten sind, ist dieses noch recht klein, es wird aber automatisch vergrößert. 1.2 Methoden Als nächstes können der Klasse Methoden hinzugefügt werden. Unsere Klasse TBall soll zuerst nur die Methoden init (Construktor), gibfrei (Destruktor), zeichnedich, loeschedich und bewegedich enthalten. Eine neue Methode für eine Klasse lässt sich einfügen, indem man auf das Klassendiagramm klickt (es erscheinen die schwarzen Punkte am Rand) und im Klasseninspektor (in dem jetzt die Klasse TBall steht) auf Methode hinzufügen klickt.
Es erscheint ein Fenster, in dem die neue Methode spezifiziert werden kann. Wichtig sind hierbei vor allem der Methodenname (im Beispiel init ) und die Art der Methode (im Beispiel ist das der Construktor). Ein kurzer Dokumentationstext bewahrt besonders in größeren Projekten die Übersicht. Die Parameterliste, das Zugriffsrecht und die Compiler Direktive sind vorerst nicht von Interesse. Mit einem Klick auf OK wird die neue Methode hinzugefügt.
Im aktualisierten Klassendiagramm wird die init -Methode jetzt dargestellt. Das! heißt, dass die Art der Methode hier ein Auftrag ist (der Construktor und der Destruktor zählen hier auch als Auftrag). Für Anfragen stände hier ein?. Auf die gleiche Weise können nun die restlichen oben erwähnten Methoden eingefügt werden. 1.3 Attribute Die Klasse TBall soll vorerst eigentlich nur ein einziges Attribut enthalten: den Stift, der später zum Zeichnen des Balles verwendet werden soll. Da der Stift, den der Ball besitzen soll, aus der Klasse Stift kommt, muss diese nun erst eingefügt werden. Das kann natürlich wieder auf die selbe Art wie oben aufgeführt erledigt werden, das ist aber, besonders wenn die selbe Klasse häufig wieder verwendet wird, sehr mühsam. Daher lassen sich in UMLed fertige Klassen laden. Das geht, indem man in der Menüleiste auf Klasse Klasse laden klickt (linkes Bild). Es erscheint ein Dialog, in dem die Position der Klassendatei (eine Datei des Typs.umc, das für Unified Modeling Language Class steht) angegeben werden muss. Im Beispiel heißt diese Datei Stift.umc und befindet sich im Ordner Pong 01 (Bild unten).
Ein Klick auf Öffnen lädt die Klasse in das aktuelle Diagramm (wenn sich die neue Klasse beim Einfügen über die andere lagert, lässt sie sich auch mit Klicken und Ziehen verschieben). Jetzt muss noch die Beziehung zwischen den beiden Klassen und damit das eigentliche Attribut erzeugt werden (es handelt sich hierbei um eine HAT- Beziehung, da TBall ja gewissermaßen ein Objekt der Klasse Stift hat ). Das geht, indem man in der Menüleiste auf Beziehungen HAT klickt. Jetzt muss die Verbindung zwischen den beiden Klassen erstellt werden. Das geht, indem man zuerst auf einen Randpunkt der besitzenden Klasse und dann auf einen Randpunkt der zweiten Klasse klickt. Unten (in der Statusleiste) erscheint dabei jeweils auch eine Anweisung, was als nächstes zu tun ist (unteres Bild). Als nächstes folgt eine Abfrage, wie viele Objekte der Klasse Stift unsere Klasse TBall besitzen soll. Da nur ein Stift benötigt wird, wird hier 1 eingegeben und bestätigt. Die Frage nach dem Aussehen der Verbindungslinie kann man beliebig beantworten. Danach fragt UMLed, welches Attribut für den besessenen Stift verwendet werden soll und zeigt eine Liste aller Attribute von TBall an (noch steht da nichts drin).
Hier kann jetzt entweder ein existierendes Attribut aus der Liste ausgewählt und mit So übernehmen bestätigt werden oder ein neues Attribut erstellt werden. Wir klicken also auf Neues Attribut (Bild links). Es erscheint ein Fenster, wo die Eigenschaften des Attributs (Name und Typ, der Rest ist erst einmal uninteressant) festgelegt werden (Bild unten). Diese Felder werden von UMLed schon vorausgefüllt und können meistens auch so übernommen werden. Mit OK werden das neue Attribut und die neue Beziehung ins Diagramm eingefügt. Die Klasse TBall ist nun fertig und kann in Delphi übernommen werden. (Hinweis: normale Attribute können einer Klasse hinzugefügt werden, indem die Klasse ausgewählt und im Klasseninspektor auf Neues Attribut geklickt wird).
2. Klasse aus UMLed exportieren und in Delphi einbinden 2.1 Export aus UMLed In der derzeitigen Form kann Delphi recht wenig mit der neuen Klasse anfangen. Also muss sie in Code umgewandelt werden, der für Delphi lesbar ist. Das geht, indem auf die Klasse TBall rechtsgeklickt und im erscheinenden Menü auf Code anzeigen / speichern geklickt wird. Daraufhin erscheint ein Fenster mit dem in Delphi-gerechtes Format umgewandelten Code. Ein Klick auf Als Unit speichern speichert den Code als Delphi-Unit an der danach definierbaren Stelle. 2.2 Einbinden in Delphi Die Klasse kann nun in Delphi eingebunden werden. In Delphi muss dazu in der Menüleiste auf Projekt Dem Projekt hinzufügen geklickt und im anschließenden Dialog die Datei ausgewählt werden. Nach dem Klick auf Öffnen erscheint neben Pong eine weitere Registerkarte mit dem Dateinamen des Klassenmoduls (hier mtball ). Die Klasse ist nun fertig in Delphi eingebunden.
3. Anpassungen Damit ist die Arbeit jedoch noch nicht abgeschlossen. Damit die neue Klasse auch ordentlich funktioniert, muss noch eine kleine Anpassung vorgenommen werden: die uses-liste. Da UMLed nicht weiß, in welchem Modul sich dich Klasse Stift (auf die sich TBall ja bezieht) befindet, muss diese Information noch angegeben werden (die Klasse Stift befindet sich ja im Modul msum ). Hierzu muss im interface-teil des Codes die uses-liste bearbeitet, bzw. in diesem Fall noch angelegt werden. Das kann man am einfachsten, indem man die von UMLed schon vorgefertigte, aber auskommentierte uses-liste bearbeitet. Ist alles so wie im Screenshot dargestellt geändert worden, ist die neue Klasse TBall nun wirklich komplett eingefügt und es kann ans Programmieren des eigentlichen Codes gehen.