На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (495) « Первая ... 418 419 [420] 421 422 ...  494 495  ( Перейти к последнему сообщению )  
> Delphi vs C++ vs C# , ну и Java немножко, где-то ближе к старшему байту номеров страниц
    Цитата --Ins-- @
    Цитата D_KEY @
    Вот для этого и нужно ключевое слово, а не наоборот. Ибо лучше, когда такое поведение отражено явно.


    Чем лучше?

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

    В общем, все тот же аргумент по разделению обязанностей и обеспечению инвариантов, который много раз приводился мной, Qraizer'ом и другими участниками дискуссии.
      Цитата kanes @
      другой тип и конструировать будет по другому


      И часто он конструируется по-другому? Не знаю, у меня часто сделано так, что в базовый класс заложено достаточно много общего поведения, так что у меня не так уж и часто
        Цитата --Ins-- @
        И часто он конструируется по-другому?

        А в чем смысл наследника, если он также конструируется?
          Цитата D_KEY @
          Мой пример с using видел? Что не устраивает?


          Я не понял этот синтаксис и в том, что там происходит, и только поэтому не прокомментировал. Я не говорил что не устраивает

          Цитата D_KEY @
          Конструктор не метод объекта, а код, этот объект порождающий. Он обязан инициализировать компоненты объекта, привести его в нужное состояние и обеспечить инварианты.
          Глупо предполагать, что правильным местом для этого по умолчанию является базовый класс текущего. Потому неявное наследование конструкторов неверное решение в плане дизайна языка. А вот явный запрос на это вполне допустим.

          В общем, все тот же аргумент по разделению обязанностей и обеспечению инвариантов, который много раз приводился мной, Qraizer'ом и другими участниками дискуссии.


          Все замечательно, если бы не
          1. юзабилити
          2. это правило все равно не работает, т.к. для конструкторы без параметров вполне отлично наследуются, а вот с параметрами - это уже выходит какая-то новая стихия и к ней твои правила применимы, а к new() - почему-то нет

          Добавлено
          Цитата kanes @
          А в чем смысл наследника, если он также конструируется?


          Переопределяет виртуальные методы

          Добавлено
          Цитата kanes @
          А в чем смысл наследника, если он также конструируется?


          Тем более, что даже если у потомка и появляются новые члены-поля, зачастую достаточно их инициализировать начальными значениями в месте объявления
            Цитата --Ins-- @
            Цитата D_KEY @
            Мой пример с using видел? Что не устраивает?


            Я не понял этот синтаксис и в том, что там происходит, и только поэтому не прокомментировал. Я не говорил что не устраивает

            Это явный запрос на использование конструкторов базового класса. Как раз то, что ты хочешь.

            Цитата
            1. юзабилити

            Что неюзабильного в явном запросе наследования?

            Цитата
            2. это правило все равно не работает, т.к. для конструкторы без параметров вполне отлично наследуются, а вот с параметрами - это уже выходит какая-то новая стихия и к ней твои правила применимы, а к new() - почему-то нет

            В С++ никакие конструкторы не наследуются. Но могут быть сгенерированы(а не унаследованы) конструктор по умолчанию(без параметров) и конструктор копии.
              Цитата
              Сейчас можно наделать n перегрузок вида void Action(<ConcreteGoods> goods, <ConcreteOperation> operation) и вызвать Action((dynamic)goods, (dynamic)operation), где goods и operation ссылки на базовые типы.
              да это ж мультиметоды :pray: реально новость для меня оО
                Цитата Radagast @
                Цитата
                Сейчас можно наделать n перегрузок вида void Action(<ConcreteGoods> goods, <ConcreteOperation> operation) и вызвать Action((dynamic)goods, (dynamic)operation), где goods и operation ссылки на базовые типы.
                да это ж мультиметоды :pray: реально новость для меня оО

                Только, насколько я понимаю, не очень эффективные. Но могу ошибаться.
                  Цитата D_KEY @
                  Это явный запрос на использование конструкторов базового класса. Как раз то, что ты хочешь.


                  Ну, не совсем то, чего хотелось, но если бы в c# такое было - меня бы в принципе наверное устроило.

                  Цитата D_KEY @
                  В С++ никакие конструкторы не наследуются. Но могут быть сгенерированы(а не унаследованы) конструктор по умолчанию(без параметров) и конструктор копии.


                  :D ОК, хорошо, я хочу чтобы конструкторы предков не наследовались, а по умолчанию генерировались их копии, как генерируются для конструктора без параметров. PS: D_KEY, ты в самом деле просто к словам придираешься или хочешь тонко вернуться к теме беседы про конструкторы в Delphi? Мне вот интереснее в данный момент пообсуждать конструкторы c# ;)
                    А правда, что в Делфи конструкторы виртуальные? (ну или могут таковыми быть)
                    (я так понимаю, что виртуальные - только конструкторы копирования, но никак не инициализации, да?)
                      Цитата --Ins-- @
                      Ну, не совсем то, чего хотелось, но если бы в c# такое было - меня бы в принципе наверное устроило.

                      --Ins--, объясни мне глупому, чем тебе мой-то вариант не понравился, тот же самый явный вызов конструктора базового класса
                        Цитата Chow @
                        А правда, что в Делфи конструкторы виртуальные?


                        Могут быть такими. Используются совместно с классовыми ссылками (метаклассами), что позволяет создавать экземпляры классов, неизвестных на этапе компиляции.

                        Добавлено
                        Цитата kanes @
                        --Ins--, объясни мне глупому, чем тебе мой-то вариант не понравился, тот же самый явный вызов конструктора базового класса


                        Так как ты показал - так и приходится делать. Почему не нравится - ну я же тебе пример привел. Если бы в классе-потомке мне пришлось переопределять методы предка, просто вызывая base, мне бы это тоже не понравилось. Причины - те же
                        Сообщение отредактировано: --Ins-- -
                          Цитата Red @
                          Была одна задача. Пусть есть иерархия товаров. У каждого товара есть базовое свойство "Операция". Есть так же иерархия операций. Нам нужно для каждой комбинации товара и операции выполнять какие-то специфические действия.
                          Сейчас можно наделать n перегрузок вида void Action(<ConcreteGoods> goods, <ConcreteOperation> operation) и вызвать Action((dynamic)goods, (dynamic)operation), где goods и operation ссылки на базовые типы.
                          Это мультиметоды. ;)
                            Qraizer, не знал, а какие еще есть эффектные применения?

                            Добавлено
                            И еще такой вопрос, есть ли какое-либо известное систематическое изложение упоминаемых вами концепций?

                            Добавлено
                            Или об этом пишут в основном в контексте C++?
                              +, Radagast!
                              D_KEY, то - не реализация мультиметодов, вроде бы, даже частная. Задача же - как раз в компетенции двупараметрических мультиметодов.
                                Цитата Red @
                                Qraizer, не знал, а какие еще есть эффектные применения?


                                Тут у нас недавно была дискуссия на тему диспетчеры и мультиметоды, а вообще да - посетитель самое очевидное. Ну, можно еще такой вариант: представь себе обработку виндовых сообщений (messages). Ты можешь для класса WMSizeMessage, WMLButtonDownMessage и т.д (потомки Message) написать свой метод-обработчик, а потом вызвать мультиметод, передав ему экземпляр твоего Message, который на основании реального типа вызовет конкретный обработчик. Короче, еще одна возможность замены условной логики полиморфизмом
                                Сообщение отредактировано: --Ins-- -
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 418 419 [420] 421 422 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.5596 ]   [ 14 queries used ]   [ Generated: 29.07.26, 20:33 GMT ]