Голосование

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

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

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

Ситация. Наземное Транспортное средство, Водное транспортное средство, Амфибия.
Амфибия - это и наземное транспортное средство и водное транспортное средство - тут против концепция ООП возразить трудно.

На сайте где тест имеется, сам разработчик говорит о концепциях, а не конкретных языковых реализациях



Нет, Эдуард.
Если дракон (подкласс) наследует птицу (суперкласс), то это значит, что он подписывается на ее контракт, т.е. может его выполнять. Или другими словами, дракон может быть подставлен вместо птицы и логика не поломается.

Ты пишешь, "имелось в виду - возможность подстановки вместо дракона птицы или ящерицы".
Как же можно подставить птицу вместо дракона, если она и понятия о нем (и его контракте) не имеет?



пример:
Допустим, существыуют драконы которые умеют летать, и которые не умеют.
"умеет летать" тогда атрибут и никак иначе.
Возможно, где-то так учат. Возможно, это правильно с точки зрения реализации - я не программист.
С позиции аналитика "летать" это метод, а не атрибут. И если у вас есть драконы, которые умеют летать, и есть такие которые не умеют - то это два разных класса, имеющие родителем класс "дракон".
Почему это два разных класса - потому что поведение у них разное. И нельзя в один класс запихивать сущности, обладающие разным поведением. Сопровождать трудно будет такие классы. Что проще - добавить новый класс в систему или новый атрибут к существующему классу, который уже работает?...

поведение вседа лучше записывать глаголом - это да, с этим я согласен.
И тут же предлгаете записать поведение атрибутом :) странное у вас согласие.
« Последнее редактирование: 11 Сентября 2009, 12:04:29 от ida »



Нет, Эдуард.
Если дракон (подкласс) наследует птицу (суперкласс), то это значит, что он подписывается на ее контракт, т.е. может его выполнять. Или другими словами, дракон может быть подставлен вместо птицы и логика не поломается.
Спасибо за разъяснение. Все понял :)



"Во многой мудрости много печалей"© Экклезиаст
более простой пример вопроса, в котором лишнюю головную боль, создают ненужные размышления:
9 женщин рожают 9 детей за 9 месяцев, сколько детей родят полторы женщины за полтора месяца?
Решать используя только арифметические методы.

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

нельзя ли перефразировать задание так:
"Lalala умеет складывать, как 'SumValue', и печатать, как 'Print'. С точки зрения ООП, примером чего является данная ситуация?"

Как можно заменить глагол, глаголом, что бы получить поле, а не метод, я не могу сообразить с ходу.
« Последнее редактирование: 11 Сентября 2009, 12:12:43 от ASG(Сергей) »
Per aspera ad astra.



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

Как можно заменить глагол, глаголом, что бы получить поле, а не метод, я не могу сообразить с ходу.
если взять c++, то примеров хватает. например, как глагол, вставить елемент в конец массива, превращается в сущность back_inserter_iterator.
« Последнее редактирование: 11 Сентября 2009, 12:56:14 от komarik »



любое поведение - это глагол, но не любой глагол - это поведение. - я воспринимаю это так.
не вижу ничего странного.
Можете привести пример глагола - не действия?



даже не один такой есть :о)) лениться, спать, ничего-не-делать
Лью воду...



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

для истории:
икапсуляция: 1
множественное наследование: 10
композиция: 3



даже не один такой есть :о)) лениться, спать, ничего-не-делать
т.е. приведенные тобой слова - не поведение или действие?
Глагол отвечает на вопрос - Что делать? Ну так для справки



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



Можете привести пример глагола - не действия?
сам глагол без контекста - нет.
глагол, который встречается в описании задания, который потом превращается в сущность - уже привел (back_inserter_iterator).
« Последнее редактирование: 11 Сентября 2009, 13:39:05 от komarik »



если взять c++, то примеров хватает. например, как глагол, вставить елемент в конец массива, превращается в сущность back_inserter_iterator.
Разве "вставить элемент в конец массива" - это глагол? Предложение - да. Описывающие действие да. Но кроме глагола содержит ещё и другие части речи.

Added: из задания дополнительные действия и доосмысления - на сколько я вижу, не требуются. ???
« Последнее редактирование: 11 Сентября 2009, 15:45:11 от ASG(Сергей) »
Per aspera ad astra.



Разве "вставить элемент в конец массива" - это глагол?
ответ постом выше.
Added: из задания дополнительные действия и доосмысления - на сколько я вижу, не требуются. ???
ответ: множественное наследование
домысл: существуют и необходимы сущности летун (flyable), ползун (думаю от птицы и ящерици наследоваться никто не собирается)
ответ: композиция
домысл: сущностей летун и ползун не существует, или нет необходимости в их создании. умения летать и ползать можно воспринимать как свойства.

Added: это я к тому, что на любой вариант ответа надо будет домысливать.
« Последнее редактирование: 11 Сентября 2009, 16:50:19 от komarik »



>> хочу добавить вариант ответа: правильных ответов нет или правильных ответов больше чем один. интересно измениться ли и как, если изменится, статистика голосования.
Предыдущий вариант голосования был неудовлетворительным, поэтому решил переформулировать? Прикольный подход. А вариант "правильных ответов нет или правильных ответов больше чем один" - это вообще перл.
Тогда давай уже так, есть 2 варианта - "множественное наследование" и "другое", или какой ты там вариант опустить хочешь.

>> существуют и необходимы сущности летун (flyable), ползун
Привязался же к словам летун и ползун. Посмотри как дизайнят библиотеку классов, например в Java. Есть интерфейс например Runnable с одним методом run(), это что по твоему - запускалка или бегалка? Runnable наделяет класс новым поведением, а именно возможностью выполняться.
Аналогично Flyable наделяет класс новым поведением - способносью летать. Это не что иное как наследование.

Напомню еще тебе твои же слова:
>> вот прошел человек такой тест, и отложилось у него в памяти, если две сущности умеют летать, то это полюбому наследование. и попробуй потом ему объяснить, что это далеко не всегда так, и в решаемой задачи наследование не подходит.

Вот ты сейчас именно это и делаешь: пытаешься отбросить все точки зрения кроме своей и не воспринимаешь конструктивную критику.
Ну если тебе от этого легче - пусть будет так.




 

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