Как обозначить чистую виртуальную функцию на диаграмме классов UML?

Я студент, изучаю С++. Я создаю диаграмму классов UML для своей программы, которая включает в себя наследование и абстрактные/конкретные классы, но я не слишком уверен, как обозначить чисто виртуальную функцию. Любая помощь приветствуется, спасибо!


person john grey    schedule 12.11.2018    source источник


Ответы (1)


Стандарт UML указывает, что свойство поведения (например, метод/операция) может иметь свойство isAbstract, указывающее, что оно является абстрактным и не имеет реализации. Однако нет ничего о том, как это должно быть показано на диаграмме.

Согласно uml-diagrams.org и другим источникам, в старых версиях UML (1.4.x ), абстрактная операция показывалась с именем, выделенным курсивом или с текстовым маркером {abstract} после имени. Широко использовался курсив (см. также здесь).

Текущий UML больше не использует курсив и не указывает, как представлять свойство isAbstract. Тем не менее, маркер {abstract} должен оставаться действительным.

person Christophe    schedule 12.11.2018
comment
P. 99 UML 2.5: Имя абстрактного классификатора отображается курсивом, если это разрешено используемым шрифтом - person qwerty_so; 13.11.2018
comment
@ThomasKilian да, но это относится только к классификаторам, а не к операциям. Это сильно отличается от стандарта 1.4, где прямо сказано: Если этот класс не реализует операцию; то есть не предоставляет метод, то операция может быть помечена как «{abstract}» или сигнатура операции может быть выделена курсивом, чтобы указать, что она является абстрактной. (стр. 3-46). - person Christophe; 13.11.2018
comment
@ThomasKilian обозначения поведенческих особенностей и операций больше не упоминают курсивное обозначение (но все еще подчеркивают для статики). Но оба используют нотацию { свойство... } (даже если abstract явно не упоминается p108-109 + 116). Однако я согласен с вами в том, что меня не шокирует курсив, поскольку он так активно использовался в прошлом (включая нотации до UML, например, в GoF). - person Christophe; 13.11.2018
comment
Поскольку как курсив, так и {abstract} указаны только в отношении классификаторов, вы могли бы обновить свой ответ. В настоящее время утверждается, что {abstract} должен быть верным, и в спецификациях нет никаких указаний на то, что он более действителен, чем курсив. - person Geert Bellekens; 13.11.2018
comment
Я думаю, что комментарии выше достаточно хороши. Ничто не идеально, даже технические характеристики. - person qwerty_so; 13.11.2018