Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.03;
Скачать: CL | DM;

Вниз

Delphi vs. C++   Найти похожие ветки 

 
Суслик ©   (2004-09-06 11:38) [40]


> Григорьев Антон ©   (06.09.04 11:34) [38]

мне не хватает:
1) друзей классов
2) private конструторов и деструкторов (т.е. никто не может создать и удалить объект - только статический собственный метод).
3) статических переменных.


 
Игорь Шевченко ©   (2004-09-06 11:48) [41]

Григорьев Антон ©   (06.09.04 11:34) [38]


> Единственное, чего лично мне не хватает в ООП-модели Delphi
> - это возможности создания объектов в стеке, чтобы они автоматически
> освобождались, когда переменная выходит из области видимости.


AFAIK, классы, объявленные не через class, а через object позволяют такое. Впрочем, за давностью лет, могу ошибаться.

Суслик ©   (06.09.04 11:27) [35]

У каждого языка свои возможности. Ну и что ?


 
wicked ©   (2004-09-06 11:49) [42]

Григорьев Антон [38] прав, этого ну очень не хватает...
а вот с этим
> чем, от этого отказываются не только в Delphi, но и в других
> языках (если не ошибаюсь, в той же Java)

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

а вот в списке
> 1) друзей классов
> 2) private конструторов и деструкторов (т.е. никто не может
> создать и удалить объект - только статический собственный
> метод).
> 3) статических переменных.

необходим только пункт 2 (если такого нету конечно, поправьте меня)... остальное прекрасно осуществляется таким средством языка, как модуль...

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

ЗЫ всё высказанное в этом постинге является имхо"м, и может быть преосмысленно и переоспоренно.... :)


 
Суслик ©   (2004-09-06 11:55) [43]


> Игорь Шевченко ©   (06.09.04 11:48) [41]
> У каждого языка свои возможности. Ну и что ?

Ты сказал, что у каждого языка свои возможности. Ну и что?

Если по сути, то - ничего. Я что-то НЕсубъективно утверждал? Если нет, то какое может быть всем дело до моего субъективного мнения? А высказываться тут вроде никто не запрещал?


 
Думкин ©   (2004-09-06 11:57) [44]


> [43] Суслик ©   (06.09.04 11:55)

Субъективное мнение имеет один недостаток - оно может оказаться не объективным.


 
Суслик ©   (2004-09-06 12:02) [45]


> Субъективное мнение имеет один недостаток - оно может оказаться
> не объективным.

А это недостаток? :))) На то и есть субъективное мнение.
Если я считаю, что мне так лучше - то так лучше. Я же никого не заставляю делать также - я просто поделился мнением.


 
wicked ©   (2004-09-06 12:06) [46]

> Игорь Шевченко ©   (06.09.04 11:48) [41]

> AFAIK, классы, объявленные не через class, а через object
> позволяют такое. Впрочем, за давностью лет, могу ошибаться.

Цитата из справки Delphi 6 (топик Object types, в конце):
Object types are supported for backward compatibility only. Their use is not recommended.

как видим, проблема есть, поскольку единственный способ не рекомендуют...


 
Игорь Шевченко ©   (2004-09-06 12:06) [47]

Суслик ©   (06.09.04 11:55) [43]


> Если по сути, то - ничего.


Если по сути, то не стоит делать далеко идущих выводов о преимуществах объектной модели одного языка над другим.

Насколько я помню, в нашей переписке я указывал способ, как защититься от того дурака, защита от которого в других языках обеспечивается приватными деструкторами.


 
Акуличев Дмитрий   (2004-09-06 12:11) [48]


> Единственное, чего лично мне не хватает в ООП-модели Delphi
> - это возможности создания объектов в стеке, чтобы они автоматически
> освобождались, когда переменная выходит из области видимости.
> Впрочем, от этого отказываются не только в Delphi, но и
> в других языках (если не ошибаюсь, в той же Java). Почему
> - я так и не понял.

Всё с точностью до наоборот, не "от этого отказываются не только в Delphi, но и в других языках", а Ц++ -- чуть ли не единственный язык, где это было.

Отказываются, а точнее, не вводят, по разным причинам. В жабе, например, нет смысла это делать просто потому, что есть автоматическое управление памятью.


 
Суслик ©   (2004-09-06 12:20) [49]


