Страницы: 1 2 3 вся ветка
Форум: "Потрепаться";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.28;
Скачать: [xml.tar.bz2];




Вниз

Вопрос о распространнёности Delphi в мире. 


Fellomena   (2002-02-14 10:59) [0]

По словам одного моего знакомого, который частенько по загранкам мотается, Delphi активно "исповедуют" только в России. В остальных странах она не пользуется популярностью.
Кто что думает по этому поводу ? Почему так ? И так ли это ?
Может просто за бугром программеры только супер проффесиональные, рождающиеся с Белой книгой в руках ?



Eduard   (2002-02-14 11:12) [1]

А что используют за бугром ?



Praco   (2002-02-14 11:12) [2]

Меня как-то подписали на разовую работу для англичан.
Требование было - Delphi 4.0, MS SQL 6.5
По ходу консультаций я понял, что у них были знатоки среднего уровня. По крайней мере, пытались советовать :))



Desdechado   (2002-02-14 11:24) [3]

если за бугром не "исповедуют", то это их проблемы :))

а если серьезно, то Borland не стала бы делать столько версий для халявных пользователей продукта в СНГ. Значит, можно поживиться, т.е. популярность есть.



MBo   (2002-02-14 14:10) [4]

на Базарной площади DelphiKingdom есть длиннющее обсуждение Subj



dimich   (2002-02-14 14:20) [5]

Лучше всегда то, на чем сам проги пишешь...вот мой ответ "солнцу"!!!!



Eduard   (2002-02-14 14:43) [6]

Вопрос в тему: а кто-нибудь знает, какие из широко известных программных продуктов написаны на Delphi ? Сильно сомневаюсь, что такие программы есть.



MBo   (2002-02-14 14:49) [7]

WinCommander и вроде The Bat.
Где-то видел приличный список



EAlexander   (2002-02-14 15:33) [8]

to Eduard>
Встречный вопрос - широко известные продукты - это продукты MS, Oracle, м.б IBM, SAP? - такие монстры не будут писать на Delphi - это понятно.
А какие еще известные продукты - многие программы бух. учета, инф. системы многих российских производителей - мы же не знаем их всех.

1. сама Delphi (даже Delphi 1.0 - наверно это был титанический труд);
2. первые версии J Builder, который лицензировал Oracle для своего J Developer"a
3. Многие Questовские продукты (SQL Navigator и т.п.) - средства для Ora, MS серверов;

P.S. слишком мало известны разработки Боинга для своих нужд и т.п. Мы же смотрим на Office, Windows и т.п. по ним нельзя ориентироваться.

P.P.S Delphi 1.0 - был смертельный проект Borland"a и если бы он провалился, то был ли сейчас Borland большой вопрос.



VuDZ   (2002-02-14 16:35) [9]

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



Eduard   (2002-02-14 16:50) [10]

>>EAlexander

Delphi 1.0 был написан на Cи, на Delphi на самом деле была написана только Delphi 3

Вот, собственно, мы и выяснили, что Delphi совершенно непригодна для создания серьезных программ. Поэтому она более популярна у нас, и совершенно непопулярна в других странах. Русские программисты не пишут программ, они их воруют у заграничных разработчиков :))



wicked   (2002-02-14 17:15) [11]

вот пара ссылок по теме:
http://www.optimalcode.com/
http://www-rab.larc.nasa.gov/nmp/fNMPapps.htm

кроме того, мне кажется, что delphi не настолько популярен, как, например, vc из-за того, что microsoft использует всяческие трюки для продвижения своих продуктов... например, значительные скидки на msvc для образовательных целей... умный ход, учитывая, что студенты после того, как выйдут за стены alma mater, будут использовать (и требовать, и покупать) то, что им уже знакомо и на чём они парились и сдавали лабораторки... :))
в политике borland (inprise) я такого не видел.... а жаль..
у нас же, из-за нашего рынка (точнее, его отсутствия.. :) более доступными всегда были продукты borland, на них мы и выросли... я даже англоязычный термин такой где-то видел - borlandites.... :)



EAlexander   (2002-02-14 17:19) [12]

to Eduard>
Извините, но кто вам сказал такую глупость по D1. Конечная компиляция была на D1, а не на C - возьмите дрейвний DFM-extractor - он вытащит вам от туда все формы. Посмотрите копирайт в exe. И далее, среда очень сильно интегрирована с компилятором - для работы инспектра объектов в некоторых местах требуется доступ к private секции, а это можно сделать если знать начинку dcu. Form Designer - работает очень близко общаясь с VCL и, самое главное, если написать свой эксперт и встроить ее в среду получаешь доступ к переменной Application - это Delphi со всеми ее методами, т.е. эксперт работает как часть самой среды.
м.б. компилятор был на С, но С для этого и сделан был - для системных вещей.



Юрий Зотов (M)   (2002-02-14 17:24) [13]

> Eduard © (14.02.02 16:50)

> Delphi 1.0 был написан на Cи,

Компилятор - да, скорее всего. И это естественно, потому что нельзя написать компилятор на том языке, компилятора с которого еще не существует.

А вот DCL (тогда так называлась VCL) и IDE были все же написаны на Delphi. Это следует из исходников DCL, а также из того, что уже в Delphi 1 Вы могли расширять среду своими компонентами, редакторами и экспертами.


