3

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

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

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

2 ответа2

4

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

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

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

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

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

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

2

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

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

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

В следствии

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .