Re: Зачем нужно наследование интерфейсов?
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.07.12 13:26
Оценка: +1
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Собственно, сабж. Что это дает-то в принципе? На первый взгляд кажется, что это вообще скорее вредно.


Я так понимаю ты проникся стуктурной типизацией? Ну, дык это не повод не понимать, что кроме структурной есть еще номинативная. Это разные идеологии. Обе пригодны для практического использования. У обоих есть преимущества и недостатки.

В номинативной системе типов наследование реализует полиморфизм нужный для создания АТД и ООП.

Короче фигово троллишь .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Зачем нужно наследование интерфейсов?
От: AlexRK  
Дата: 09.07.12 13:35
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Воронков Василий, Вы писали:


ВВ>>Собственно, сабж. Что это дает-то в принципе? На первый взгляд кажется, что это вообще скорее вредно.


VD>Я так понимаю ты проникся стуктурной типизацией?


Вопрос не ко мне, но здесь нет никакой структурной типизации. Класс обладает теми интерфейсами, которые явно указаны. И не может реализовывать интерфейсы, только лишь получив набор методов с нужными сигнатурами.
Re[11]: Зачем нужно наследование интерфейсов?
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.07.12 13:50
Оценка: 1 (1)
Здравствуйте, AlexRK, Вы писали:

ARK>В таком случае вашему коду нужен не ICollection, а "ICollection+IEnumerable", раз внутри него вызывается нечто, требующее IEnumerable.


Очень не многие языки умеют оперировать объединениями типов. Это прикольная концепция, но и наследование вполне решат задачи стоящие на практике.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Зачем нужно наследование интерфейсов?
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.07.12 13:55
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Я в третий раз уже пишу, что GetItems через генерики не реализуется, но там и интерфейс не нужен.


А зачем ты дженерики то упоминал? И кто такой GetItems?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Зачем нужно наследование интерфейсов?
От: vpchelko  
Дата: 09.07.12 13:55
Оценка: +1
Нафиг, нужен такой полиморфизм. IPet-ом может быть не только IAnimal, но и IBird, IReptiles, IFish ...
Сало Украине, Героям Сала
Re[7]: Зачем нужно наследование интерфейсов?
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.07.12 13:59
Оценка:
Здравствуйте, AlexRK, Вы писали:

ARK>Перегрузку по именам надо выкинуть. Она дает некоторое удобство при написании кода, но, ИМХО, никак не при чтении.


Практика показывает, что выкидывают языки без перегрузки. Можно потратить пол жизни на доказательство того, что перегрузка не нужна. Но всем на это будет наплевать.

Кроме того перегрузка она мешает только тем кто не умеет ее готовить (в языках).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Зачем нужно наследование интерфейсов?
От: vpchelko  
Дата: 09.07.12 14:07
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

Не очень хороший пример, вот если потребуется сделать кликабельный Label... начнут городить огород? Лучше давать возможность добавлять обработку сообщений опционально.
Сало Украине, Героям Сала
Re[7]: Зачем нужно наследование интерфейсов?
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.07.12 14:07
Оценка: -1
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Может быть, стоит просто вот так написать:


ВВ>
ВВ>LazyCollection S1<T1, T2>(this LazyCollection items, Func<T1, T2> transformer)
ВВ>{
ВВ>   return new LazyCollection(items.Count, items.S1(transformer));
ВВ>}
ВВ>


Написать то ты можешь. Но толку от этого не будет. Нужна реализация алгоритма. А структуры данных могут быть (и будут на практике) очень сильно разными. Скажем односвязный список и массив.

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

Вот только к исходному вопросу это уже отношение не имеет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Зачем нужно наследование интерфейсов?
От: fddima  
Дата: 09.07.12 14:12
Оценка:
Здравствуйте, vpchelko, Вы писали:

V>Не очень хороший пример, вот если потребуется сделать кликабельный Label... начнут городить огород? Лучше давать возможность добавлять обработку сообщений опционально.

Безотносительно хороший/плохой пример — кликабельный Label — это собственно говоря и есть Button, с другой формой лица.
Re[4]: Зачем нужно наследование интерфейсов?
От: vpchelko  
Дата: 09.07.12 14:19
Оценка:
F> Безотносительно хороший/плохой пример — кликабельный Label — это собственно говоря и есть Button, с другой формой лица.

Да с какой стороны посмотреть кликаться мы можем, а там mouseover обрабатывать тоже захотим, даже просто по обычному не кликабельному тексту (менять курсор на выделялку текста).
Сало Украине, Героям Сала
Re[3]: Зачем нужно наследование интерфейсов?
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.07.12 14:21
Оценка: +1
Здравствуйте, AlexRK, Вы писали:

ARK>Вопрос не ко мне, но здесь нет никакой структурной типизации. Класс обладает теми интерфейсами, которые явно указаны. И не может реализовывать интерфейсы, только лишь получив набор методов с нужными сигнатурами.


Если нет, то это банальная логическая ошибка в рассуждениях. Ведь передается не класс, а интерфейс. А при этом информация о реализованных интерфейсах теряется. Приедется делать динамические проверки. А это уже плохо.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Зачем нужно наследование интерфейсов?
От: Воронков Василий Россия  
Дата: 09.07.12 14:32
Оценка:
Здравствуйте, VladD2

ВВ>>Может быть, стоит просто вот так написать:


ВВ>>
ВВ>>LazyCollection S1<T1, T2>(this LazyCollection items, Func<T1, T2> transformer)
ВВ>>{
ВВ>>   return new LazyCollection(items.Count, items.S1(transformer));
ВВ>>}
ВВ>>