> Delphi совершенно непригодна для создания серьезных программ.

1. Какие программы Вы называете "серьезными"?

2. Почему Delphi для них непригодна? Если только потому, что ее для них еще не использовали, то это, естественно, не довод.

3. Приведите, пожалуйста, пример серьезной программы, которую нельзя сделать на Delphi.



Fellomena   (2002-02-14 17:31) [14]

2 Юрий Зотов:
Я тоже не согласна с тем, что на Delphi нельзя серьёзные программы делать !
Но не могли бы вы мне объяснить почему Delphi, изначально по слухам, создаваемую, как средство для разработки БД, не используют для разработки этих самых БД ?
Двое моих знакомых-программистов занимаются программированием баз данных для разного рода организаций.
Один мне сказал, что пробовал делать всё на Buildere, и, что поначалу даже неплохо получалось, но когда проект разростал до больших размеров - работать с ним становилось не удобно и в результате мой знакомый вернулся к рукописанию (VC++)
А второй, когда я ему про Delphi говорю, журит меня по головке и с отеческой добротой говорит, что играйся мол пока, когда программировать начнёшь - приходи, помогу.
Вот такие дела.


У языка большие возможности, но, как я поняла, всерьёз его воспринимаем только мы - программирующие на нём 8(



copyr25   (2002-02-14 17:33) [15]

Ну уж нет! У буржуев Delphi оченна популярен.
http://www.lmc-mediaagentur.de/dpool/ -- куча факушек:))



PVOzerski   (2002-02-14 17:37) [16]

>> Delphi 1.0 был написан на Cи,

> Компилятор - да, скорее всего. И это естественно, потому что нельзя написать компилятор
> на том языке, компилятора с которого еще не существует.

Можно компилировать компилятор своей предыдущей версией. Именно так пишется FreePascal.
Но компилятор Delphi вроде бы все же написан на BC.
>> Delphi совершенно непригодна для создания серьезных программ.

IMHO, Object Pascal - достаточно универсальный язык, чтобы написать прикладную программу
любой сложности. Думаю, с извратами можно и драйвер написать, если целью задаться. VCL - штука
менее универсальная, но ведь и не обязательная.



EAlexander   (2002-02-14 17:39) [17]

to Fellimena<
Извиняюсь что влез, но когда вышла D1 - начало 1995 года, для баз были только Fox, Power builder и т.п. , т.е. все они были ТОЛЬКО для написания интерфейса к БД (удобно было писать SELECT, BROWSE прямо в тексте программы), а D1 предложила компоненты для доступа к БД, но там было еще много всего просто для разработки, а те средства (VB и VC), с которыми D1 сравнивали, не имели (практически) ничего для работы с данными.

P.S. в 1996 году читал в каком то журнале (типа Мир ПК), что Delphi - это плохая СУБД. Долго смеялся :)



Eduard   (2002-02-14 17:43) [18]

>>Юрий Зотов

"Серьезные программы" - программы уровня Adobe Premiere, 1С-Бухгалтерия, ABBYY Finereader и прочие, но уж никак не те, которые можно найти на какой-нибудь "моей личной маленькой страничке, на которую я выложил пару программ на Delphi с исходниками".

Delphi, может быть, и вполне пригодна для создания навороченных программ, но ведь никто на ней навороченные программы не пишет, так ?



copyr25   (2002-02-14 17:48) [19]

"Может просто за бугром программеры только супер проффесиональные, рождающиеся с
Белой книгой в руках ?"
...
Буржуи боятся программирования. Не плюйте в меня, не плюйте!
У них стиль другой. Там, если Вы нуждаетесь в программном продукте, обращаются
в "контору", там марксовское прогрессивное разделение труда - Билл делает рисунок,
Эд - музыку, а Фрэнк связывает всё воедино.
У нас таких фирм, раз, два и обчелся.
Поэтому "у нас" существуем мы - профессионалы-любители.
Кто сам без греха, пусть первым бросит в меня камень:))



EAlexander   (2002-02-14 17:53) [20]

to Eduard>
скажем так, три приведенне Вами программы совершенно разные по классу - Adobe Premiere - это множество математики, 1С - это ввод/вывод данных - вроде на VB (уж это точно можно на Delphi без проблем - такие же системы от Галактики, Экурана и т.д. существуют в большом количестве)
Finereader - математика (распознование) + красивый интерфейс также можно реализовать на Delphi

P.S. не надо ориентрировться о продукте, по тем вещам которые аВТОРЫ, научившись кидать кнопки на формы и делать TTable, считают КРУТЫМИ программами. на С++ большинство интефейсных вещей делать на много сложней и дольше, а конечный пользователь видит только интерфейс и ему все равно на чем написана программа, главное чтобы в срок и все работало.

P.P.S. предлагаю закончить спор, а то это перерасте в спор типа, что лучше C++ или Delphi, а это уже не серьезно :)



copyr25   (2002-02-14 17:56) [21]

Я тут сделал программку (я не хвалюсь, просто, как контраст буржуйским привычкам иллюстрирую:))
за 20, не, вру! За 35 мин. И тут же её продал за $200. Без налогов, за наличку. Зелеными.
А фирма-заказчик просто не знала, куда обращаться, чтобы заказать. Ну и Слава Богу:)))



Юрий Зотов (M)   (2002-02-14 18:00) [22]

