Enterprise Architect & UML: тонкости при выборе интерфейса или абстрактного класса

В настоящее время я создаю модель из существующего кода C++. Существует (динамически загружаемая) библиотека, которая должна поэтому реализовывать/предоставлять определенный интерфейс (класс). Используемый класс имеет некоторые чистые виртуальные функции, но, по общему признанию, это не чистый интерфейс (в смысле Java), поскольку он также является базовым классом, содержащим состояние (члены) и несколько реализаций методов.

Так что это своего рода гибрид — базовый класс в C++ на самом деле, но интерфейс по своему основному назначению.

Примечание. Я не собираюсь генерировать какой-либо код, но модель должна быть правильной для целей документации.

При рисовании примера в советнике (12) возникают некоторые вопросы:

введите здесь описание изображения

а) есть ли какие-либо важные причины предпочесть класс и сделать его «абстрактным» (серое поле «Base») или мне следует напрямую использовать интерфейс из панели инструментов (фиолетовое поле «Base2»)? Пока я не смог заметить никакой разницы в поведении советника, кроме цвета.

б) Как я могу подавить стереотип {abstract}, написанный за методами? Когда я не устанавливаю для них значение "абстрактный", они не выделяются курсивом. Но я хочу, чтобы они были выделены курсивом, без "{abstract}".

c) Аналогичный вопрос относительно блоков классов/интерфейсов: не являются ли интерфейсы абстрактными по определению? Так почему же EA добавляет сюда текст {abstract}? Достаточно было выделить название класса курсивом.

г) Я предполагаю, что самая левая стрелка (обобщение базового класса) и самая правая стрелка (реализация интерфейса) правильные, а средняя — нет. Правильно?


person Ingmar    schedule 03.08.2015    source источник
comment
Для кого вы документируете? пользователь библиотеки или другие разработчики кода библиотеки? - Возможно, вам следует создать две диаграммы.   -  person JimmyB    schedule 03.08.2015
comment
abstract — это не стереотип. Интересно, как вы это производите?   -  person qwerty_so    schedule 03.08.2015
comment
Документация в основном предназначена для нормативных требований (stndard требует документированного дизайна программного обеспечения для такого рода бизнеса), и, конечно же, для разработчиков и меня мотивация составляет, скажем, 80:20. Я знаю, что для любого читателя-человека любой выбор (абстрактный класс/интерфейс, с/без {abstract}) абсолютно достаточен. Но поскольку я только что начал использовать EA для этой задачи, я хотел бы изучить его с самого начала. EA, любое действие может оказать влияние на другую часть модели, это не относится к чистому инструменту рисования, такому как Visio.   -  person Ingmar    schedule 03.08.2015
comment
Похоже, вы заполнили множественность?   -  person qwerty_so    schedule 03.08.2015
comment
@Thomas: при извлечении интерфейса из панели инструментов он уже есть. С классами он появляется, когда я устанавливаю класс в Свойства.../Подробности/Флажок Аннотация. Вы правы, это не стереотип с ‹‹ ››. Но в списке стереотипов по умолчанию для классов нет абстракции.   -  person Ingmar    schedule 03.08.2015
comment
Из какого именно набора инструментов вы работаете?   -  person qwerty_so    schedule 03.08.2015
comment
Набор инструментов из диаграммы классов. Есть значки Интерфейс и Класс.   -  person Ingmar    schedule 03.08.2015
comment
Когда я использую это, я получаю все это без abstract. Включены ли у вас какие-либо ЦРТ/установлены надстройки?   -  person qwerty_so    schedule 03.08.2015
comment
Я новичок в EA, поэтому понятия не имею, что такое MDG... Эти три технологии MDG активны (расширения меню / технологии MDG): базовая технология UML 2, простые представления UML, основные расширения. Думаю, я напишу тебе в ПМ сегодня вечером...   -  person Ingmar    schedule 03.08.2015


Ответы (2)


а) Возьмите любой, но будьте последовательны. Разница немного эзотерическая и, за исключением редких случаев, не стоит внимания (YMMV).

