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

Вниз

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

 
ketmar ©   (2008-05-14 09:52) [80]

>[79] -koha (2008-05-14 09:43:00)
>за 30 кб. деньги вообще не нужны это бесплатно раздается, ну а если не
>хотят брать, всеравно ведь в впарят!

за примерно 10 лет сидения в винде безо всяких дурацких антивирусов ещё никому не удалось. ЧЯДНТ?

---
Understanding is not required. Only obedience.


 
Anatoly Podgoretsky ©   (2008-05-14 10:03) [81]

> -koha  (14.05.2008 09:43:19)  [79]

Ну так и раздавай, а нам кушать хочется и семью кормить.


 
KSergey ©   (2008-05-14 10:12) [82]

> Anatoly Podgoretsky ©   (14.05.08 10:03) [81]
> Ну так и раздавай, а нам кушать хочется и семью кормить.

Все о себе да о себе
А пионерам-то как быть? Кто о них позаботится??


 
Ega23 ©   (2008-05-14 10:13) [83]


> А пионерам-то как быть? Кто о них позаботится??


Пьяная, помятая
Пионервожатая

:)))


 
ketmar ©   (2008-05-14 10:15) [84]

>[82] KSergey © (2008-05-14 10:12:00)
>А пионерам-то как быть? Кто о них позаботится??
Вивисекторская Лаборатория имени Морро-Менгеле. вне очереди.

---
Understanding is not required. Only obedience.


 
Ega23 ©   (2008-05-14 10:17) [85]

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


 
pasha_golub ©   (2008-05-14 10:22) [86]


> Ega23 ©   (14.05.08 10:17) [85]

Вот странно. Ты ж вроде классов плодил. Неужто не встретилась необходимость?


 
Alkid ©   (2008-05-14 10:22) [87]


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

Короче, в ДЕЛЬФИ БОЛЬШОГО смысла использовать abstract нету, ибо реально он программиста на этапе компиляции НИ К ЧЕМУ НЕ ОБЯЗЫВАЕТ.
Если говорить о других языках, где на понятия абстрактного метода и абстрактного класса накладываются более жёсткие ограничения (в частности, невозможность создать экземпляр абстрактного класса), то там смысл есть.


 
Palladin ©   (2008-05-14 10:23) [88]


> Ega23 ©   (14.05.08 10:17) [85]

То есть, все таки склоняешься, к реализации метода, который только и будет заниматься тем, что исключение возбуждать?


 
pasha_golub ©   (2008-05-14 10:27) [89]

Вот такая еще штука может быть для забывчивых:

TMyClass = class
procedure My; virtual;
end;

..

procedure TMyClass.My;
begin
{$MESSAGE WARN "ДЯДЯ, не забудь меня определить по-людски"}
end;


А чтобы было вообще на этапе компиляции, например, при передаче кода сотруднику:

procedure TMyClass.My;
begin
{$MESSAGE FATAL "ДЯДЯ, пока не определишь не буду работать! Вот!"}
end;


 
TUser ©   (2008-05-14 10:33) [90]

Afaik, во времена Borland Pascal такой директивы не было, а вызывали какое-то специальное исключение в методе, который нельзя вызывать, если он не перекрыт. Но написать abstract проще ведь, чем raise AnyException.Create (); да и идеология у паскаля всегда была - все ошибки, которые можно найти на этапе компиляции, надо найти на этапе компиляции. А вызывать этот raise - это в другую сторону, в сторону гибкости языка, совершенно лишней в данном случае.


 
Ega23 ©   (2008-05-14 10:42) [91]


> Вот странно. Ты ж вроде классов плодил. Неужто не встретилась
> необходимость?


Плодил, пложу и буду плодить. Что такое директива abstract и как она работает (и, собственно, зачем нужна в теории) - прекрасно понимаю.
Но вот заметил интересную вещь - не использую на практике. Делаю в базовом классе виртуальный метод с пустым телом. И тупо не вижу смысла в практическом применении.


 
Ega23 ©   (2008-05-14 10:43) [92]

