Re[6]: Зачем отказались от множественного наследования в С#?
От: Кодёнок  
Дата: 02.08.06 10:48
Оценка: +1 -1
Здравствуйте, Nikolay_Ch, Вы писали:

Кё>>Подумай ещё


Это трудно

В природе есть только то, что происходит прямо сейчас. Не путай реально происходящие, происходившие или будущие процессы с тем, что ты к ним домыслил.

Когда ты видишь взвод солдат, ты видишь 30 человек. Есть 30 человек. Взвода — нет. Взвод это умственная конструкция. Ты проделываешь некую операцию, группируя этих 30 человек в одно понятие "взвод". Ты руководствуешься своими представлениями о том, что такое взвод — одинаково одетые в военную форму мужчины, щагающие строем. На самом-то деле это могут быть 30 туристов со всех концов света, решившие подшутить над тобой. Когда шутка окончится, они разойдутся по своим странам. Взвода не будет. 30 человек останутся. Когда они скажут тебе что это шутка, когда убедят тебя, взвод исчезнет. Они могут продолжить шагать строем к своей гостинице, но ты уже будешь знать, что это не настоящий взвод, что это просто шутка.

Точно так же, эволюции — нет в природе. Это теория. Теория — это продукт ума. Когда-то люди не знали теории эволюции, для них эволюции не было. Когда-то они могут открыть другую теорию, которая например покажет, что то что мы знаем как эволюцию, работает не всегда и вообще является частью более сложного процесса.
Re[5]: Зачем отказались от множественного наследования в С#?
От: Nikolay_Ch Россия  
Дата: 02.08.06 10:55
Оценка:
W>

Полиморфизм — в биологии (от греч. polymorphos — многообразный) — способность некоторых организмов существовать в...

Ну мы же не сравниваем как различаются определения. Мы же сравниваем то, что понимают под программным определением полиморфизма.
Re[6]: Зачем отказались от множественного наследования в С#?
От: Кодёнок  
Дата: 02.08.06 11:02
Оценка: 8 (2) +1 -1
Здравствуйте, Ramzes_, Вы писали:

R_>Интересно, а причем тут есть это в природе, или нет. Понятие искусственности/естественности метода не мало влияет на его практическую ценность. Программист он не биолог, все-таки.


+1

вот я и говорю

во-первых, программирование, как и математика, это чисто абстрактный придуманный мир, где мы создаем такие понятия какие хотим, и отсутствие аналогов в природе никак не может быть аргументом к целесообразности использования того или иного понятия в мире абстракций.

во-вторых, проводить аналогии с реальным миром значить ограничить сам себя, потому что в реальном мире "наследование" может иметь такие последствия, которые невозможны в вашем языке программирования, и наоборот, ваша реализация наследования в ЯП может давать такие эффекты, которых в реальном мире нет.
Re[7]: Зачем отказались от множественного наследования в С#?
От: Nikolay_Ch Россия  
Дата: 02.08.06 11:03
Оценка: +1
Кё>>>Подумай ещё
Кё>Это трудно
Трудно понять мои мысли?

Кё>В природе есть только то, что происходит прямо сейчас. Не путай реально происходящие, происходившие или будущие процессы с тем, что ты к ним домыслил.

Мне не хочется с тобой спорить... Просто потому, что я не принадлежу к тем философам, которые говорят: "Я мыслю, значит
существую".

Кё>Точно так же, эволюции — нет в природе. Это теория. Теория — это продукт ума. Когда-то люди не знали теории эволюции...

Вообще-то, развивая твою мысль: "Все программирование это не более чем теория и продукт ума".
Re[3]: Зачем отказались от множественного наследования в С#?
От: Андрей Коростелев Голландия http://www.korostelev.net/
Дата: 02.08.06 11:12
Оценка:
Здравствуйте, Кодёнок, Вы писали:

Кё>Наследование — неверное название, правильное — что-то вроде конкретизаци, т.е. обратное обобщению.


Наследование (публичное) применяется как правило для двух целей: специализации или спецификации.

Специализация — класс является более специализированной формой базового класса, при этом понимает как минимум тот же набор сообщений, что и родитель.
Спецификацию можно рассматривать как частным случай специализации, когда наследуется только набор принимаемых сообщений.

В первом случае имеем наследование реализации и интерфейса родителя, во втором — только интерфейса родителя. В обоих случаях класс является is-a родителя, что позволяет использовать открытое наследование для реализации полиморфизма в статически типизированных языках как С#, C++, Java. Для проверки, является ли наследование отношением "is-a", можно воспользоваться принципом подстановки Барбары Лисковой
-- Андрей
Re[6]: Зачем отказались от множественного наследования в С#?
От: MatFiz Россия  
Дата: 02.08.06 13:39
Оценка: +2
Здравствуйте, Nikolay_Ch, Вы писали:

N_C>Ну а самое простое — наследование. Достаточно посмотреть на эволюцию видов, чтобы увидеть его. Все-же произошли от простых комочкой слизи, плавающей в океане. Постепенно развивая и наследуя характеристики. Ты сам наследовал признаки от своих родителей.


Пример не очень. Наследование в C# — это расширение родительского класса. При этом пропасть ничего не может.
Наследование в природе (почему сразу за живую природу взялись ) не гарантирует сохранение родительских признаков и функций. Более того, в процессе эволюции признаки, не способствующие выживанию, исчезают.

ИМХО, наследование хорошо соответствуюет модели человеческого мышления. Ключевое слово тут — детализация или иерархия. Например, когда человек видит предмет, его распознавание начинается с выделения контура, затем больших деталей, а затем более мелких.

Множественное наследование вызывает проблемы при реализации и использовании, к тому же mix-in его вполне успешно моделирует. Поэтому от множественного наследования и отказались.
How are YOU doin'?
Re[2]: Зачем отказались от множественного наследования в С#?
От: vdimas Россия  
Дата: 02.08.06 15:41
Оценка: 1 (1)
Здравствуйте, McSeem2, Вы писали:

MS>Инапсуляция — да! Полиморфизм — 256 раз да! Наследование — отказать. Ибо нету такой штуки в природе, ну нету. Точнее есть, но она совсем из другой оперы.


В нединамических языках полиморфизм только через наследование и бывает.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Зачем отказались от множественного наследования в С#?
От: vdimas Россия  
Дата: 02.08.06 15:41
Оценка:
Здравствуйте, sergey_mosyakov, Вы писали:


_>Однако Вам ни кто не мешает использовать композицию классов. И вообще множественное наследование очень трудно для восприятия.


Чем труднее МН интерфейсов?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Зачем отказались от множественного наследования в С#?
От: binarycode Россия  
Дата: 02.08.06 17:24
Оценка:
....
class Растение
class Фрукт_Овощь:Растение
class Цветок: Растение

Последние два класса законченны и содержат поля.

Тогда
class Морковь:Овошь

И вот оно !!:
class Вишня:Цветок,Фрукт_Овошь
В роде бы всё сходиться, но реализовать такое нельзя.
Вишня "это есть" и цветок и фрукты_овошь.

Являеться ли всё выше изложенное таковым или стоит плесать в аналогичных случаях в разных похожих примерах из разных областей от:
У кого-то,тот кто будет возможно доказывать, что это не так, вишня будет ассоциироваться с одним, а у кого-то со вторым и по теории тогда можно просто поступить так:

class Дерево
class Вишня:Дерево
{ в полях реализовать отношение "has a" для цвета и плода }

Но это смахивает на подгонку правильного подхода к тому, что позволяет язык С# ?
Начинающий программист
Re[2]: Зачем отказались от множественного наследования в С#?
От: prVovik Россия  
Дата: 02.08.06 18:15
Оценка: +2
Здравствуйте, binarycode, Вы писали:

B>....

B>class Растение
B>class Фрукт_Овощь:Растение
B>class Цветок: Растение

B>Последние два класса законченны и содержат поля.


B>Тогда

B>class Морковь:Овошь

B>И вот оно !!:

B>class Вишня:Цветок,Фрукт_Овошь
B>В роде бы всё сходиться, но реализовать такое нельзя.
B>Вишня "это есть" и цветок и фрукты_овошь.

Не совсем так. Что означает фраза "вишня есть цветок"? Означает ли, что вишня внутренне устроена, как цветок? Нет! Это означает, что вишня выгядит для внешнего мира, как цветок. При этом устройство может быть каким угодно. Фраза "вишня выглядит, как цветок для внешнего мира" означает, что с вишней внешний мир нужно делать все, что и с цветком, то есть:
1) Любоваться красотой
2) Нюхать
3) Опылять
4) Погадать на "любит-не-любит"

Выходит, чтобы ЛЮБОЙ объект выглядел для внешнего мира, как цветок, достаточно, чтобы с этим объектом можно было делать:

