Подтвердить что ты не робот

Какая разница между стереотипом и наследованием класса в 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
4b9b3361

Ответ 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 они не наследуются; однако ограничения, предоставляемые классу "А" через некоторый стереотип, применимы и к специализированному классу. По-моему, это все еще не относится к среде исполнения, поэтому снова неоднозначность остается на семантическом уровне. Подробнее в этот почтовый поток.