2015-08-03 2 views
2

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

Так что это своего рода гибрид - базового класса в C++ реальности, но интерфейс в своей основной целью .

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

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

enter image description here

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

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

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

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

+0

Для кого вы задокументируете? * Пользователь * библиотеки или коллеги * разработчиков * кода библиотеки? - Возможно, вам нужно создать * две диаграммы. – JimmyB

+0

«Абстрактный» не является стереотипом. Интересно, как вы это производите? –

+0

Документация в основном относится к нормативным причинам (stndard требует документированного программного обеспечения для такого бизнеса), и, конечно же, для разработчиков и меня тоже мотивация - это 80:20. Для любого человека-читателя каждый выбор (abtract class/interface, with/without «{abstract}», по-моему, достаточно абсурден. Но поскольку я только что начал EA для этой задачи, я хотел бы изучить его с самого начала В EA любое действие может вызвать удары по другой части модели, это не так в чистом инструменте рисования, таком как Visio. – minastaros

ответ

2

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

б) Похоже, вы заполнили Context/Advanced/Кратность со значением abstract

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

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

Редактировать Как @minastros выяснил сам (и Pmed меня) преступник был один из огромного количества флагов в параметрах EA: enter image description here

+0

б) Нет, я не коснулся множественности. В диалоговом окне, где операции могут быть отредактированы, есть под-окно «Методы», где по умолчанию атрибут «Аннотация» может быть установлен на «True» (или «False»). Как я уже сказал, если оставить его «Ложно», метод не будет выделен курсивом. --- Спасибо за другие ответы! – minastaros

+1

UML позволяет отображать метаподготовки на фигуре в фигурных скобках, например '{readonly}' и '{union}'. Это можно включить или отключить в настройках отображения в MagicDraw. Возможно, вам стоит посмотреть параметры отображения в Sparx EA. –

+0

См. Также http://www.uml-diagrams.org/class-diagrams.html#abstract-class – xmojmr

0

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

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

+0

Мой главный интерес заключался в том, имеет ли значение EA другое значение, когда я выбираю символ «interface» или «class», за исключением цвета, потому что в основном они кажутся быть избыточным. Вероятно, я бы выбрал «интерфейс», чтобы выразить более высокую абстракцию, чтобы подчеркнуть интерфейс _semantic_. Что касается атрибута - в написанных вручную диаграммах, «{abstract}» более полезно, чем писать заголовок курсивом, но на диаграмме ПК я не хочу, чтобы и курсивное имя, и атрибут, особенно с помощью методов (я уже нашел что в EA есть настройка, чтобы отключить его.). – minastaros