Вопрос о расширении / включении UML из примера книги - PullRequest
0 голосов
/ 30 января 2010

Читая книгу про UML, я не понимаю следующее:

                                      --------include---> Add new manufacturer
  Servoce Assistant---Add new product
                                     <--------extend----Add new product type    

Я просто не понимаю этого. Если есть еще неизвестный производитель, он использует включенный случай Добавить производителя. Но если это еще неизвестный тип, есть расширение? Это не имеет никакого смысла для меня. Было бы разумно, если бы только Добавить производителя можно было вызывать из разных мест, но Добавить новый тип продукта существует только для этого случая. Это правильно? Спасибо!

Ответы [ 4 ]

5 голосов
/ 19 февраля 2010

Следующие пояснения могут помочь прояснить отношения " extend " и " include " на диаграммах вариантов использования:

Включить : включающий вариант использования вызывает или вызывает включенный вариант. Включение используется, чтобы показать, как использование Дело разбивается на более мелкие шаги. включенный вариант использования находится на стрелке конец.

Расширить : Расширение варианта использования добавляет цели и шаги к расширенному использованию дело. Расширения работают только при определенных условиях. Расширенный вариант использования находится на конце стрелки.

Включение и расширение связей на диаграмме прецедентов http://i.msdn.microsoft.com/Dd409427.UML_UCOvStructure(en-us,VS.100).png

Диаграммы вариантов использования UML: Ссылка в http://msdn.microsoft.com/en-us/library/dd409427%28VS.100%29.aspx

1 голос
/ 01 февраля 2010

Если есть еще неизвестный производитель, он использует включенный случай Добавить производителя. Но если это еще неизвестный тип, есть расширение? Это не имеет никакого смысла для меня.

Я не совсем уверен, что для меня это тоже имеет смысл.

В спецификации UML2 говорится о включении (раздел 16.3.5):

Отношение включения между двумя вариантами использования означает, что поведение, определенное в этом случае, включено в поведение базового варианта использования. Отношение включения предназначено для использования при наличии общих частей поведение двух или более вариантов использования. Эта общая часть затем извлекается в отдельный вариант использования, который будет включен всеми базовые варианты использования, имеющие эту общую часть. Поскольку основное использование отношения включения предназначено для повторного использования общих частей, то, что остается в базовом сценарии использования, обычно не является завершенным само по себе, а зависит от включенных частей, чтобы иметь смысл. это отражается в направлении взаимосвязи, указывая, что базовый вариант использования зависит от дополнения, а не от недостатка наоборот.

Выполнение включенного варианта использования аналогично вызову подпрограммы. Все поведение включенного варианта использования выполняется в одном месте во включенном сценарии использования до возобновления выполнения включенного варианта использования.

...

Обратите внимание, что включенный вариант использования не является обязательным и всегда требуется для правильного выполнения включающего варианта использования.

И из расширений (раздел 16.3.3):

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

...

Если условие расширения является истинным в то время, когда первая точка расширения достигнута во время выполнения расширенный вариант использования, тогда также будут выполнены все соответствующие фрагменты поведения расширенного варианта использования. Если условие ложно, расширение не происходит.

Варианты использования - довольно процедурные вещи, которые можно найти в языке OOD. Включает в себя подпрограммы звонки. Расширения являются необязательными процедурами, такими как условная логика или шаблонный метод шаблона , где основной метод может вызывать или не вызывать более конкретную реализацию.

Поскольку вариант использования является классификатором, вы можете использовать те же отношения обобщения между вариантами использования, что и между классами, чтобы обозначить обобщение. Расширение и включение обозначают необязательные и обязательные подчиненные поведения.

Было бы разумно, если бы только Добавить производителя можно было вызывать из разных мест, но Добавить новый тип продукта существует только для этого случая. Это правильно? Спасибо!

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

0 голосов
/ 31 января 2010

Томас, вы имеете в виду точки расширения в отличие от расширения класса?

Взяв пример LWoodyiii с Login, у вас будет сценарий использования, где все отлично работает в качестве отправной точки, и затем вы добавите extensions к сценарию использования, где сценарий может пойти не так?

Существует множество примеров , просто Google для UML расширения использования .

0 голосов
/ 31 января 2010

Сначала вам нужно дать людям некоторый контекст здесь. Вы используете диаграммы вариантов использования. Во-вторых, я обычно держусь подальше от UML; но я попробую. «Включить» используется для модульных вариантов использования. Например, «Вход пользователя в систему» ​​используется часто, и его гораздо легче «включить», чем записывать шаги в каждом сценарии использования, в котором он находится. «Расширить» пытается использовать обобщение / наследование с вариантами использования, но я не не думаю, что это очень хорошо, можно использовать. Вот пример, «Добавить тигра» расширяет «Добавить животное». Опять же, я бы остался далеко от "Расширить".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...