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

Вниз

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

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

Наверх




Память: 0.7 MB
Время: 0.024 c
3-1200635835
Anatoly Podgoretsky
2008-01-18 08:57
2008.06.29
Несколько LEFT JOIN в Акцесс


15-1210778077
Fredy314
2008-05-14 19:14
2008.06.29
Вечно целая винда.


15-1210936135
Kolan
2008-05-16 15:08
2008.06.29
SQLite не может получить доступ на Висте, почему?


15-1210654618
Slider007
2008-05-13 08:56
2008.06.29
С днем рождения ! 13 мая 2008 вторник


15-1210709600
DillerXX
2008-05-14 00:13
2008.06.29
Есть ли нормальные Setup еры