1) Любоваться красотой
2) Нюхать
3) Опылять
4) Погадать на "любит-не-любит"

То есть имеем набор операций, при наличии которых любой объект становится цветком. Этот набор называют интерфейс. Класс в шарпе может поддерживать какое угодно количество интерфейсов.
лэт ми спик фром май харт
Re[7]: Зачем отказались от множественного наследования в С#?
От: fmiracle  
Дата: 02.08.06 19:03
Оценка: 67 (8) +5 :))
Здравствуйте, Кодёнок, Вы писали:

Кё>Когда ты видишь взвод солдат, ты видишь 30 человек. Есть 30 человек. Взвода — нет.


Видишь суслика?... (с)

А почему есть 30 человек? Может это голограммы? И вообще — что такое человек? Четкого определения ему еще не придумано.
Так что надо говорить: "Если ты видишь несколько объектов, состоящих из соединений углерода, водорода и кислорода, с небольшими примесями прочих вечеств, средней массы 80кг, но не менее 40 и не более 180, самостоятельно передвигающихся со скоростями, различающимися не более 3% в любой отдельно взятый интервал времени, и закутанных в куски аналогичных химических соединений зеленого цвета". Все прочее — только "умственные конструкции".

И это определение неполно — надо определить понятия "объект", "углерод", "кислород", "водород"... и все остальные.


Так о чем я? А. Ты погружаешься в слишком глубокие дебри

Если я вижу взвод солдат — я вижу взвод солдат. Если мне скажут, что это туристы, я решу сам что мне видеть дальше — взвод солдат или группу туристов. Когда я смотрю кино про войну — я вижу там солдат, а не актеров, извини. А иногда — актеров, если это нужно. А иногда — клоунов.

Можно видеть не солдат и не туристов, а комки протоплазмы. Иногда это даже нужно. Обычно — нет.

Когда я вижу зеленый лист, я вижу зеленый лист. Дальтоник смотрит на тот же лист и видит серый лист. Гусеница смотрит на тот же лист и видит отличный обед. А листу это все апсолютна безразлично. Он не меняется.
Почему я могу видеть элемент гербария в том, что гусеница видит как обед, но не могу видеть взвод солдат в группе туристов? Потому что на самом деле это протоны, нейтроны и электроны? Да и фиг бы с ними.


Ай, блин, вспомнил! Мы же вообще не видим ни взвода, ни отдельных солдат! Мы видим набор сработавших палочек и черточек. В глазах. Но глаза напрямую подключены к мозгу, точнее к той его части которая является зрительным сопроцессором, который, зараза такая, проводит построение "умственных конструкций", определяет комбинации сработавших элементов, выправляет хроматические аберрации и дисторсии, убирает шумы, дополняет нераспознанные элементы по предыдущим распознанным кадрам, или даже по более ранним воспоминаниям тех же или аналогичных объектов, и выдает получившиуюся картинку сознательной части мозга. (Кстати эту обработку, осуществляемую незаметно для сознания можно назвать инкапсуляцией. А можно "укчюпулой", "миссией на Марс" или "умственной конструкцией", она от этого никак не изменится и работат будет точно так же.)

Так я к чему? Человеческое сознание оперирует образами, вот так оно устроено. Оно распознает образ и работает с ним как с целым. Обвинять распознанные образы в том, что они являются "всего лишь умственными конструкциями", глупо, потому что "умственные конструкции" — это входные и выходные данные человеческого сознания. Это все равно что уточнять, что компьютер не сможет разобрать предложение, потому что в предложении — слова, а компьютер оперирует битами. Ну и что? Слова можно представить битами, можно — аналоговыми сигналами, а можно — "умственными конструкциями" в человеческом мозгу.


Да, кстати, опознать в в туристах солдат — это может быть либо:
1. ошибка. удивительно, но ошибки случаются в обработках данных с удивительной частотой.
2. допустимое обобщение. Скажем если решаешь, что будет, если попробуешь украсть у одного из них рюкзак — разница в повреждениях будет небольшая — солдаты они или туристы. Тут главное — что они — взвод!

и это вовсе не значит, что "раз это могут быть туристы, то взвода нет". Иначе ведь получится "Раз это может быть не черная кошка, а белая, облитая тушью, то значит белых кошек — нет" и тому подобное.