> "Серьезные программы" - программы уровня ...1С-Бухгалтерия...
> ...но ведь никто на ней навороченные программы не пишет, так?

"Эльбрус Энтерпрайз".
Одна из версий "Паруса".
Это программы примерно того же класса, что и 1С. Написаны на Delphi. Можете не сомневаться - я был в этих командах.

Adobe Premiere, FineReader - почему подобные программы нельзя написать на Delphi? Что мешает? Ничто.

А на всяких "моих личных маленьких страничках" программулек на С и C++ Вы можете найти не меньше, чем на Delphi. И что из этого следует? Ничего.

Уверяю Вас - как инструмент, Delphi нисколько не хуже других и даже лучше очень многих. Лично мое мнение - это инструмент того же порядка, что и C++.

И еще уверяю Вас - дело не столько в инструменте, сколько в тех руках, которые его держат.



Vuk   (2002-02-14 18:02) [23]

>но ведь никто на ней навороченные программы не пишет, так ?
Любит у нас народ обобщать и делать глобальные выводы. Ну прямо хлебом не корми... :o)
Сходите, например, сюда:
http://www.automatedqa.com/products/index.asp
приложения там вполне серьезные. Догатайтесь с трех попыток, на чем оно писано. ;o)



Fellomena   (2002-02-14 18:04) [24]

2 copyr25: 200$ говоришь, за 35 мин. говоришь ;) Как та фирма называется - а ?
=)))



Фэ   (2002-02-14 18:06) [25]

С и Pascal были первыми языками для которых была решена проблема "курицы и яйца" - каждый из них был написан на самом себе же. Дельфи также написана на себе, это факт исторический.
Востребованность C/C++ не вызывает сомнений - "близость" к API, поддержка Microsoft. Опять же Intel-компилятор действительно оптимизирует код, почему - понятно.
Дельфи ориентирована была на БД и, как RAD средство, вполне подходила для небольших проектов. Но "мощность" языковых конструкций по работе с БД оказалась невелика. Достаточно хоть Fox для DOS или поздние релизы вспомнить(правда "мягкие" угробили его, вспомнить хотя бы идею Vb+VF).
В результате крупные проекты создаются на основе специализированного инструментария, в конечном итоге ориентированного на C++ и его классы, а реализация таких проектов на Дельфи требует значительно большего числа человеко-лет.



VuDZ   (2002-02-14 18:07) [26]

я тут недавно (часов 5 назад) помагал одному знакомому на дефли прогу доделывать (я ему и рекомендовал делфи для изучения - проще понять фичи ООП и пр.) и пришёл к выводу, что делфи можно сравнивать с С + lite OOP , но не с С++. не хватает кучи наворотов, типа STL (кто знает, тот поймёт)
MS продвигает скорее своё IDE, так как в большенстве случаев всё, что юзается от MS - IDE + headers. компилятор берётся сторонний (или интеловский для скорости или gcc или VectorC), STL - от SGI или STLPort. к тому же IDE дополняется обычно всякими наворотами типа VisualAssist и пр., так что говорить о том, что MS продвигает чисто свои продукты не совсем корректно. Если бы в VisualC нельзя было подклячать свой компилятор, то VC умербы очень рано, по причине слабой поддержки стандарта и кучи комментариев типа MS specific
когда вышли первые версии делфи, на западе были очень рады, так как многих убивала "сложность" С++, а переходить на VB мало кого прельщало. Delpi == VB killer, так и говорили.
но с тех пор, VB стал заточен чисто под быструю разработку интерфейса + (D)COM+, delphi - ну это вам лучше знать...
А С/С++ так и остался системным универсальным языком используемым в прикладных целях с неограниченной мощью по многим причинам.

ЗЫ на сколько мне известно, >70% выпускников западных универов зточены под VB :>
да, вот ещё - когда я учился, у нас преподавали паскаль, потом делфи, в других группах - С/С++, так что, ИМХО, изучаемый язык не главное



copyr25   (2002-02-14 18:08) [27]

Fellomena:)) Их пруд пруди. В столице т.е... Всем чего-то нужно!
Ищите и обрящите:))



NW   (2002-02-14 18:36) [28]

Поразмяться, что ли? Абажаю болтовню :-)))

>> EAlexander - клас шуточка! Delphi не только плохенькая СУБД, но и плохой язык программирования!

>> Юрий Зотов - большой привет самому лояльному человеку :-)))

Значит, так. На kingdom я встретил очень хорошую фразу, объясняющую, почему буржуям нужны программеры именно на С, причем чаще всего на MS VC++. (Хотя я бы буковку "V" убрал :-)) MS провела очень хорошую маркетингову политику, завалив рынок своими средствами разработки. Фирмы набрали специалистов, обучили их и начали работать. А потом появилась среда Delphi и язык Object Pascal. И приходит новый человек в фирму - конечно, от него будут требовать тоже знание C! Вот и все тут.

У нас же много маленьких фирм, которые могут и создаватьтся для выполнения одного проекта. А на Delphi визуальные программы писать намного легче, чем на VC, личный опыт. (На билдере не пробовал, не скажу). Для серверных частей, библиотек и т.п. аблолютно все равно, на каком языке и в какой среде они пишутся. (Правда, для переносимости лучше писать на С). Драйвера - только на C, так как DDK выдается производителем (я в основном про винду) для каждой версии операционки и пишеться на C.

Да, некоторая непопулярность ObjectPascal происходит от того, что производители (чего-либо), предоставляющие интерфейс к этому чему-либо, пишут заголовочные файлы именно на С, причем в неудобной для читания форме типа
void WINAPI GetValue(void *, long, long, char *);
так что переводить их на pascal не очень удобно.

>> Eduard

1С - серьезная программа??? Она просто большая. И раскрученная. Субъективное мнение. И, кстати, а на чем и в чем она написана?

А на Delphi лично в моей фирме "наворочено" уже 2 баа-а-альших программки (одна из них - управление предприятием). И продолжаем писать. Удобно, а самое главное, быстро! А VC стоит для буржуев. Они за это платят.



NW   (2002-02-14 18:42) [29]

>> copyr25

Как это не знала??? А я???
:-))))))))))



Suntechnic   (2002-02-14 18:52) [30]

Вы взгляните на проекты типа Adobe Premiere трезво, поключите свой опыт и сами поймёте почему так происходит...
В чём преимущество Делфи? Скорость клепания стандартных интерфейсов. Я подчёркиваю стандартных! Потому как если речь заходит о проектах типа Adobe Premiere, то стандартные решения наблюдаются только в диалоговых окнах, но это реализуется на VC ничуть не медленнее и не проще, чем на Делфи. А как же компоненты, спросите вы? А вы когда-нибудь пробовали искать сложный визуальный компонент под своё видение программы(сложный это не из цикла разноцветный лист-бокс). Если вы и находите подобное(что мало мало вероятно), то оно не всегда именно то, что вы хотите. А вы хотите именно это! Всё это заканчивается написанием своего компонента, но это отнимет столько же времени и на VC.
Второй аргумент, что в действительно больших проектах написание интерфесов отнимает мизерную часть времени. В проекте, скажем расчитанном на пол года, разница между тем, что вы на Делфи напишете за 15 мин, а я то же самое на VC за 2 часа, роли никакой играть не будет.
С визуальной средой я думаю объяснил подробно. Она в больших проектах никакой роли играть не будет, остаётся сам Object Pascal. Я не хочу обсуждать его хорошие и плохие стороны, но только то, что это корпоративный язык Борланда уже даёт ему 10 очков против С++.



NW   (2002-02-14 19:03) [31]

>> Suntechnic

А как быть с визуальным наследованием форм? Этого в MSVC нет



Suntechnic   (2002-02-14 19:27) [32]

>NW (14.02.02 19:03)
Это какое такое "визуальное" наследование?
И ещё... Я не собираюсь вступать в полемику кто сильнее слон или кит....



copyr25   (2002-02-14 19:31) [33]

NW? 1С-бухгалтерия, вероятно?
:@)



copyr25   (2002-02-14 19:37) [34]

Или "Парус", который устанавливает свои программы и одновременно заражает компы вирусом one half:))



NW   (2002-02-14 19:39) [35]

>> Suntechnic

Насчет полемики - А эта конференция разве не специально для такого? :-))) В первый раз решил потрепаться и уже ругают!

А вы, товарищ, вижу, с дельфой не работали. Так не нужно спорить :-)))



Suntechnic   (2002-02-14 19:53) [36]

>NW (14.02.02 19:39)
...ну товарищ... так и я могу полемику вести. Ляпнуть ерунду а потом сообщить всем, что они в неё не въехали, потому как с ней не работали.



NW   (2002-02-14 20:01) [37]

>Suntechnic

Мочему ерунду? :-(

Нарисовл красивый диалог, например. Можно с наворотами. Все базовые кнопки наставил. А потом от него все диалоги в программе и наследуешь. Единообразно, стильно и быстро. Это и есть визуальное наследование, т.е. наследование внешнего вида, причем в design-time. При работе с VC отсутствие этого меня сильно угнетает. Вот.



Suntechnic   (2002-02-14 20:13) [38]

NW (14.02.02 20:01)

Твоей анкеты на сайте нет, но судя по твоим постам ты ещё достаточно молод. Не принимай это как упрёк или в штыки. Все мы когда то были молодыми и думали что мир заканчивается за пределами школы, города и т.д. Но он гораздо богаче поверь мне. Я действительно не хочу сейчас вступать в глупую полемику, но когда-нибудь ты сам перечитаешь(или вспомнишь) свой пост от (14.02.02 20:01) и улыбнёшься.
Это был действительно дружеский совет и давай на этом закончим.



VuDZ   (2002-02-14 20:46) [39]


> Это и есть визуальное наследование, т.е. наследование внешнего
> вида, причем в design-time. При работе с VC отсутствие этого
> меня сильно угнетает.

взял скопировал ресур диалога и всё? в чём проблемы-то?
полемика, полемика...
сделайте как на делфи таую фишку:
есть класс ключ с некоторыми полями, в массиве он может быть ассоциирован с несколькими другими классами, т.е.:
Key1 -> Val1
-> Val2

Key2 -> Val1
Key3 -> Val1
-> Val2
-> Val3

так что не надо кричать о том, что на делфи можно сделать всё :>
лучше пообсуждайте собствено сабж



vuk   (2002-02-14 21:07) [40]

to VuDZ:
При желании все это легко реализуется. Я серьезно.
Я понимаю, что с STL это сделать гораздо проще(за счет шаблонов), но не надо преподносить как истину невозможность сделать это средствами OP и без шаблонов. :o)

P.S. У шаблонов, к стати говоря, не только плюсы имеются.



VuDZ   (2002-02-14 21:18) [41]

я понимаю. и умножение двух 128 битных чисел на 8 разрядном проце я делал когда очень надо было. но одно дело использовать то, что позволяет язык, его идеология, а другое дело изобретать велосипед.



kaif   (2002-02-14 21:36) [42]

Продвинутость C/C++ в США определяется только тем, что Государственный Комитет по C/C++ это здание размером с ООН. Страх перед государством, завтрашним днем, а также государственная политика США, не желающего зависеть от совершенно частной компании Borland приводят к тому, что C++ столь распространен в США. Понятно, что компании, "осваивающие" денежки государственных заказов вынуждены писать на С++. Напротив, независимые компании, средний и мелкий бизнес (а они как в США, так и в России создают около 90% рабочих мест) часто предпочитают работать на Delphi и рейтинги показывают, что продукты Borland (Delphi, C++ Builder и Java Builder) - самые покупаемые в мире.
Мало кто знает, что InterBase был принят военным ведомством США как основная и наиболее оптимальная СУБД по параметрам надежности, цены и качества. Хотя тут на форуме с трудом найдешь человека, который бы считал InterBase за "серьезный" продукт. Просто народ в России о себе много воображает, а серьезных программ не пишет. И думает, что если бы на C++ работал, то писал бы...
Если кто считает 1с за серьезную систему, то он просто с ней в жизни не сталкивался, значит. Один их интерпретатор, делающий 100тыс жалких циклов на моём компьютере в 650MHz чего стоит! А если считать критерием засилие продукта, то Visual Basic и MP3 player-ы - самый серьезный продукт на Земле!



vuk   (2002-02-14 21:36) [43]

>одно дело использовать то, что позволяет язык, его идеология, а
>другое дело изобретать велосипед.
Позвольте, если я на OP напишу класс все это дело реализующий, ну или не это, а там всякие коллекции-итераторы, то это будет средством для данного языка неестественным? Ерунда какая-то у Вас получается... Или Вы считаете, что эти вещи естественны только тогда, когда реализованы при помощи шаблонов?
У разных языковых средств разные подходы к решению схожих проблем и что в одном случае будет неестественным, в другом будет делаться легко и непринужденно. Хотите пример?

function CreateForm( ClassRef : TFormClass ) : TForm;
begin
Result := ClassRef.Create(Application);
end;

Смысл, надеюсь, понятен? Если нет, то поясню, что функция создает экземпляр класса, который ей передается в качестве параметра.
Сколько у Вас займет построение того же самого (по смыслу) на C++?




Suntechnic   (2002-02-14 21:53) [44]

>kaif © (14.02.02 21:36)
Вот тот, первый абзац твоего выступления, это была выдержка из доклада Лернида Ильича Брежнева XXIV съезду КПСС? Копирайт бы хоть поставил :)



VuDZ   (2002-02-14 21:53) [45]

sorry, я наверно в конец отупел к концу дня, так как не понял смысл этого примера... поясните, плиз



wicked   (2002-02-14 22:02) [46]

2 VuDZ ©
смысл простой.... тебе передаётся ссылка на класс формы, по которой создаётся форма.... если абстрагироваться, то всё просто.... а если представить, как это переведётся в код - жуть берёт..... :))



VuDZ   (2002-02-14 22:03) [47]

Вы это имели в виду:

class A
{
public :
A(int _i) {
i = _i;
};
~A(){
};
int i;
};

template <class T>
void func (T *&tt)
{
tt = new T(0xff);
}

void main()
{
A *a = NULL;
func(a);
}



VuDZ   (2002-02-14 22:04) [48]

PS а почему не сохраняется форматирование кода?



wicked   (2002-02-14 22:05) [49]

2 VuDZ ©
похоже.... но я не играю в language wars.... я вырос на pascal... так что он для меня почти родной язык... а всё остальное можно написать на ассемблере.... :)



VuDZ   (2002-02-14 22:07) [50]

слушай, объясни человеческим языком что делал тот кусок кода.
вызывает конструктор некоторого (или любого?) класса? или как...



vuk   (2002-02-14 22:07) [51]

Попробую... Мы хотим создать экземпляр класса, но какого конкретно, на момент компиляции мы не знаем - это определяется только в момент выполнения.
В C++ необходимо будет реализовывать фабрики классов, каждая из которых может создавать объекты определенного класса. Далее, я думаю, Вам должно быть понятно.

В Object Pascal это делается иначе, поскольку есть такая вещь, как ссылки на класс (метаклассы). Если есть ссылка на класс, можно свободно вызывать через нее методы класса и конструкторы. Вызов нужного конструктора обеспечивается за счет механизма виртуальных конструкторов. Кстати, на основе этого механизма вся VCL построена.
Как кто-то однажды сказал, в OP "любой класс сам себе фабрика", но это не совсем точно, поскольку возможности несколько шире.



wicked   (2002-02-14 22:10) [52]

vuk ©
браво.... вот что значит трезвая голова против пьяной....



VuDZ   (2002-02-14 22:18) [53]

мда, пива было много, но вроде я что-то понял (чуть больше эпсилона :> )
так а чем приведённый мной код не устраивает условию?


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

