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

Вниз

Филосовский вопрос   Найти похожие ветки 

 
Style ©   (2008-05-14 15:00) [120]


>
> Смеешься, откуда компилятор решит в каком наследнике ты
> решил перекрыть метод.
> А что делать с любителями TStrings.Create
>


Я не про компилятор.
Ну наверное надо бы для этого хранить в RTTI имена методов.
А для любителей TStrings.Create - писать более понятное сообщение "это Абстрактный класс"

В любом случае этого уже никто не сделает :)


 
Anatoly Podgoretsky ©   (2008-05-14 15:01) [121]

> DiamondShark  (14.05.2008 14:36:59)  [119]

С пятью, поскольку правилно ДРОВА


 
DiamondShark ©   (2008-05-14 15:01) [122]


> Anatoly Podgoretsky ©   (14.05.08 14:31) [117]
> > DiamondShark  (14.05.2008 14:21:54)  [114]
>
> А про классовые ссылки слышал?

И таки шо?
Это серьёзный повод оставить противоречивость в языке?

Вот почему-то в НЕТ есть и классовые ссылки, и абстрактные методы.
Однако ж, это не мешает получать и ошибку компиляции, при статическом инстанцировании, и рантайм исключение при динамическом инстанцировании абстрактных классов.


 
Zeqfreed ©   (2008-05-14 15:07) [123]

> Ega23 ©   (14.05.08 14:20) [113]

Есть какая-то принципиальная разница? Можно на любом языке переписать. И на Дельфи тоже. Количество строчек только чуть возрастет, качественно ничего не изменится.


 
oxffff ©   (2008-05-14 15:08) [124]


> DiamondShark ©   (14.05.08 15:01) [122]
>
> > Anatoly Podgoretsky ©   (14.05.08 14:31) [117]
> > > DiamondShark  (14.05.2008 14:21:54)  [114]
> >
> > А про классовые ссылки слышал?
>
> И таки шо?
> Это серьёзный повод оставить противоречивость в языке?
>
> Вот почему-то в НЕТ есть и классовые ссылки,


В .NET нет классовых ссылок.


 
Anatoly Podgoretsky ©   (2008-05-14 15:10) [125]

> DiamondShark  (14.05.2008 15:01:02)  [122]

Потому что хоть автор и тот же, но НЕТ вариант он писал позже, тоже и про его последователей.


 
Anatoly Podgoretsky ©   (2008-05-14 15:11) [126]

> DiamondShark  (14.05.2008 15:01:02)  [122]

Кстати это не в коем случае не должна быть ошибка компиляции, максимум предпреждение, или даже совет.


 
DiamondShark ©   (2008-05-14 15:54) [127]

Удалено модератором


 
Palladin ©   (2008-05-14 15:59) [128]

Удалено модератором


 
DiamondShark ©   (2008-05-14 16:05) [129]


> Anatoly Podgoretsky ©   (14.05.08 15:10) [125]
> > DiamondShark  (14.05.2008 15:01:02)  [122]
>
> Потому что хоть автор и тот же, но НЕТ вариант он писал
> позже, тоже и про его последователей.

Это уже прикладная конспирология. Чем он там руководствовался на самом деле мы теперь только гадать можем.

Но всё равно, как ни крути, раздолбайство и получается.
В Ц++, который всяко раньше Дельфи появился, абстрактные классы инстанциировать нельзя.
Так что повод задуматься был.


> Anatoly Podgoretsky ©   (14.05.08 15:11) [126]
> > DiamondShark  (14.05.2008 15:01:02)  [122]
>
> Кстати это не в коем случае не должна быть ошибка компиляции,
>  максимум предпреждение, или даже совет.

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

Кстати, варнингов быть не должно вообще. 99% варнингов -- это грубые логические ошибки. Генерить такой исполняемый код бессмысленно, он всё равно в рантайме свалится.


 
oxffff ©   (2008-05-14 16:09) [130]

Удалено модератором


 
DiamondShark ©   (2008-05-14 16:17) [131]


> oxffff ©   (14.05.08 16:09) [130]

А нафиг мне перед тобой что-то подкреплять?

Помедетируй над тем, к чему вообще Podgoretsky упомянул классовые ссылки.
Как дойдёт, так у тебя и все вопросы отпадут, и желание вязяться к словам.


 
Palladin ©   (2008-05-14 16:19) [132]


> oxffff ©   (14.05.08 16:09) [130]

кстати, а как подобное в .NET, например в синтаксисе C#, реализуется? тоесть, аналог, в делфи, инстанцирования объекта по классовой ссылке с виртуальным конструктором

я не докапываюсь, просто я в .NET не искушен, только только под стол пешком хожу )


 
DiamondShark ©   (2008-05-14 16:23) [133]


