Классификация и обобщение

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

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

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

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

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

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

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

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


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

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

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: