Голосование

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

Наследование
Инкапсуляция
Множественное наследование
Полиморфизм
Композиция
правильных ответов нет или правильных ответов больше чем один.
Вопрос из теста. Интересно, как бы вы на него ответили.(Прочитано 35837 раз)
Собсно интересует, я один думаю не так, как думают создатели теста или нет =)



А как думают создатели теста? Что за тест? И какой ответ является правильным "с научной точки зрения"?  ;)



Я ответил композиция. Хотя как мы понимаем и композиция тут не подходит. Может быть полиморфизм? Да наверное полиморфизм.

Почему не наследование.
Сущность - птица - имеет ряд свойств, в том числе умение летать
Сущность - ящерица - имеет ряд свойств, в том числе умение ползать.

Дракон - берет часть свойств птицы (крылья, умение летать) и ящерицы (4 ноги, плоское брюхо, умение ползать)

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

Если пойти от биологии, то вероятно - птица - это динозавр, но вот ящерица - далеко не факт, скорее пресмыкающее. Тогда мы можем выстроить другую цепочку: Дракон - это птица - это динозавр, тогда как бы ползать он как ящерица не может, так как у динозавров совершенно другое строение :)



Это работодатели такие тесты раздают, что ли?
greesha.ru

Реальность - это убийство прекрасной теории бандой мерзких фактов. (Роберт Гласс)



"Правильный" ответ - множественное наследование.
Как я понял, логика примерно такая:
класс "Летун";
класс "Ползун";
класс Птица : "Летун";
класс Ящерица : "Ползун";
класс Дракон : "Леутн", "Ползун";

Мой ответ: Композиция
класс УмениеЛетать;
класс УмениеПолзать;
Класс Дракон
{
УмениеЛетать
УмениеПолзать
}

Как по мне, данный вариант подходит больше, чем вариант с наследованием, учитывая то, как задан вопрос.


Это работодатели такие тесты раздают, что ли?
нет, это просто тесты - http://www.quizful.net/test/oop_basics.



Мне тоже множественное наследование не нравится. Если решать задачу в лоб, то полученная модель искажает реальность: драконы не являются птицами, а абстрактные классы летунов и ползунов сразу сильно усложняют модель.

Но вообще, такие задачи нельзя решать в отрыве от контекста.
greesha.ru

Реальность - это убийство прекрасной теории бандой мерзких фактов. (Роберт Гласс)



На мой взгляд все зависит от конкретной реализации...Можно представить, что дракон появился от скрещивания птицы и ящера, тогда одно решение. А можно представить, что это вообще отдельное создание, тогда рожденный ползать летать не может. У задачи просто не может быть правильного ответа.
« Последнее редактирование: 10 Сентября 2009, 12:07:42 от Babikhin M. »



Интересно, почему некоторые думают, что наследование - это только "is-a"? На сколько я понимаю, птица и ящерица приведены как пример.

В вопросе явно указаны слова "летать"  и "ползать" - это поведение. То есть некие классы (или интерфейсы) - не важно как их назвать (CanFly, Flyable, FlyAware) наделяют дракона новым поведением. Это наследование. А так как есть 2 таких поведения, то это множественное наследование.

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

Полиморфизм имеет смысл когда мы говорим о полиморфном поведении. То есть если бы задача стояла работать с птицей и драконом одинаковым образом (запускать их с балкона что ли), то полиморфизм бы подошел.

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



боже мой, какая херня



боже мой, какая херня
четко и многозначительно одновременно =)
это ответ на какой пост? (хотя интуитивно догадываюсь)



Интересно, почему некоторые думают, что наследование - это только "is-a"? На сколько я понимаю, птица и ящерица приведены как пример.
А что может быть еще?

Учитывая, что нужно выбрать наиболее подходящий вариант, подходит именно множественное наследование.
Если поступать формально - да множественное наследование. Дракон это и птица, и ящерица. А если вспомнить легенду, то и человек, так как умеет говорить и мыслить :)

Возможны Вы правы в своих рассуждениях. Особенно если не принимать глубокий смысл задания :)



Советую почитать о наследовании и о том, что кроме наследования реализации есть еще и наследование интерфейса (API).
Что то типа такого получается:
class Flyable {
    public: virtual void fly();
};
class Dragon : Flyable {
    public: void fly() { ... }
};



Выбрала множественное наследование, но я себе слабо представляю полиморфизм.
Первые два точно нет.
Насчет композиции - может быть в этом каверзность вопроса, но я бы сказала, что это вариант, который может подойти после дополнительных вопросов (ибо для каких целей будут использоваться методы летать и ползать, неясно). Именно в такой постановке - нет.

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

В-частности, возможно, это хороший способ оценить программиста, но для аналитика - человека, чьей ключевой задачей является взаимодействие - просто немыслимо дать ожидаемый ответ. И получается, что оценивается не твоя способность к взаимодействию, а то, угадал ты, что хотел сказать автор теста (видя обоих впервые), или нет.
« Последнее редактирование: 10 Сентября 2009, 17:59:26 от ida »



Вся страна играет в угадайку. И сюда добрались :)
Если вы не знаете куда идете, то вы вряд ли туда дойдете [Форест Гамп]
www.grigorash.ru



Я бы выбирал между   наследованием и композицией, зависит от языка реализации.

Например  при реализации на Javа пришлось бы реализовавать как композицию.
Но никак не полиморфизм.

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





 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19