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

    это инструмент реализации сквозной функциональности
      Цитата --Ins-- @
      Если забудет в твоем случае - все будет работать неправильно, а в моем - ему и помнить то не нужно, за него уже подумали
      Ещё раз.


      Цитата --Ins-- @
      ...независимо от того, забудет программист в потомке это сделать явно или не забудет?
      Цитата --Ins-- @
      Он и не знает. он предоставляет ему возможность такие действия определить.
      Он забыл определить такие действия. Дальше что? Получается, ты защитился от забывчивости только в конструкторе. Забыть же доопределить нужные действия он может в паре десятков методов. Смысл быть беременным на 5%?


      --Ins--, ещё который раз уже. Сама идея modified ущербна. Не может глобальное свойство объекта находиться под управлением только одного класса, хоть базового, хоть производного, если за целостность объекта ответственна вся иерархия. Исключение единственно - базовые классы чисто абстрактные, т.е. в твоей терминологии это интерфейсы. У тебя глобальное свойство modified подконтрольно всей иерархии, и базовый класс не интерфейс. Я не буду на Плюсах реализовывать быдлоспроектированный проект, не жди от меня решений своей задачи. То, что и в Дельфи, и в Плюсах - D_KEY, рассказывал, как - это возможно, не делает такое проектное быдлорешение хорошим. Вот только Плюсы это не поощряют, а Дельфях пофиг. И это проблема языка, не помечаю это как ИМХО. Если даже сильные Дельфисты не видят очевидных ляпов в архитектуре бизнеслогики...


      Цитата --Ins-- @
      И решение (в Delphi, ес-но) - очень простое. В других языках решения столь же изящного нет. И в чем они более гибкие по части ООП?
      Цитата --Ins-- @
      Хак - это в с++ будет, потому что законного средства нет. А в дельфи это не хак, это использование гибких возможностей объектной модели
      Простым хак быть не должен. В Плюсах много что можно хакнуть, но быдлорешения в нём даются тяжело. Это поощряет хорошие проектные решения, но даёт тебе возможность в тяжёлых ситуациях пойти наперекосяк своей совести. Дельфи этим качеством, увы, не обладает.
      Цитата --Ins-- @
      Понимаю, что понять вам это трудно, потому что вы всегда решали эти задачи иначе с горем пополам. В общем, нужно попробовать
      Я уже напробовался в своё время. Спасибо Плюсам, что заставили научиться правильно проектировать. С разделением по ролям, областям ответственности, инвариантами состояний и гарантиями безопасности.
      Цитата --Ins-- @
      И исключение при вызове конструктора - это :wacko: Что это за запрет создания такой - вызывать исключение?
      Кажется, а очередной раз покидаю тему. Мир живёт инвариантами, а Дельфисты их обзывают ... э-э-э, неудачными проектными решениями. Дальнейший диалог считаю бессмысленным. Разговор окончен?
        Цитата KILLER @
        Тоесть это другими словами - костыль


        Что-то у тебя с логикой, однако. Как

        Цитата KILLER @
        Тоесть это другими словами - костыль


        вытекает из

        Цитата KILLER @
        AfterConstruction нужен для того чтобы гарантировано иметь блок, который выполнится после какихто действий

        ?

        Я не вижу причино-следственных связей :D
          Цитата --Ins-- @
          http://ins911.blogspot.com/2008/12/singletone-delphi.html - решение для D7, для более поздних имеет смысл список сделать классовой переменной. Для еще более поздних - таки да, возможны дженерики :) Но фишка - это то, что и без дженериков - чисто на переопределении NewInstance.

          Работает это так: не секрет что при конструировании любого объекта в первую очередь вызывается неявно метод TObject.NewInstance, который собственно выделяет память под экземпляр и возвращает ссылку на него. Этот метод виртуальный, что открывает большие перспективы. В частности, в данном классе логика его работы переопределена - если первый вызов - создаем экземпляр как раньше, т.е. вызываем унаследованную реализацию. Если же экземпляр уже был создан, то вместо этого просто возвращаем ссылку на него. При использовании же вызываем обычный конструктор. Я для наглядности ввел конструктор с названием GetInstance (название лучше отражает поведение, чем Create), а собственно Create - скрыл и сделал виртуальным, чтобы наследник переопределив его реализацию указал что должно произойти именно в момент создания (а не получения ссылки) первого и единственного экземпляра. Синглетон можно уничтожить явно, вызвав Free, а если нет - то он уничтожится автоматически.

          не сравнить с реализацией на Io... =)
            Цитата korvin @
            это инструмент реализации сквозной функциональности

            Чего чего? Это тогда когда по сути не известно вызовется у тебя сначало базовый конструктор а потом производный или наоборот? Я не удивлюсь, если эти AfterConstruction/BeforeConstruction, выззываются всегда, в определенном порядке...
              Цитата Qraizer @
              Я не буду на Плюсах реализовывать быдлоспроектированный проект, не жди от меня решений своей задачи. То, что и в Дельфи, и в Плюсах - D_KEY, рассказывал, как - это возможно, не делает такое проектное быдлорешение хорошим. Вот только Плюсы это не поощряют, а Дельфях пофиг. И это проблема языка, не помечаю это как ИМХО. Если даже сильные Дельфисты не видят очевидных ляпов в архитектуре бизнеслогики...

              а некоторые с тобой не согласны

              Добавлено
              Цитата KILLER @
              Чего чего? Это тогда когда по сути не известно вызовется у тебя сначало базовый конструктор а потом производный или наоборот? Я не удивлюсь, если эти AfterConstruction/BeforeConstruction, выззываются всегда, в определенном порядке...

              hint: AOP
              ссылка выше
                Цитата --Ins-- @
                Я не вижу причино-следственных связей :D

                Ты не видишь, а я вижу, давай я тебе про них раскажу более детальнее, может быть тоже поймешь. Смотри, у тебя есть BeforeConstruction/AfterConstruction, вопрос зачем они нужны? Ответ за тем чтобы beforeConstruction гарантированно вызвался перед AfterConstruction - верно? Конечно верно, иначе они как минимум не оправдывали своих идентификаторов... Отсюда возникает вопрос, а зачем мне этиметоды, если я и так знаю, когда у меня объект начнет конструироваться и когда он это закончит??? Вот в делфи то и не так как раз, потому как там легко изменить порядок вызова конструкторов, легко вызвать виртуальный метод потомка из конструктора базового класса(это при то что конструктор производного еще не отработал?? <_< )...
                  Цитата Qraizer @
                  У тебя глобальное свойство modified подконтрольно всей иерархии


                  Для установки Set - да, а для сброса - Reset - нет :) И не должно быть оно подконтрольно потомкам. Оно сбрасывается только в трех случаях и баста. Эти случаи:
                  1) После создания нового документа
                  2) После загрузки из файла
                  3) При сохранении в файл
                  Все, другого не дано. И давать потомкам руками сбросывать это состояние - это глубость полнейшая. Не должно быть у них такой возможности даже, так как все случаи когда это нужно уже учтены. Ты только дашь ему возможность поломать поведение. Если ты этого не понимаешь, то я открыто выражаю сомнение в твоей квалификации. Инкапсуляция - это прежде всего защита от возможности сделать что-то не то, предоставляя клиенту ограниченный интерфейс

                  Цитата Qraizer @
                  С разделением по ролям, областям ответственности


                  Во-во, то-то и оно - в разделении ответственности ;) Между классами в рамках иерархии.
                  Цитата Qraizer @
                  Дальнейший диалог считаю бессмысленным. Разговор окончен?


                  Qraizer, смешной ты человек. :D
                  1. Я тебя в эту тему не звал
                  2. Я тебя здесь силой не держу
                  Хочешь - участвуй, если есть что сказать, не хочешь - чем ты мне угрожаешь? :D

                  Добавлено
                  Цитата KILLER @
                  Смотри, у тебя есть BeforeConstruction/AfterConstruction, вопрос зачем они нужны? Ответ за тем чтобы beforeConstruction гарантированно вызвался перед AfterConstruction - верно?


                  У меня нет BeforeConstruction. Остальное нет смысла комменитровать ;) У меня есть только AfterConstructioin, который вызовется в момент, когда объект полностью сконструирован и до возврата ссылки на него клиентскому коду.
                    Цитата --Ins-- @
                    У меня нет BeforeConstruction. Остальное нет смысла комменитровать ;)

                    Значит, видимо для этой модели хватает только одного AfterConstruction, только вот толку от нее, я никак не могу понять, эти вот твои проектные решения которые ты привел тут и являются по сути костылями, потому как запутывают логику окончательно...
                      фразы

                      Цитата KILLER @
                      я никак не могу понять


                      и

                      Цитата KILLER @
                      и являются по сути костылями


                      противоречат друг другу :)
                        Ну вот к примеру:
                        Ссылка...
                        Цитата

                        Adding the AfterConstruction and BeforeDestruction methods to Delphi 4 is important for component builders that are providing VCL components for both Delphi and C++Builder, to avoid problems with the described differences in constructor and destructor behavior (virtual methods!) between Delphi and C++Builder.


                        Добавлено
                        Цитата --Ins-- @
                        противоречат друг другу :)

                        Вырванные из контекста? Возможно, ты если цитируешь фразы - ты уж будь добр цитируй чтобы смысл сказаного сохранялся...
                          Цитата KILLER @
                          Значит, видимо для этой модели хватает только одного AfterConstruction

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

                          другие методы часто имеют обе Before- и After- комбинации
                          Сообщение отредактировано: korvin -
                            Кстати. Почему объект должен следить за историей своих состояний так и не объяснили...
                              Цитата korvin @
                              я понимаю претензии к возможности вызывать методы в конструкторе, но вызывать метод объекта до того как он начал создаваться -- это как-то совсем нелепо. по схожим причинам нет и AfterDestrution.
                              впрочем было бы удобно, если бы таки можно было задавать такие методы, только без доступа к самому объекту в них.

                              другие методы часто имеют обе Before- и After- комбинации

                              Я выше, сразу перед этим твоим сообщением запостил ссылку - там дан ответ на твой вопрос
                                --Ins--, относительно синглетона. Так как ты хочешь не сделать без шаблонов по причине того, что в С++ не храниться такая информация о типе во время выполнения. С другой стороны, если сделать некоторое допущения, то можно придумать. Но это будет некрасиво.
                                У меня вопрос по твоей реализации. Разве после GetInstance не будет вызван конструктор? То есть ну будет ли вызван повторно конструктор для уже существующего объекта?
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 79 80 [81] 82 83 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.1862 ]   [ 15 queries used ]   [ Generated: 29.07.26, 23:23 GMT ]