Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.156] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 185 186 [187] 188 189 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#2791
,
|
|
|
|
Цитата Qraizer @ У тебя к каждому есть претензии, потому что ни один не удовлетворяет тем или иным теориям очередного дядьки с громким в прошлом именем. конечно, ведь нет ничего идеального, если б у меня был эталон сравнения я бы сравнивал плюсы именно с ним (ну в этой теме редко очень, чтоб не сильно оффтопить) и о каких дядьках идет речь? у Страуструпа да Вирта имена погромче многих =) к лиспам (CL, Scheme/Racket) у меня тоже есть претензии, видимо не было повода их тут озвучивать, так что не за что извиняться =) |
|
Сообщ.
#2792
,
|
|
|
|
Нет. Причём тут дженерики ? Цитата Qraizer @ Слив подтверждён.Я не сомневался, что уместить в две строки философию Решёточных типов не получится. А я утверждал, что шарпе всё просто и идеально ? Короче, ты не в тему опять. |
|
Сообщ.
#2793
,
|
|
|
|
Цитата Romkin @ Перечисли эти признаки.Объект - набор предков. Это и выглядит как набор предков, и работает так же, по внешним признакам. Цитата Romkin @ Можно я немножко посомневаюсь? Первый попавшийся код в VCL:Ты никогда не можешь получить предка из потомка иначе как создав предка и скопировав в него нужные данные из потомка. Явно. ![]() ![]() TNotifyEvent = procedure(Sender: TObject) of object; ... TCustomUtilityButton = class(TCustomButtonControl) private ... FOnClick: TNotifyEvent; ... end; ... procedure TCustomUtilityButton.Click; begin if Assigned(FOnClick) then FOnClick(Self); end; Цитата Romkin @ Ты точно знаешь, что такое "шаблон" в C++? Более того, активное использование шаблонов происходит из технологических ограничений принятой реализации объектов, в частности, невозможности вызовов виртуальных методов из конструктора. |
|
Сообщ.
#2794
,
|
|
|
|
Цитата trainer @ Можно я немножко посомневаюсь? Первый попавшийся код в VCL: ![]() ![]() TNotifyEvent = procedure(Sender: TObject) of object; ... TCustomUtilityButton = class(TCustomButtonControl) private ... FOnClick: TNotifyEvent; ... end; ... procedure TCustomUtilityButton.Click; begin if Assigned(FOnClick) then FOnClick(Self); end; обычное приведение к супертипу, так везде =/ Добавлено Цитата trainer @ Ты точно знаешь, что такое "шаблон" в C++? я, тоже не вижу при чем тут вызов виртуальных методов из конструктора. одно из сновных назначений шаблонов -- обеспечение параметрического полиморфизна. |
|
Сообщ.
#2795
,
|
|
|
|
Цитата Red @ Цитата D_KEY @ IL_Agent, от тебя ну никак не ожидал. Сто раз обсуждали. Это некорректный код. Требуешь создание нового объекта конкретного типа - какой тут полиморфизм? Ничего не сделал, чтобы предотвратить срез(конструирование объекта базового класса из объекта производного) - какой ты программист? В C# нельзя делать структуры (типы значений) базовыми или производными типами других классов или структур. Хотя они неявно наследуются от класса ValueType. А также неявно наследуются от object, вот что самое поразительное Просто верх изящества Добавлено Почему? Цитата и как после этого можно C++ называть объектно-ориентированным? Он ни в коем случае не является чистым объектно-ориентированным языком. Он мультипарадигмальный по своей природе. |
|
Сообщ.
#2796
,
|
|
|
|
Цитата D_KEY @ Он ни в коем случае не является чистым объектно-ориентированным языком. Он мультипарадигмальный по своей природе. но это же не значит, что ООП-часть должна быть реализована неполно и через чур сложно Добавлено кстати по Симуле, я ее конечно совсем чуть-чуть потрогал, почитал там на сайте, что один из ее минусов -- сложность, но почему-то не обнаружил этой сложности, вроде все четко и однозначно. может подразумевалось "для того времени"? |
|
Сообщ.
#2797
,
|
|
|
|
В чём неполнота и сложность?
|
|
Сообщ.
#2798
,
|
|
|
|
Отчасти так. Но разве в приведенном коде было ООП? Цитата в C++ же мы тут наблюдаем обычное процедурное программирование на структурах несмотря на наличие слова class в коде. Все верно, только не "в С++", а в приведенном коде Цитата Корявый код(с точки зрения логики) на любом языке не говорит ничего об языке. Т.е. вообще ничего. на лицо очередное несоответствие общепринятых терминов и их реализации в C++ |
|
Сообщ.
#2799
,
|
|
|
|
Цитата Adil @ В чём неполнота и сложность? неполнота в некоторой "структурности" объектов, т.е. то, что в С++ называют объектами, в других ЯП -- структуры, не более (единственное отличие -- множественное наследование). с другой стороны 3 спецификатора доступа к полям * 3 спецификатора наследования, наличие виртуальных и невиртуальных методов, static-спецификатор (ну это еще ладно, при отсутствии метаклассов покатит), различие объекты-значения, объекты-ссылки, дружественные функции. Добавлено Цитата D_KEY @ Отчасти так. Но разве в приведенном коде было ООП? Все верно, только не "в С++", а в приведенном коде Корявый код(с точки зрения логики) на любом языке не говорит ничего об языке. Т.е. вообще ничего. но таки зачем вообще давать эту возможность? зачем подменять общепринятое значение слова class? почему нельзя было сделать нормальные классы, а не просто ключевое слово, единственное отличие от структуры которого -- дефолтный спецификатор доступа? вот уж точно бесполезный сахар, продвинутый ради маркетинга |
|
Сообщ.
#2800
,
|
|
|
|
Потому, что с точки зрения формальных правил - код нормальный. Вот только добиться что-нибудь полезное с его помощью вряд ли получится. Цитата Для человека, который знает язык, этот результат абсолютно очевиден.Полученный результат абсолютно не очевиден и требует знаний, это я и показывал. Цитата Нет, тип тут уже "ссылка на объект класса Base". Этот тип может принимать значение ссылки на объекты класса Base и его наследников. В первом же случае ты просил создать новый объект именно класса Base. Цитата Программист, программирующий на языке, в котором нет подобных проблем ![]() Каких проблем? Ну так кто тебя заставляет использовать язык, который ты не понимаешь? Добавлено Нет. Цитата Каких?А также он является владельцем самой строки, что заставляет не забывать о некоторых нюансах Цитата Я там дальше привел пример на псевдо-С++(от Masterkent'а) Цитата D_KEY @ Единственное, о чем тут можно говорить, так это об организации "стандартного" виртуального конструктора копирования, причем в стиле С++ Поподробнее? Добавлено Цитата IL_Agent @ Цитата MyNameIsIgor @ А по поводу логичности разделения в шарпе на ссылочные типы и значения уже обсуждалось... Собственно, вброс и был навеян этим обсуждением. С++ такой логичный ![]() Да, он логичный. В нем везде одна семантика при работе с переменными, как и во всех нормальных языках. Добавлено Все как раз наоборот. Система типов не при чем. Добавлено Цитата Повстанець @ Прочитал на днях книжку по яве. Там про разницу передачи ссылочных и объектных типов трижды упоминается специально (в общем обзоре, конкретно при изучении классов и в краткой теории ООП с т.з. явы) и много-много раз в сносках и комментариях к коду, как бы напоминается. Наверное это от того, что мешанина из ссылочных и объектных типов настолько очевидна и логична. ![]() +100500 Я об этом уже говорил и в этой и в соседней теме. |
|
Сообщ.
#2801
,
|
|
|
|
Цитата D_KEY @ Да, он логичный. В нем везде одна семантика при работе с переменными, как и во всех нормальных языках. ни в одном нормальном языке нет объектов-значений, но примитивные типы работают как значения =) |
|
Сообщ.
#2802
,
|
|
|
|
Похоже для тебя будет откровением, но в Delphi не добавляли реализацию классов, поскольку классы в TP уже были (просто ими мало кто пользовался). В классы только добавили атрибуты.
korvin, ты там для меня привел две цитаты, содержащие выражения "компилируется в нативный код" и "транслируется в программу на C". Это ни капельки не делает программу не интерпретируемой. Мне по работе пришлось написать более десятка разных интерпретаторов (не очень сложных, но все же). Так вот, только три из них интерпретировали текст напрямую, остальные транслировали программу в текст С-программы (кроме этого сгенерированного файла были и другие). Тем не менее, я-то знаю, что в результате транслированный текст просто интерпретировался. Можешь сравнить быстродействие, например CL-программы, при выполнении ее качественным интерпретатором и скомпилированной хорошим "компилятором". Уверен, что, кроме совсем уж простых случаев, разница составит несколько процентов (и неизвестно еще, что будет быстрее) |
|
Сообщ.
#2803
,
|
|
|
|
|
Сообщ.
#2804
,
|
|
|
|
Цитата korvin @ приходится сталкиваться с тем, что две реализации одного и того же интерфейса могут иметь сильно разную семантику, несмотря на то, что автором интерфейса могла подразумеваться какая-то конкретная семантика Если реализация интерфейса противоречит документации на него, то разговор короткий - это не реализация интерфейса. Это реализация чего-то похожего с такими же сигнатурами методов, но не более того. Следовательно, реализовавший получает по шапке. В остальных случая эти две реализации одинаковы в пределах заложенной в интерфейс семантики. |
|
Сообщ.
#2805
,
|
|
|
|
Цитата IL_Agent @ Я передаю наследника с переопределённой виртуальной функцией и хочу, чтобы работал полиморфизм. Ты не передаешь наследника. И какого полиморфизма ты ждешь? Добавлено Цитата IL_Agent @ А если полиморфизм не работает, зачем вообще разрешать передавать наследников без определения приведения типа ? Не знаю, почему ты принял такое решение. |