In Enterprise Architect habe ich eine Schnittstelle geändert, wie die realisierenden Klassen aktualisiert werden?

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

3

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