Вот если бы Delphi не позволял создать абстрактный класс - вот тогда да, тогда вся мощь абстрактных методов сразу проявляется. А так - не заметил warning, а он тебе бах - и abstract error.


 
Palladin ©   (2008-05-14 10:46) [93]


> А так - не заметил warning

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


 
oxffff ©   (2008-05-14 11:05) [94]

I>
Ega23 ©   (14.05.08 10:42) [91]
> Делаю в базовом классе виртуальный метод с пустым телом.


Когда ты объявляешь абстрактный метод, то тело-заглушка разделяется между всеми абстрактными методами.

А если ты объявляешь несколько пустых виртуальных, то на каждый фомируется свое тело.

-> Вывод я надеюсь понятен.


 
Ega23 ©   (2008-05-14 11:22) [95]


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


Ну вот это вот реальный довод.


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


Был вынужден использовать библиотеку, сделанную не мной, но содержащую действительно хороший набор различных функций. Выдавала 90+ warning-ов и 200+ хинтов. Переписывать было нельзя (точнее было сказано: "Хочешь - переписывай, но это время тебе никто не оплатит").
Заметить в этом зоопарке конкретный warning - было крайне проблематично. Сейчас стараюсь писать без хинтов и варнингов, но это получается при условии, что всё пишу сам.


 
KSergey ©   (2008-05-14 11:34) [96]

Эффект от использования ламмерских библиотек может быть сильно отрицательным, не смотря на красивость обертки.


 
Ega23 ©   (2008-05-14 11:36) [97]


> Эффект от использования ламмерских библиотек может быть
> сильно отрицательным, не смотря на красивость обертки.


Юнит писался бывшим шефом со всеми вытекающими.  :)


 
pasha_golub ©   (2008-05-14 11:40) [98]


> Ega23 ©   (14.05.08 11:36) [97]


> Юнит писался бывшим шефом со всеми вытекающими.  :)

Да хоть затекающими. :) Ворнинги - это зло.


 
KSergey ©   (2008-05-14 11:40) [99]

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


 
Ega23 ©   (2008-05-14 11:43) [100]


> Да хоть затекающими. :) Ворнинги - это зло.


А кто спорит? Но жизнь - она не чОрная и не белая. И даже не серая. Там больше, чем RGB  :)


 
Style ©   (2008-05-14 12:38) [101]

Абстрактные классы это все конечно нужно ) Но вот одного не пойму, не ужели не могли сделать сообщение об ошибке абстрактных методов более подробным - т.е. "Abstract Error - не перекрыт такой-то там метод". А то "кучу" полезной информации несет в себе сообщение "Abstract Error", с таким же успехом могли бы и послать куда-нибудь разработчика 8-)


 
ketmar ©   (2008-05-14 12:42) [102]

>[101] Style © (2008-05-14 12:38:00)
ну так куда-нибудь и послали.

---
Understanding is not required. Only obedience.


 
Style ©   (2008-05-14 12:48) [103]


> ну так куда-нибудь и послали.


именно так я и воспринимаю данное сообщение )


 
ketmar ©   (2008-05-14 12:50) [104]

>[103] Style © (2008-05-14 12:48:00)
нормальная очередная фича дельфи, которую придумали, но не доделали.

---
Understanding is not required. Only obedience.


 
Anatoly Podgoretsky ©   (2008-05-14 13:40) [105]

> Palladin  (14.05.2008 10:46:33)  [93]

Что же тогда у него делают за Error


 
Anatoly Podgoretsky ©   (2008-05-14 13:41) [106]

> Ega23  (14.05.2008 11:36:37)  [97]

Вот поэтому и бывший.


 
Anatoly Podgoretsky ©   (2008-05-14 13:43) [107]

> Style  (14.05.2008 12:38:41)  [101]

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


 
Ega23 ©   (2008-05-14 13:46) [108]


