Требование в викторине гласит: Существует несколько разных видов птиц, например, черный дрозд, дрозд и скворец
Но это ничего не говорит о том, какую информацию вы должны хранить овиды птиц.Итак, мое первое предположение состоит в том, что пользователь будет интересоваться только типом.
Диаграмма UML:
![Bird Class](https://i.stack.imgur.com/gvbNI.png)
является допустимымРешение для этого требования.Оба варианта в вашей викторине также являются действительными решениями в зависимости от того, как вы смотрите на требование.Требование дало три примера, которые явно смоделированы в обоих решениях.«например» означает, что могут быть другие птицы, и этот факт лучше описать в первом решении.Во втором решении у вас не может быть экземпляров «Bird», которых нет в списке примеров.
Но это решение будет иметь смысл, только если у вас могут быть некоторые атрибуты и операции, которые не показаны - ИМХОминимум должен был бы отслеживать тип птицы - очень неудобно извлекать его из имени класса в большинстве сред реализации.
Лично я не думаю, что это хороший способ объяснить наследование такими примерами, какв вашей викторине.Наследование является дорогостоящим в реализации (например, в большинстве языков программирования вы получаете отдельные файлы исходного кода для унаследованного класса), и эта стоимость должна дать вам определенную выгоду.Это в основном тот случай, когда изображаемые предметы различаются по своим атрибутам и поведению, и вам нужны разные реализации.«Черный дрозд» и «Синий дрозд» могут отличаться только цветом (атрибут цвета является дискриминатором).ИМХО в этом случае лучше иметь:
, чем ![Blackbird and Bluebird](https://i.stack.imgur.com/NRpqn.png)