Вот примерно так.
Философия — дело хорошее и полезное для умственного развития, но надо удерживаться в определенных рамках Иначе можно ведь доказать себе, что жизни — нет, и что тогда делать? Вешаться?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Зачем отказались от множественного наследования в С#?
От: fmiracle  
Дата: 02.08.06 19:36
Оценка:
Здравствуйте, binarycode, Вы писали:

B>Вот ответьте мне опытные, зачем отказались от множественного наследования ? Какова причина ?


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

При этом с точки зрения объектной модели множественное наследование и одиночное наследование+множественные интерфейсы — соверешнно одинаковы. Множественное наследование дает плюс в том, что оно позволяет наследовать готовую реализацию от нескольких базовых классов. Но на практике необходимость в этом возникает редко, и можно ничуть не хуже реализовать то же самое при помощи делегирования и интерфейса. А разбираться в подобном дереве наследования становится гораздо легче.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Зачем отказались от множественного наследования в С#?
От: McSeem2 США http://www.antigrain.com
Дата: 03.08.06 05:08
Оценка:
Здравствуйте, Ramzes_, Вы писали:

R_>Интересно, а причем тут есть это в природе, или нет. Понятие искусственности/естественности метода не мало влияет на его практическую ценность. Программист он не биолог, все-таки. А кто скажет, что у наследования нет никакой практической ценности, в того кину камень. А вот у множественного наследования, имхо, весьма сомнительная практическая ценность.


Следующим шагом будет осознание, что и у просто наследования практическая ценость весьма сомнительна. Имеется единственный случай, когда наследование оправдано — это перегрузка виртуальных функций. Но это следовало бы назвать не наследованием, а специализацией. А тот случай, когда есть класс String, не имеющий ни одной виртуальной функции, и от него образуется некий производный класс с расширенной функциональностью, то это ересь. Это в результате приводит к гораздо большим проблемам, чем дает практической ценности. Наследование применимо к интерфейсам, но это тоже не наследование, это — имплементация.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[8]: Зачем отказались от множественного наследования в С#?
От: Кодёнок  
Дата: 03.08.06 05:52
Оценка:
Здравствуйте, fmiracle, Вы писали:

F>Так я к чему? Человеческое сознание оперирует образами, вот так оно устроено. Оно распознает образ и работает с ним как с целым. Обвинять распознанные образы в том, что они являются "всего лишь умственными конструкциями", глупо, потому что "умственные конструкции" — это входные и выходные данные человеческого сознания.


Давай так скажу: местный дикарь увидит тех же самых людей, но не увидит взвода, т.к. такого понятия ему не знакомо.

В одном и том же увиденном можно распознать все что угодно, это зависит от содержимого твоей головы. Но это не значит, что распознанные образы — существуют.

Отличай то, что ты видишь, от того, что ты додумываешь. Это нужно для того, чтобы не заявлять например, "наследования в природе не существует". Не "не существует", а "не сумел найти". А "существует" на самом деле значит — сумел так отфильтровать несущественное и выделить главное, что наследование стало очевидным.

F>Философия — дело хорошее и полезное для умственного развития, но надо удерживаться в определенных рамках Иначе можно ведь доказать себе, что жизни — нет, и что тогда делать? Вешаться?


Это так заявляют те, кто упершись в первый неразрешимый вопрос, в первый парадокс — тут же сдался
Re[9]: Зачем отказались от множественного наследования в С#?
От: Nikolay_Ch Россия  
Дата: 03.08.06 06:13
Оценка: +1
F>>Философия — дело хорошее и полезное для умственного развития, но надо удерживаться в определенных рамках Иначе можно ведь доказать себе, что жизни — нет, и что тогда делать? Вешаться?
Кё>Это так заявляют те, кто упершись в первый неразрешимый вопрос, в первый парадокс — тут же сдался
Знаешь, а может просто нет времени с тобой препираться? Смысла нет. С софистом бесполезно спорить, он все-равно докажет, что солнце зеленое, а земля плоская.
Re[7]: Зачем отказались от множественного наследования в С#?
От: Ramzes_ Россия http://ramzes.ws/
Дата: 03.08.06 07:52
Оценка:
Здравствуйте, McSeem2, Вы писали:

MS>Следующим шагом будет осознание, что и у просто наследования практическая ценость весьма сомнительна. Имеется единственный случай, когда наследование оправдано — это перегрузка виртуальных функций. Но это следовало бы назвать не наследованием, а специализацией. А тот случай, когда есть класс String, не имеющий ни одной виртуальной функции, и от него образуется некий производный класс с расширенной функциональностью, то это ересь. Это в результате приводит к гораздо большим проблемам, чем дает практической ценности. Наследование применимо к интерфейсам, но это тоже не наследование, это — имплементация.



