Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 485 486 [487] 488 489 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#7291
,
|
|
|
|
MOC? Выверт, но не здесь, а немного в другом месте. Добавляет те аспекты RTTI, который в C++ нет. А с формами работает UIC. Но он не генерирует ничего такого, чего нельзя было бы создать "руками". |
|
Сообщ.
#7292
,
|
|
|
|
Цитата Flex Ferrum @ Добавляет те аспекты RTTI, который в C++ нет ... и не нужны. |
|
Сообщ.
#7293
,
|
|
|
|
Он не шутит. Он выдает тезис в расчете, что никто его проверять не будет. Не в первый раз.
Добавлено Всякие юнит-тесты и подобное - это отдельная вещь. Там и специальная версия возможна, дающая возможность ковыряться в потрохах классов, и снятие некоторых проверок на входе функций. |
|
Сообщ.
#7294
,
|
|
|
|
Полиморфное? Конструирование? Хм. Если ты еще ничего не сконструировал(т.е. находишься в процессе конструирования), то к чему относится полиморфизм? Добавлено Пруф? |
|
Сообщ.
#7295
,
|
|
|
|
|
Сообщ.
#7296
,
|
|
|
|
Цитата Flex Ferrum @ Можешь в меня сейчас кидаться мокрыми тряпками, но у меня подход прост: если клиенту вернули объект, то клиент может с этим объектом делать всё, что угодно Кидаю тряпку: опять разговор слепых с глухими о разных вещах. Я говорю не о клиентской "операбельности", а о внутреннем состоянии объекта, которое клиенту знать вовсе не обязательно, и которое обычно скрывается за сеттерами\геттерами публичных свойств и методов класса. Поэтому тупо подсчитывать кол-во FreeAndNil и проверок на nil в каких-то исходниках - просто глупо, т.к. в подавляющем большинстве они относятся к внутренним потрохам классов. Те же TList и TMemoryStream, несмотря на то, что создаются пустыми\заниленными, являются вполне операбельными для клиента, поскольку в их публичных свойствах и методах предусмотрены проверки внутреннего состояния с выделением\перевыделением памяти при записи\добавлении данных, и выбросом исключений при попытке вылезти за текущий диапазон. Но с другой стороны эти же классы "демократично" предоставляют "продвинутым клиентам" возможность прямого доступа к хранилищам данных по "прямым\сырым" указателям List и Memory (чтобы не тупить с проверками диапазонов на каждой итерации, когда есть 100% уверенность в их корректности). И что, будем кричать "о, ужас!", или просто соблюдать определенные правила и понимать, куда можно совать свой длинный нос и шаловливые ручонки, а куда нет?! Цитата Flex Ferrum @ А разве Delphi - это не среда программирования для школьников и студентов младших курсов? Или термин "формошлёпство" - это про какую-то другую среду разработки? О "формошлепстве" я уже сам упомянул. А вот, что ты "со товарищи" хочешь этим сказать - не понятно. С одной стороны, если дельфи доступна любому школьнику, значит в ней "все схвачено" и ее модель ООП работает "как часы", несмотря на ваши "гнусные инсинуации" . А если кто-то не разобравшись, начинает лезть в какие-то дебри и получает в ответ "по башке", то это нормально, т.к. дельфи не закрывает на замки все потайные двери, куда "посторонним вход запрещен", оставляя тем самым простор "для творчества" продвинутых пользователей. Но с вашей стороны мы слышим упреки в сложности\запутанности дельфийской модели, необходимости введения ограничений и упрощений, перекладывании максимума забот на компилятор, чтобы "поменьше думать". Разве это не стремление перехватить у дельфи пальму первенства "бездумности и формошлепства"? ![]() Уж как-то слишком "настойчиво" и "по-учительски" делится. Авторитетное мнение приносит пользу, пока не задирает нос до претезий на полную непогрешимость и истину в первой инстанции ![]() Цитата Flex Ferrum @ Нет не странно. Жизнь должна быть многовариантной - в этом ее сила. Но глобалисты\тоталитаристы этого не понимают и настойчиво желают постричь всех под свою якобы единственно верную гребенкуВнезапно в том же Qt обходятся без таких вот вывертов, и это как-то работает. Странно, правда? Цитата Flex Ferrum @ К слову сказать, ни в одном гайде по C++ ты не найдёшь ничего в стиле: "Всегда зануляйте поля в деструкторах классов!!!". В официальных дельфийских тоже не найдешь (кстати бОльшая часть возможных "подводных камней", предупреждений и рекомендаций хорошо описана в справке, которую далеко не все читают "от корки до корки"). А "сентенции делфи-гуру, или не очень гуру" - это обратная сторона простоты и доступности дельфи для школьников. Чуть вышел за пределы простого формошлепства, слепил пару собственных классов, получил "по башке" из-за неверного использования виртуального Clear в деструкторе - ну всё, ты уже "гуру" и можешь учить других школьников уму-разуму. Если для начала программирования на С++ нужно хоть какой-то "букварь" прочитать, то для дельфийского формошлепства даже в справку не нужно заглядывать, а в случае чего - вопросик на форум, где тебе такие же вчерашние школьники и объяснят, что к чему. В том числе, что FreeAndNil - это "наше всё" |
|
Сообщ.
#7297
,
|
|
|
|
Цитата D_KEY @ Пруф? D_KEY, все-таки ты троллишь. Поговорим в другой раз, когда перестанешь |
|
Сообщ.
#7298
,
|
|
|
|
Цитата --Ins-- @ D_KEY, все-таки ты троллишь. Поговорим в другой раз, когда перестанешь Ну ты мог бы ответить на другую часть сообщения |
|
Сообщ.
#7299
,
|
|
|
|
Цитата D_KEY @ Ну ты мог бы ответить на другую часть сообщения А это тоже троллинг, учитывая что ответ давался 100500 раз. |
|
Сообщ.
#7300
,
|
|
|
|
Цитата leo @ А вот, что ты "со товарищи" хочешь этим сказать - не понятно Вот именно это: Цитата leo @ А "сентенции делфи-гуру, или не очень гуру" - это обратная сторона простоты и доступности дельфи для школьников. Чуть вышел за пределы простого формошлепства, слепил пару собственных классов, получил "по башке" из-за неверного использования виртуального Clear в деструкторе - ну всё, ты уже "гуру" и можешь учить других школьников уму-разуму. Если для начала программирования на С++ нужно хоть какой-то "букварь" прочитать, то для дельфийского формошлепства даже в справку не нужно заглядывать, а в случае чего - вопросик на форум, где тебе такие же вчерашние школьники и объяснят, что к чему. В том числе, что FreeAndNil - это "наше всё" Низкий порог входа подразумевает, что среда (её дизайн) предполагают, что школьник при всём своём желании не налажает. Т. е. для того, чтобы добраться до потрохов, нужно несколько, гм, повысить свой уровень. Тут вот Смайк правильно, в общем то, про джаву сказал. Ты с самого начала (когда только начинаешь пользоваться инструментом) погружаешься в среду правильных подходов. Тебе фреймворк и язык не позволяют (ну, по крайней мере, я так наивно считаю) совершать грубые ошибки. И это, в общем то, правильно. Так ведь? Цитата leo @ Кидаю тряпку: опять разговор слепых с глухими о разных вещах. Я говорю не о клиентской "операбельности", а о внутреннем состоянии объекта, которое клиенту знать вовсе не обязательно Мы с тобой говорим об одном и том же, на самом деле. Тут фишка в чём: для каких-то классов (типа того же TList'а) он становится операбельным сразу после создания конструктором класса. Для других (более сложных) типа контролв и форм - тебе ещё конструктор инстанса надо позвать, чтобы объект стал операбельным. Так ведь? И вот как раз вторые случаи я и имею в виду - когда объект класса по своей логике требует дополнительных параметров от клиента для осуществления "тонкой настройки". Ну вот возьмём конкретный пример: ![]() ![]() 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 @ Но с вашей стороны мы слышим упреки в сложности\запутанности дельфийской модели, необходимости введения ограничений и упрощений, перекладывании максимума забот на компилятор, чтобы "поменьше думать". Разве это не стремление перехватить у дельфи пальму первенства "бездумности и формошлепства"? Тут всё просто. Программист не должен думать о том, о чём он не должен думать. В том смысле, что среда должна быть комфортна для программиста любого уровня, и не подталкивать его к совершению глупых ошибок по незнаню/невнимательности. |
|
Сообщ.
#7301
,
|
|
|
|
Цитата trainer @ Как было бы в ряде случаев здорово, если б было возможно. Увы, специальной версии компилятора никто не даст, слишком дорого её делать, специальной версии ПО тоже, ибо в таком случае протестировано будет не то ПО, что подлежит сертификации.Всякие юнит-тесты и подобное - это отдельная вещь. Там и специальная версия возможна, дающая возможность ковыряться в потрохах классов, и снятие некоторых проверок на входе функций. Главная проблема в том, что по отраслевым стандартам (DO-178b/c) тестировать нужно только сертифицированными инструментами, в противном случае эти инструменты также должны быть протестированы. У нас нет сертифицированного компилятора C/C++ (да и во всём мире существует только один такой за $1000000, которому прилагается целый комплект правил и ограничений использования языковых возможностей) и нет возможности протестировать имеющийся (gcc/g++ под PPC). Ну, точнее есть, но это ещё дороже . Поэтому единственный выход - сделать мину, что компилятора нет вообще. Итог - тестированию подлежит объектный код, а про сырцы следует просто забыть. Вот так вот. |
|
Сообщ.
#7302
,
|
|
|
|
Цитата leo @ Поэтому тупо подсчитывать кол-во FreeAndNil и проверок на nil в каких-то исходниках - просто глупо, т.к. в подавляющем большинстве они относятся к внутренним потрохам классов. Да, если эти потрохи - просто методы класса - то все нормально и понятно, но вот когда FreeAndNil в деструкторах - так это как минимум странно. На кой ляд их Nil`ить если я и так разрушаюсь? А выходит что надо, потому что если я перегружаю хоть один виртуальный метод своего предка то я уже просто обязан FreeAndNil`ить все члены-данных своего класса в своем деструкторе на всяк случай ибо фиг его знает, а вдруг кто-то из предков в своем деструкторе вызывает виртуальный метод? Порой это и посмотреть невозможно (если нет исходников библиотеки), а даже если и есть исходиники - то не факт что если и не вызывает то в следующих реализациях не начнет этого делать. От сюда, думаю, и привычка "на всяк случай" FreeAndNil`ить все члены-данных даже в деструкторах. |
|
Сообщ.
#7303
,
|
|
|
|
Напомните мне, плз, вставить свои пять копеек по обсуждаемому поводу. Счас не могу, некогда.
|
|
Сообщ.
#7304
,
|
|
|
|
Цитата leo @ В официальных дельфийских тоже не найдешь (кстати бОльшая часть возможных "подводных камней", предупреждений и рекомендаций хорошо описана в справке, которую далеко не все читают "от корки до корки"). А "сентенции делфи-гуру, или не очень гуру" - это обратная сторона простоты и доступности дельфи для школьников. Чуть вышел за пределы простого формошлепства, слепил пару собственных классов, получил "по башке" из-за неверного использования виртуального Clear в деструкторе - ну всё, ты уже "гуру" и можешь учить других школьников уму-разуму. Если для начала программирования на С++ нужно хоть какой-то "букварь" прочитать, то для дельфийского формошлепства даже в справку не нужно заглядывать, а в случае чего - вопросик на форум, где тебе такие же вчерашние школьники и объяснят, что к чему. В том числе, что FreeAndNil - это "наше всё" Это ты так тонко наехал на модератора раздела Дельфи и супортера EurekaLog? А он еще считает использование absolute вместо тайпкаста VCL-объектов - вполне нормальным И goto тоже. |
|
Сообщ.
#7305
,
|
|
|
|
Цитата [S]mike @ Это ты так тонко наехал на модератора раздела Дельфи и супортера EurekaLog? Тем лучше. Будет с кем обсудить мой "ответ" не уходя с площадки. |