> Palladin ©   (14.05.08 16:19) [132]
> > oxffff ©   (14.05.08 16:09) [130]
>
> кстати, а как подобное в .NET, например в синтаксисе C#,
>  реализуется? тоесть, аналог, в делфи, инстанцирования объекта
> по классовой ссылке с виртуальным конструктором

Activator.CreateInstance, как вариант. Есть и другие.

Виртуальность конструктора, как понятно, при таком подходе не требуется.


 
Игорь Шевченко ©   (2008-05-14 16:24) [134]


> кстати, а как подобное в .NET, например в синтаксисе C#,
>  реализуется? тоесть, аналог, в делфи, инстанцирования объекта
> по классовой ссылке с виртуальным конструктором


Э...через reflection и Activator.CreateInstance


 
oxffff ©   (2008-05-14 16:34) [135]


> Palladin ©   (14.05.08 16:19) [132]


Прямых IL инструкций для этого нет.
Достигается вызовом библиотеки .NET и передачей объекта типа
и параметров конструктора.


 
Palladin ©   (2008-05-14 16:36) [136]

мда... до туда я еще не дочитал ).. не буду торопить события...


 
oxffff ©   (2008-05-14 16:37) [137]


> я не докапываюсь, просто я в .NET не искушен, только только
> под стол пешком хожу )


Да я тоже, все читаю читаю про .NET.
Но блин как то не тянет. Хотя искушение есть.
Но по большей части из-за приятных языковых конструкций С# и Oxygene.


 
Palladin ©   (2008-05-14 16:38) [138]


> Но по большей части из-за приятных языковых конструкций
> С#

та же фикня...


 
oxffff ©   (2008-05-14 16:40) [139]


> Palladin ©   (14.05.08 16:36) [136]
> мда... до туда я еще не дочитал ).. не буду торопить события.
> ..


Рихтера можно для начала почитать.
Всех остальных в топку (Ватсоны, Шмансоны, Шилд и др.)

НО!!! рекомендую ECMA 335 и Expert .NET IL Assembler.


 
Palladin ©   (2008-05-14 16:41) [140]


> Рихтера можно для начала почитать.

а я его и читаю... просто поискал по ключевым словам ответов, смотрю это дело у него обсуждается на ~480 странице... а я еще дальше ~120 не ушел :)


 
DiamondShark ©   (2008-05-14 17:07) [141]


> Expert .NET IL Assembler.

А это зачем?! Во всяком случае, для принятия решения "а стоит ли?".
Всё равно что выбирая: "Писать ли мне на Дельфи, или может на Ц++ остаться?" -- начать читать х86 ассемблер.


 
oxffff ©   (2008-05-14 17:16) [142]


> DiamondShark ©   (14.05.08 17:07) [141]


У меня после прочтения стало выстраиваться более точное представление работы .NET. А соблазна перейди на .NET стало меньше.


 
oxffff ©   (2008-05-14 17:18) [143]

>oxffff ©   (14.05.08 17:16) [142]

Скорее на C++\Managed C++.

Подождем Tiburon.


 
Palladin ©   (2008-05-14 17:18) [144]


> Подождем Tiburon.

что за зверь?


 
Дмитрий С   (2008-05-14 17:41) [145]


> а за это больно бьют по нежным местам... ЮЗ, помню, хорошо
> рассказывал, за, помоему, $10 за warning и 5$ за hint. уважам"с
> и однозначно одобрям"c.

А как же например?
Symbol "<element>" is specific to a platform ?

------------------
В Си запрещено создавать экземпляры абстрактного класса на этапе компилирования? Или запрещено даже в качестве типа переменной использовать?


 
Palladin ©   (2008-05-14 17:46) [146]


> Symbol "<element>" is specific to a platform ?

это к Юре


> В Си запрещено создавать экземпляры абстрактного класса
> на этапе компилирования?

там вообще запрещено классы объявлять :)


 
Игорь Шевченко ©   (2008-05-14 17:48) [147]


> А как же например?
> Symbol "<element>" is specific to a platform ?


{$WARN SYMBOL_PLATFORM OFF}

Все эти Platform-specific после смерти Kylix годятся разве что в кунсткамеру


 
DiamondShark ©   (2008-05-14 18:40) [148]


> Или запрещено даже в качестве типа переменной использовать?

Использовать в качестве типа переменной -- это и есть создавать экземпляры.
Разрешено использовать в качестве типа указателя.


 
Юрий Зотов ©   (2008-05-14 19:15) [149]

> KSergey ©   (14.05.08 11:40) [99]

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

+100.