> А что делать с любителями TStrings.Create


Запретить создание абстрактных классов на этапе компиляции.
И никто не уйдёт обиженным.


 
Palladin ©   (2008-05-14 13:46) [109]


> Anatoly Podgoretsky ©   (14.05.08 13:40) [105]

эцых с гвоздями на час :)


 
Palladin ©   (2008-05-14 13:49) [110]


> Ega23 ©   (14.05.08 13:46) [108]

представляешь на что ты разрабочиков делфи подпрягаешь? :)

Type
TBaseCClass=Class of TBase;
TBase=Class
 Public
  Procedure a; Virtual; Abstract;
  Procedure b; Virtual; Abstract;
End;

TPre=Class(TBase)
 Public
  Procedure a; Override;
End;

TCompleted=Class(TPre)
 Public
  Procedure b; Override;
End;

var
c:TBaseClass;
begin
c:=GetNeededClass;
cc:=c.Create;
Try
 cc.a;
Finally
 cc.free;
End;
end;


 
Palladin ©   (2008-05-14 13:51) [111]

на обучение компилятора общения с астралом ) бо класс определится только в RT )


 
Zeqfreed ©   (2008-05-14 14:04) [112]

Ну вот. Так и знал, что [42] было просто взятием на понт. Только не понятно зачем игнорировать напрочь.


 
Ega23 ©   (2008-05-14 14:20) [113]


> Ну вот. Так и знал, что [42] было просто взятием на понт.
>  Только не понятно зачем игнорировать напрочь.


мы же за Delphi говорим, а не за Питон...


 
DiamondShark ©   (2008-05-14 14:21) [114]


> Ega23 ©   (13.05.08 20:43)  
> А зачм в Delphi нужна директива abstract? В чём её прелесть?
>  Почему не сделать виртуальный метод с пустым телом

Пототому что абстрактный метод и пустой метод -- это разные вещи.

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


 
DiamondShark ©   (2008-05-14 14:26) [115]


> Ega23 ©   (13.05.08 20:58) [7]
>
> Тогда уж проще действительно интерфейс объявить, без реализации
> его методов ты и не скомпилируешься...

А куда при этом коде реюз пойдёт?

TSortedList = class
procedure Add(item: TObject);
function Compare(item1, item2: TObject): integer; virtual; abstract;
end;

procedure TSortedList.Add;
begin
 //  тут ищем куда впердолить элемент, используя Compare
end;


 
Ega23 ©   (2008-05-14 14:27) [116]


> Пототому что абстрактный метод и пустой метод -- это разные
> вещи.


Да знаю я...


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


Вот и мне непонятно. Сказал "А", скажи и "Б".


 
Anatoly Podgoretsky ©   (2008-05-14 14:31) [117]

> DiamondShark  (14.05.2008 14:21:54)  [114]

А про классовые ссылки слышал?


 
Anatoly Podgoretsky ©   (2008-05-14 14:33) [118]

> Ega23  (14.05.2008 14:27:56)  [116]

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


 
DiamondShark ©   (2008-05-14 14:36) [119]


> Германн ©   (14.05.08 02:00) [61]
> Гложет меня смутное сомнение, что "ПионЭры" вообще ничего
> не пишут!

На заборах они пишут. Слово "МИР" с тремя ошибками.


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


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


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

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



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

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

Наверх




Память: 0.68 MB
Время: 0.048 c
15-1210745245
pasha_golub
2008-05-14 10:07
2008.06.29
Нарезалка DVD CD


8-1182504859
@!!ex_
2007-06-22 13:34
2008.06.29
Зацикливание в fmod.


2-1212497805
MegaVolt
2008-06-03 16:56
2008.06.29
Как сделать прокрутку ListView колесиком?


2-1212522851
DJ_UZer
2008-06-03 23:54
2008.06.29
Color To Html


11-1190533216
MTsv DN
2007-09-23 11:40
2008.06.29
KOL v.2.80 (UNICODE)





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