VD>Написать то ты можешь. Но толку от этого не будет. Нужна реализация алгоритма. А структуры данных могут быть (и будут на практике) очень сильно разными. Скажем односвязный список и массив.


И как ты себе представляешь ленивый массив?

VD>Такие штуки прокатят только чем-то вроде классов типов, когда можно сделать по перегрузке (отдельной реализации) для каждого поддерживаемого типа.

VD>Вот только к исходному вопросу это уже отношение не имеет.

Какие такие штуки? Причем тут классы?
Re[12]: Зачем нужно наследование интерфейсов?
От: AlexRK  
Дата: 09.07.12 14:59
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, AlexRK, Вы писали:


ARK>>В таком случае вашему коду нужен не ICollection, а "ICollection+IEnumerable", раз внутри него вызывается нечто, требующее IEnumerable.


VD>Очень не многие языки умеют оперировать объединениями типов. Это прикольная концепция, но и наследование вполне решат задачи стоящие на практике.


Ну мы же сейчас вроде как обсуждаем идеологию и философию программирования, а не реальные языки.
Из реальных мне на ум приходит только Ceylon.
Re[8]: Зачем нужно наследование интерфейсов?
От: AlexRK  
Дата: 09.07.12 15:03
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, AlexRK, Вы писали:


ARK>>Перегрузку по именам надо выкинуть. Она дает некоторое удобство при написании кода, но, ИМХО, никак не при чтении.


VD>Практика показывает, что выкидывают языки без перегрузки. Можно потратить пол жизни на доказательство того, что перегрузка не нужна. Но всем на это будет наплевать.


Практика показывает, что выживают языки, в которые вкладывается много ресурсов. Остальное по большому счету не имеет значения.
Не думаю, что языковые возможности выживших являются безусловным образцом для подражания.

VD>Кроме того перегрузка она мешает только тем кто не умеет ее готовить (в языках).


Ну фиг знает. По моему мнению перегрузка облегчает запись, но не чтение.
Re[4]: Зачем нужно наследование интерфейсов?
От: AlexRK  
Дата: 09.07.12 15:09
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, AlexRK, Вы писали:


ARK>>Вопрос не ко мне, но здесь нет никакой структурной типизации. Класс обладает теми интерфейсами, которые явно указаны. И не может реализовывать интерфейсы, только лишь получив набор методов с нужными сигнатурами.


VD>Если нет, то это банальная логическая ошибка в рассуждениях. Ведь передается не класс, а интерфейс. А при этом информация о реализованных интерфейсах теряется. Приедется делать динамические проверки. А это уже плохо.


Да нет, передается именно класс, который реализует некоторый набор интерфейсов. В общем, как генерик-методы в C#.

В принципе, тут можно усмотреть некий намек на структурную типизацию, хотя не в привычном смысле. Единицей "структуры" будет один интерфейс, а главной сущностью — "набор интерфейсов". А при использовании наследования этот самый "набор интерфейсов" жестко зашит в одну сущность.
Re[5]: Зачем нужно наследование интерфейсов?
От: fddima  
Дата: 09.07.12 15:15
Оценка:
Здравствуйте, vpchelko, Вы писали:

V>Да с какой стороны посмотреть кликаться мы можем, а там mouseover обрабатывать тоже захотим, даже просто по обычному не кликабельному тексту (менять курсор на выделялку текста).

Дык всё это можно и с Button. Всё в итоге упирается в конкретный UI фреймворк, и есть ли там невменяемые ограничения.
Re[6]: Зачем нужно наследование интерфейсов?
От: vpchelko  
Дата: 09.07.12 15:30
Оценка:
F> Дык всё это можно и с Button.
Вот опять, нафиг мне все кнопочное (из соображений — грузить в память только необходимое), если мне нужно нарисовать текст и менять курсор / подсветить текст под курсором.
Сало Украине, Героям Сала
Re[9]: Зачем нужно наследование интерфейсов?
От: Воронков Василий Россия  
Дата: 09.07.12 15:41
Оценка: +1
Здравствуйте, AlexRK, Вы писали:

Ты когда пишешь

2 + 2
12.2 + 12.2


то это ведь тоже перегрузка.
Re[7]: Зачем нужно наследование интерфейсов?
От: fddima  
Дата: 09.07.12 16:16
Оценка:
Здравствуйте, vpchelko, Вы писали:

F>> Дык всё это можно и с Button.

V>Вот опять, нафиг мне все кнопочное (из соображений — грузить в память только необходимое), если мне нужно нарисовать текст и менять курсор / подсветить текст под курсором.
А что кнопочного то? Кнопка так и делает. Рисует текст и реагирует на несколько событий.
А с поведенческой точки зрения то кликабельный лэйбл — это как раз самая кнопка.
Re[10]: Зачем нужно наследование интерфейсов?
От: AlexRK  
Дата: 09.07.12 18:46
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Здравствуйте, AlexRK, Вы писали:


ВВ>Ты когда пишешь


ВВ>
ВВ>2 + 2
ВВ>12.2 + 12.2
ВВ>


ВВ>то это ведь тоже перегрузка.


Согласен. Хотя вроде бы в окамле операторы разные.

Вообще тут вопрос неоднозначный. Во-первых, в идеальном сферическом языке в вакууме даже оператор сложения не будет перегружен — будет единый тип "число". Во-вторых, если ближе к реальности, то с такой перегрузкой я согласен — она в одном месте и выглядит естественно, т.к. пришла из математики. Даже специальный синтаксис используется, а не обычный вызов метода. А вот другие типы перегрузки как-то не внушают доверия. Кстати, я тут подумал — не припомню в своих проектах интенсивного использования перегрузки (хотя у других людей опыт другой, конечно).
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.