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

    Незнаю чего ты в этом сообщении мне пытался донести, но я явно против того чтобы у класса АбстрактноеЖивотное переопределять метод движение и в нем переставлять все лапы... А абстрактную задачу в абстрактном классе Документ я себе действительно не могу представить... В моем понимании базовый абстрактный класс, должен просто содержать абстрактные методы, без их реализации...
      Цитата Qraizer @
      Откуда предок может знать, какие действия потомка ведут к модификации документа, а какие нет?


      Он и не знает. он предоставляет ему возможность такие действия определить.

      Цитата Qraizer @
      Вывод: Modified не может быть под контролем только предка.


      Вывод неправильный. См. выше.
        Цитата --Ins-- @
        Цитата D_KEY @
        Ты, кстати, так и не сказал, что у меня не так.


        Я для начала должен код понять. Я задал вопрос, как это обеспечивается? Ответ может упустил, но вроде не вижу

        Да там вроде ничего сложного. А ответ вроде вот:
        Цитата D_KEY @
        Цитата --Ins-- @
        Цитата D_KEY @
        У меня не так разве?


        Не знаю. Поясни на словах

        Предок выставляет свои поля в конструкторе напрямую, а modified ставиться в false. Потомки делают точно также, а свойство modified оказывается не измененным(false). Чего еще нужно-то?
          Цитата --Ins-- @
          ...независимо от того, забудет программист в потомке это сделать явно или не забудет?

          Цитата --Ins-- @
          Он и не знает. он предоставляет ему возможность такие действия определить.
          Он забыл. Дальше что?
          Сообщение отредактировано: Qraizer -
            ООП такое ООП... =)

            Инс, а если потомок переопределит ПослеКонструктор? =)
              Цитата D_KEY @
              --Ins--, без обид, почитай что-нибудь из теории OOA&D.


              Почитаю на досуге. И без обид - давай к терминам не придираться. Я ваши абстрактные классы называю интерфейсами, и заметь -это фишка не только Delphi. Абстрактными классами во многих языках принято называть просто базовые классы, которые нет смысла инстанцировать, но которые нужно использовать для наследования. Я не прав?

              Цитата D_KEY @
              А если потомок не хочет сериализовываться так, как это описано в базовом классе?


              То какого хрена он от него унаследован? А если хочет? Что, писать код сериализации в каждом классе отдельно? ;) А если я точно знаю, что у меня будет 100 классов, которые нужно сериализовать подобным образом. Почему я не могу выделить предка для этих классов, который раз и навсегда снимет этот вопрос? ;)

              Цитата D_KEY @
              Нет, просто он сам будет решать, что ему сериализовывать.


              Что - и у нас сам будет решать, а вот КАК - уже решать не будет. Это решит предок, хотя лучше чтобы это решил внешний класс сериализатора. Собственно этот внешний класс тоже решает абстрактную задачу :)

              Цитата D_KEY @
              Почему во время-то? Это же происходит уже после конструирования.


              А после конструирования нужно чтобы статус был сброшен и баста :D И если потомок захочет иначе - я бы ему рекомендовал пересмотреть свои желания ;) Я в своей иерархии делаю так, чтобы потомок все сделал правильно и с минимумов услилий. Где жестко определяя поведение (которое вводится на уровне абстракции предка), а где мягко, позволяя переопределить поведение в критических точках. Кстати, AfterConstruction - это мягко - он виртуальный ;)

              Добавлено
              Цитата korvin @
              Инс, а если потомок переопределит ПослеКонструктор? =)


              inherited? :unsure:

              Добавлено
              Цитата Qraizer @
              Он забыл. Дальше что?


              Если забудет в твоем случае - все будет работать неправильно, а в моем - ему и помнить то не нужно, за него уже подумали ;)
                Цитата --Ins-- @
                inherited?
                А AfterConstruction разве не автоматом из TObject дергается? Где это inherited должно быть? Не забыть в переопределенном AfterConstruction написать inherited AfterConstruction? А где же автоматизм?
                Сообщение отредактировано: trainer -
                  Цитата D_KEY @
                  Предок выставляет свои поля в конструкторе напрямую, а modified ставиться в false. Потомки делают точно также, а свойство modified оказывается не измененным(false)


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

                    Тоесть абстрактный класс содержащий в себе методы, делает вполне конкретные действия? Это как минимум выглядит странно, на что тебе и намекают
                      инс, а если программист забудет поставить инхеритед?
                        Цитата trainer @
                        А AfterConstruction разве не автоматом из TObject дергается?


                        Эээ, а как это мешает тебе написать в переопределенном AfteConstruction сначала inherited, а потом - свои добавления. Здесь никаких принципиальных отличий от любого виртуального метода нет.
                          Цитата --Ins-- @
                          В простейшем случае - да, в более сложном - нет. Так есть лекарство от этого более сложного случая? Ну, к примеру, поле - это приватное поле предка, а для его установки у нас в потомке есть только public или protected сеттер? Ы?

                          Мы это уже выясняли. Потомок не должен никак дергать поля базового класса, тем более приватные, - это нарушение разграничения ответственности. Вот устанавливать width-height через конструктор базового - это всегда пожалуйста. :)
                          Сообщение отредактировано: Мяут-Настоящий -
                            Цитата --Ins-- @
                            Цитата D_KEY @
                            --Ins--, без обид, почитай что-нибудь из теории OOA&D.


                            Почитаю на досуге. И без обид - давай к терминам не придираться. Я ваши абстрактные классы называю интерфейсами, и заметь -это фишка не только Delphi. Абстрактными классами во многих языках принято называть просто базовые классы, которые нет смысла инстанцировать, но которые нужно использовать для наследования. Я не прав?

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

                            Цитата
                            Почему я не могу выделить предка для этих классов, который раз и навсегда снимет этот вопрос? ;)

                            Раз и навсегда он решить не может, потому, что потомок все-равно указывает в чем именно заключается сериализация.

                            Цитата
                            Что - и у нас сам будет решать, а вот КАК - уже решать не будет. Это решит предок, хотя лучше чтобы это решил внешний класс сериализатора.

                            У нас также. Показывали же уже.

                            Цитата
                            Цитата korvin @
                            Инс, а если потомок переопределит ПослеКонструктор? =)


                            inherited? :unsure:

                            А если "забудет"(с)?
                              Цитата --Ins-- @
                              Если забудет в твоем случае - все будет работать неправильно, а в моем - ему и помнить то не нужно, за него уже подумали

                              В его случае я уверен что до такого гениального проектного решения никто не додумается, потому как есть более легкие, гибкие для этого средства.ю..
                                Вообще, это получается какое-то размазанное неявное конструирование.
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 74 75 [76] 77 78 ...  494 495


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