Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.65 MB
Время: 0.057 c
1-1095318457
ser
2004-09-16 11:07
2004.10.03
ссылка на TStatusBar.Panel


14-1095368393
jack128
2004-09-17 00:59
2004.10.03
Порядок вычисления аргументов в функции


9-1086007711
Полубинский Антон
2004-05-31 16:48
2004.10.03
Новый проект на сайте ПроектGame


1-1095161589
X9
2004-09-14 15:33
2004.10.03
Утечка памяти при использовании TForm


4-1093784724
Vasya.ru
2004-08-29 17:05
2004.10.03
программно запретить отчет об ошибках





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский