Главная » UML » Классификация и обобщение UML

0

 

Мне часто приходится слышать суждения разработчиков о механизме подтипов как об отношении является (это [есть]). Я настоятельно рекомендую держаться подальше от такого представления. Проблема заключается в том, что выражение является может иметь самый разный смысл.

Рассмотрим следующие предложения.

1.    Шеп – это бордер-колли.

2.    Бордер-колли – это собака.

3.    Собаки являются животными.

4.    Бордер-колли-это порода собак.

5.    Собака – это биологический вид.

Теперь попытаемся скомбинировать эти фразы. При объединении первого и второго предложений получаем «Шеп – это собака»; второе и третье предложения в результате дают «бордер-колли – это живот-

 

ные». Объединение первых трех фраз дает «Шеп – это животное». Чем дальше, тем лучше. Теперь попробуем первое и четвертое предложения; «Щеп – это порода собак». В результате объединения второго и пятого предложений получим «бордер-колли – это биологический вид». Это уже не так хорошо.

Почему некоторые из этих фраз можно комбинировать, а другие нельзя? Причина в том, что некоторые предложения представляют собой классификацию – объект Шеп (Shep) является экземпляром типа Бордер-Колли (Border Collie), в то время как другие предложения представляют собой обобщение – тип Бордер-Колли является подтипом типа Собака (Dog). Обобщение транзитивно, а классификация – нет. Если обобщение следует за классификацией, то их можно объединить, а если наоборот – классификация следует за обобщением, то нельзя.

Смысл сказанного в том, что с отношением является следует обращаться весьма осторожно. Его использование может привести к неверному применению подклассов и к ошибочному распределению ответственностей. В приведенном примере хорошими тестами для проверки подтипов могут служить следующие фразы: «Собаки являются разновидностью Животных» и «Каждый экземпляр Бордер-Колли является экземпляром Собаки».

В языке UML обобщение обозначается соответствующим символом. Для того чтобы показать классификацию, применяется зависимость с ключевым словом «instantiate».

 

Источник: Фаулер М.UML. Основы, 3-е издание. – Пер. с англ. – СПб: Символ-Плюс, 2006. – 192 с.,ил.

По теме:

  • Комментарии