б) Похоже, вы заполнили Context/Advanced/Multiplicity значением abstract

в) Да. Интерфейсы абстрактны, и если вы посмотрите на вкладку «Подробности», вы увидите, что поле Abstract отмечено и не может быть изменено. Я понятия не имею, откуда взялся этот фигурный текст в квадратных скобках. Это не стереотип. Единственный способ показать это так — изменить тип с int на int {abstract}.

г) Вы вполне можете реализовать более одного интерфейса в классе, поэтому теоретически все соединители в порядке. Итак, Derived реализует два интерфейса.

Редактировать Как выяснил сам @minastros (и написал мне в личку), виновником был один из миллионов флажков в настройках EA: введите здесь описание изображения

person qwerty_so    schedule 03.08.2015
comment
б) нет, Множественность не трогал. В диалоге редактирования операций есть подокно Методы, где атрибут Абстракт может быть установлен в значение Истина (или Ложь по умолчанию). Как я уже сказал, если я оставлю значение False, метод не будет выделен курсивом. --- Спасибо за другие ответы! - person Ingmar; 03.08.2015
comment
UML позволяет отображать метасвойства фигуры в фигурных скобках, например {readonly} и {union} . Это можно включить или выключить в параметрах отображения в MagicDraw. Возможно, вам стоит обратить внимание на параметры отображения в Sparx EA. - person Jim L.; 03.08.2015
comment
@ДжимЛ. например, IsRoot отображается как {root} (вместе с кратностью, разделенной запятой). Abstract тоже один из них, но у меня он не отображается в EA. - person qwerty_so; 03.08.2015
comment
Может быть, ОП должен спросить Спаркса. - person Jim L.; 03.08.2015
comment
@xmojmr Комментарии к спецификации всегда вызывают у меня улыбку... ДжимЛ.: Да. Тем не менее, перекрестная публикация на форуме Sparx всегда является хорошей идеей. В этом случае мне нужно некоторое обсуждение. OP кажется новым для EA и должен использовать что-то простое для создания такого внешнего вида. Я не видел такого за более чем 10 лет использования EA :-/ - person qwerty_so; 03.08.2015
comment
Спецификация UML 2.5 гласит: Имя абстрактного классификатора отображается курсивом, если это разрешено используемым шрифтом. В качестве альтернативы или в дополнение абстрактный классификатор может быть показан с использованием текстовой аннотации {abstract} после или под его именем. Возможно, в Sparx EA есть отдельный элемент управления для текстовых аннотаций? - person Jim L.; 03.08.2015
comment
Я ничего не знаю (но EA - это мешок пасхальных яиц) - person qwerty_so; 03.08.2015

Как упоминает Томас, технически интерфейс является абстрактным классом, хотя абстрактный класс не всегда является интерфейсом. Если у вас есть хотя бы одна операция (метод), которая не реализована, класс является абстрактным, из чего следует, что если ни одна из операций не реализована, класс также является абстрактным. «Абстрактный класс» часто рассматривается только как класс с частичной реализацией, поскольку такой абстрактный класс отличается от интерфейса. Однако класс без реализации (интерфейс) технически также является абстрактным классом.

Вероятно, поэтому EA помещает атрибут {abstract} в интерфейс (это не стереотип на диаграмме, это атрибут — стереотипы используют ‹>). Я бы не стал этого делать сам, так как это само собой разумеется.

person BobRodes    schedule 10.08.2015
comment
мой главный интерес заключался в том, имеет ли EA другое значение, когда я выбираю символ «интерфейс» или «класс», кроме цвета, потому что в основном они кажутся избыточными. Вероятно, я бы выбрал «интерфейс», чтобы выразить более высокую абстракцию, таким образом, чтобы подчеркнуть семантику интерфейса. Что касается атрибута - в написанных от руки диаграммах {abstract} более полезен, чем написание заголовка курсивом, но на диаграмме ПК я не хочу, чтобы курсивом назывались имя и атрибута, особенно с методами (Я уже обнаружил, что в EA есть настройка для его отключения.). - person Ingmar; 12.08.2015