
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.218] |
![]() |
|
Страницы: (33) « Первая ... 22 23 [24] 25 26 ... 32 33 ( Перейти к последнему сообщению ) |
Сообщ.
#346
,
|
|
|
Цитата applegame @ Цитата D_KEY @ Функция bar - полиморфна, так как может принимать не только тип A, но и всех его потомков.А если нет, то можете объяснить принципиальную разницу с шаблонами(в контексте нашего разговора, естественно)? Параметрически полиморфна? Добавлено Цитата applegame @ Сишная функция printf параметрически полиморфна, как бы вам с D_KEY не хотелось обратного. Это какой-то догмат или что? Или я пропустил твою аргументацию? |
Сообщ.
#347
,
|
|
|
Ой, ладно, господа. Мне уже скучно на эту тему спорить. Если из задачки я кое что полезное для себя почерпнул, то из спора о ПП ничего ценного извлечь не удасться. Считайте что в плюсах нет ПП ради бога.
Давайте лучше поговорим о чем-нибудь более конструктивном. Тем более что у меня назревает вопросец. |
![]() |
Сообщ.
#348
,
|
|
Цитата applegame @ Давайте лучше поговорим о чем-нибудь более конструктивном. Тем более что у меня назревает вопросец. Так вбрасывай. |
Сообщ.
#349
,
|
|
|
Цитата applegame @ Давайте лучше поговорим о чем-нибудь более конструктивном. Например?=) У тебя есть какие-то новые мысли на счет сабжа? Цитата Тем более что у меня назревает вопросец. Ну как назреет, задавай ![]() |
Сообщ.
#350
,
|
|
|
Насчет жабы. D_KEY, как ты считаешь, Жаба поддерживает ПП?
|
Сообщ.
#351
,
|
|
|
Цитата applegame @ Насчет жабы. D_KEY, как ты считаешь, Жаба поддерживает ПП? Да, пока не вижу оснований считать, что не поддерживает. |
Сообщ.
#352
,
|
|
|
Цитата D_KEY @ Только вот странный там полиморфизм получается. Вот у нас два типа имеющих общий метод:Да, пока не вижу оснований считать, что не поддерживает. ![]() ![]() class Foo { public String test() { return "Foo"; } } class Bar { public String test() { return "Bar"; } } А вот это не компилируется: ![]() ![]() public static <T> String polymorph(T param) { return param.test(); } Бида, печаль. В жабе для того что бы ПП-функция могла принимать несколько разных типов, мы вынуждены создать дополнительный тип с "общим" методом и от него унаследоваться. Но тогда получается, что наша ПП-функция де-факто принимает параметр одного типа: ![]() ![]() abstract class Base { abstract public String test(); } class Foo extends Base { public String test() { return "Foo"; } } class Bar extends Base { public String test() { return "Bar"; } } И тогда, вот это будет работать: ![]() ![]() public static <T extends Base> String test(T param) { return param.test(); } Заметь приходяится явно указывать, что наш полиморфный тип на самом деле вполне конкретный тип - Base. Ваши комментарии, D_KEY? |
Сообщ.
#353
,
|
|
|
Он не конкретный
![]() |
Сообщ.
#354
,
|
|
|
Цитата D_KEY @ Это конечно да, но что это за полиморфизм, заставляющий меня плодить общих предков для моих типов? Могу ли я создать в жабе ПП-функцию, без требований к типам параметрам Foo и Bar?Он не конкретный ![]() В run-time, кстати, это будет именно конкретный тип - Base. Я даже не смогу определить точный тип в run-time (в отличие от шарпа, например). Type-erasre он такой, да. |
Сообщ.
#355
,
|
|
|
Рантайм имеет весьма косвенное отношение к системе типов.
Цитата Могу ли я создать в жабе ПП-функцию, без требований к типам параметрам Foo и Bar? Можешь, если тебе не требуется вызывать их методы или ещё как-то опираться на информацию о них. А если нужно, то надо указать соответствующие требования. Все логично. |
Сообщ.
#356
,
|
|
|
Цитата D_KEY @ К системе типов может быть и косвенное, а вот к ПП имеет вполне прямое отношение. Внутри моей функции оказался совсем не тот тип, который подавался на вход.Рантайм имеет весьма косвенное отношение к системе типов. Цитата D_KEY @ Нет, не логично. Зачем их указывать? Эти требования, а так же соответствие типов этим требованиям можно вывести из исходного кода, что успешно делают плюсы.А если нужно, то надо указать соответствующие требования. Все логично. Да и что это за требования такие, требующие создания нового типа? А вдргу мои классы Foo и Bar торчат где-то в сторонней либе? Предка-то уже не создашь. |
Сообщ.
#357
,
|
|
|
Цитата applegame @ Цитата D_KEY @ К системе типов может быть и косвенное, а вот к ПП имеет вполне прямое отношение.Рантайм имеет весьма косвенное отношение к системе типов. ПП - это часть системы типов. |
Сообщ.
#358
,
|
|
|
Цитата D_KEY @ Ага, отличная система типов, в которой ПП напрочь ломает run-time reflection. Система типов не должна делать вид, что у функции параметры одиного типа, а на самом деле они оказываются другого типа, без разницы в run-time или compile-time.ПП - это часть системы типов. Ну и что насчет: Цитата applegame @ Цитата D_KEY @ Нет, не логично. Зачем их указывать? Эти требования, а так же соответствие типов этим требованиям можно вывести из исходного кода, что успешно делают плюсы.А если нужно, то надо указать соответствующие требования. Все логично. Да и что это за требования такие, требующие создания нового типа? А вдргу мои классы Foo и Bar торчат где-то в сторонней либе? Предка-то уже не создашь. |
Сообщ.
#359
,
|
|
|
Цитата applegame @ Внутри моей функции оказался совсем не тот тип, который подавался на вход. В статике - тот. С учётом того, что сама полиморфная функция от типов-параметров не зависит. Т.е. задача системы типов проверить корректность в статике. А что там в реализации - отдельная тема. Добавлено Цитата applegame @ Цитата D_KEY @ Ага, отличная система типов, в которой ПП напрочь ломает run-time reflection.ПП - это часть системы типов. Это вопросы к языку в целом, а не к системе типов. Я яву не люблю ![]() Добавлено Цитата applegame @ Зачем их указывать? Для обеспечения корректности с точки зрения системы типов. Цитата Эти требования, а так же соответствие типов этим требованиям можно вывести из исходного кода Можно. Но Ява не умеет. И возможность явного указания таки является полезной в любом случае. Цитата что успешно делают плюсы. Не делают. Плюсы ничего не выводят. Там просто попытка инстанцирования и простыни ошибок в случае фейла(ну sfinae и пр. тоже). Цитата А вдргу мои классы Foo и Bar торчат где-то в сторонней либе? Предка-то уже не создашь. Да, система типов в яве убогая. Зато в твоём распоряжении есть всякие паттерны проектирования, которые ты можешь заюзать в данном случае ![]() Добавлено Цитата TAPL Система типов - это гибко управляемый синтаксический метод доказательства отсутствия в программе определенных видов поведения при помощи классификации выражений языка по разновидностям вычисляемых ими значений |
Сообщ.
#360
,
|
|
|
Цитата D_KEY @ Ну как же? Код аналогичный жабовскому в первом примере скомпилируется.Не делают. Плюсы ничего не выводят. Цитата D_KEY @ И в жабе она лажает. В этом коде:Система типов - это гибко управляемый синтаксический метод доказательства отсутствия в программе определенных видов поведения при помощи классификации выражений языка по разновидностям вычисляемых ими значений ![]() ![]() class Foo { public String test() { return "Foo"; } } class Bar { public String test() { return "Bar"; } } class Test { public static <T> String polymorph(T param) { return param.test(); } public static void main(String[] args) { polymorph(new Foo()); } } |