Re[5]: И эти люди...
От: Alxndr Германия http://www.google.com/profiles/alexander.poluektov#buzz
Дата: 04.03.07 19:51
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Можно изменять введя дополнительные интерфейсы IChangeRectange, IChangeSquare


... причем так, что IChangeSquare не является наследником IChangeRectangle, и наоборот.
Re[5]: И эти люди...
От: igna Россия  
Дата: 04.03.07 19:59
Оценка:
Здравствуйте, _nn_, Вы писали:

__>А чем так плохи неизменяемые объекты ?


Ничем не плохи. Я неизменностью прямоугольников в математике и изменяемостью их в большинстве реализаций в программировании объясняю, почему квадрат в математике является прямоугольником, а в программировании — чаще всего нет. (См. мое первое сообщение.
Автор: igna
Дата: 03.03.07
)

А ты сначала согласился с моим оппонентом
Автор: McSeem2
Дата: 03.03.07
, где было в частности "отношение наследования, которое связывает квадрат и прямоугольник притянуто за уши и не имеет ни малейшего практического смысла", а потом все же унаследовал ISquare от IRectangle. Что, замена классов на интерфейсы оттянула отношение наследования от ушей обратно?
Re[4]: И эти люди...
От: igna Россия  
Дата: 04.03.07 20:02
Оценка: :)
Здравствуйте, Alxndr, Вы писали:

A>Ммм, ну я, например


Гы-сына-лол
Автор: McSeem2
Дата: 03.03.07
тебе от McSeem2.

А я уж подумал, что он не тему.
Re[5]: И эти люди...
От: Alxndr Германия http://www.google.com/profiles/alexander.poluektov#buzz
Дата: 04.03.07 20:09
Оценка:
Здравствуйте, igna, Вы писали:

I>Гы-сына-лол
Автор: McSeem2
Дата: 03.03.07
тебе от McSeem2.


Ага, пасиб, прочитал еще раньше (да и вообще я мнение Максима на тему замшелой парадигмы знаю )

I>А я уж подумал, что он не тему.


А мне что-то до сих пор так кажется...
Re[2]: И все-таки квадрат это прямоугольник
От: igna Россия  
Дата: 04.03.07 20:15
Оценка: +1
Здравствуйте, jedi, Вы писали:

J>Мне эти разговоры о наследовании квадрата от прямоугольника (или наоборот) всегда казались глупыми.


Спасибо, сознаю.

J>На самом деле это два разных типа, но:

J>1) преобразование типа КВАДРАТ->ПРЯМОУГОЛЬНИК имеет смысл всегда;
J>2) преобразование типа ПРЯМОУГОЛЬНИК->КВАДРАТ имеет смысл только когда ширина равна высоте.

КВАДРАТ и ПРЯМОУГОЛЬНИК связаны отношением IS, а это то отношение, которое чаще всего реализуют использованием наследования. Но в случае КВАДРАТа и ПРЯМОУГОЛЬНИКа оно редко проходит, вот я и ищу ответ, почему? Пока что предполагаю, что дело в изменяемости прямоугольников в программировании в отличие от их неизменяемости в математике.
Re[6]: И эти люди...
От: _nn_ www.nemerleweb.com
Дата: 04.03.07 20:38
Оценка:
Здравствуйте, Alxndr, Вы писали:

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


__>>Можно изменять введя дополнительные интерфейсы IChangeRectange, IChangeSquare


A>... причем так, что IChangeSquare не является наследником IChangeRectangle, и наоборот.


Само собой
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[6]: И эти люди...
От: _nn_ www.nemerleweb.com
Дата: 04.03.07 20:39
Оценка: 1 (1)
Здравствуйте, igna, Вы писали:

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


__>>А чем так плохи неизменяемые объекты ?


I>Ничем не плохи. Я неизменностью прямоугольников в математике и изменяемостью их в большинстве реализаций в программировании объясняю, почему квадрат в математике является прямоугольником, а в программировании — чаще всего нет. (См. мое первое сообщение.
Автор: igna
Дата: 03.03.07
)