и чем это отличается от С++ ?



Suntechnic   (2002-02-14 22:21) [54]

>vuk © (14.02.02 22:07)
Всё правильно ты заметил про фабрики классов в С++, которые реализуют точно такой же механизм как ты описал в своём примере. В С++ понятие виртуальный конструктор отсутствует, но всё это запросто реализуется с использованием фабик классов(их именно и имеют ввиду когда говорят о виртуальных конструкорах в С++). Разница принципиальная лишь в том, что в Object Pascal за тебя это уже кто-то написал, а в С++ ты сам волен это сделать. Этот флейм (С++ vs. Object Pascal) стар как мир и ничего нового вы тут не придумаете, так что советовал бы вам на этом и закончить.
...я всегда говорил и опять повторяю, главное это башка на плечах, а используемый язык это дело вкуса... написать можно всё что угодно и на чём угодно...



vuk   (2002-02-14 22:23) [55]

to VuDZ:
>так а чем приведённый мной код не устраивает условию?
Класс на момент компиляции известен.



wicked   (2002-02-14 22:24) [56]

2 Suntechnic ©

> ....используемый язык это дело вкуса... написать можно всё что
> угодно и на чём угодно...

полностью поддерживаю..... руками и ногами... :) тем более, что и pascal не стоит на месте....



VuDZ   (2002-02-14 22:24) [57]

Так-с... я пшёл перечитывать классику, а то что-то я торможу
всех с наступившим и приятного вечера :>



vuk   (2002-02-14 22:30) [58]

to Suntechnic:
>Разница принципиальная лишь в том, что в Object Pascal за тебя
>это уже кто-то написал, а в С++ ты сам волен это сделать.
Разница принципиальная только в том, что это разные языки. А механизм ссылок на класс не имеет ничего общего с фабриками классов. Даже сходства нет. Просто это пример задачи которая решается в разных языках разными способами. О чем и шла речь. И никакого флейма. :o)

>...я всегда говорил и опять повторяю, главное это башка на
>плечах, а используемый язык это дело вкуса... написать можно
>всё что угодно и на чём угодно...
Вот под этим готов подписаться! :o)



Suntechnic   (2002-02-14 22:41) [59]

>vuk © (14.02.02 22:30)
Ну ты нудный :)

>А механизм ссылок на класс не имеет ничего общего с фабриками классов.

М-да... общего нет ничего, но задачи решают одинаковые... Так может всё-таки есть что-то общее или какое-то сходство?(ну исключая реализацию конечно) :)))
А вот в языках то как раз принципиальной разницы и нет. Они все до горя друг на дружку похожи, иначе не предназначались бы для одной и той же цели.



Vuk   (2002-02-14 22:49) [60]

>Так может всё-таки есть что-то общее или какое-то сходство?
Ага. Решаемая в данном случае задача. ;o) Но это к языку не относится.

>А вот в языках то как раз принципиальной разницы и нет.
Я имею в виду то, что это просто разные языки с разными языковыми средствами. Что-то есть в одном, что-то есть в другом. Не более того.



Suntechnic   (2002-02-14 22:57) [61]

>Vuk © (14.02.02 22:49)
Ну а я тебе о чём? :)



copyr25   (2002-02-14 23:04) [62]

Во Fellomena, заварила кашу:))



Oleg Gashev   (2002-02-14 23:05) [63]

Какая разница на чем писать? Главное, чтоб руки из мозгов росли:))

А мне на Delphi удобнее.

Chess Software Development Project: http://EcwChess.narod.ru



VuDZ   (2002-02-14 23:10) [64]

а мне на асме... приятней и понятней... и ни каких классов...



False_Delirium   (2002-02-15 02:11) [65]

Глава Sun Microsystems после поездки в Москву на пресс-коференции заявил : "Русские программисты в алгоритмизации оставили далеко позади все остальные страны. В то время как для повышения производительности мы улучшали вычислительные ресурсы(благо еть такая возможность), они разрабатывали новые алгоритмы."



VuDZ   (2002-02-15 03:38) [66]

продолжаем-с флейм:
class CBase
{
public:
virtual void Init(int n) = 0;
virtual ~CBase(){};
};

class CA : public CBase
{
void Init(int n)
{
printf("Class A - %i\n", n);
}
virtual ~CA(){};
};
class CB : public CBase{
void Init(int n)
{
printf("Class B - %i\n", n);
}
virtual ~CB(){};
};

CBase* create(void)
{
switch(rand()%2)
{
case 0: return new CA();
case 1: return new CB();
}
return NULL;
}

void Do(void){
CBase *ptr = create();
ptr->Init(rand());
}

void main()
{
Do();
Do();
Do();
Do();
Do();
Do();
Do();
getch();
}


для более сложных вариантов надо использовать нечто вроде CRuntimeClass, IsKindOf()



Andrey   (2002-02-15 11:38) [67]

Хотя переичсление "Серьезных программ" на Delphi вроде закончилось, мне хотелось бы вспомнить еще один проэкт
ЛИГА:ЗАКОН http://www.liga.kiev.ua/about/
написаный на Delphi

