tag:blogger.com,1999:blog-8596733192274108952.post5447059433304571709..comments2024-03-12T06:00:18.305+02:00Comments on Programming stuff: Перегрузка и наследованиеSergey Teplyakovhttp://www.blogger.com/profile/14300835272589262297noreply@blogger.comBlogger21125tag:blogger.com,1999:blog-8596733192274108952.post-89334537977900051982022-04-27T10:22:32.160+03:002022-04-27T10:22:32.160+03:00Programming Stuff: Перегрузка И Наследование >&...Programming Stuff: Перегрузка И Наследование >>>>> <b><a href="http://8on8.top/lkGTC?16" rel="nofollow">Download Now</a></b><br><br>>>>>> <b><a href="http://8on8.top/lkGTC?97" rel="nofollow">Download Full</a></b><br><br>Programming Stuff: Перегрузка И Наследование >>>>> <b><a href="http://8on8.top/lkGTC?50" rel="nofollow">Download LINK</a></b><br><br>>>>>> <b><a href="http://8on8.top/lkGTC?26" rel="nofollow">Download Now</a></b><br><br>Programming Stuff: Перегрузка И Наследование >>>>> <b><a href="http://8on8.top/lkGTC?37" rel="nofollow">Download Full</a></b><br><br>>>>>> <b><a href="http://8on8.top/lkGTC?94" rel="nofollow">Download LINK</a></b> pa Unknownhttps://www.blogger.com/profile/04191204705284088396noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-80447453323803943662022-04-27T10:22:05.890+03:002022-04-27T10:22:05.890+03:00Programming Stuff: Перегрузка И Наследование >&...Programming Stuff: Перегрузка И Наследование >>>>> <b><a href="http://8on8.top/lkGTC?16" rel="nofollow">Download Now</a></b><br><br>>>>>> <b><a href="http://8on8.top/lkGTC?97" rel="nofollow">Download Full</a></b><br><br>Programming Stuff: Перегрузка И Наследование >>>>> <b><a href="http://8on8.top/lkGTC?50" rel="nofollow">Download LINK</a></b><br><br>>>>>> <b><a href="http://8on8.top/lkGTC?26" rel="nofollow">Download Now</a></b><br><br>Programming Stuff: Перегрузка И Наследование >>>>> <b><a href="http://8on8.top/lkGTC?37" rel="nofollow">Download Full</a></b><br><br>>>>>> <b><a href="http://8on8.top/lkGTC?94" rel="nofollow">Download LINK</a></b> 29 Unknownhttps://www.blogger.com/profile/04191204705284088396noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-17302811530042583972014-07-04T00:43:38.990+03:002014-07-04T00:43:38.990+03:00Я тут заметил что если написать вот такую конструк...Я тут заметил что если написать вот такую конструкцию в derived то все работает :<br />Public new void Foo(int)<br />{<br />base.Foo(i);<br />} Anonymoushttps://www.blogger.com/profile/14710689854348408926noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-86339532752050866462012-10-26T03:49:18.674+03:002012-10-26T03:49:18.674+03:00Ну, не знаю. ИМХО подобные запреты - это уже переб...Ну, не знаю. ИМХО подобные запреты - это уже перебор. Хотя, вот, Вячеслав недавно <a href="http://viacheslav-ivanov.blogspot.com/2012/10/nvi-c.html" rel="nofollow">поделился подобными же мыслями.</a>Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-23772844400964567802012-10-26T02:50:05.186+03:002012-10-26T02:50:05.186+03:00Будь моя воля — запретил бы public virtual вообще,...Будь моя воля — запретил бы public virtual вообще, только protected virtual.<br /> Подобных проблем бы просто не возникло, да и архитектура в массе была бы куда лучше.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-61354262309565843852012-08-22T12:30:43.673+03:002012-08-22T12:30:43.673+03:00Возможно, стоит особняком упомянуть еще и C++\CLI....Возможно, стоит особняком упомянуть еще и C++\CLI. Вопреки моим ожиданиям, в этом языке сохранена преемственность поведения от стандартного C++, т.е. для первого примера C#-компилятор сгенерит callvirt instance void Derived::Foo(object), а C++\CLI-компилятор сгенерит соответственно callvirt instance void Derived::Foo(int32)Andrew Zakharkinhttps://www.blogger.com/profile/15450328951277302641noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-34396139184952391782012-08-22T12:29:02.062+03:002012-08-22T12:29:02.062+03:00Этот комментарий был удален автором.Andrew Zakharkinhttps://www.blogger.com/profile/15450328951277302641noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-50708296958926570642012-08-17T15:02:51.064+03:002012-08-17T15:02:51.064+03:00это, кстати, хорошо, что вы рассказали про другие ...это, кстати, хорошо, что вы рассказали про другие языки. не только c# грешен ).<br />у меня после прочтения ритхера, долго оставался осадок из-за того, что .net, очень многое делая за меня, не дает той безганичной свободы, которая есть в с++.<br />но рамки задают верное направление. например, мне нравится, что нет множественного наследования, это очень упростило жизнь.Anonymoushttps://www.blogger.com/profile/08511533568611013203noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-29307788391030635862012-08-17T14:48:20.779+03:002012-08-17T14:48:20.779+03:00@Salavat: Мне кажется, что у этой проблемы просто ...@Salavat: Мне кажется, что у этой проблемы просто не существует решения, интуитивно понятного для всех.<br /><br />А разве решения в других языках более логичны?Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-38060627490475789222012-08-17T14:45:44.594+03:002012-08-17T14:45:44.594+03:00да, .net иногда удивляетда, .net иногда удивляетAnonymoushttps://www.blogger.com/profile/08511533568611013203noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-73511672299493814532012-08-15T19:30:23.804+03:002012-08-15T19:30:23.804+03:00@Пельмешко: Саш, спасибо.
Кстати, ты на itjam в К...@Пельмешко: Саш, спасибо.<br /><br />Кстати, ты на itjam в Киев собираешься? А то это отличная возможность встретиться лично!Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-63758962392143297272012-08-15T14:03:46.675+03:002012-08-15T14:03:46.675+03:00Отличная статья, Сергей! Никогда не слышал, что эт...Отличная статья, Сергей! Никогда не слышал, что это проблема называется "brittle base classes syndrome" и никогда не задумывался как она решается в других языках, было интересно!<br /><br />p.s. В комментариях какое-то школоло :)Пельмешкоhttps://www.blogger.com/profile/03324601015385633071noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-13080554033441773712012-08-13T11:14:27.547+03:002012-08-13T11:14:27.547+03:00@Slava: вопрос был не в том, что в библиотеке боле...@Slava: вопрос был не в том, что в библиотеке более одного виртуального метода, как раз наоборот. Что если в базовом классе библиотеки не было никакого метода с именем Foo. И мы отнаследовались от библиотечного класса и добавили новый метод Derived.Foo(object).<br /><br />Тогда, если бы при добавлении нового виртуального метода в класс Base.Foo(int) начал бы вызываться другой метод, то добавление любого метода в базовый класс было бы вполне вероятным "критическим изменением" (breaking change).<br /><br />Для пущей убедительности, вместо int и object можно рассмотреть классы парсинга xml-документов, когда в наследнике вместо object-а будет XObject, а вместо int-а - XElement.<br /><br />Так что, с одной стороны, да, это кривоватый дизайн, а с другой стороны - вполне валидный кейс.Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-42676408199865342032012-08-10T18:56:55.969+03:002012-08-10T18:56:55.969+03:00В реальности я таких проблем не видел, да и как мн...В реальности я таких проблем не видел, да и как мне кажется дизайн кривоватый, если из public либы торчит класс с виртуальными методами да еще и перегруженными. <br />Т.е. хочешь переопределить имплементацию надо переопределять всё, а это не хорошо, совсем нехорошо.Slavahttps://www.blogger.com/profile/02339157671912415386noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-69197729277709013182012-08-10T18:55:10.831+03:002012-08-10T18:55:10.831+03:00В реальности я таких проблем не видел, да и как мн...В реальности я таких проблем не видел, да и как мне кажется дизайн кривоватый, если из public либы торчит класс с виртуальными методами да еще и перегруженными. <br />Т.е. хочешь переопределить имплементацию надо переопределять всё, а это не хорошо, совсем нехорошо.Slavahttps://www.blogger.com/profile/02339157671912415386noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-63000423860205517012012-08-09T09:38:13.236+03:002012-08-09T09:38:13.236+03:00@Alexandr:
А чем поможет добрый старина Рихтер в п...@Alexandr:<br />А чем поможет добрый старина Рихтер в понимании поведения компилятора и логике команды разработчиков языка? (я не тролю, а правда не помню, чтобы у меня после прочтения его книги остались по этому поводу какие-то воспоминания).<br /><br />И при чем здесь виртуальность и невиртуальность С++ и Java и Макконнелл в придачу?<br /><br />У разработчика любого ОО языка есть проблема: в каком порядке анализировать методы классов и что важнее - точный тип переменной и точность аргументов. У каждого из этих подходов есть свои "за" и "против". Вот о них, собственно, и шла речь.<br /><br />З.Ы. Исходя из комментария я не вполне уверен, что я правильно своим постом донес до Вас ее суть.Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-81847424824259638932012-08-09T09:31:48.150+03:002012-08-09T09:31:48.150+03:00В C# такое поведение ничуть не кажется странным дл...В C# такое поведение ничуть не кажется странным для тех кто читал Рихтера, а (не)виртуальность всех методов в C++ & Java упоминается у Макконнелла практически в самом начале книги<br />Я давно не читал хороших статей.. видимо и не прочту :)<br />Просто эта статья действительно интересна будет лишь новичкам, имхо<br /><br />P.S.: про не смешивать логику очевидно согласен )SanSYShttps://www.blogger.com/profile/04450588154758367397noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-13060857801925766072012-08-08T09:30:05.979+03:002012-08-08T09:30:05.979+03:00@afiskon: согласен, отсутствие наследование - это ...@afiskon: согласен, отсутствие наследование - это еще один способ решения этой проблемы как таковой. Хотя в данном случае сравнение с функциональными языками, как по мне, менее честное, поскольку мы рассматриваем чисто ОО-шную проблему.Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-24057188003672777492012-08-08T08:17:47.021+03:002012-08-08T08:17:47.021+03:00"Да, было бы очень интересным узнать о том, к..."Да, было бы очень интересным узнать о том, как эта проблема решается в других языках программирования"<br /><br />Во многих языках - путем полного отказа от ООП. Взять к примеру множество языков функционального программирования (Haskell, Erlang, ...) или к примеру Google Go. В результате код становится намного проще и понятнее, а выразительность и удобство почему-то не страдают.afiskonhttps://www.blogger.com/profile/05754353927342560310noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-57762318932240358152012-08-07T23:24:39.758+03:002012-08-07T23:24:39.758+03:00Пару дней назад на кухне в офисе один из камрадов ...Пару дней назад на кухне в офисе один из камрадов такой вопрос задал. Я сразу ответил как и все, что вызовется Derived.Foo(int), потом подумал об этом чуток позже и пришел к выводу, что такое поведение вполне даже ок (о чем позже нашел подтверждение в книге C# Programming Language и на блоге Эрика, с фразой о brittle base классах).Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-67269823007545934242012-08-07T23:20:19.530+03:002012-08-07T23:20:19.530+03:00Прикольно. Откуда ты выкапываешь такие вещи? В жиз...Прикольно. Откуда ты выкапываешь такие вещи? В жизни наверное не очень полезно (я пока не встречал в коде методов с одинаковыми названиями и разными параметрами(тип, но не количество)). Однако мозги - вставляет... Спасибо :)eugenehttps://www.blogger.com/profile/00368111825500921630noreply@blogger.com