I>А ты сначала согласился с моим оппонентом
Автор: McSeem2
Дата: 03.03.07
, где было в частности "отношение наследования, которое связывает квадрат и прямоугольник притянуто за уши и не имеет ни малейшего практического смысла", а потом все же унаследовал ISquare от IRectangle. Что, замена классов на интерфейсы оттянула отношение наследования от ушей обратно?


Мое согласие было на предложение о контракте. Полное отрицание интерфейсов я не приводил.

Я привел пример решения через интерфейс или через контракт.

Лично мое мнение это конечно только интерфейсы без наследования реализацции. Практически это решение мне нравится.
Предложение контракта мне понравилось больше т.к. звучит более правильно теоретически. А вот как на практике это красиво сделать я не знаю.

http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: И все-таки квадрат это прямоугольник
От: MouseEntity Россия  
Дата: 04.03.07 20:52
Оценка:
Здравствуйте, igna, Вы писали:

I>Можно ли сконструировать пример, демонстрирующий "неприличность" кода, который я привел в первом сообщении
Автор: igna
Дата: 03.03.07
этой темы?


Можно:
r = Rectangle(100, 100);


С математической точки зрения r — квадрат. С точки зрения системы типов — нет.

Что касается поста VoidEx'а:
ИМХО, множество экземпляров базового класса и множество экземпляров наследника не пересекаются, однако множество ссылок/указателей на экземпляры базового класса содержит в себе множество ссылок/указателей на экземпляры производного
Re[3]: И все-таки квадрат это прямоугольник
От: jedi Мухосранск  
Дата: 04.03.07 21:34
Оценка:
Здравствуйте, igna, Вы писали:

I>КВАДРАТ и ПРЯМОУГОЛЬНИК связаны отношением IS


Любой экземпляр типа short точно также является экземпляром типа long. Те short и long связаны отношением IS

Вообще то давно признано что ПО не обязано моделировать реальность 1 : 1. Нужно просто понять. что наследование — не более чем инструмент полезный в ряде случаев, но совершенно бесполезный и даже вредный в куче других. Случай квадрата и прямоугольника — четкий пример где наследование приходится притягивать за уши.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Re[4]: И все-таки квадрат это прямоугольник
От: igna Россия  
Дата: 04.03.07 21:47
Оценка: +1
Здравствуйте, MouseEntity, Вы писали:

ME>r = Rectangle(100, 100);


ME>С математической точки зрения r — квадрат. С точки зрения системы типов — нет.


А что, если класс Square не производить от класса Rectangle, то r сразу перестанет быть квадратом с математической точки зрения или станет им с точки зрения системы типов?
Re[4]: И все-таки квадрат это прямоугольник
От: igna Россия  
Дата: 04.03.07 21:49
Оценка:
Здравствуйте, jedi, Вы писали:

J>Любой экземпляр типа short точно также является экземпляром типа long. Те short и long связаны отношением IS


Это неправда. Вспомни про переполнение.
Re[5]: И все-таки квадрат это прямоугольник
От: jedi Мухосранск  
Дата: 04.03.07 22:00
Оценка:
Здравствуйте, igna, Вы писали:

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


I>Это неправда. Вспомни про переполнение.


Это правда. Вспомни про операцию SetWidth (SetHeight). Если следовать твоей логике ("Вспомни про переполнение" (с)) — то квадрат не прямоугольник. А пару постов выше ты утверждал обратное. Будь последовательным
... << RSDN@Home 1.2.0 alpha rev. 0>>
Re[6]: И все-таки квадрат это прямоугольник
От: igna Россия  
Дата: 04.03.07 22:17
Оценка:
Здравствуйте, jedi, Вы писали:

J>Это правда. Вспомни про операцию SetWidth (SetHeight). Если следовать твоей логике ("Вспомни про переполнение" (с)) — то квадрат не прямоугольник. А пару постов выше ты утверждал обратное. Будь последовательным


Уфф.

1) У неизменного прямоугольника SetWidth не бывает.
2) short и long изменяемы.
3) Переполнение проявляет себя по разному даже у неизменных аналогов short и long.
Re[3]: И все-таки квадрат это прямоугольник
От: igna Россия  
Дата: 04.03.07 22:33
Оценка:
Здравствуйте, Smal, Вы писали:

