Голосование

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

Наследование
Инкапсуляция
Множественное наследование
Полиморфизм
Композиция
правильных ответов нет или правильных ответов больше чем один.
Вопрос из теста. Интересно, как бы вы на него ответили.(Прочитано 54074 раз)
Эдуард, а чем предложенный пример отличается от оригинала?
Я просто, скоипровал оба варианта. Один под другой. Вроде то на то и выходит, нет?

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

говоря амфибия вполне можно говорить о наземном транспортном средстве, которое имеет до 4 колес, ездит по дорогам и т.п. При этом совершенно не вызывает отторжения фраза - амфибия - это машина(автомобиль). Да мы понимаем - это особый автомобиль, но тем не менее.

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

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


Дракон это особый тип птицы, которая умеет ползать
Дракон это особый тип ящерицы, которая умеет летать как птица
А тут как? С Вашей точки зрения глубокой и не очень?



Я, конечно, не глубокий знаток ОО программирования, но мне кажется, что тут есть некоторое смешивание. Наследование интерфейсов безусловно есть. Однако класс не наследует интерфейсы, а реализует их. Таким образом некий интерфейс (ЛетатьПолзать) множественно наследует интерфейсы Летать и Ползать, а класс Дракон реализует интерфейс ЛетатьПолзать. Учитывая варианты ответа, скорее всего нужно выбрать множественное наследование :) Но наличие интерфейсов тут сбивает, потому и возникла такая дискуссия (на пустом вообщем месте)
насколько я понимаю, OOP - это умение записать в коде то, что является выходом OOA/OOD.
или другой вариант: OOP включает в себя OOA, OOD, и умение закодить. не знаю, какой вариант будет более точный.
в контексте OOA/OOD нет принципиального различия между наследованием интерфейса и наследованием класса. тут не уверен, поправте, если не прав.
при реализации и на Java, и на C++ не обязательно создавать сущность "ЛетатьПолзать"(если нет в этом необходимости).
выглядеть оно может, например, так (Java):
class Dragon : extends Animal, impliments Flyable, Crowable;
как по мне, это множественное наследование от 3 сущностей.
поэтому наличие интерфейсов меня тут не сбивает.
и всеравно не понимаю почему только множественное наследование. точнее почему на данный вопрос надо думать в русле того, что существуют сущности Flyable и Crowable. Почему нельзя додумывать в сторону композиции:
класс Крылья - позволяет летать.
класс Ноги - позволяет ползать
класс Дракон
{
   Крылья
   Ноги
}

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

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



Ответил так : правильного ответа нет. ИМХО, Речь в задаче идет о наборе интерфейсов. Это из ПХП5.




 

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