Приведу небольшую цитату:
"Сегодня системы ЛИГА:ЗАКОН успешно используют в Администрации Президента Украины, в Кабинете Министров Украины, в Национальном Банке Украины, в Государственной налоговой администрации, в различных министерствах и других органах исполнительной государственной власти и местного самоуправления Украины. Среди наших абонентов - многие иностранные представительства, посольства, многочисленные коммерческие структуры."

Организация в которой я работаю тоже пользуется Лигой. Мне только один раз удалось "свалить" Лигу и то только тогда когда я задался целью это сделать.



VuDZ   (2002-02-15 11:57) [68]

ну, то на сколько легко завалить софт есть показатель привизны/прямоты рук программёров,а не языка...



Andrews   (2002-02-15 12:00) [69]

> All

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



vuk   (2002-02-15 15:14) [70]

to VuDZ:
Это Вы к чему? :-/ В Вашем примере случайным образом создается либо экземпляр CA либо экземпляр CB. То есть все варианты создаваемых классов на момент компиляции, опять-таки, будут известны.



VuDZ   (2002-02-15 16:17) [71]

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



Юрий Зотов (M)   (2002-02-15 17:11) [72]

VuDZ © (15.02.02 16:17)

Все дело в ссылках на класс (метаклассах). Не на экземпляр класса, а на сам класс. Действительно мощная штука.

В примере vuk"а это параметр ClassRef. Вы передаете функции ссылку на любой класс, экземпляр которого Вы хотите создать, она вызывает конструктор именно этого класса и возвращает ссылку уже на экземпляр этого класса.

В более общем виде можно написать даже так:

function CreateAnyComponent
(AClass: TComponentClass; AOwner: TComponent): TComponent;
begin
Result := AClass.Create(AOwner)
end;

И пример использования:
EditForm := CreateAnyComponent(TForm, Application);
StringEditor := CreateAnyComponent(TEdit, EditForm);
TextEditor := CreateAnyComponent(TMemo, EditForm);



vuk   (2002-02-15 17:32) [73]

to VuDZ:
>то есть Вы хотите вызывать неизвестный конструктор неизвестного
>класса
Почти. Имеется в виду возможность вызова конкретного конструктора неизвестного класса. В Object Pascal есть виртуальные конструкторы (а также виртуальные метода класса). У них, как и у виртуальных методов экземпляра, при введении формируются ограничения на состав параметров.
Например, у TComponent есть такой виртуальный конструктор:

constructor Create( AOwner : TComponent ); virtual;

Классы-потомки перекрывают этот виртуальный конструктор для обеспечения своего правильного конструирования. И вот как раз такой конструктор и взывается. Наличие его гарантируется тем, как объявляется ссылка на класс и признаком виртуальности.

Поэтому, если ссылка на класс, определена так:
TComponentClass = class of TComponent;
то можно быть уверенным, что имея такую ссылку, можем вызывать вышеописанный конструктор.

Концептуально ссылки на класс можно считать метаклассами, то есть такими специальными классами, экземплярами которых являются обычные классы. В вышеописанном примере экземплярами метакласса TComponentClass можно считать TComponent и всех его наследников.



VuDZ   (2002-02-15 18:09) [74]

спасибо за объяснение.
я думаю ещё повоюем-с :>
(война - это единственное развлечение королей. доступное простым людям :> )
всего хорошего



vuk   (2002-02-15 18:12) [75]

to VuDZ:
Какая ж это война-то? Мне казалось просто пообщались и все...



VuDZ   (2002-02-15 18:14) [76]

ну да :)

PS война в хорошм смысле слова :), что бы выяснить некоторые моменты и пр.



iZEN   (2002-02-16 11:10) [77]

/** vuk © (14.02.02 22:07):
<...>Мы хотим создать экземпляр класса, но какого конкретно, на момент компиляции мы не знаем - это определяется только в момент выполнения.<...>
В Object Pascal это делается иначе, поскольку есть такая вещь, как ссылки на класс (метаклассы). Если есть ссылка на класс, можно свободно вызывать через нее методы класса и конструкторы. Вызов нужного конструктора обеспечивается за счет механизма виртуальных конструкторов.<...>
Как кто-то однажды сказал, в OP "любой класс сам себе фабрика", но это не совсем точно, поскольку возможности несколько шире.
*/

Я могу дополнить: "в OP "любой класс сам себе фабрика" только на этапе компиляции и последующего исполнению -- потом это уже не имеет значения, поскольку приложение откомпилировано, скомпоновано и "заморожено" в EXE-файл(использование для этого DLL требует разработки собственного "уникального" механизма Plug-in или же "Добро пожаловать в COM").

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

Например, можно воспользоваться механизмом явной загрузки класса и активации.

Пусть у нас имеется интерфейс:

public interface Figure {
public void draw(Canvas cnv);
}


Java-разработчику влом создавать классы фигур(точка, линия, окружность, овал, прямоугольник, полигон), реализующие интерфейс Figure. Поэтому он выпустил приложение БЕЗ графической библиотеки.
Что ж, если мне известен интерфейс Figure, то я могу без труда реализовать его для любой своей фигуры, а в программе указать её class-файл с кодом.

public class Circle implements Figure {
...
draw(Canvas cnv) {
cnv.drawOval(...);
}
...
}


А вот отрывок кода программы того программиста:

