In Enterprise Architect habe ich eine Schnittstelle geändert, wie die realisierenden Klassen aktualisiert werden?
8815
Timo
Ich habe eine Schnittstelle in einem Klassenmodell erstellt. Diese Schnittstelle hat zwei Methoden, A und B, und Methode A nimmt ein Argument (a) und Methode B ein Argument (noch) nicht. Außerdem habe ich eine Klasse erstellt, die diese Schnittstelle implementiert und beide Methoden überschreibt.
Nach einer Diskussion der Modellmethode B sollte nun auch ein Parameter (b) verwendet werden, daher habe ich die Schnittstelle geändert, um diese Änderung wiederzugeben. Die Klasse, die diese Schnittstelle realisiert, wird jedoch nicht automatisch aktualisiert. Für eine Klasse können Sie die Methode hinzufügen, indem Sie die Verknüpfung zwischen der Schnittstelle neu erstellen, die zu implementierende Methode angeben und diese Verknüpfung wieder löschen. Dann muss auch die alte Methodensignatur entfernt werden. Dies ist eine Menge Arbeit, wenn mehr als eine Klasse die modifizierte Schnittstelle implementiert, ganz zu schweigen von fehleranfälligen.
Weiß jemand, wie ein gesamtes Klassenmodell diese Art von Abhängigkeit aktualisieren kann?
2 Antworten auf die Frage
4
jharig23
Wählen Sie die Klasse aus, die Sie aktualisieren möchten, und drücken Sie Ctrl + Shift + o.
Dieser Link gibt Ihnen eine detaillierte Erklärung.
In Enterprise Architect können Sie Methoden von übergeordneten Klassen und von realisierten Schnittstellen automatisch überschreiben.
Wählen Sie eine Klasse aus, die eine übergeordnete oder realisierte Schnittstelle hat, und wählen Sie das Element | Erweitert | Überschreibt die Menüoption "Implementierungen".
Überprüfen Sie im Dialogfeld Vorgänge / Schnittstellen überschreiben die Vorgänge / Schnittstellen, die automatisch überschrieben werden sollen, und klicken Sie auf die Schaltfläche OK. Enterprise Architect generiert die entsprechenden Funktionsdefinitionen in Ihrer untergeordneten Klasse.
Sie können Enterprise Architect so konfigurieren, dass dieses Dialogfeld jedes Mal angezeigt wird, wenn Sie einen Generalization- oder Realization-Connector zwischen Klassen hinzufügen und deren mögliche Vorgänge / Schnittstellen zum Überschreiben / Implementieren prüfen. Gehen Sie dazu auf der Seite Links des Dialogfelds Optionen vor (wählen Sie die Menüoption Extras | Optionen | Verknüpfungen).
Dies umfasst nicht das Hinzufügen oder Entfernen von Parametern zu einer Methode. Es umfasst auch nicht das Entfernen einer Methode aus der Benutzeroberfläche. Dazu kommt noch Handarbeit, zu der ich einfach nur faul bin.
Timo vor 11 Jahren
0
Gibt es eine Möglichkeit, dies automatisch zu tun, ohne den Überschreibungsdialog aufzurufen?
raiserle vor 9 Jahren
0
2
dvekeman
Ich habe auch nach der Antwort auf diese Frage gesucht, aber abgesehen von Ihrem Beitrag habe ich nichts gefunden. Ich habe eine Frage im EA Forum gepostet.
Wenn es nur für Diagrammzwecke ist, gibt es 1 mögliche Problemumgehung (aber etwas unangenehm):
Fügen Sie dem Diagramm Ihre Schnittstelle als (abstrakte) Klasse mit dem Stereotyp << interface >> hinzu
Fügen Sie dem Diagramm Ihre Klasse mit dem Stereotyp << implementingClass >> als Klasse hinzu
Fügen Sie eine Verallgemeinerungsbeziehung von der Klasse zur Schnittstelle hinzu, und aktivieren Sie keine Kontrollkästchen in den Overrides & Updates
Verstecken Sie den Stecker
Fügen Sie eine Realisierungsbeziehung von der Klasse zur Schnittstelle hinzu
Klicken Sie mit der rechten Maustaste auf die Klasse> Feature-Sichtbarkeit>, und aktivieren Sie das Kontrollkästchen Show Operations
Als Ergebnis
Die abstrakte Klasse sieht aus wie eine Schnittstelle im Diagramm
Die implementierende Klasse zeigt die geerbten Operationen
Wenn Sie der Schnittstelle Operationen hinzufügen, wird die Klasse aktualisiert
Wenn Sie Vorgänge an der Schnittstelle ändern, wird die Klasse aktualisiert
Das einzige Problem ist, dass bei der Codegenerierung eine abstrakte Klasse anstelle einer Schnittstelle generiert wird.
Dies ist die Antwort, nach der ich gesucht habe, zumal ich keinen Code aus dem Diagramm generieren muss. Zusätzlich funktioniert es auch, wenn Sie eine Methode aus der Benutzeroberfläche entfernen.
Timo vor 11 Jahren
0