Во-первых, есть еще один способ рисования соединений, который может оказаться проще. Если вы выберете класс на диаграмме, вы увидите небольшую иконку со стрелкой, которая появится над / справа от класса. Нажмите на него, перетащите на интерфейс и отпустите, и EA предоставит вам набор возможных соединителей, в первую очередь самые подходящие. Этот список является контекстно-зависимым на основе типов исходного и целевого элементов (в данном случае, класса и интерфейса).
Когда дело доходит до диалогового окна «Переопределения и реализации», возникают некоторые тонкости.
Если класс реализует интерфейс, класс фактически имеет операции, указанные интерфейсом, хотя и скрытые, даже если вы не выбираете их для реализации (именно поэтому операции интерфейса по умолчанию отменяются в этом диалоговом окне) .
Если вы используете класс в диаграмме последовательности и вызовете его, вы увидите, что вы можете выбрать интерфейсную операцию в диалоговом окне «Свойства сообщения» (при условии, что выбран «Показать унаследованные методы»). Это имя будет обновлено автоматически, если вы переименуете операцию в интерфейсе.
Если вы проведете обобщение между двумя классами, вы получите то же поведение на диаграмме последовательности. Кроме того, вы можете выбрать отображение унаследованных (посредством обобщения) операций класса, щелкнув его правой кнопкой мыши, выбрав «Видимость элемента» и отметив «Показать операции». Обратите внимание, что это работает только для операций, полученных с помощью обобщений (из других классов), а не реализаций (из интерфейсов). Я считаю это ошибкой, но это может быть из-за дизайна.
Если вы выбираете операцию в диалоговом окне «Переопределения и реализации», это означает, что вы делаете ее копию. EA не будет помнить, откуда произошла переопределенная операция, и не будет обновлять имя, если вы измените его в интерфейсе / абстрактном классе.
Использование правого клика - Дополнительно - Родительский метод обходит диалоговое окно «Переопределения и реализации», но создает соединитель, как вы заметили.
Теперь вы упоминаете, что создаете класс, а затем задаете стереотип "интерфейс". Это не способ сделать это; вместо этого вы должны создать интерфейс, используя символ интерфейса на панели инструментов. Класс со стереотипом "interface" - это не то же самое, что Interface, и я не уверен, какое из описанных мной поведений вы получите с этой конструкцией.
Если вам нужен интерфейс, используйте его. Если, с другой стороны, вы говорите об абстрактном классе, то Class прав, и ни у абстрактного, ни у конкретного класса не должно быть стереотипа "interface".
Также обратите внимание, что если у вас есть кодовая база, для которой вы хотите рисовать диаграммы, есть вероятность, что EA может ее перепроектировать для вас (если она на C ++, C #, Java или примерно на дюжине других языков).