Автообновление прототипа превращается в дочерние классы в Enterprise Architect - PullRequest
1 голос
/ 18 июля 2011

В Enterprise Architect я хочу, чтобы прототипы операций дочернего класса обновлялись автоматически при изменении прототипа в интерфейсе, который реализует класс.Как я могу это сделать?Это кажется таким тривиальным!

Я использую соединение реализации, чтобы указать, что класс реализует интерфейс.Когда я создаю такое соединение, AE спрашивает меня, какие операции нужно выполнить.Если я выберу none (по умолчанию) и нажму ok, в классе не будет показано ни одного метода.Все идет нормально.Я ожидал, что операции интерфейса будут отображаться, когда я изменю видимость функций этого класса, чтобы показать унаследованные операции.Но они этого не делают!Почему это так?

Если я удаляю соединение, устанавливаю его снова и на этот раз выбираю все операции, которые нужно реализовать / переопределить, тогда все методы (конечно) будут добавлены в класс.Однако, когда я изменяю прототип операции в интерфейсе, прототип той же операции в классе не обновляется.Я не хочу вручную обновлять все классы.Есть ли способ сделать это?

Кстати, я занят разработкой интерфейсов и классов с использованием Enterprise Architect v8.0 для проекта C ++.Интерфейсы будут генерироваться AE как чисто виртуальные классы со всеми абстрактными методами.Эти методы автоматически указываются в советнике как чистые и абстрактные.

1 Ответ

1 голос
/ 19 июля 2011

Прежде всего, я не использую EA для генерации кода, но вот что он делает в терминах UML.Кроме того, я использую 9.0, но я почти уверен, что это поведение не изменилось.

Параметр «Видимость компонентов» является строгим: он показывает унаследованные функции, а не реализованные.AFAIK, нет способа отобразить реализованные функции.Но они все еще там, внизу, и работают так, как вы хотите.

Если MyInterface содержит MyMethod, и MyClass реализует MyInterface без переопределения каких-либо операций, MyMethod доступен для выбора в качестве сообщения в последовательности.Диаграмма (при условии, что вы выбрали Показать унаследованные методы).Изменения в MyInterface :: MyMethod правильно отражаются в MyClass, и MyMethod также наследуется (но скрывается) дочерними элементами MyClass.

Переопределение, с другой стороны, создает новые операции в классе.Как только это будет сделано, Операции больше не будут считаться унаследованными и не будут следовать изменениям, внесенным в изменения в Интерфейсе.

Требуемое поведение - это то, что вы получаете, если используете классы и обобщения:дочерний класс наследует Операции его родителя и отображает их, если вы выберете Унаследованные объекты в диалоговом окне Видимость элементов.Операции не копируются в дочерний класс, но доступны как сообщения в последовательности, и изменения в родительских операциях отражаются в дочернем классе.

Поэтому, если вам нужны методы, отображаемые на диаграммах, обходной путь может бытьугробить интерфейсы и использовать вместо них абстрактные классы.Что лучше всего подойдет для генерации C ++, я не могу сказать.

...