1. Олег (Ega23) - обрати внимание на эти слова. Когда твоим продуктом станет не end-user application, а что-то вроде VCL (пусть даже и сильно меньшего масштаба) - тогда ты оценишь полезность abstract.

2. На строке AbstractClass.Create() компилятор выдает предупреждение. Для тех, кто соблюдает культуру программизма этого вполне достаточно. А те, кто не соблюдает, все равно налепят ошибок - если не здесь, так в других местах. Поэтому что-то там запрещать - особого смысла не имеет. Достаточно предупредить.


 
Ega23 ©   (2008-05-14 19:24) [150]


> Когда твоим продуктом станет не end-user application, а
> что-то вроде VCL (пусть даже и сильно меньшего масштаба)
> - тогда ты оценишь полезность abstract.


Ну возможно. Я думаю, мы по этому поводу ещё приватно поговорим...  :)


 
Юрий Зотов ©   (2008-05-14 19:33) [151]

> Ega23 ©   (14.05.08 19:24) [150]

На рыбалке?
:о)))))))))


 
Anatoly Podgoretsky ©   (2008-05-14 21:24) [152]

> DiamondShark  (14.05.2008 16:05:09)  [129]

Так и в Дельфи тоже, абстрактные классы инстанциировать нельзя.
Но мы то не про классы, а про методы, а это разные вещи.


 
Ega23 ©   (2008-05-14 21:45) [153]


> Юрий Зотов ©   (14.05.08 19:33) [151]
>
> > Ega23 ©   (14.05.08 19:24) [150]
>
> На рыбалке?
> :о)))))))))
>


Это через полтора месяца. Я думаю 28 мая... :)


 
Loginov Dmitry ©   (2008-05-14 22:41) [154]

> А зачм в Delphi нужна директива abstract? В чём её прелесть?
>


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


TTerminalDriver = class
public
 function GetVersion: Integer; virtual; abstract;
 procedure Config; virtual; abstract;
 function GetData: OleVariant; virtual; abstract;
end;


Для взаимодействия с каждым типом терминала (у каждого производителя будет свой протокол) удобно располагать код в DLL (по одной DLL для каждого типа терминала). В каждой DLL есть тот же класс, но без директивы "abstract", т.е. реализация необходимой функциональности. В каждой DLL экспортируется одна функция "InitDriver", в которой создается объект класса TTerminalDriver и возвращается в виде результата. Остальное думаю понятно - что один драйвер, что десять, для приложения разницы нет никакой. При разработке новой DLL не нужно изменять старые и т.д. Одна особенность: новые функции добавляются всегда в конец класса, при этом увеличивается номер версии.
Того же можно достичь и массой других способов, но этот - самый краткий (короче уже просто некуда) и простой.


 
Palladin ©   (2008-05-14 22:48) [155]

только некорректный...


 
ketmar ©   (2008-05-14 22:54) [156]

>[154] Loginov Dmitry © (2008-05-14 22:41:00)
а ещё за вынесение классов в DLL надо бить канделябром. чтобы в следующий раз неповадно было.

---
Understanding is not required. Only obedience.


 
Palladin ©   (2008-05-14 23:03) [157]

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

но, хозяйкам на заметку, устал уже говорить, замена dll на bpl все решает :)

ну или ручное инстанцирование в dll общих rtti и мм по образу и подобию bpl


 
Loginov Dmitry ©   (2008-05-14 23:12) [158]

> а ещё за вынесение классов в DLL надо бить канделябром.
> чтобы в следующий раз неповадно было.


Канделябр сломаешь :)


 
ketmar ©   (2008-05-14 23:25) [159]

>[157] Palladin © (2008-05-14 23:03:00)
>замена dll на bpl все решает :)
кроме того, что ничем иным как дельфой они не делаются. отсюда я и говорю, что нефиг специфические вещи в DLL пихать.

---
Understanding is not required. Only obedience.


 
Loginov Dmitry ©   (2008-05-14 23:33) [160]

> что нефиг специфические вещи в DLL пихать.


жалко что ли?



Страницы: 1 2 3 4 5 вся ветка

Форум: "Прочее";
Текущий архив: 2008.06.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.81 MB
Время: 0.045 c
2-1212467689
кот
2008-06-03 08:34
2008.06.29
целое число


3-1201096350
Gklbery
2008-01-23 16:52
2008.06.29
динамический use


2-1212174519
Pi:=3.14...
2008-05-30 23:08
2008.06.29
Переход к запускному файлу


2-1212396147
Сергей
2008-06-02 12:42
2008.06.29
Как взять все записи четные пяти?


4-1192313033
snoopy
2007-10-14 02:03
2008.06.29
Handle на все принтеры установленные в системе





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский