Какая разница между стереотипом и наследованием класса в UML?
Я запутался в различии между тем, что является "стереотипом" и "суперклассом" в UML.
Скажем, я хочу создать диаграмму, содержащую "WidgetMaker
". WidgetMaker
явно является Actor
, поэтому стандарт UML должен стереотипировать его актер:
<<Actor>> WidgetMaker
Но я рос программированием в мире Java/Ruby/С++. В этом мире взаимосвязь:
class Actor
end
class WidgetMaker < Actor
end
В UML это выглядит так:
Actor
^
|
WidgetMaker
Итак, мой вопрос: почему UML имеет стереотипы вообще, когда вы можете так же легко моделировать эти понятия, используя наследование класса, которое оно также имеет.
Как только у нас будет больше "видов" актеров, вопрос станет еще более мрачным:
Actor
^
|
------------------------
| | |
Person Robot Group
^
|
WidgetMaker
против
<<Actor>> <<Person>> WidgetMaker
Ответы
Ответ 1
Насколько я понимаю, основной целью стереотипов является расширение самого UML (как языка моделирования), а не моделирование чего-либо.
Сказав это, я также думаю, что ваш вопрос подразумевает еще один возможный ответ: некоторые люди предпочитают использовать стереотипы для обозначения (неофициально!) определенных общности между классами. Они могут сделать это только потому, что это легче, чем подклассы и "достаточно хороши" для целей своих моделей.
Например, многие программные системы имеют классы, которые представляют собой так называемые объекты домена (такие, как компании, клиенты, заказы на поставку, продукты и т.д.). В конце концов, вы могли бы иметь общий класс, например Entity
для вывода Company
, Customer
и т.д. Из. Но изначально, вероятно, будет достаточно просто использовать такие стереотипные классы, как эти <<Entity>> Company
, <<Entity>> Customer
и т.д. По сути, это просто вопрос удобства (и затрат/преимуществ!) Ваших усилий по моделированию.
Ответ 2
В вашем примере Actor, вероятно, не нужно реализовывать как класс, но это может быть или не всегда так. Стереотип - это абстракции, которые могут применяться к большинству элементов UML, а не только к классам.
Они инкапсулируют семантику, не подразумевая, как будут предоставлены эти семантики. Другим примером может быть канал связи, стереотипный как HTTP или RPC. Они сообщают читателю, как что-то будет предоставлено без осложнения модели с ненужными деталями.
Спецификация UML предоставляет ряд предопределенных стереотипов, но их реальная сила заключается в возможности определять ваши собственные профили. Вы можете пометить объект домена как EJB, чтобы сохранить себя, указав весь код плиты котла.
Ответ 3
Стереотип существует и используется для представления дополнительной информации об артефакте, который документация или ее классификация в конкретный блок артефактов не могут дать. Например, вы определили класс данных, вы можете указать ему имя, объяснить атрибуты и операции, но это само по себе не может дать полную информацию. В тот момент, когда вы Stereotype это как < > , он указывает полную информацию; До тех пор он продолжается как любой другой класс для разработчика.
"Стереотипы используются для расширения нотационных элементов UML, для классификации и расширения ассоциаций, отношений наследования, классов и компонентов"
Стереотип обеспечивает возможность создания новых типов элементов моделирования. Стереотипы должны основываться на элементах, которые являются частью метамодели UML. Некоторые общие стереотипы для класса - это сущность, граница, управление, утилита и исключение. Стереотип для класса показан ниже имени класса, заключенного в гайки (т.е. «
и »
, произносится как gee-may). При желании графический значок или определенный цвет могут быть связаны со стереотипом.
Ответ 4
Хорошее указание на намерение стереотипов можно увидеть в том, как OMG применил их в профилях SysML или BPMN. В частности, стереотипы описывают новый набор конструкторов моделирования как часть языка для определения вашего домена. Например, блок в SysML является стереотипом, применяемым к классу. Это приносит с собой настройки класса для использования в системной инженерии. В этом случае он заменяет использование класса и устанавливает новые отношения к другим элементам и типам диаграмм, например. Блок < удовлетворяет требованиям → Требование (разрешенное отношение) или Блок можно смоделировать с использованием внутренней блок-диаграммы (допустимое поведение).
Стереотип не используется для моделирования вашего предметного пространства. Он классифицирует использование модельных конструкций для вертикального или горизонтального аспекта определения систем.
Ответ 5
Стереотип расширяет структуру метамодели UML, указывая, например, специфичные для домена атрибуты для элементов в модели UML и не изменяют семантику времени выполнения модели, моделируемой ими - они только обогащают язык моделирования.
Хорошим примером этого является предоставление "роли" классу в диаграмме шаблонов проектирования. Функциональность класса задается внутри класса, не добавляется стереотипом - это поддерживает вышеупомянутое утверждение.
Теперь сложная часть - это наследование или стереотипные классы; хорошо согласно UML 1.3 они не наследуются; однако ограничения, предоставляемые классу "А" через некоторый стереотип, применимы и к специализированному классу. По-моему, это все еще не относится к среде исполнения, поэтому снова неоднозначность остается на семантическом уровне. Подробнее в этот почтовый поток.