Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 466 467 [468] 469 470 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#7006
,
|
|
|
|
Цитата KILLER @ Ну да, навык писать бизнес логику в процессе конструирования объекта, это покруче будет... Открой для себя паттерн Composite Цитата KILLER @ Я просто затрудняюсь представить зачем мне сохранять объект куда то там, если он еще толком то создаться не успел... А после работы конструктора он еще не успел создаться? |
|
Сообщ.
#7007
,
|
|
|
|
В целом да, неплохая архитектура. Но ListView, TreeView, Grid - это просто адовый ад. Заэкстендить нормально практически нереально. Проще написать с нуля. Вот у VirtualTreeView - правильная архитектура. Но там исходник - 1 мегабайт и методов еще больше, чем во всех названных мной контролах И не факт, что если разделить это все на кучу маленьких файлов, чисто для простоты ориентирования в интерфейсе класса - было бы лучше. Поэтому аутлайн рулит. |
|
Сообщ.
#7008
,
|
|
|
|
Цитата [S]mike @ И не факт, что если разделить это все на кучу маленьких файлов, чисто для простоты ориентирования в интерфейсе класса - было бы лучше. Лучше большие классы разбивать на несколько унаследованных друг от друга. Хотя это не универсальный совет, нужно смотреть в каком случае меньшим злом будет плодить классы, а в каком - не плодить но перегружать единственный |
|
Сообщ.
#7009
,
|
|
|
|
Цитата --Ins-- @ Открой для себя паттерн Composite И? Что я в нем должен увидеть такого, что меня бы сразу осенило, о да писать логику в конструкторах это круто... Цитата --Ins-- @ А после работы конструктора он еще не успел создаться? ![]() Ну в делфях хз, в С++ он уже создался, но я то там и написал : "если он еще толком то создаться не успел..." ... |
|
Сообщ.
#7010
,
|
|
|
|
Медленная там компиляция, да. Цитата 2) Меньше возможностей для рефакторинга и анализа кода, поиска ликов, профайлинга. Зависит от сред разработки и набора используемых утилит. С рефакторингом вполне справляется IDE вроде NetBeans/Eclipse и пр. Поиск ликов удобен и надежен - valgrind. Впрочем, ликов при правильном проектировании вообще не будет, т.к. язык заставляет об этом думать. Для профайлинга тоже утилит хватает - gprof, например. Цитата ООП это вообще отдельная песня. Подробнее, пожалуйста. Цитата Нету пакетов В яве вон не хватает их. Модули вводят Цитата ад с отдельным объявлением класса и его реализации. Это, наоборот, очень удобно. Можете этого не делать и писать как в Яве(правда время компиляции от этого пострадает). Цитата Избыточный синтаксис. В яве его не меньше Цитата 4) Плюсы для Андроида - не "нативно". Все заточено под Джаву. Начиная от отладки и заканчивая всякими дополнительными средствами DDMS. 5) Android поддерживает не все библиотеки, облегчающие жизнь разработчику на плюсах. Тот же BOOST, например, не поддерживается. Это уже другой разговор. |
|
Сообщ.
#7011
,
|
|
|
|
Цитата KILLER @ И? Что я в нем должен увидеть такого, что меня бы сразу осенило, о да писать логику в конструкторах это круто... То, что существуют агрегированные и композитные объекты, которые не имеют смысла вне своего контейнера Цитата KILLER @ Ну в делфях хз, в С++ он уже создался, но я то там и написал : "если он еще толком то создаться не успел..." ... Расшифруй слово "толком" В дельфях после работы конструктора объект создан полностью, без всяких "толком" |
|
Сообщ.
#7012
,
|
|
|
|
--Ins--, не хочешь ответить на мои сообщения?
|
|
Сообщ.
#7013
,
|
|
|
|
Цитата D_KEY @ --Ins--, не хочешь ответить на мои сообщения? Не знаю. На какие? Я веду беседу с тремя как минимум оппонентами и так |
|
Сообщ.
#7014
,
|
|
|
|
Цитата [S]mike @ Ну я не извращенец, чтобы торчать от такого кода: ![]() ![]() std::vector<std::vector<RESULT> >::iterator ext_iterator; std::vector<RESULT>::iterator int_iterator; std::vector<std::vector<RESULT> > ext = ...; for(ext_iterator = ext.begin(); ext_iterator!=ext.end(); ++ext_iterator) { for(int_iterator = ext_iterator->begin(); int_iterator!=ext_iterator->end(); ++int_iterator) { ... ![]() ![]() ![]() for(auto & ext_val : ext) { for(auto int_val : ext_val) { ... |
|
Сообщ.
#7015
,
|
|
|
|
Цитата D_KEY @ С рефакторингом вполне справляется IDE вроде NetBeans/Eclipse и пр. Возможностей рефакторинга управляемого кода всяко больше ![]() Цитата D_KEY @ Поиск ликов удобен и надежен - valgrind. Впрочем, ликов при правильном проектировании вообще не будет, т.к. язык заставляет об этом думать. Для профайлинга тоже утилит хватает - gprof, например. Еще раз - речь я веду об Андроиде. Под Винду/Линукс я бы на плюсах, возможно, и написал бы что-то. Цитата D_KEY @ Это, наоборот, очень удобно. Цитата D_KEY @ В яве его не меньше Ну я тут уже все свои аргументы по этому поводу выложил, копировать не буду |
|
Сообщ.
#7016
,
|
|
|
|
Цитата --Ins-- @ А после работы конструктора он еще не успел создаться? в плюсах не принято хоть сколько нибудь значительную логику в конструкторе, поэтому то что с точки зрения дельфиста должно быть в конструкторе, в плюсах -выносится в отдельный метод. причин насколько я понял две первая: если в конструкторе возникнет исключение, то деструктор НЕ будет вызван. нужно будет отдельно файнализировать частично сконструированный объект. это сподвигает народ писать как можно более простые конструкторы, в которых не может быть исключений. вторая: в плюсах конструкторы не полиморфные и _вызов любого метода из конструктора НЕ полиморфный_. это тоже ограничивает полет фантазий. Добавлено справедливости ради надо сказать, что массовое применение смартпоитеров первую проблему решает на корню. |
|
Сообщ.
#7017
,
|
|
|
|
--Ins--, ответь вот на это, например:
Цитата D_KEY @ Цитата --Ins-- @ А мне непонятно зачем подменять понятие объекта и класса, и зачем передавать объекты по значению. Никто понятий не подменяет. class в С++ может объевлять не только класс иерархии наследования. Но позволяет делать и это. Потому С++ и является языком с поддержкой ООП, но не ОО-языком. Я не понимаю твоего вопроса. Если не надо передавать - не передавай. В чем трудность? Как, кстати, мне в Delphi изменить работу этих самых неявных ссылок на объекты? Язык же нативный и без сборки мусора... Вот в С++: ![]() ![]() // сырой указатель typedef my_type * my_type_ptr; // указатель, уникально владеющий объектом typedef unique_ptr<my_type> my_type_unique; // подсчет ссылок typedef shared_ptr<my_type> my_type_shared; // так же могут быть другие "указатели", // для размещения в shared memory, например // или там от какой-нибудь реализации GC // ... И если очень хочется, ты можешь выбрать один из видов указателей, сделать удобный typedef и получить такое же поведение, как в Delphi и даже немножко больше(т.к. сможешь менять вид указателя). Цитата Нисколько не удивляюсь что от этой тенденции благоразумно уходят со временем, и не только в Delphi Какой тенденции? Добавлено И на всякий случай скажу, что вышеприведенные typedef'ы и указатели будут одинаковы для любых типов. |
|
Сообщ.
#7018
,
|
|
|
|
Цитата D_KEY @ ![]() ![]() for(auto & ext_val : ext) { for(auto int_val : ext_val) { ... Так это же только в C++11 появилось? |
|
Сообщ.
#7019
,
|
|
|
|
Цитата D_KEY @ Никто понятий не подменяет. class в С++ может объевлять не только класс иерархии наследования. Но позволяет делать и это. Потому С++ и является языком с поддержкой ООП, но не ОО-языком. Я не понимаю твоего вопроса. Если не надо передавать - не передавай. В чем трудность? Подменяете. Никто не запрещал сделать объект с точки зрения ООП отдельным типом и не перемешивать все в кучу Цитата D_KEY @ И если очень хочется, ты можешь выбрать один из видов указателей, сделать удобный typedef и получить такое же поведение, как в Delphi и даже немножко больше(т.к. сможешь менять вид указателя). В контексте сказанного выше - мешать то никто не мешает, кроме того, что понятия смешаны Цитата D_KEY @ Какой тенденции? Расширения использования одновременно двух семантик |
|
Сообщ.
#7020
,
|
|
|
|
Цитата jack128 @ первая: если в конструкторе возникнет исключение, то деструктор НЕ будет вызван. нужно будет отдельно файнализировать частично сконструированный объект. Нет, не нужно. Если, конечно, пишешь конструкторы нормально. Объект или будет или нет. Исключение в конструкторе может привести к вызову деструктора только в том случае, если конструктор вызывает другой конструктор(в С++11) перед тем, как возникло исключение. Поэтому, если очень хочется, можно добиться поведения, аналогичного делфийскому. Цитата конструкторы, в которых не может быть исключений. Пишут и с исключениями Цитата вторая: в плюсах конструкторы не полиморфные и _вызов любого метода из конструктора НЕ полиморфный_. это тоже ограничивает полет фантазий. Это правильное поведение, которое предотвращает ошибки. В Java, например, рекомендуют(по крайней мере Эккель в Философии) как раз избегать вызова виртуальных методов в конструкторах, т.к. это приводит к проблемам и вызову метода для несконстрированного объекта. |