> Игорь Шевченко ©   (06.09.04 12:06) [47]


> Насколько я помню, в нашей переписке я указывал способ,
> как защититься от того дурака, защита от которого в других
> языках обеспечивается приватными деструкторами.


Все же хочу заметить, что во всех своих высказываниях я упоминал термин "компилятор" или глаголы он него.

Способов полно (например, newinstance+freeinstance), но все они будут работать в runtime.
Если интересно, далее могу объяснить, чем runtime плох.

По сути единственный способ предложил ЮЗ - написать эксперта с проверкой кода перед компиляцией.

Никто другой не предложил ( и не может этого сделать ) способа создания private конструктора и деструктора, уровень видимости которых отследживался бы во время компиляции.


 
Акуличев Дмитрий   (2004-09-06 12:23) [50]


> мне не хватает:
> 1) друзей классов

Это не какое-то новое средство Ц++, а вынужденная примочка обхода отсутствия в языке нормальной модульности.
Если этого действительно не хватает (т.е. не хватает НЕДОСТАТКА и костыля для его обхода!), то налицо серьёзные проблемы с постановкой мышления.


> 2) private конструторов и деструкторов (т.е. никто не может
> создать и удалить объект - только статический собственный
> метод).

Ой... А это зачем?


> 3) статических переменных.

Т.е. ещё одного костыля...


 
Суслик ©   (2004-09-06 12:25) [51]

Удалено модератором
Примечание: Offtopic


 
Суслик ©   (2004-09-06 12:26) [52]

Удалено модератором
Примечание: Offtopic


 
Ермак ©   (2004-09-06 12:29) [53]

Может, немного не втему, но... Если уж народ начал сравнивать ООП в языках...
Очень советую посмотреть книжку: Г. Саттер. Решение сложных задач на С++.
Я тоже думал, что ничего осбенного не узнаю, типа, какая разница, на чем писать?
В результате - узнал столько тонкостей об ООП-проектировании, которые даже и в Дельфи оказались полезны. После прочтения класики о С++ (СТрауструп, например, и Саттер) понимаешь, зачем нужен С++. Он не лучше Дельфи, а просто другой. Такой мощности обобщенного программирования нет почти ни в одном языке.


 
Суслик ©   (2004-09-06 12:32) [54]


> Такой мощности обобщенного программирования нет почти ни
> в одном языке.

сейчас получишь на орехи от знатоков.

ЗЫ. Я во многом согласен с тобой в этом высказывании. Чем дальше изучаю с++, тем больше чую в нем именно то, что ты описал.


 
Акуличев Дмитрий   (2004-09-06 12:41) [55]

Удалено модератором
Примечание: Offtopic


 
lipskiy ©   (2004-09-06 12:48) [56]

Господа, правильно ли я понимаю, что каждый язык изначально создавался для решения каких-то определенных типов задач? Иначе как объяснить изобилие языков? А если это так, то для каких конкретных типов задач были изначально задуманы C и Pascal (и их модификации)?


 
Kerk ©   (2004-09-06 12:49) [57]


> Суслик ©   (06.09.04 12:25) [51]