/** Редактор */
public class GraphEditor {
/*
* Метод, где в принципе неизвестен тип реальной фигуры
* на этапе компиляции
*/
private void paint(Figure f) {
f.draw(this.getCanvas());
}

/* "Точка входа" в приложение */
public static void main(String[] args) {
Editor ed = new Editor(..);

// Типичное использование авторских фигур:
//Oval ov = new Oval(..);
//Square sq = new Square(..);
//ed.paint(ov);//Вывод Овала
//ed.paint(sq);//Вывод Квадрата

/* Внимание! Динамическая загрузка класса и выполнение кода. */
try {
/*
* Загружаем любой новый класс,
* имя которого указано в параметрах командной строки.
* Например: args[0] содержит "mypackage.Circle"
*/
Class c = Class.forName(args[0]);

/*
* Создаём экземпляр класса...
*/
Object o = c.newInstance();

/*
* Нисходящее приведение типа к интерфейсу Figure...
*/
Figure etc = (Figure)o;

/*
* Рисуем фигуру...
*/
ed.paint(etc);//Вывод фигуры без перекомпиляции!!!

catch(Exception noex) {//Не обрабатываем для простоты
}
}
}


Я привёл только "вершину айсберга". В Java есть развитый Reflection API, методы которого могут "вытрясти" всю подноготную любого класса(представленного без исходника) и дать возможность "попользоваться" им по полной программе БЕЗ ПЕРЕКОМПИЛЯЦИЙ приложения.
Попробовали бы Вы проделать то же самое в приложении на ObjectPascal -- придётся свою Delphi писать...



Nemesis   (2002-02-16 13:02) [78]

>iZEN (16.02.02 11:10)
А это правда, что в Microsoft отказались от поддержки Java в XP?



iZEN   (2002-02-16 13:39) [79]

Да, правда!
Последняя MS JVM -- это урезаный аналог версии SunJRE1.1.4, использовалась до Windows 2000 включительно.
Так как сейчас на дворе уже не 1997 год, то использование Java1 не имеет большого значения даже в IE (из-за скудного набора API Java1 и низкого быстродействия). То есть MS давно отказалась от продвижения Java, а Java2 JVM они так и не выпустили.

Они[MS] её[Java] позиционируют в .Net как новый J++, легко переводящийся в C#, со всеми вытекающими отсюда ограничениями среды .Net и Java1.
А на сайте java.sun.com можно загрузить JRE последней версии под WindowsXP, ссылка: http://java.sun.com/getjava/download.html. Я пока не пробовал устанавливать JRE1.4 под WinXP, но версия JRE1.3.1 работает на ура (работают Java1/Java2-апплеты в IE6 и приложения в JAR-Executable запускаются из Проводника как EXE)..

Вот ещё цитаты :), Compulenta.ru:
1. "Компания Microsoft объявила о выходе бета-версии Java Language Conversion Assistant, программы для преобразования Java-кода в код C# для использования его на платформе .NET. Продукт полностью автоматизирован, интегрируется в Visual Studio .NET, следовательно, наследует все возможности этой среды разработки."
2. "Компания Halcyon Software ( http://www.halcyonsoft.com) объявила о выходе бета-версии iNET - первой коммерческой реализации технологии .Net на языке Java. В iNET входит утилита IL2JAVA, которая конвертирует программы из байт-кода (IL) .Net в байт-код Java, а также полную библиотеку классов .Net. "Разрабатываете под .Net, внедряете повсюду", - перефразировал слоган Java глава Halcyon Дон Си"



Nemesis   (2002-02-16 14:08) [80]

Вот так они (MS) борятся с тими, кто им неподвласны ...
Это и есть продвижение на рынок своих продуктов за счет чужих (Java). И где тут честный бизнес!



Delirium   (2002-02-16 15:09) [81]

На сколько мне известно ближайший конкурент Delphi по распространённости в мире - Visual Basic, за чем будущее выводы делайте сами, но есть некоторые сведения (источник к сожалению не могу найти) что Microsoft давно мечтает приобрести Borland и стать единственным монополистом на мировом рынке Development Tools. А так, в азиатских странах (в Китае, например) Delphi - лидер.



iZEN   (2002-02-16 15:50) [82]

Для Delirium.
Возможно Вы и правы, но ни VB, ни Delphi не занимают первых мест по распространённости, они просто стоят рядом(в некоторых странах).

Вот другой интересный факт: http://www.osp.ru/cw/2001/30/001_0t.htm
:)



Delirium   (2002-02-16 16:14) [83]

Одна из таких стран :)
http://www.pcworld.co.nz/pcworld/pcw.nsf/f2abee2df7582f36cc2569a4007e4ab9/bc99ae44d0602e1ecc256b17006bfe1d!OpenDocument



iZEN   (2002-02-16 16:28) [84]

Новая Зеландия...ню, ню :)




Страницы: 1 2 3 вся ветка
Форум: "Потрепаться";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.28;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.99 MB
Время: 0.104 c
1-90899           SergeyDon             2002-03-18 10:58  2002.03.28  
Проблема с DLL и MDI.


1-90962           bas                   2002-03-14 15:36  2002.03.28  
чтение данных из файла Excel


1-90968           Tadeush               2002-03-14 12:58  2002.03.28  
Focus


3-90756           SelfDestructor        2002-02-26 18:16  2002.03.28  
Тип поля, по которому осуществляется связь


3-90750           Елена                 2002-02-19 14:31  2002.03.28  
paradox.lck и pdoxusrs.lck