Здравствуйте, rg45, Вы писали:
S>>Речь не про проблему, а про определения и следование этим определениям.
R>А из какого определения (ООП или полиморфизма) следует, что полиморфное поведение должно быть реализовано только так, как показано у тебя в примере, а не, например, как в примере ниже?
R>Как по-мне, то это просто частный случай, а не нарушение каких-то общих требований.
А как по мне, так здесь есть
откровенная тупизна и нежелание подумать хоть чуть-чуть за пределами привычного.
Вот в стартовом сообщении было сказано "настоящий ООП — был только в Smalltalk".
Попробуем посмотреть на это утверждение с позиции решения конкретной проблемы (мой исходный пример).
Эта проблема в SmallTalk не решается, хотя, казалось бы, мы же исключительно в рамках ООП находимся.
Т.е. типа "настоящий ООП" из SmallTalk-а не может помочь в чисто ООП-ной парадигме.
С другой стороны, есть язык Eiffel, в котором, емнип, этой проблемы нет как класса, т.к. там есть языковая фича по переименованию унаследованных методов. Что-то вроде:
class
D
inherit
A
rename
f as f_A
end
B
rename
f as f_B
end
feature
f_A
do
...
end
f_B
do
...
end
end
При этом Eiffel, поскольку он не SmallTalk, а "настоящий ООП только в SmallTalk" -- значит настоящим ОО-языком типа быть не должен.
Зато эту самую проблему он решает искаропочными средствами без привлечения каких-либо промежуточных костылей.
Следовательно, к "настоящему ООП" из SmallTalk-а есть вопросики.
Но, блин, C++ники, сломя голову бросились защищать C++, типа "ну как же на нем такого не сделать, ну вот же ж у меня же ж..."
Тьфу, срамота.