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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.83 MB
Время: 0.029 c
6-1189422268
__DATA__
2007-09-10 15:04
2008.06.29
Получение параметров HTML формы в TIdHTTPServer


2-1212491944
ZENsan
2008-06-03 15:19
2008.06.29
Interface...


3-1201080222
Sairex
2008-01-23 12:23
2008.06.29
Добавление картинки в БД (BDE)


15-1210451486
Германн
2008-05-11 00:31
2008.06.29
Любимая операционная система NASA


2-1212566516
n_sch
2008-06-04 12:01
2008.06.29
Строковые функции