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

    Ты вообще не понимаешь о чем споришь? Ты привел конкретную задачу, и сказал сделайте мне ее, я тебя спрашиваю, для чего мне нужно выставлять твой параметр modify в истину или в лож в конструкторе класса? Для чего?

    Цитата --Ins-- @
    (ну мало ли, в рантайм юзер изменит размер документа, нужно пометить документ как измененный). И ахтунг!

    Да ахтунг! Причем тут рантайм и конструктор класса? :blink:
    ты на вопрос Зачем ответь

    Добавлено
    Цитата --Ins-- @
    Я тебе говорил то же самое, но ты утверждал, что это - единичные случаи Или не говорил ты такого?

    Ты когда пишешь ты вообще читаешь? Да я это говорил, теперь ответь мне на вопрос, где я говорил чт она Делфи кроме как мышкотыкать более программить нельзя никак. Где я такое говорил? Выдели жирненьким ;)
      Цитата Повстанець @
      bool modified = false


      Ты видимо не понял задачу. Код потомка у тебя может дергать другие параметры. У тебя base-конструктор вызовется РАНЬШЕ, чем конструктор потомка, а значит то, что будет вызвано вот здесь:
      Цитата Повстанець @
      {
      }

      Спокойненько поменяет Modified. там например может свойтсво Description установится. Как мне сделать чтобы независимо от этого после выполнения любого конструктора Modified был сброшен?
        Цитата --Ins-- @
        Поясняю. Есть класс Document. У него есть свойства Width, Height, к примеру. Эти свойства в сеттерах изменяют статус Modified (ну мало ли, в рантайм юзер изменит размер документа, нужно пометить документ как измененный). И ахтунг! Эти же свойства (а может и некоторые другие, а может потомок еще и свои введет) устанавливаются в конструкторе. Как бы так извратиться, чтобы после выполнения конструктора Modified был бы сброшен в false?

        Все-равно не совсем понимаю...
        ExpandedWrap disabled
          class Document : boost::nocopyable
          {
          public:
              Document()
                  : m_width(...),
                    m_height(...),
                    m_modified(false),
              {
              }
           
              void SetWidth(int width)
              {
                  SetParam(&m_width, width);
              }
           
              void SetHeight(int height)
              {
                  SetParam(&m_height, height);
              }
           
          ...
           
          protected:
              template<typename T>
              void SetParam(T *param, const T & value)
              {
                  if (param != 0
                      && *param != value) {
           
                      *param = value;
                      m_modified = true;
           
                  }
              }
           
          private:
              int m_width;
              int m_height;
              bool m_modified;
          };

        Мог опечататься. Что исправить, чтобы было как у тебя?

        Цитата
        Цитата D_KEY @
        не отвечают принципам проектирования ПО


        У тебя принципы сформированы под влиянием плохих инструментов ;)

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

        Цитата
        Ты другие подходы никогда не пробовал, и тем не менее пытаешься судить. Ты использовал когда нибудь то, о чем я тебе говорю? Нет? Так попробуй, прочувствуй, и тогда уже делай выводы соответствует или нет
        Какие подходы? Вызов методов несконструированных объектов? Или может написания небезопасного в смысле исключений кода? Нет, спасибо.
          --Ins--, ты предлагаешь, чтобы у тебя в конструкторе, вернее и у нас тоже - содержалось половина бизнес логики программы, а я тебя спрашиваю - Зачем мне такой "профессиональный" подход?? Зачем мне в конструкторе писать функциональность, если конструктор нужен для создания и инициализации экземпляра класса???
            Цитата KILLER @
            для чего мне нужно выставлять твой параметр modify в истину или в лож в конструкторе класса? Для чего?


            А я думал что это понятно даже киллерам. Создай документ Word. Он после создания не помечен как изменненный. Поменяй параметры страницы на альбомную - он пометится как измененный. В то же время если ты бы с самого начала создал альбомный документ - он бы измененным не был. Я хочу в программе то же самое. Что бы я не задал в конструкторе, изменения параметров не должно менять статус документа.
              Цитата --Ins-- @
              Как мне сделать чтобы независимо от этого после выполнения любого конструктора Modified был сброшен?

              А тебе не кажется, что это должен решать потомок?
                Цитата --Ins-- @
                Спокойненько поменяет Modified. там например может свойтсво Description установится. Как мне сделать чтобы независимо от этого после выполнения любого конструктора Modified был сброшен?
                В С++ -- никак. В С++ конструирование идёт древовидно, опираясь на иерархию класса. Спагеттиподобное конструирование на С++ никак не осилить без гемороя.
                  Цитата --Ins-- @
                  Цитата KILLER @
                  для чего мне нужно выставлять твой параметр modify в истину или в лож в конструкторе класса? Для чего?


                  А я думал что это понятно даже киллерам. Создай документ Word. Он после создания не помечен как изменненный. Поменяй параметры страницы на альбомную - он пометится как измененный. В то же время если ты бы с самого начала создал альбомный документ - он бы измененным не был. Я хочу в программе то же самое. Что бы я не задал в конструкторе, изменения параметров не должно менять статус документа.

                  Это может решить только потомок. Но если очень надо, можешь добавить код сброса флага модификации в фабрике документов(она же у тебя будет, правда ;) ?).
                    Цитата --Ins-- @
                    Создай документ Word. Он после создания не помечен как изменненный.

                    --Ins--, вдумайся в эту фразу и пойми, что вот этот сценарий - это результат работы конструктора, а ты хочешь сделать тоже самое но через жопу, перенеся половину бизнес логики на плечи конструктора базового класса :wall:
                    Сообщение отредактировано: KILLER -
                      Цитата D_KEY @
                      Какие подходы? Вызов методов несконструированных объектов?


                      Эти методы и осуществляют конструирование ;) Но куда тебе такое осознать...

                      Добавлено
                      Цитата D_KEY @
                      А тебе не кажется, что это должен решать потомок?


                      Нет, не кажется. Еще вопросы? ;) А тебе не кажется что это должен решить предок? Зачем потомку что-то специально предпринимать, если предок в состоянии об этом позаботится? Ну, если не в состоянии, то понятно :D

                      Добавлено
                      Цитата KILLER @
                      -Ins--, вдумайся в эту фразу и пойми, что вот этот сценарий - это результат работы конструктора


                      Я это понимаю. Теперь пойми это и ты ;)
                        Цитата --Ins-- @
                        Цитата D_KEY @
                        Какие подходы? Вызов методов несконструированных объектов?


                        Эти методы и осуществляют конструирование ;) Но куда тебе такое осознать...

                        Чего тут осознавать-то? Я в питоне и яве такое тоже сделать могу. Вот только зачем?
                        Почему методы занимаются конструированием? Если это методы класса, то понятно, но если методы несуществующего еще объекта, то...

                        Добавлено
                        Напомнило:
                        Цитата
                        ...если я, вместо того, чтобы оперировать каждый вечер, начну у себя в квартире петь хором, у меня настанет разруха...
                          Цитата D_KEY @
                          "Дельфифобов" я практически не встречал. Все так или иначе использовали эту среду разработки и у большинства остались теплые чувства.
                          Ага. До этого холивара - точно были. Как-никак, на 2-м и 5-м приходилось пописывать, на 7-м - чуток посопровождать после одного такого формошлёпа <_< . Слава богу, вскоре сменил работу и вернулся к C/C++, поднимать свой левел под нужный порог. Пять лет назад это было. Не жалею нисколечки.
                            Цитата --Ins-- @
                            Зачем потомку что-то специально предпринимать, если предок в состоянии об этом позаботится?


                            Поясню. Термин Modified вводится на уровне абстракции предка. Предок и берет на себя все функции управления этим состоянием, а не делегирует эту работу потомкам. Потомок это чисто наследует и использует. У потомка свои задачи, которые на уже его уровне абстракции вводятся, если ему еще и решать часть задач предка - то это точно галимое проектирование
                              Впрочем, не думаю, что Дельфи в этом повинен. Скорее, стиль этого холивара. И твердолобость некоторых участников вкупе с самомнением.
                                Цитата --Ins-- @
                                Я это понимаю. Теперь пойми это и ты

                                :wall: Ты прикидываешься? ну ок, самый простой вариант, даже не думая:
                                ExpandedWrap disabled
                                  class CMSWord : public ISomeInterface
                                  {
                                  public:
                                     CMSWord()
                                     : m_modify(false)
                                     {
                                        CreateClearPage();            
                                     }
                                     void CreateClearPage()
                                     {
                                        pMyContext->CreatePage();
                                     }
                                     void OnUserChange()
                                     {
                                        m_modify = true;
                                     }
                                     void OnSave()
                                     {
                                        m_modify = false;
                                     }
                                  };

                                Я решил твою задачу?

                                Добавлено
                                Цитата --Ins-- @
                                Поясню. Термин Modified вводится на уровне абстракции предка.

                                --Ins--, уже становится страшно, мы помним как ты проектировал геометрические фигуры, и когда класс АбстрактнаяФигура у тебя рисовал по умолчанию круг :lol:
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 70 71 [72] 73 74 ...  494 495


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