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

    MOC? Выверт, но не здесь, а немного в другом месте. Добавляет те аспекты RTTI, который в C++ нет. А с формами работает UIC. Но он не генерирует ничего такого, чего нельзя было бы создать "руками".
      Цитата Flex Ferrum @
      Добавляет те аспекты RTTI, который в C++ нет

      ... и не нужны.
      Сообщение отредактировано: MyNameIsIgor -
        Цитата Chow @
        Шутите?!
        Он не шутит. Он выдает тезис в расчете, что никто его проверять не будет. Не в первый раз.

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

          Полиморфное? Конструирование? Хм. Если ты еще ничего не сконструировал(т.е. находишься в процессе конструирования), то к чему относится полиморфизм?

          Добавлено
          Цитата --Ins-- @
          Нет, это вполне годный профессиональный инструмент

          Пруф?
            Цитата D_KEY @
            Пруф

            http://prooflink.ru/ :facepalm:
              Цитата Flex Ferrum @
              Можешь в меня сейчас кидаться мокрыми тряпками, но у меня подход прост: если клиенту вернули объект, то клиент может с этим объектом делать всё, что угодно

              Кидаю тряпку: опять разговор слепых с глухими о разных вещах. Я говорю не о клиентской "операбельности", а о внутреннем состоянии объекта, которое клиенту знать вовсе не обязательно, и которое обычно скрывается за сеттерами\геттерами публичных свойств и методов класса. Поэтому тупо подсчитывать кол-во FreeAndNil и проверок на nil в каких-то исходниках - просто глупо, т.к. в подавляющем большинстве они относятся к внутренним потрохам классов.
              Те же TList и TMemoryStream, несмотря на то, что создаются пустыми\заниленными, являются вполне операбельными для клиента, поскольку в их публичных свойствах и методах предусмотрены проверки внутреннего состояния с выделением\перевыделением памяти при записи\добавлении данных, и выбросом исключений при попытке вылезти за текущий диапазон. Но с другой стороны эти же классы "демократично" предоставляют "продвинутым клиентам" возможность прямого доступа к хранилищам данных по "прямым\сырым" указателям List и Memory (чтобы не тупить с проверками диапазонов на каждой итерации, когда есть 100% уверенность в их корректности). И что, будем кричать "о, ужас!", или просто соблюдать определенные правила и понимать, куда можно совать свой длинный нос и шаловливые ручонки, а куда нет?!

              Цитата Flex Ferrum @
              А разве Delphi - это не среда программирования для школьников и студентов младших курсов? Или термин "формошлёпство" - это про какую-то другую среду разработки?

              О "формошлепстве" я уже сам упомянул. А вот, что ты "со товарищи" хочешь этим сказать - не понятно. С одной стороны, если дельфи доступна любому школьнику, значит в ней "все схвачено" и ее модель ООП работает "как часы", несмотря на ваши "гнусные инсинуации" ;). А если кто-то не разобравшись, начинает лезть в какие-то дебри и получает в ответ "по башке", то это нормально, т.к. дельфи не закрывает на замки все потайные двери, куда "посторонним вход запрещен", оставляя тем самым простор "для творчества" продвинутых пользователей.
              Но с вашей стороны мы слышим упреки в сложности\запутанности дельфийской модели, необходимости введения ограничений и упрощений, перекладывании максимума забот на компилятор, чтобы "поменьше думать". Разве это не стремление перехватить у дельфи пальму первенства "бездумности и формошлепства"? :D

              Цитата Flex Ferrum @
              Уважаемый leo, "Дядя Сэм" делится с тобой собственным архитектурным опытом
              Уж как-то слишком "настойчиво" и "по-учительски" делится. Авторитетное мнение приносит пользу, пока не задирает нос до претезий на полную непогрешимость и истину в первой инстанции ;)

              Цитата Flex Ferrum @
              Внезапно в том же Qt обходятся без таких вот вывертов, и это как-то работает. Странно, правда?
              Нет не странно. Жизнь должна быть многовариантной - в этом ее сила. Но глобалисты\тоталитаристы этого не понимают и настойчиво желают постричь всех под свою якобы единственно верную гребенку

              Цитата Flex Ferrum @
              К слову сказать, ни в одном гайде по C++ ты не найдёшь ничего в стиле: "Всегда зануляйте поля в деструкторах классов!!!".

              В официальных дельфийских тоже не найдешь (кстати бОльшая часть возможных "подводных камней", предупреждений и рекомендаций хорошо описана в справке, которую далеко не все читают "от корки до корки").
              А "сентенции делфи-гуру, или не очень гуру" - это обратная сторона простоты и доступности дельфи для школьников. Чуть вышел за пределы простого формошлепства, слепил пару собственных классов, получил "по башке" из-за неверного использования виртуального Clear в деструкторе - ну всё, ты уже "гуру" и можешь учить других школьников уму-разуму. Если для начала программирования на С++ нужно хоть какой-то "букварь" прочитать, то для дельфийского формошлепства даже в справку не нужно заглядывать, а в случае чего - вопросик на форум, где тебе такие же вчерашние школьники и объяснят, что к чему. В том числе, что FreeAndNil - это "наше всё" :(
                Цитата D_KEY @
                Пруф?


                D_KEY, все-таки ты троллишь. Поговорим в другой раз, когда перестанешь
                  Цитата --Ins-- @
                  D_KEY, все-таки ты троллишь. Поговорим в другой раз, когда перестанешь

                  Ну ты мог бы ответить на другую часть сообщения :)
                    Цитата D_KEY @
                    Ну ты мог бы ответить на другую часть сообщения


                    А это тоже троллинг, учитывая что ответ давался 100500 раз.
                      Цитата leo @
                      А вот, что ты "со товарищи" хочешь этим сказать - не понятно

                      Вот именно это:
                      Цитата leo @
                      А "сентенции делфи-гуру, или не очень гуру" - это обратная сторона простоты и доступности дельфи для школьников. Чуть вышел за пределы простого формошлепства, слепил пару собственных классов, получил "по башке" из-за неверного использования виртуального Clear в деструкторе - ну всё, ты уже "гуру" и можешь учить других школьников уму-разуму. Если для начала программирования на С++ нужно хоть какой-то "букварь" прочитать, то для дельфийского формошлепства даже в справку не нужно заглядывать, а в случае чего - вопросик на форум, где тебе такие же вчерашние школьники и объяснят, что к чему. В том числе, что FreeAndNil - это "наше всё"

                      Низкий порог входа подразумевает, что среда (её дизайн) предполагают, что школьник при всём своём желании не налажает. Т. е. для того, чтобы добраться до потрохов, нужно несколько, гм, повысить свой уровень. Тут вот Смайк правильно, в общем то, про джаву сказал. Ты с самого начала (когда только начинаешь пользоваться инструментом) погружаешься в среду правильных подходов. Тебе фреймворк и язык не позволяют (ну, по крайней мере, я так наивно считаю) совершать грубые ошибки. И это, в общем то, правильно. Так ведь?

                      Цитата leo @
                      Кидаю тряпку: опять разговор слепых с глухими о разных вещах. Я говорю не о клиентской "операбельности", а о внутреннем состоянии объекта, которое клиенту знать вовсе не обязательно

                      Мы с тобой говорим об одном и том же, на самом деле. Тут фишка в чём: для каких-то классов (типа того же TList'а) он становится операбельным сразу после создания конструктором класса. Для других (более сложных) типа контролв и форм - тебе ещё конструктор инстанса надо позвать, чтобы объект стал операбельным. Так ведь? И вот как раз вторые случаи я и имею в виду - когда объект класса по своей логике требует дополнительных параметров от клиента для осуществления "тонкой настройки". Ну вот возьмём конкретный пример:
                      ExpandedWrap disabled
                        procedure TForm1.AddNewButtonClick(Sender: TObject);
                        var
                          (* Pointer to the new button that we are going to create *)
                          NewButton : TButton;
                        begin
                          (*
                          This creates (in memory) the new button with the owner of it
                          being the form (self) so that the NewButton will be
                          destroyed automatically when the form is destroyed
                          *)
                         
                          NewButton := TButton.create(self);
                         
                          (*
                          By using the with statement on the new button we do not need to
                          to keep referencing its properties with NewButton. all the time
                          *)
                         
                          with NewButton do
                          begin
                            (*
                            Set Top so that it appears underneath our two fixed buttons
                            *)
                            Top    := 30;
                         
                            (*
                            Make the width large enough to hold the caption
                            *)
                            Width  := 60;
                         
                            (*
                            This line takes a little more explanation. Every WinControl
                            has a ControlCount property which holds the number of
                            controls  that are parented by it. So self.ControlCount will
                            return the number of controls on our form. We know of two of
                            these controls (our fixed buttons so by taking 2 off this we
                            have the number of NewButtons that we have created and
                            multiplying this by the width we have the left position of
                            the NewButton
                            *)
                         
                            Left   := Width * (self.ControlCount-2);
                         
                            (*
                            This is the line that is most often forgotten, the parent
                            property should be set to the WinControl the button (or
                            any other component) is to be displayed on. In our case
                            this is self which will be the main form, if it is not
                            set your button will not be displayed
                            *)
                            Parent := self;
                         
                            (*
                            This assigns the procedure CustomButtonClick (which will be
                            written later) to the OnClick event of the NewButton
                            *)
                            OnClick := CustomButtonClick;
                         
                            (*
                            We calculate the button number as early, and add this to
                            the caption so that all of our new buttons will
                            have different captions
                            *)
                         
                            Caption := 'Button '+ inttostr (self.ControlCount-2);
                          end;  //With
                        end;

                      Теперь берём конкретно вот этот комментарий:
                      Цитата
                      (*
                      This is the line that is most often forgotten, the parent
                      property should be set to the WinControl the button (or
                      any other component) is to be displayed on. In our case
                      this is self which will be the main form, if it is not
                      set your button will not be displayed
                      *)

                      Если заполнение этого свойства считается обязательным, почему дизайн среды заставляет пользователя указывать его явно в своём коде? В моём мире (пусть он будет идеальным) правильный подход такой: указать родителя в конструкторе класса. Чтобы свести вероятность "не указать" к нулю. Либо настраивать эту связь автоматически при добавлении контрола в контейнер родителя (кстати говоря, Qt поддерживает оба этих подхода). Ни того, ни другого мы тут не наблюдаем. Почему? И сколько проклятий было направлено в адрес разработчиков VCL нерадивыми программистами, которые забывали вписывать эту инициализацию? И только ли нерадивыми?

                      Цитата leo @
                      Но с вашей стороны мы слышим упреки в сложности\запутанности дельфийской модели, необходимости введения ограничений и упрощений, перекладывании максимума забот на компилятор, чтобы "поменьше думать". Разве это не стремление перехватить у дельфи пальму первенства "бездумности и формошлепства"?

                      Тут всё просто. Программист не должен думать о том, о чём он не должен думать. В том смысле, что среда должна быть комфортна для программиста любого уровня, и не подталкивать его к совершению глупых ошибок по незнаню/невнимательности.
                        Цитата trainer @
                        Всякие юнит-тесты и подобное - это отдельная вещь. Там и специальная версия возможна, дающая возможность ковыряться в потрохах классов, и снятие некоторых проверок на входе функций.
                        Как было бы в ряде случаев здорово, если б было возможно. Увы, специальной версии компилятора никто не даст, слишком дорого её делать, специальной версии ПО тоже, ибо в таком случае протестировано будет не то ПО, что подлежит сертификации.
                        Главная проблема в том, что по отраслевым стандартам (DO-178b/c) тестировать нужно только сертифицированными инструментами, в противном случае эти инструменты также должны быть протестированы. У нас нет сертифицированного компилятора C/C++ (да и во всём мире существует только один такой за $1000000, которому прилагается целый комплект правил и ограничений использования языковых возможностей) и нет возможности протестировать имеющийся (gcc/g++ под PPC). Ну, точнее есть, но это ещё дороже :) . Поэтому единственный выход - сделать мину, что компилятора нет вообще. Итог - тестированию подлежит объектный код, а про сырцы следует просто забыть. Вот так вот.
                          Цитата leo @
                          Поэтому тупо подсчитывать кол-во FreeAndNil и проверок на nil в каких-то исходниках - просто глупо, т.к. в подавляющем большинстве они относятся к внутренним потрохам классов.

                          Да, если эти потрохи - просто методы класса - то все нормально и понятно, но вот когда FreeAndNil в деструкторах - так это как минимум странно.
                          На кой ляд их Nil`ить если я и так разрушаюсь?
                          А выходит что надо, потому что если я перегружаю хоть один виртуальный метод своего предка то я уже просто обязан FreeAndNil`ить все члены-данных своего класса в своем деструкторе на всяк случай ибо фиг его знает, а вдруг кто-то из предков в своем деструкторе вызывает виртуальный метод?
                          Порой это и посмотреть невозможно (если нет исходников библиотеки), а даже если и есть исходиники - то не факт что если и не вызывает то в следующих реализациях не начнет этого делать. От сюда, думаю, и привычка "на всяк случай" FreeAndNil`ить все члены-данных даже в деструкторах.
                            Напомните мне, плз, вставить свои пять копеек по обсуждаемому поводу. Счас не могу, некогда.
                              Цитата leo @
                              В официальных дельфийских тоже не найдешь (кстати бОльшая часть возможных "подводных камней", предупреждений и рекомендаций хорошо описана в справке, которую далеко не все читают "от корки до корки").
                              А "сентенции делфи-гуру, или не очень гуру" - это обратная сторона простоты и доступности дельфи для школьников. Чуть вышел за пределы простого формошлепства, слепил пару собственных классов, получил "по башке" из-за неверного использования виртуального Clear в деструкторе - ну всё, ты уже "гуру" и можешь учить других школьников уму-разуму. Если для начала программирования на С++ нужно хоть какой-то "букварь" прочитать, то для дельфийского формошлепства даже в справку не нужно заглядывать, а в случае чего - вопросик на форум, где тебе такие же вчерашние школьники и объяснят, что к чему. В том числе, что FreeAndNil - это "наше всё"

                              Это ты так тонко наехал на модератора раздела Дельфи и супортера EurekaLog? :lol:

                              А он еще считает использование absolute вместо тайпкаста VCL-объектов - вполне нормальным :whistle: И goto тоже.
                              Сообщение отредактировано: [S]mike -
                                Цитата [S]mike @
                                Это ты так тонко наехал на модератора раздела Дельфи и супортера EurekaLog?

                                Тем лучше. :) Будет с кем обсудить мой "ответ" не уходя с площадки. :)
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 485 486 [487] 488 489 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.6249 ]   [ 14 queries used ]   [ Generated: 28.07.26, 14:00 GMT ]