Наследования, специализация, это вопрос терминологии. И термин наследование, имхо, вполне адекватно и понятно отражает данную сущность. А вопрос где оно оправдано, а где нет, достаточно спорный. Кому не нравится, вполне может выбрать другой способ реализации, благо подавляющее большинство задач можно решить не одним, и даже не двумя методами.
Re[8]: Зачем отказались от множественного наследования в С#?
От: dshe  
Дата: 03.08.06 08:17
Оценка:
Здравствуйте, Ramzes_, Вы писали:

R_>Наследования, специализация, это вопрос терминологии. И термин наследование, имхо, вполне адекватно и понятно отражает данную сущность. А вопрос где оно оправдано, а где нет, достаточно спорный. Кому не нравится, вполне может выбрать другой способ реализации, благо подавляющее большинство задач можно решить не одним, и даже не двумя методами.


Проблема чаще всего заключается в том, что то, что нравится одному разработчику, не нравится другому. Один разработчик предпочитает создавать экземпляры "Вася" и "Петя" класса "Человек", а другой создавать подклассы "Вася" и "Петя" от базового "Человек" (и делать их потом синглтонами). Это идеальный случай когда разработчик сам наступает на свои же грабли -- в этом случае он имеет возможность учиться на своих ошибках и избегать их в последствии. Чаще приходится наступать на чужие грабли. Поэтому "не нравится -- не используй" является сомнительным аргументом.
--
Дмитро
Re[9]: Зачем отказались от множественного наследования в С#?
От: MatFiz Россия  
Дата: 03.08.06 08:24
Оценка:
Здравствуйте, dshe, Вы писали:

D>Проблема чаще всего заключается в том, что то, что нравится одному разработчику, не нравится другому. Один разработчик предпочитает создавать экземпляры "Вася" и "Петя" класса "Человек", а другой создавать подклассы "Вася" и "Петя" от базового "Человек" (и делать их потом синглтонами). Это идеальный случай когда разработчик сам наступает на свои же грабли -- в этом случае он имеет возможность учиться на своих ошибках и избегать их в последствии. Чаще приходится наступать на чужие грабли. Поэтому "не нравится -- не используй" является сомнительным аргументом.


Вася и Петя — это явно экземпляры класса Человек. Тут расхождений у нормальных разработчиков быть не может.
Делать их синглтонами — все равно, что сказать, что кроме Васи и Пети больше Человеков не существует.
Я не хотел бы сопровождать такой проект.
How are YOU doin'?
Re[9]: Зачем отказались от множественного наследования в С#?
От: Ramzes_ Россия http://ramzes.ws/
Дата: 03.08.06 08:43
Оценка:
Здравствуйте, dshe, Вы писали:

D>Проблема чаще всего заключается в том, что то, что нравится одному разработчику, не нравится другому. Один разработчик предпочитает создавать экземпляры "Вася" и "Петя" класса "Человек", а другой создавать подклассы "Вася" и "Петя" от базового "Человек" (и делать их потом синглтонами). Это идеальный случай когда разработчик сам наступает на свои же грабли -- в этом случае он имеет возможность учиться на своих ошибках и избегать их в последствии. Чаще приходится наступать на чужие грабли. Поэтому "не нравится -- не используй" является сомнительным аргументом.


При работе с чужим программным кодом, с которым ты несколько не согласен обычно возникают два варианта мыслей. Первый, «Это сколько же надо было выпить, чтобы так сделать», и второй «Я бы сделал не так, но это тоже неплохо». Я имел в виду вариант 2. Это уже вопрос квалификации разработчика. Но даже любых двух программистов с примерно одинаковой квалификацией есть свои предпочтения в способах разработки, которые иногда кардинальное различаются. Естественно, при совместной деятельности, приходится это как-то согласовывать.
Re[10]: Зачем отказались от множественного наследования в С#
От: squiz  
Дата: 03.08.06 10:02
Оценка: :)
Здравствуйте, MatFiz, Вы писали:

MF>Делать их синглтонами — все равно, что сказать, что кроме Васи и Пети больше Человеков не существует.

Нет, нет, делать их синглтонами — это значит что других таких Васи и Пети больше не существует!
Ведь ничто не запрещает сделать синглтоном Машу и Колю...
Never underestimate those behind you...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.