S>В общем-то бинарная операция по определению замкнутая (т.е. является отображением M x M -> M). Другими словами, деление на множестве натуральных чисел не бинарная операция


Интересно, а если результат операции в некоторых случаях не определен (как при делении на нуль), можно ли называть операцию бинарной?
Re[7]: И все-таки квадрат это прямоугольник
От: jedi Мухосранск  
Дата: 04.03.07 22:52
Оценка:
Здравствуйте, igna, Вы писали:

I>Уфф.


Аналогично)

I>1) У неизменного прямоугольника SetWidth не бывает.

I>2) short и long изменяемы.
Чем тип "прямоугольник" лучше (или хуже) типов short и long, что ему дана привилегия быть неизменяемым?

I>3) Переполнение проявляет себя по разному даже у неизменных аналогов short и long.

Что ты прицепились к переполнению? Это просто особенность реализации интегральных типов в современных процессоров. Я могу привести сотню похожих примеров без этой особенности, где наследование излишне, несмотря на точто отношение IS имеет место быть. Навскидку: окружность и эллипс, одномерный массив и массив размерности N (он является одномерным масивом элементы которого — массивы размерности N-1), файл и директория, изображение в формате BMP 8bpp и изображение в формате BMP 24bpp итд итп до бесконечности. Заметь, во всех случаях идет речь о связанных объектах, но это еще не значит что наследование уместно во вех случаях.

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

В общем, спор этот бесполезен, ибо все эти аргументы уже миллион раз приводились. А воз все там
... << RSDN@Home 1.2.0 alpha rev. 0>>
Re[3]: И все-таки квадрат это прямоугольник
От: VoidEx  
Дата: 04.03.07 23:41
Оценка:
Здравствуйте, igna, Вы писали:

I>Можно ли сконструировать пример, демонстрирующий "неприличность" кода, который я привел в первом сообщении
Автор: igna
Дата: 03.03.07
этой темы?


Так сам код в первом сообщении и есть этот пример. Зачем квадрату две стороны? Может, отнаследуем его еще от многоугольника?
Ответ с интерфейсами куда логичнее.
Re[5]: И все-таки квадрат это прямоугольник
От: VoidEx  
Дата: 04.03.07 23:41
Оценка:
Здравствуйте, FDSC, Вы писали:

FDS>Вы сказали чушь откровенную. Настолько, что я так и не смог написать вам ответ с опровержением. Так что спасибо igna за то, что выразил мои мысли.


Все множество прямоугольников шире, чем множество квадратов, так что квадраты — это специализация прямоугольников (когда стороны равны), а вовсе не расширение, и наследование здесь ни при чем.
Re[3]: И все-таки квадрат это прямоугольник
От: VoidEx  
Дата: 04.03.07 23:44
Оценка:
Здравствуйте, igna, Вы писали:

I>КВАДРАТ и ПРЯМОУГОЛЬНИК связаны отношением IS, а это то отношение, которое чаще всего реализуют использованием наследования. Но в случае КВАДРАТа и ПРЯМОУГОЛЬНИКа оно редко проходит, вот я и ищу ответ, почему? Пока что предполагаю, что дело в изменяемости прямоугольников в программировании в отличие от их неизменяемости в математике.


Наследованием реализуют обычно, если что-то связано _не только_ IS, но и EXTENDS. Не даром там такое слово.
Re[8]: И все-таки квадрат это прямоугольник
От: igna Россия  
Дата: 05.03.07 07:03
Оценка:
Здравствуйте, jedi, Вы писали:

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


У такого наследования нет никаких "подводных камней" в отличие от наследования в случае, когда фигуры изменяемы.
Re[4]: И все-таки квадрат это прямоугольник
От: igna Россия  
Дата: 05.03.07 07:07
Оценка:
Здравствуйте, VoidEx, Вы писали:

VE>Так сам код в первом сообщении и есть этот пример. Зачем квадрату две стороны?


Это может привести к неправильному поведению, или тут только избыточность?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.