Здравствуйте, samius, Вы писали:
S>>>Объекты в JS не нуждаются в отношении наследования для проявления полиморфизма. Q>>Ну, я это и имел в виду. S>А, так я как раз затруднился привести язык, в котором полиморфизм был бы "основан на наследовании". То есть не имел бы других проявлений, кроме как subtype polymorphism.
Из контекста у меня создалось впечатление, что fin_81 имел в виду полиморфизм-в-узком-смысле, а именно «динамический полиморфизм, основанный на переопределении функций». JavaScript — это мейнстримный язык, который как нельзя лучше опровергает постулат о связи полиморфизма-в-указанном-смысле с наследованием.
Здравствуйте, McSeem2, Вы писали:
MS>Все это такое фуфло, я вас скажу эти ваши философии. Так же как и много других умных слов про программирование. На практике же, надо просто решать конкретную прикладную задачу, вот и все.
Когда то, ради чего делалась задача, малость (или не совсем малость) перестало быть актуально _после_ затраченных усилий на задачу, то станет понятно что твои слова бесполезный bullshit. Т.к. заглянуть в будущее и узнать какова будет жизнь после выполнения задачи могут немногие люди. Ещё меньшее кол-во людей может предсказать как будет развиваться жизнь и соответственно сделанная в ней задача во времени. А измениться может так, что надо будет много чего переделать.
Поэтому лучше подстелить соломку, чем не стелить
Здравствуйте, samius, Вы писали:
S>Здравствуйте, fin_81, Вы писали:
_>>Здравствуйте, samius, Вы писали:
_>>>>А что такое интерфейс? S>>>http://en.wikipedia.org/wiki/Interface_%28computing%29
_>>То есть интерфейс — это (абстрактный) тип. _>>Если перефразировать определение из вики. S>Нет, я сослался на общее определение интерфейса, а не на частное для ООП языков.
И как совместить это общее определение с теорией типов?
_>>Обработка данных разного типа посредством общего/одинакового абстрактного типа (интерфейса).
_>>Упрощаем и получаем, обработка данных в зависимости от типа (общего абстрактного). S>sin a/cos a = in/co
Что это?
Здравствуйте, fin_81, Вы писали:
_>Здравствуйте, samius, Вы писали:
S>>Нет, я сослался на общее определение интерфейса, а не на частное для ООП языков.
_>И как совместить это общее определение с теорией типов?
Найти в нем что-то общее с определениями, близкими к теории типов. Например, у Пирса:
Термин полиморфизм обозначает семейство различных механизмов, позволяющих использовать один и тот же фрагмент программы с различными типами в различных контекстах.
способ использования фрагмента программы неплохо коррелирует с интерфейсом взаимодействия.
_>>>Обработка данных разного типа посредством общего/одинакового абстрактного типа (интерфейса).
_>>>Упрощаем и получаем, обработка данных в зависимости от типа (общего абстрактного). S>>sin a/cos a = in/co _>Что это?
Это упрощение, подобное вашему.
Здравствуйте, samius, Вы писали:
S>>>Милнер ссылается на полиморфизм в ALGOL-е. _>>Я не знаю алгол. Нужен пример полиморфизма в алголе, что посложнее перегрузки функций. S>Куда сложнее, если перегрузка функций и есть одно из проявлений полиморфизма? ООП-шный полиморфизм это есть частный случай перегрузки функций по неявному аргументу.
Где пример полиморфизма на алгол?
S>>>Причем смолток со своим представлением о полиморфизме? _>>Ответ на требование а причем тут ооп в контексте smalltalk. S>Это был ответ на вопрос, был ли полиморфизм до smalltalk-а. И в нем откуда-то взялось ООП.
Здравствуйте, 0x7be, Вы писали:
0>Здравствуйте, jazzer, Вы писали:
J>>Но вброс на самом деле имеет следующий смысл: насколько практический программер должен сражаться за теоретическую чистоту кода?
0>Теоретическая чистота когда — это как?
Это как в Java, когда раз ООП, то не должно быть свободных функций, и поэтому надо рожать бессмысленные классы для свободных по сути функций типа синуса и main. Зато чистый ООП, только классы.
Или там "из функции должен быть только один выход", потому что типа Дейкстра доказал, что такие функции лучше — и поэтому начинаются пляски с тем же goto, лишь бы return в середине функции не написать.
Здравствуйте, fin_81, Вы писали:
_>Здравствуйте, samius, Вы писали:
S>>Куда сложнее, если перегрузка функций и есть одно из проявлений полиморфизма? ООП-шный полиморфизм это есть частный случай перегрузки функций по неявному аргументу.
_>Где пример полиморфизма на алгол?
Бан в гугле за манеры? http://en.wikipedia.org/wiki/Operator_overloading#1960s
S>>Это был ответ на вопрос, был ли полиморфизм до smalltalk-а. И в нем откуда-то взялось ООП.
_>В университетах учили что это первый ОО язык.
Осталось выяснить, причем тут ОО.
Здравствуйте, jazzer, Вы писали:
J>Это как в Java, когда раз ООП, то не должно быть свободных функций, и поэтому надо рожать бессмысленные классы для свободных по сути функций типа синуса и main. Зато чистый ООП, только классы. J>Или там "из функции должен быть только один выход", потому что типа Дейкстра доказал, что такие функции лучше — и поэтому начинаются пляски с тем же goto, лишь бы return в середине функции не написать. Да я понимаю все.
У меня есть гипотеза: все программисты проходят через период идеологического пуризма, когда кажется, что некая логически стройная и элегантная парадигма — это истинный путь, а остальное надо выбросить все на свалку истории. Ничего, с опытом проходит.
Здравствуйте, samius, Вы писали:
S>Здравствуйте, fin_81, Вы писали:
_>>Здравствуйте, samius, Вы писали:
S>>>Куда сложнее, если перегрузка функций и есть одно из проявлений полиморфизма? ООП-шный полиморфизм это есть частный случай перегрузки функций по неявному аргументу.
_>>Где пример полиморфизма на алгол? S>Бан в гугле за манеры? S>http://en.wikipedia.org/wiki/Operator_overloading#1960s
Перегрузка операторов.
А я думал сейчас будет эмуляция таблицы вирт методов.
Скоро вывод типов в функциональных языках запишут в примеры полиморфизма.
S>>>Это был ответ на вопрос, был ли полиморфизм до smalltalk-а. И в нем откуда-то взялось ООП.
_>>В университетах учили что это первый ОО язык. S>Осталось выяснить, причем тут ОО.
А что не ОО язык?
Здравствуйте, samius, Вы писали:
S>>>Нет, я сослался на общее определение интерфейса, а не на частное для ООП языков.
_>>И как совместить это общее определение с теорией типов? S>Найти в нем что-то общее с определениями, близкими к теории типов. Например, у Пирса: S>
S>Термин полиморфизм обозначает семейство различных механизмов, позволяющих использовать один и тот же фрагмент программы с различными типами в различных контекстах.
S>способ использования фрагмента программы неплохо коррелирует с интерфейсом взаимодействия.
Под это определение прекрасно подходит наследование. Наследование — это полиморфизм?
Здравствуйте, Voblin, Вы писали:
V>Здравствуйте, AlexRK, Вы писали:
ARK>>Не понял, как это все относится к обсуждению истинности первоначального утверждения о полиморфизме и наследовании.
V>ОК. Давайте от обратного. Берём ООП и делаем ему "минус наследование". V>Как-то почти автоматически получается "минус полиморфизм". Но мы не сдаёмся и пытаемся организовать полиморфизм без использования наследования. И, о чудо! В конце концов у нас это получается! Однако, порывшись в своих соображениях, которыми мы руководствовались когда проектировали все связки-взаимоувязки, проанализировав код, приходим к выводу, что нам таки пришлось спроектировать иерархию классов. Пусть неявно, пусть на бумажке, но сделать это пришлось.
V>Полиморфизм — прямое следствие наследования. И не важно, поддержано оно средствами ЯП или нам пришлось как-то ещё выкручиваться.
Нет, полиморфизм не имеет ничего общего с наследованием. Идеальный ООП-язык, с моей точки зрения, не должен иметь наследования ни в каком виде (в том числе и наследования интерфейсов). Полиморфизм — через реализацию интерфейсов.
Здравствуйте, fin_81, Вы писали:
_>Здравствуйте, AlexRK, Вы писали:
ARK>>ОК. Итак:
ARK>>int AddInt(int, int) ARK>>float AddFloat(float, float)
ARK>>Обработка есть. Обе операции зависят от типов. Их результаты тоже. Вердикт — обе функции полиморфны.
_> _>Полиморфизм — это обработка ... _>Обработка разная, применяем разные операции — обламываемся на слове "обработка", дальнейшее уточнение не важно. Единственное число, не все возможные обработки, а конкретная.
Вот видите, сколько появляется всяких разных слов (причем я до конца все равно не понял). А определение должно быть коротким, полным и непротиворечивым (по возможности). Определение полиморфизма из википедии очень хорошее и использует известные в CS термины.
Здравствуйте, fin_81, Вы писали:
S>>http://en.wikipedia.org/wiki/Operator_overloading#1960s _>Перегрузка операторов. _>А я думал сейчас будет эмуляция таблицы вирт методов. _>Скоро вывод типов в функциональных языках запишут в примеры полиморфизма.
Перегрузка операторов — это один из видов полиморфизма.
_>А что не ОО язык?
Здравствуйте, McSeem2, Вы писали:
MS>На практике же, надо просто решать конкретную прикладную задачу, вот и все.
Это просто замечательно
Предлагаю развить мысль: фуфло все эти ваши языки программирования, зачем они? Надо просто решать конкретную прикладную задачу
Здравствуйте, fin_81, Вы писали:
_>Здравствуйте, samius, Вы писали:
S>>
S>>Термин полиморфизм обозначает семейство различных механизмов, позволяющих использовать один и тот же фрагмент программы с различными типами в различных контекстах.
S>>способ использования фрагмента программы неплохо коррелирует с интерфейсом взаимодействия.
_>Под это определение прекрасно подходит наследование. Наследование — это полиморфизм?
Предлагаю различать механизм как способ установки взаимоотношения между типами и свойство программы, которое он обеспечивает.
Здравствуйте, fin_81, Вы писали:
_>Здравствуйте, samius, Вы писали:
S>>http://en.wikipedia.org/wiki/Operator_overloading#1960s _>Перегрузка операторов. _>А я думал сейчас будет эмуляция таблицы вирт методов.
Это таблица виртуальных методов будет эмуляцией перегрузки для рантайма. _>Скоро вывод типов в функциональных языках запишут в примеры полиморфизма.
Прокомментирую когда запишут. Я таких тенденций не наблюдаю.
_>>>В университетах учили что это первый ОО язык. S>>Осталось выяснить, причем тут ОО. _>А что не ОО язык?
Содержательная часть беседы кончилась?
Здравствуйте, AlexRK, Вы писали:
ARK>Здравствуйте, fin_81, Вы писали:
_>>Под это определение прекрасно подходит наследование. Наследование — это полиморфизм?
ARK>Наследование — это повторное использование реализации + полиморфизм. Таким образом, термины "наследование" и "полиморфизм" не эквивалентны.
По приведенному определению: повторное использование реализации — это полиморфизм.
Вывод: наследование — полиморфизм + полиморфизм.
Весело чо
Здравствуйте, AlexRK, Вы писали:
ARK>Здравствуйте, fin_81, Вы писали:
S>>>http://en.wikipedia.org/wiki/Operator_overloading#1960s _>>Перегрузка операторов. _>>А я думал сейчас будет эмуляция таблицы вирт методов. _>>Скоро вывод типов в функциональных языках запишут в примеры полиморфизма.
ARK>Перегрузка операторов — это один из видов полиморфизма.
Наследование — тоже один из видов полиморфизма.
Программирование — тоже один из видов полиморфизма.
Биологическая жизнь — тоже один из видов полиморфизма.
Вселенная — тоже один из видов полиморфизма.
Еще веселее
_>>А что не ОО язык?
ARK>Pascal, Haskell.
Мне показалось, что было поставлено под сомнение что smalltalk OO язык? Я спрашиваю — почему?