Форум: "Прочее";
Текущий архив: 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