Все же соглашусь с Дмитрием, что friend-классы - это скорее костыль.


 
}|{yk ©   (2004-09-06 12:51) [58]

Тот же Дэвид Парнас говорит, что имено С++ является причиной того, что ООП не стал до сих пор основной парадигмой в программировании. Сложность языка - не показатель его "крутости"


 
pasha_golub (temp)   (2004-09-06 12:51) [59]

Удалено модератором
Примечание: Offtopic


 
Ермак ©   (2004-09-06 12:53) [60]

>>Это не какое-то новое средство Ц++, а вынужденная примочка >>обхода отсутствия в языке нормальной модульности.
>>Если этого действительно не хватает (т.е. не хватает >>НЕДОСТАТКА и костыля для его обхода!), то налицо серьёзные >>проблемы с постановкой мышления.

Позвольте не согласиться. Вся беда в том, что у большинства занкомство с языком С++ начиналась в 90-е годы на Борланд С++, когда еще не было нормального стандарта языка. Если кто не знает: последний полный стандарт С++ - 1998 год. То что раньше - это либо не совсем, либо вообще не С++.

Так вот, в С++ есть полная поддержка модульности. Это простарнства имен (namespaces). И, кстати говоря, очень удобно, что они не привязаны к конкретному файлу, а могут быть раскиданы так, как тебе хочется. То, что я говорил о С++, основывается на реальном опыте решения задачи, решить которую в рамках ООП Дельфи было бы на несколько порядков сложнее. Чего стоит одна невозможность перекрестного подключения модулей! В С++ я знаю, что смогу реализовать ЛЮБУЮ взаимосвязь между сущностями, которую захочу. Но если для конкретной задачи не нужна сложная иерархия сущностей, то я безусловно выбираю Дельфи.


 
wicked ©   (2004-09-06 12:54) [61]

> lipskiy [56]

> Господа, правильно ли я понимаю, что каждый язык изначально
> создавался для решения каких-то определенных типов задач?
> Иначе как объяснить изобилие языков? А если это так, то
> для каких конкретных типов задач были изначально задуманы
> C и Pascal (и их модификации)?

именно pascal задумывался, как язык обучения программированию...
а c задумывался, как заменитель ассемблера (в чём он может конкурировать только с фортом)...
но здесь сравнивать пытаются object pascal и c++ - это не pascal и c...


 
Ega23 ©   (2004-09-06 12:58) [62]

Мда, Holy War....


 
lipskiy ©   (2004-09-06 12:59) [63]


> но здесь сравнивать пытаются object pascal и c++ - это не
> pascal и c...

Это я понимаю, но разве C++ вырос не из С, а object pascal не из pascal?
Причины развития каждого направления - это тоже отдельный вопрос. С чего начинался каждый путь - это одно, и каким путем пошел каждый... путь - это другое, и тоже интересно.
Выходит что оба языка в итоге развились к состоянию, способному решать одни и те же типы задач? Не так ли?


 
Ермак ©   (2004-09-06 13:01) [64]

lipskiy ©   (06.09.04 12:48) [56]
>>Господа, правильно ли я понимаю, что каждый язык изначально >>создавался для решения каких-то определенных типов задач? >>Иначе как объяснить изобилие языков? А если это так, то для >>каких конкретных типов задач были изначально задуманы C и >>Pascal (и их модификации)?

Изначально C - высокоурвневый "ассемблер" для платформы Юникс. Pascal - обучающий язык. Теперь C не нужен почти никому кроме системщиков низкого уровня.

C++ - это не С, это абсолютно другой язык.
Object Pascal - это не Pascal, а язык абсолютно другого уровня.
Хотя общая концепция сохранилась: основная идея Delphi - помочь решить почти любую задачу с минимальными затартами времени. Основная задача С++ - дать возможность решить задачу именно так, как вы сами того хотите, то есть оптимизацией либо по времени написания, либо по расширяемости кода.

>>Тот же Дэвид Парнас говорит, что имено С++ является причиной >>того, что ООП не стал до сих пор основной парадигмой в >>программировании. Сложность языка - не показатель его "крутости"

Между прочим, это так. Эталоном ООП является Smalltalk. Это действительно очень интересный динамический язык, который по быстроте разработки и ошибкобезопасности не имеет себе равных. По многим причинам коммерческого распротсранения не получил. Зато его виртальная машина в сильно обкоцанном виде была использована Sun при разработке Java/


 
pasha_golub (temp)   (2004-09-06 13:01) [65]

А что правда, то что написано в интервью Страуструпа?


 
Акуличев Дмитрий   (2004-09-06 13:02) [66]


> Господа, правильно ли я понимаю, что каждый язык изначально
> создавался для решения каких-то определенных типов задач?

Не правильно. Многие классы задач появились только после появления тех или иных языков. До того эти классы задач просто вообразить было трудно.


> Иначе как объяснить изобилие языков?

Примерно так, как и изобилие видов животных -- эволюцией.


 
Ozone ©   (2004-09-06 13:04) [67]

jack128 ©   (06.09.04 11:38) [39]

И ты в это веришь? Он где-то на своем сайте сам сказал, что это все стебы.


 
lipskiy ©   (2004-09-06 13:07) [68]


> основная идея Delphi - помочь решить почти любую задачу
> с минимальными затартами времени.

Значит я сделал правильный для себя выбор! Это радует.

> > Иначе как объяснить изобилие языков?
>
> Примерно так, как и изобилие видов животных -- эволюцией.

Ясно, везде бардак, хаос, спонтанность...


 
Акуличев Дмитрий   (2004-09-06 13:28) [69]


> Так вот, в С++ есть полная поддержка модульности. Это простарнства
> имен (namespaces). И, кстати говоря, очень удобно, что они
> не привязаны к конкретному файлу, а могут быть раскиданы
> так, как тебе хочется.

А в словарик за словом "модуль" заглянуть?

Нэймспейсы -- это не поддержка (тем более -- ха-ха! -- полная) модульности, это даже не её имитация. Это ещё один костыль при её (модульности) полном отсутсвии. Костыль для обхода одной из проблем, которые возникают, когда программа собирается -- концептуально, я не рассматриваю тут технические ухищрения различных сред (опять костыли!) -- как один большой исходный текст.


> Чего стоит одна невозможность перекрестного подключения
> модулей!

Т.е. опять не хватает недостатка -- свалить всё в один большой исходник.


 
Суслик ©   (2004-09-06 13:45) [70]


> Kerk ©   (06.09.04 12:49) [57]

Соглашаться или нет твое дело.
Я был бы рад, если бы они и в дельфи были.


 
Суслик ©   (2004-09-06 13:50) [71]

холи, не холи, а обвинять в недостатке кого-либо не имея досточно информации, а удалять посты с ответами на головловные обвинения в недостаке чего-либо еще хуже. При этом тот факт, что удаляющий принмает одну из позиций дисскутирующих сторон, совсем портит обсуждение. :((((


 
Ермак ©   (2004-09-06 13:57) [72]

>>Акуличев Дмитрий
Зачем столько эмоций? Еще раз скажу: ЕСТЬ широкий класс задач, в которых перекрестно связанные объекты невозможно хорошо реализовать на Дельфи без тройного а то и более уровня косвенноых ссылок и потери наглядности. Как я буду писать - в виде ли одного большого исходного текста - или каждый намеспасе в отдельном файле - это уже мое дело, а дело среды - предоставить мне как можно больше вариантов.
В простых задачах мое мнение о том, как нужно писать программы, приблизительно совпадает с Борландовским - и я использую Дельфи. В том же случае, если я считаю, что что-то нужно реализовать по другому (напр, через множественное наследование), а среда мне этого не позволяет, я не собираюсь подлаживаться под среду, я просто напишу на том, на чем я могу напрямую воплотить свою концепцию.


 
Суслик ©   (2004-09-06 14:04) [73]


> Ермак ©   (06.09.04 13:57) [72]

Моличи, Илюха - у тебя налицо недостаток мышления. :))

Т.к. у меня тоже недостаток мышления, то не могу полчать: поддерживаю твои высказывания. Особенно вот это "а дело среды - предоставить мне как можно больше вариантов."


 
Romkin ©   (2004-09-06 14:14) [74]

Хм. А кто сказал, что в Борландовском Паскале нет перекрестного подключения модулей?! Типа A uses B и B uses A? Что мешает? Лень в справку по uses глянуть?
Ермак ©  (06.09.04 13:57) [72] Есть множественное наследование в Delphi. Пользуйте интерфейсы. И, на мой взгляд, с интерфейсами это самое наследование гораздо прозрачнее.
Подытоживая, единственное, чего нет в Delphi по сравнению с C++ - это шаблонов. Еще, пожалуй, inline методов.
Все остальное - есть. Аналоги.


 
}|{yk ©   (2004-09-06 14:16) [75]

Да ну, перекрестное подключение в С++ - это такой головняк, какое же это преимущество


 
Суслик ©   (2004-09-06 14:24) [76]


> Romkin ©   (06.09.04 14:14) [74]


> Есть множественное наследование в Delphi

Не надо, не надо - до множественного наследования этой конструкции далеко. Если не ошибаюсь, то, что это не моножественное наслелование сказано в доке по дельфе (или я у Хармона это прочел - не помню).


> Подытоживая, единственное, чего нет в Delphi по сравнению
> с C++ - это шаблонов

Вот видишь, и ты находишь, что в сях есть то что нет в дельфи.
Только вот заметь, что у каждого это "единственное" свое.
Одно предложение: давай каждый будет подитоживать сам, а также решать, что для него единтсвенное.


> Все остальное - есть. Аналоги.

Хи...


 
Суслик ©   (2004-09-06 14:28) [77]


> Суслик ©   (06.09.04 14:24) [76]


> Romkin ©   (06.09.04 14:14) [74]

Про имитацию множественного наследования интерфесами.
Хотел бы добавить, что такую конструкцию можно назвать множественное наследование ИНТЕРФЕЙСА класса, но никак не реализации. Реализацию можно имитировать интерфейсы + делегирование, т.е. когда классы, с которыми непосредственно работает пользователь, ничего не делают сам:
1) реализуют интерфейсы (т.е. смотри на класс с любой стороны)
2) реализацию делегируют. (т.е. запускай меня через любой интерфейс, а я (класс) просто предам твой вызов своему подчиненному объекту).
Но все же это не то - это не множественное наследование.


 
Romkin ©   (2004-09-06 14:29) [78]

И не понимаю я этих войн. Мне на практике не встречались задачи, которые я не мог бы решить с комфортом на Delphi.
Причина, кстати, весьма банальна - Объектный паскаль гораздо проще в изучении, нежели С++. Посмотрите хотя бы на объем Lang Ref :)
Поэтому, увы, в среде программистов на DElphi довольно большая доля, хм, как бы помягче... программистов низкой квалификации. Отсюда и сложилось постепенно мнение, что Delphi - для ламеров, а нормальные пацаны только на сях программируют.
В 96-97 годах была, между прочим, абсолютно обратная ситуация: многие программисты (и хорошие программисты!) перешли с C++ на Delphi. Тогда Delphi была безусловно лучшим инструментом программирования под Windows. И никому в голову не приходило ее хаять или сравнивать с VB или VC ;)
Теперь - отстой и устарело. Во-первых, обидно. Во-вторых, абсолютно несправедливо :))
А в-третьих, через пять лет отстоем будет C# :) К этому идет: простой язык, многое, очень многое взявший от Паскаля. И будут топики, подобные этому, правда, с чем его будут сравнивать - я сказать затрудняюсь. Может, это будет "отстой" по сравнению с C++, может - с Delphi.
Я не берусь гадать. Я не берусь заявлять, что какой-то язык умирает или уже умер. Я просто программирую на том, что мне нравиться. Нравится сейчас, а не через пять лет.


 
Romkin ©   (2004-09-06 14:33) [79]

Суслик ©  (06.09.04 14:28) [77] Пусть. Мне, собственно, пофигу, как называют, лишь бы в печь не ставили. Если что-то, что нельзя назвать множественным наследованием, позволяет тожесамо, что и это самое множественное наследование... И, кстати, прозрачнее :)
То нафиг мне нужно множественное наследование в С++?
Мне, если честно, множественное наследование вообще ни разу не понадобилось :))
>Вот видишь, и ты находишь, что в сях есть то что нет в дельфи.
И что? А в Delphi есть то, чего нет в сях, и что с того?


 
Суслик ©   (2004-09-06 14:33) [80]


> Romkin ©   (06.09.04 14:29) [78]

Да прав ты, кто с тобой спорит.

я тоже на дельфи пишу и вроде никуда не собираюсь.



Страницы: 1 2 3 4 5 6 7 8 9 
10 11 12 13 14 15 вся ветка

Текущий архив: 2004.10.03;
Скачать: CL | DM;

Наверх




Память: 0.66 MB
Время: 0.052 c
4-1093008390
@lamer
2004-08-20 17:26
2004.10.03
Как получить системные настройки?


3-1094451877
qweqwe
2004-09-06 10:24
2004.10.03
Проблема с быстродействием


14-1095152893
Cosinus
2004-09-14 13:08
2004.10.03
Возьметесь ли написать такую программу и сколько будет стоить?


14-1095068974
VID
2004-09-13 13:49
2004.10.03
Ищу фулфлэш для Siemens S45i


4-1093424519
Manfred7
2004-08-25 13:01
2004.10.03
Хук на клавиатуру клавиша Win