В Enterprise Architect я изменил интерфейс, как обновить реализующие классы?

8506
Timo

Я создал интерфейс в модели класса. Этот интерфейс имеет два метода, A и B, и метод A принимает аргумент (a), а метод B не принимает аргумент (пока). Кроме того, я создал класс, который реализует этот интерфейс, переопределяя оба метода.

После обсуждения модельного метода B теперь также следует принять параметр (b), поэтому я изменил интерфейс, чтобы отразить это изменение. Однако класс, реализующий этот интерфейс, не обновляется автоматически. Для одного класса можно добавить метод, заново создав ссылку между интерфейсами, указав, какой метод должен быть реализован, и снова удалив эту ссылку. Затем сигнатура метода OLD также должна быть удалена. Это большая работа, если существует более одного класса, реализующего модифицированный интерфейс, не говоря уже о подверженности ошибкам.

Кто-нибудь знает, как заставить целую модель класса обновить этот тип зависимости?

3

2 ответа на вопрос

4
jharig23

Выберите класс, который вы хотите обновить, и нажмите Ctrl + Shift + o.

Эта ссылка дает вам подробное объяснение.

В Enterprise Architect вы можете автоматически переопределять методы из родительских классов и реализованных интерфейсов.

Выберите класс, у которого есть родительский или реализованный интерфейс, и выберите элемент | Расширенный | Параметр меню «Переопределения и реализации».

В диалоговом окне «Переопределить операции / интерфейсы» выберите операции / интерфейсы для автоматического переопределения и нажмите кнопку «ОК». Enterprise Architect генерирует эквивалентные определения функций в вашем дочернем классе.

Вы можете настроить Enterprise Architect для отображения этого диалогового окна каждый раз, когда вы добавляете соединитель обобщения или реализации между классами, и просматриваете их возможные операции / интерфейсы для переопределения / реализации. Сделайте это на странице ссылок диалогового окна «Параметры» (выберите пункт меню «Сервис | Параметры | Ссылки»).

Это не распространяется на добавление или удаление параметров из метода. Это также не относится к удалению метода из интерфейса. Кроме того, это все еще ручная работа, которую мне просто лень делать. Timo 11 лет назад 0
Есть ли способ сделать это автоматически, не вызывая диалог переопределения? raiserle 8 лет назад 0
2
dvekeman

Я также искал ответ на этот вопрос, но кроме вашего поста я ничего не нашел. Я разместил вопрос на форуме EA.

Если это только для целей диаграммы, есть 1 возможный обходной путь (но немного неприятный):

  • Добавьте свой интерфейс к диаграмме как (абстрактный) класс со стереотипом << interface >>
  • Добавьте свой класс на диаграмму как класс со стереотипом << ImplementClass >>
  • Добавьте отношение обобщения из класса в интерфейс, не устанавливайте флажок в Переопределениях и обновлениях
  • Скрыть разъем
  • Добавьте отношение реализации от класса к интерфейсу
  • Щелкните правой кнопкой мыши класс> Видимость элемента> установите флажок Показать операции.

В следствии

  • Абстрактный класс с интерфейсом на диаграмме
  • Реализующий класс покажет унаследованные операции
  • При добавлении операций в интерфейс класс будет обновлен
  • При изменении операций на интерфейсе класс будет обновляться

Единственная проблема заключается в том, что во время генерации кода вместо интерфейса генерируется абстрактный класс.

Это ответ, который я искал, тем более что мне не нужно генерировать код из диаграммы. Кроме того, это также работает при удалении метода из интерфейса. Timo 11 лет назад 0