Конференция "Прочее" » Филосовский вопрос
 
  • Ega23 © (13.05.08 20:43) [0]
    А зачм в Delphi нужна директива abstract? В чём её прелесть? Почему не сделать виртуальный метод с пустым телом в базовом классе, как это в TDataLink сделано?
  • -Koha (13.05.08 20:45) [1]

    > Ega23 ©   (13.05.08 20:43)

    С..с..с..с..! - однозначно военная тайна.
  • Юрий Зотов © (13.05.08 20:47) [2]
    Например, чтобы ОБЯЗАТЬ потомков перекрывать этот метод (потому что с пустым методом класс неработоспособен), а компилятор получил возможность ругаться на неперекрытый метод.
  • Ega23 © (13.05.08 20:48) [3]

    > С..с..с..с..! - однозначно военная тайна.


    Не, серьёзно. Абстрактный класс в Delphi оздать можно. При переопределении абстрактного метода по Ctrl + Shift + C эта сволочь inherited автоматом ставит и если забудешь убрать - abstract error
    Одни расстройства...
  • Ega23 © (13.05.08 20:50) [4]

    > Например, чтобы ОБЯЗАТЬ потомков перекрывать этот метод
    > (потому что с пустым методом класс неработоспособен), а
    > компилятор получил возможность ругаться на неперекрытый
    > метод.


    А зачем? Юр, ну вот реальный пример приведи? Я серьёзно не понимаю, в чём такая офигенная польза.
  • Джо © (13.05.08 20:55) [5]
    > [4] Ega23 ©   (13.05.08 20:50)
    > А зачем? Юр, ну вот реальный пример приведи? Я серьёзно
    > не понимаю, в чём такая офигенная польза.

    Ну, например, разработал я базовый интерфейс (абстрактный класс) и отдал его сотруднику, чтобы плодил он потомков по образу и подобию. Если не реализует какой-то из методов, коий обязательно должен быть реализован — компилятор ему быстро об этом напомнит :) Примерно так.
  • Palladin © (13.05.08 20:57) [6]

    > Ega23 ©   (13.05.08 20:50) [4]

    реальный? :) обостренная болезнь создать экземпляр TStrings :)
    задумайся
  • Ega23 © (13.05.08 20:58) [7]

    > Ну, например, разработал я базовый интерфейс (абстрактный
    > класс) и отдал его сотруднику, чтобы плодил он потомков
    > по образу и подобию. Если не реализует какой-то из методов,
    >  коий обязательно должен быть реализован — компилятор ему
    > быстро об этом напомнит :) Примерно так.


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

    > реальный? :) обостренная болезнь создать экземпляр TStrings :)
    > задумайся


    А чё задумываться? Я же говорю, я бы не задавал вопросов, если бы в Delphi отсутствовала возможность создания абстрактного класса. Но она же есть! И как раз из-за неё все эти болезни по созданию TStrings
  • Юрий Зотов © (13.05.08 21:02) [9]
    > Ega23 ©   (13.05.08 20:50) [4]

    type
     TAnyFigure = class(...)
       ...
     public
       procedure Draw; virtual; abstract;
       ...
     end;

     TCircle = class(TAnyFigure)
       ...
     public
       procedure Draw; override; // Рисует круг
       ...
     end;
     
     TRectangle = class(TAnyFigure)
       ...
     public
       procedure Draw; override; // Рисует прямоугольник
       ...
     end;


    Если метод Draw абстрактный и программист забыл его перекрыть, то он получит вразумительный Abstract Error.

    Если же метод Draw сделать пустым и программист забудет его перекрыть, то он будет ломать голову, почему это у него ничего не рисуется.

    Это простой пример. Программист увидит, что ничего не рисуется и быстро поймет в чем дело. Но что было бы, если бы метод выполнял НЕвизуальную работу? Это ж еще обнаружить надо, что она не выполняется.
  • Джо © (13.05.08 21:05) [10]
    > [7] Ega23 ©   (13.05.08 20:58)
    > Тогда уж проще действительно интерфейс объявить, без реализации
    > его методов ты и не скомпилируешься...

    Проще или нет — это только от задачи зависит. Вот (несколько надуманный) пример:

     TDataProcessor = class
     protected
       function GetSource: string; virtual; abstract;
       procedure Process;
     end;

    ...

    procedure TDataProcessor.Process;
    begin
     ...
     DoSomething (GetSource());
     ...
    end;


    Здесь в базовом классе уже заложена некая базовая функциональность. Потомки обязаны реализовать некоторые специфичные методы (в данном случае GetSource). Если таковых методов немало — то очень удобно, что компилятор сам проконтролирует их реализацию.
  • Юрий Зотов © (13.05.08 21:07) [11]
    > Ega23 ©   (13.05.08 20:58) [7]

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

    1. Но тогда придется реализовывать ВСЕ, а не один метод. Зачем?

    2. Абстрактные методы в Delphi появились раньше интерфейсов.
  • Palladin © (13.05.08 21:07) [12]

    > Ega23 ©   (13.05.08 21:00) [8]

    Ладно, по аналогии с Юрием

    TCommandClass=Class of TCommand;
    TCommand=Class
    Public
     Constructor... ; Virtual;
     Procedure Execute; Virtual; Abstract;

    и далее наследники с перекрытием... пользователи могут создавать класс по ссылке и вызывать Execute
  • Игорь Шевченко © (13.05.08 21:09) [13]
    ну вот уже и про ТStrings сказали :)


    > Почему не сделать виртуальный метод с пустым телом в базовом
    > классе


    Это хорошо, если ничего не рисует, это не страшно. Гораздо хуже, если ничего не считает :) Например долгов...
  • -koha (13.05.08 21:14) [14]
    Товарищ. > Ega23 ©  утверждал, что если бы этого метода небыло, то и траблов бы небыло, следовательно
    > Если метод Draw абстрактный и программист забыл его перекрыть, то он получит вразумительный Abstract Error.

    > Если же метод Draw сделать пустым и программист забудет его перекрыть, то он будет ломать голову, почему это у него ничего не рисуется.

    - несуществующие методы выполняться не могут.
    До сих пор так и не нашел ни одного преимущества перед классами. классы это зло!
  • Юрий Зотов © (13.05.08 21:27) [15]
    А еще - "Мартышка и очки".
  • Пробегал2... (13.05.08 22:01) [16]
    По-моему, было бы логичнее, если бы компилятор не позволял создавать экземпляры классов с методами, объявленными как абстрактные.

    То есть, это была бы ошибка компиляции, а не исполнения.
  • Слоник © (13.05.08 22:03) [17]
    а если метод вернуть что-то должен, int Count, например? что возвращать? 0? -1?
    если объект? null? инстанс с дефолтным конструктором?
    а если надо вернуть другой абстрактный класс или интерфейс, то создаём первый попавшийся - и в путь?

    за null в не внутренних методах и методах типа T Find(id) бью по рукам (обоснованные исключения, конечно, возможны)

    есть такое чудесное правило - "не умеешь? не берись", так и тут.
    если без понятия, что делать в методе - честно признайся в этом, кинь исключение
    а abstact - это по сути то же исключение, только на уровне компиляции

    пс. простите за до-диезность =)
  • Юрий Зотов © (13.05.08 22:47) [18]
    > Пробегал2...   (13.05.08 22:01) [16]

    На этапе компиляции выдается предупреждение, что нормально. Поскольку если абстрактный метод реально кодом не юзается, то и потомков плодить ни к чему.

    > Слоник ©   (13.05.08 22:03) [17]

    Ниасилил. Моя си-бемольность не догоняет.
  • Слоник © (13.05.08 22:55) [19]
    Юрий Зотов, на малую терцию выше берите ;)
  • guav © (13.05.08 23:22) [20]
    Ну вот просто так в Delphi сложилось и всё, не надо искать логику там где её нет.
    Вот в C++ абстракность работает именно на этапе компиляции, класс с абстрактными методами не создаётся. И возможен вызов абстракного метода базового класса из наследника, если этот абстрактный метод реализован в базе. Но там зато синтаксис нелогичный.
  • -koha (14.05.08 00:04) [21]
    А как насчет "слона в посудной лавке" модуль classes где то 80 кб прибавляет SysUtils + 45
    можно вообще все выкинуть и оставить только system и что с ним идет и еще модуль windows.

    Предлагаю пример поискового модуля файлов по расширению размер 24 кб в упакованном виде 12 кб
    к тому же выполняется многопоточностью поиска и ожидание завершения всех потоков с подсчетом времени выполнения
    Т.е. поиск идет на всех дисках одновременно.

    Вот пример + исходники http://webfile.ru/1942995

    Правда результат отправляется в отдельное окно утилиты MSGLoger.exe http://webfile.ru/1942985
  • Игорь Шевченко © (14.05.08 00:09) [22]

    > Предлагаю пример поискового модуля файлов по расширению


    dir в Windows отменили ? Или у тебя для линукс ? Так там  ls есть
  • Ega23 © (14.05.08 00:14) [23]

    > А как насчет "слона в посудной лавке" модуль classes где
    > то 80 кб прибавляет SysUtils + 45


    А какое это имеет отношение к абстрактным методам?
  • -koha (14.05.08 00:16) [24]
    Это же только пример.
    А в своих программах вы пользователей тоже просите в консоли ковыряться?
    это же просто демо - пример......
  • -koha (14.05.08 00:18) [25]

    > Ega23 ©   (14.05.08 00:14) [23]
    >
    >
    > > А как насчет "слона в посудной лавке" модуль classes где
    > > то 80 кб прибавляет SysUtils + 45
    >
    >
    > А какое это имеет отношение к абстрактным методам?


    это имеет отношение к классам, если нет классов - нет абстрактных методов..
  • Игорь Шевченко © (14.05.08 00:21) [26]

    > А в своих программах вы пользователей тоже просите в консоли
    > ковыряться?


    Мы рекдо пишем программы, которые делают то, что уже давно сделано, вот в чем наша беда.
  • Игорь Шевченко © (14.05.08 00:21) [27]

    > это имеет отношение к классам, если нет классов - нет абстрактных
    > методов..


    Обратное также неверно
  • Юрий Зотов © (14.05.08 00:24) [28]
    Точно - мартышка и очки.

    Дружище, лабать на API простенькие утилитки - это для юных пионэров, чтоб пальцы перед друзьями погнуть.

    Ты большую программу таким образом напиши. С кучей окон, кнопок и прочего GUI.

    Пока будешь писать - состаришься. А за это время поймешь, что прибавка даже и нескольких метров - это очень маленькая плата.
  • Ketmar © (14.05.08 00:26) [29]
    > -koha   (14.05.08 00:04) [21]
    предлагаю однострочник в пару десятков байт:
    find ~ -name "myfile.txt"
    ну, и man find, чтобы понять, что гуёвые искалки после перекура в углу самоубиваются от стыда.
  • Ketmar © (14.05.08 00:27) [30]
    > Юрий Зотов ©   (14.05.08 00:24) [28]
    это вообще не плата. вот, для некоторого софта весь JRE тащить надо, и ничего — используют.
  • Тимохов (14.05.08 00:28) [31]
    ты еще спроси, что современный дельфи имеет такую-же директиву для класса!!!!

    только вот она не работает не фига
  • Юрий Зотов © (14.05.08 00:32) [32]
    > Ketmar ©   (14.05.08 00:27) [30]

    Я от ее прожорливости тащщусь просто. Сделали программу - метров на 100 тянет (плюс VM). То же самое на Delphi метров в 5 уложилось бы, и без всяких VM.
  • Ketmar © (14.05.08 00:33) [33]
    > -koha   (14.05.08 00:16) [24]
    > Это же только пример.А в своих программах вы пользователей
    > тоже просите в консоли ковыряться?

    кстати, пользователь вообще ни о каких «файлах» знать не должен. пользователю файлы без нужды. и то, что ему это до сих пор показывают — архаичный костыль в юзабилити.
  • Ketmar © (14.05.08 00:35) [34]
    > Юрий Зотов ©   (14.05.08 00:32) [32]
    дык не ты один. но это ж Ынтыпрайз, всё должно быть солидно. а разве может быть солидной программа в какие-то жалкие несколько метров? да ещё и память не жрущая? это ж как тогда объяснишь, зачем надо многомоторные сервера со штабелями памяти покупать?

    зыж аднака, говорят, что жабка зато портабельна. я в ней не спец (так, игрался), но слабо верю, что конкретное решение без изменений поедет и на винде, и на линуксе, например. всё равно примажется что-то платформозависимое ведь. да хоть MS SQL, не к ночи будь помянут.
  • -koha (14.05.08 00:44) [35]
    Нам пищнэрам нечего писать проги в несколько мегатон с гуевой тучей окон, диалогов и прочих не потребностей. Из этой мелкой искалки может выйти классная затиралка.. ;-) , а если ее еще и на асме перекодить, то выйдет еще менше и лучше. Нам пионЭрам другие качества подходят, чем мельче тем лучше. Вот вам и философия когда количественное перетекает в качественное.
  • Anatoly Podgoretsky © (14.05.08 00:45) [36]
    > Ketmar  (14.05.2008 00:35:34)  [34]

    С платами по два террабайта.
  • Германн © (14.05.08 00:48) [37]

    > -koha   (14.05.08 00:44) [35]
    >
    > Нам пищнэрам нечего писать проги в несколько мегатон с гуевой
    > тучей окон, диалогов и прочих не потребностей. Из этой мелкой
    > искалки может выйти классная затиралка.. ;-) , а если ее
    > еще и на асме перекодить, то выйдет еще менше и лучше. Нам
    > пионЭрам другие качества подходят, чем мельче тем лучше.
    >  Вот вам и философия когда количественное перетекает в качественное.
    >
    >

    Не. Это философия перетекания количества в посредственное. А классную затиралку нафиг.
  • Германн © (14.05.08 00:50) [38]

    > -koha   (14.05.08 00:04) [21]

    И вообще у тебя философия "без". Работа без "вышки", программы без классов. Что у тебя ещё Без?
  • Ketmar © (14.05.08 00:51) [39]
    > -koha   (14.05.08 00:44) [35]
    а если изначально микрокомпьютер с этой функцией спроектиорвать, то вообще один опкод будет.
  • -koha (14.05.08 01:02) [40]

    > Германн ©   (14.05.08 00:50) [38]
    >
    >
    > > -koha   (14.05.08 00:04) [21]
    >
    > И вообще у тебя философия "без". Работа без "вышки", программы
    > без классов. Что у тебя ещё Без?


    У меня еще "Без" денег...

    А если по рассуждать, вы в классах создаете методы, а разве нельзя их просто переместить в процедуры и функции в отдельные модули и вызывать  не классах,
    стоит ли создавать промежуточный класс его пере наследовать, только для того чтобы добавить пару методов, которые можно было бы заменить обычными  процедурами функциями лежащими в модуле?
  • Palladin © (14.05.08 01:03) [41]
    дежавю... всем классовым ненавистникам, кохе например: напишИте проводник, а? со вкладками, по типу как в Опере... можно не файлов... какой нибудь другой древовидной информации...

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

    если эта задача ниже вашего достоинства, то сразу лучше сказать...
  • Ega23 © (14.05.08 01:09) [42]

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


    Напиши простую консольную программку по общению с одной таблицей БД. Должна уметь читать данные, изменять данные, удалять данные, добавлять данные. А потом напиши её для двух категорий пользователей - админа и простого смертного. Простой смертный может только читать, а админ - и читать и всё остальное.
    Без классов - застрелишься. Хотя программка - на 500-700 строк кода.
  • -koha (14.05.08 01:09) [43]
    Я видел такие классовые ахенеи, по каждому пустяку лепили классы, чуваки сели проектировать арм на 9 весовых за 2.5 года не сделали, но налепили этих классов полный сервер 2гб памяти не хватает.+ в неделю БД увеличивается на 2гб. в размере.
  • Джо © (14.05.08 01:10) [44]
    > [40] —koha   (14.05.08 01:02)
    > У меня еще «Без» денег...

    Тогда — «без» комментариев :D
  • Джо © (14.05.08 01:11) [45]
    > [43] —koha   (14.05.08 01:09)
    > Я видел такие классовые ахенеи, по каждому пустяку лепили
    > классы, чуваки сели проектировать арм на 9 весовых за 2.5
    > года не сделали, но налепили этих классов полный сервер
    > 2гб памяти не хватает.+ в неделю БД увеличивается на 2гб.
    > в размере.

    Это история о Мойше, который «напел» Битлз.
  • Ega23 © (14.05.08 01:13) [46]

    > Я видел такие классовые ахенеи, по каждому пустяку лепили
    > классы, чуваки сели проектировать арм на 9 весовых за 2.
    > 5 года не сделали, но налепили этих классов полный сервер
    > 2гб памяти не хватает.+ в неделю БД увеличивается на 2гб.
    >  в размере.


    Тупорылость и кривизна рук чуваков ещё не повод принародного оскопления с последующим четвертованием ООП.
  • Palladin © (14.05.08 01:14) [47]

    >-koha (14.05.08 01:09) [43]

    да мало ли, что ты видел... никого здесь не интересует, что ты видел. тебе поставили две задачки, простеньких. берешься?
  • Ketmar © (14.05.08 01:17) [48]
    (тихо-тихо) за умеренную плату помогу не ударить лицом в гуано.
  • Ketmar © (14.05.08 01:18) [49]
    а, блин! сказали же «без денег». ну, тогда ничего, шутка.
  • -koha (14.05.08 01:21) [50]

    > Palladin ©   (14.05.08 01:03) [41]


    > Palladin ©   (14.05.08 01:03) [41]


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

    ПиЭнеры с такими вещами не работают, да и стоит ли на это время тратить, а вот  на сервер и работу с цокетами + системную службу+работа с реестром, чтобы это вышло так где то не более 30 кб  - на это время пивонЭры  тратят ;-)
  • Пробегал2... (14.05.08 01:22) [51]
    да чего тут обсуждать, человек который считает что ООП придумали зря - пусть пишет на ассемблере и не парит остальным мозги... Очевидно, что ничего серьезного человек не написал.
  • Ketmar © (14.05.08 01:25) [52]
    > -koha   (14.05.08 01:21) [50]
    > чтобы это вышло так где то не более 30 кб
    а зачем? нет, натурально: зачем? это уже не fun, это BDSM.
  • Германн © (14.05.08 01:27) [53]

    > У меня еще "Без" денег...
    >

    И увы "без" простейшей грамотности в русском языке.
    > по рассуждать
    ,
    > пере наследовать
    ,
    > ахенеи
    .
    Про "от балды" ставящиеся запятые я уже молчу.

    Резюме. До достижения некоего базового уровня общей культуры, ничего у тебя путного не получится. Но как сказал ЮЗ, "для юных пионэров, чтоб пальцы перед друзьями погнуть", это ты может и сможешь, если не врёшь.
  • Пробегал2... (14.05.08 01:29) [54]
    -koha   (14.05.08 1:02) [40]
    А если по рассуждать, вы в классах создаете методы, а разве нельзя их просто переместить в процедуры и функции


    можно конечно! А еще передавать в эти процедуры и функции переменную, указывающую на данные с которыми должна работать эта процедура и функция...

    И получим первый шаг к классовой модели! Зашибись! Только неудобную реализацию.

    -koha   (14.05.08 1:02) [40]
    стоит ли создавать промежуточный класс его пере наследовать, только для того чтобы добавить пару методов, которые можно было бы заменить обычными  процедурами функциями лежащими в модуле?


    посмотри на класс TStrings, пойми зачем он сделан, где используется - и вопросы отпадут сами собой.

    Принцип черного ящика, ооочень удобно.
  • Marser © (14.05.08 01:30) [55]
    А я только где-то с неделю назад узнал о class procedure...
    И вроде не очень ламер...
  • Пробегал2... (14.05.08 01:32) [56]
    -koha   (14.05.08 1:21) [50]
    да и стоит ли на это время тратить, а вот  на сервер и работу с цокетами + системную службу+работа с реестром, чтобы это вышло так где то не более 30 кб  - на это время пивонЭры  тратят ;-)


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

    Поэтому все хотят здесь и ПОФИГУ на размер, а не через 3 года и в 30 кбайт.
  • Пробегал2... (14.05.08 01:34) [57]
    Пробегал2...   (14.05.08 1:29) [54]
    посмотри на класс TStrings


    а еще можно на какой-нибудь TStream.
  • -koha (14.05.08 01:37) [58]

    > Palladin ©   (14.05.08 01:14) [47]
    >
    >
    > >-koha (14.05.08 01:09) [43]
    >
    > да мало ли, что ты видел... никого здесь не интересует,
    > что ты видел. тебе поставили две задачки, простеньких. берешься?
    >
    >


    Возьми "masm32\examples\" там такого "гуафна" полно...
  • -koha (14.05.08 01:52) [59]

    > Пробегал2...  


    Ты о чем гуталинишЬ дружище? ПионЭры не пишут для жирных дядюшек "Скруджей Макдаков" да еще по 100 и 500 м.

    TStrings клево но ты как его в "трой" запихнеш, это что за "трой"  выйдет я конечно видел разные глупости детские типа вир на VB 12м. Ну дык кому же такую хрень впарить возможно? Поэтому в некоторых видах софта размер очень критичен, чем пуанЭры и занимаются.
  • Германн © (14.05.08 01:55) [60]

    > Marser ©   (14.05.08 01:30) [55]
    >
    > А я только где-то с неделю назад узнал о class procedure.
    > ..
    > И вроде не очень ламер...
    >

    Узнал? Пока забудь. Но помни, что есть такие. Это очень редкие вещи. И нужны они очень редко.
  • Германн © (14.05.08 02:00) [61]

    > -koha   (14.05.08 01:52) [59]
    >
    >
    > > Пробегал2...  
    >
    >
    > Ты о чем гуталинишЬ дружище? ПионЭры не пишут для жирных
    > дядюшек

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

    А открыватель сидюка размером в 6 Кб?!
  • ketmar © (14.05.08 02:03) [63]
    > Германн ©   (14.05.08 01:55) [60]
    в общем-то, нафиг не нужны. %-)
  • ketmar © (14.05.08 02:06) [64]
    > Джо ©   (14.05.08 02:02) [62]
    > А открыватель сидюка размером в 6 Кб?!

    точно, пионеры. вон, солидные корпорации то же самое, но размером в 9 гб юзерам впаривают. причём за деньги.
  • Пробегал2... (14.05.08 02:23) [65]
    -koha   (14.05.08 1:52) [59]

    ну тут я с тобой согласен. Если ты пишешь вирусы - таки да, экономь размеры.
  • Германн © (14.05.08 02:25) [66]

    > Джо ©   (14.05.08 02:02) [62]
    >
    > > [61] Германн ©   (14.05.08 02:00)
    > > Гложет меня смутное сомнение, что «ПионЭры» вообще ничего
    > > не пишут!
    >
    > А открыватель сидюка размером в 6 Кб?!
    >

    Тут как-то ИШ приводил цитату из В.Шефнера.
  • -koha (14.05.08 02:33) [67]
    Вот вам два примера: treedemo, listview аж даже асме сделанных.

    А если, что то стоящее, у кого то и есть сюда реальный код никто не кинет, это же надо быть таким бамбуком, чтобы исходниками стоящими швыряться.
  • -koha (14.05.08 02:34) [68]
    сорри ссылочку то забыл: http://webfile.ru/1943243
  • ketmar © (14.05.08 02:37) [69]
    > -koha   (14.05.08 02:33) [67]
    > это же надо быть таким бамбуком, чтобы исходниками стоящими
    > швыряться.

    Линусом, например. Торвальдсом. но тебе не понять, ты прав.
  • Zeqfreed © (14.05.08 02:50) [70]
    > Ega23 ©   (14.05.08 01:09) [42]

    http://pastebin.ca/1017402

    Так сойдет? :)
  • -koha (14.05.08 02:55) [71]

    > ketmar ©   (14.05.08 02:37) [69]
    >
    > > -koha   (14.05.08 02:33) [67]
    > > это же надо быть таким бамбуком, чтобы исходниками стоящими
    > > швыряться.
    > Линусом, например. Торвальдсом. но тебе не понять, ты прав.
    >


    Линух это другое дело. ну если кот требует приватности, то кто же его выложит на всеобщее обозрение, его же тут же аверам скормят... даже и под линух..
  • ketmar © (14.05.08 03:13) [72]
    не переживай, если кот требует приватности, то это кот просто кошку хочет.
  • KSergey © (14.05.08 07:36) [73]
    > Германн ©   (14.05.08 00:48) [37]
    >  А классную затиралку нафиг.

    А ведь она уже есть! DEL (которая команда) уже отлажена! Как жить-то дальше, а?!
  • ketmar © (14.05.08 08:37) [74]
    > KSergey ©   (14.05.08 07:36) [73]
    и даже гуёвая есть! и медиаплееры есть! и калькуляторы! ну совсем нечего писать. %-(
  • Anatoly Podgoretsky © (14.05.08 09:12) [75]
    > Пробегал2...  (14.05.2008 01:32:56)  [56]

    Программа на 30 кб стоит 30 рб, программа на 100 мб стоит уже ого-го-го
  • Anatoly Podgoretsky © (14.05.08 09:14) [76]
    > ketmar  (14.05.2008 02:06:04)  [64]

    > солидные корпорации то же самое, но размером в 9 гб юзерам впаривают. причём за деньги.

    Потому что умные, а пионеры голодные и злые от этого.
    Крученые пальцы на бутерброд не намажешь.
  • Anatoly Podgoretsky © (14.05.08 09:15) [77]
    > Пробегал2...  (14.05.2008 02:23:05)  [65]

    Опять же неизвестная программа в 30 кб вызывает подозрение, а размеров в несколько мегабайт нет, поскольку вирусов в несколько мегабайт не бывает.
  • Игорь Шевченко © (14.05.08 09:43) [78]
    Что самое интересное, проводник по древовидной информации с вкладками как в Опере на API написать нефиг делать :)
  • -koha (14.05.08 09:43) [79]

    > Anatoly Podgoretsky ©   (14.05.08 09:15) [77]
    >
    > > Пробегал2...  (14.05.2008 02:23:05)  [65]
    >
    > Опять же неизвестная программа в 30 кб вызывает подозрение,
    >  а размеров в несколько мегабайт нет, поскольку вирусов
    > в несколько мегабайт не бывает.


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

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

    ---
    Understanding is not required. Only obedience.
  • Anatoly Podgoretsky © (14.05.08 10:03) [81]
    > -koha  (14.05.2008 09:43:19)  [79]

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

    Все о себе да о себе
    А пионерам-то как быть? Кто о них позаботится??
  • Ega23 © (14.05.08 10:13) [83]

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


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

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

    ---
    Understanding is not required. Only obedience.
  • Ega23 © (14.05.08 10:17) [85]
    Впрочем, скатились к флуду. А по теме я так и не убедился в нужности использования абстрактных методов.
  • pasha_golub © (14.05.08 10:22) [86]

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

    Вот странно. Ты ж вроде классов плодил. Неужто не встретилась необходимость?
  • Alkid © (14.05.08 10:22) [87]

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

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

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

    То есть, все таки склоняешься, к реализации метода, который только и будет заниматься тем, что исключение возбуждать?
  • pasha_golub © (14.05.08 10:27) [89]
    Вот такая еще штука может быть для забывчивых:

    TMyClass = class
    procedure My; virtual;
    end;

    ..

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



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

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

  • TUser © (14.05.08 10:33) [90]
    Afaik, во времена Borland Pascal такой директивы не было, а вызывали какое-то специальное исключение в методе, который нельзя вызывать, если он не перекрыт. Но написать abstract проще ведь, чем raise AnyException.Create (); да и идеология у паскаля всегда была - все ошибки, которые можно найти на этапе компиляции, надо найти на этапе компиляции. А вызывать этот raise - это в другую сторону, в сторону гибкости языка, совершенно лишней в данном случае.
  • Ega23 © (14.05.08 10:42) [91]

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


    Плодил, пложу и буду плодить. Что такое директива abstract и как она работает (и, собственно, зачем нужна в теории) - прекрасно понимаю.
    Но вот заметил интересную вещь - не использую на практике. Делаю в базовом классе виртуальный метод с пустым телом. И тупо не вижу смысла в практическом применении.
  • Ega23 © (14.05.08 10:43) [92]
    Вот если бы Delphi не позволял создать абстрактный класс - вот тогда да, тогда вся мощь абстрактных методов сразу проявляется. А так - не заметил warning, а он тебе бах - и abstract error.
  • Palladin © (14.05.08 10:46) [93]

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

    а за это больно бьют по нежным местам... ЮЗ, помню, хорошо рассказывал, за, помоему, $10 за warning и 5$ за hint. уважам'с и однозначно одобрям'c.
  • oxffff © (14.05.08 11:05) [94]
    I>
    Ega23 ©   (14.05.08 10:42) [91]
    > Делаю в базовом классе виртуальный метод с пустым телом.


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

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

    -> Вывод я надеюсь понятен.
  • Ega23 © (14.05.08 11:22) [95]

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


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


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


    Был вынужден использовать библиотеку, сделанную не мной, но содержащую действительно хороший набор различных функций. Выдавала 90+ warning-ов и 200+ хинтов. Переписывать было нельзя (точнее было сказано: "Хочешь - переписывай, но это время тебе никто не оплатит").
    Заметить в этом зоопарке конкретный warning - было крайне проблематично. Сейчас стараюсь писать без хинтов и варнингов, но это получается при условии, что всё пишу сам.
  • KSergey © (14.05.08 11:34) [96]
    Эффект от использования ламмерских библиотек может быть сильно отрицательным, не смотря на красивость обертки.
  • Ega23 © (14.05.08 11:36) [97]

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


    Юнит писался бывшим шефом со всеми вытекающими.  :)
  • pasha_golub © (14.05.08 11:40) [98]

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


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

    Да хоть затекающими. :) Ворнинги - это зло.
  • KSergey © (14.05.08 11:40) [99]
    А абстрактные методы, по-моему, начинаешь осознавать, когда конечным твоим родуктом становятся библиотеки. Когда их вид и интерфейс должны быть коммерческого качества.
    В законченых (в смысле юзер(не_программер)-ориентрованности) проектах (тем более где нет сильно разделенных подразделений) это и не так остро ощущаешь.
  • Ega23 © (14.05.08 11:43) [100]

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


    А кто спорит? Но жизнь - она не чОрная и не белая. И даже не серая. Там больше, чем RGB  :)
  • Style © (14.05.08 12:38) [101]
    Абстрактные классы это все конечно нужно ) Но вот одного не пойму, не ужели не могли сделать сообщение об ошибке абстрактных методов более подробным - т.е. "Abstract Error - не перекрыт такой-то там метод". А то "кучу" полезной информации несет в себе сообщение "Abstract Error", с таким же успехом могли бы и послать куда-нибудь разработчика 8-)
  • ketmar © (14.05.08 12:42) [102]
    >[101] Style © (2008-05-14 12:38:00)
    ну так куда-нибудь и послали.

    ---
    Understanding is not required. Only obedience.
  • Style © (14.05.08 12:48) [103]

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


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

    ---
    Understanding is not required. Only obedience.
  • Anatoly Podgoretsky © (14.05.08 13:40) [105]
    > Palladin  (14.05.2008 10:46:33)  [93]

    Что же тогда у него делают за Error
  • Anatoly Podgoretsky © (14.05.08 13:41) [106]
    > Ega23  (14.05.2008 11:36:37)  [97]

    Вот поэтому и бывший.
  • Anatoly Podgoretsky © (14.05.08 13:43) [107]
    > Style  (14.05.2008 12:38:41)  [101]

    Смеешься, откуда компилятор решит в каком наследнике ты решил перекрыть метод.
    А что делать с любителями TStrings.Create
  • Ega23 © (14.05.08 13:46) [108]

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


    Запретить создание абстрактных классов на этапе компиляции.
    И никто не уйдёт обиженным.
  • Palladin © (14.05.08 13:46) [109]

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

    эцых с гвоздями на час :)
  • Palladin © (14.05.08 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 © (14.05.08 13:51) [111]
    на обучение компилятора общения с астралом ) бо класс определится только в RT )
  • Zeqfreed © (14.05.08 14:04) [112]
    Ну вот. Так и знал, что [42] было просто взятием на понт. Только не понятно зачем игнорировать напрочь.
  • Ega23 © (14.05.08 14:20) [113]

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


    мы же за Delphi говорим, а не за Питон...
  • DiamondShark © (14.05.08 14:21) [114]

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

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

    Другой вопрос, почему оставили возможность инстанциирования классов с абстрактными методами? Вот это уже разгильдяйство.
  • DiamondShark © (14.05.08 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 © (14.05.08 14:27) [116]

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


    Да знаю я...


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


    Вот и мне непонятно. Сказал "А", скажи и "Б".
  • Anatoly Podgoretsky © (14.05.08 14:31) [117]
    > DiamondShark  (14.05.2008 14:21:54)  [114]

    А про классовые ссылки слышал?
  • Anatoly Podgoretsky © (14.05.08 14:33) [118]
    > Ega23  (14.05.2008 14:27:56)  [116]

    Не понятно, чего страшного и криминального в создание такого класса, не надо просто вызывать абстрактный метод без реализации.
    Хотя это и плохо, но не запрещено.
  • DiamondShark © (14.05.08 14:36) [119]

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

    На заборах они пишут. Слово "МИР" с тремя ошибками.
  • Style © (14.05.08 15:00) [120]

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


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

    В любом случае этого уже никто не сделает :)
  • Anatoly Podgoretsky © (14.05.08 15:01) [121]
    > DiamondShark  (14.05.2008 14:36:59)  [119]

    С пятью, поскольку правилно ДРОВА
  • DiamondShark © (14.05.08 15:01) [122]

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

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

    Вот почему-то в НЕТ есть и классовые ссылки, и абстрактные методы.
    Однако ж, это не мешает получать и ошибку компиляции, при статическом инстанцировании, и рантайм исключение при динамическом инстанцировании абстрактных классов.
  • Zeqfreed © (14.05.08 15:07) [123]
    > Ega23 ©   (14.05.08 14:20) [113]

    Есть какая-то принципиальная разница? Можно на любом языке переписать. И на Дельфи тоже. Количество строчек только чуть возрастет, качественно ничего не изменится.
  • oxffff © (14.05.08 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 © (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]

    Кстати это не в коем случае не должна быть ошибка компиляции, максимум предпреждение, или даже совет.
  • DiamondShark © (14.05.08 15:54) [127]
    Удалено модератором
  • Palladin © (14.05.08 15:59) [128]
    Удалено модератором
  • DiamondShark © (14.05.08 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 © (14.05.08 16:09) [130]
    Удалено модератором
  • DiamondShark © (14.05.08 16:17) [131]

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

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

    Помедетируй над тем, к чему вообще Podgoretsky упомянул классовые ссылки.
    Как дойдёт, так у тебя и все вопросы отпадут, и желание вязяться к словам.
  • Palladin © (14.05.08 16:19) [132]

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

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

    я не докапываюсь, просто я в .NET не искушен, только только под стол пешком хожу )
  • DiamondShark © (14.05.08 16:23) [133]

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

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

    Виртуальность конструктора, как понятно, при таком подходе не требуется.
  • Игорь Шевченко © (14.05.08 16:24) [134]

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


    Э...через reflection и Activator.CreateInstance
  • oxffff © (14.05.08 16:34) [135]

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


    Прямых IL инструкций для этого нет.
    Достигается вызовом библиотеки .NET и передачей объекта типа
    и параметров конструктора.
  • Palladin © (14.05.08 16:36) [136]
    мда... до туда я еще не дочитал ).. не буду торопить события...
  • oxffff © (14.05.08 16:37) [137]

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


    Да я тоже, все читаю читаю про .NET.
    Но блин как то не тянет. Хотя искушение есть.
    Но по большей части из-за приятных языковых конструкций С# и Oxygene.
  • Palladin © (14.05.08 16:38) [138]

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

    та же фикня...
  • oxffff © (14.05.08 16:40) [139]

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


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

    НО!!! рекомендую ECMA 335 и Expert .NET IL Assembler.
  • Palladin © (14.05.08 16:41) [140]

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

    а я его и читаю... просто поискал по ключевым словам ответов, смотрю это дело у него обсуждается на ~480 странице... а я еще дальше ~120 не ушел :)
  • DiamondShark © (14.05.08 17:07) [141]

    > Expert .NET IL Assembler.

    А это зачем?! Во всяком случае, для принятия решения "а стоит ли?".
    Всё равно что выбирая: "Писать ли мне на Дельфи, или может на Ц++ остаться?" -- начать читать х86 ассемблер.
  • oxffff © (14.05.08 17:16) [142]

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


    У меня после прочтения стало выстраиваться более точное представление работы .NET. А соблазна перейди на .NET стало меньше.
  • oxffff © (14.05.08 17:18) [143]
    >oxffff ©   (14.05.08 17:16) [142]

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

    Подождем Tiburon.
  • Palladin © (14.05.08 17:18) [144]

    > Подождем Tiburon.

    что за зверь?
  • Дмитрий С (14.05.08 17:41) [145]

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

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

    ------------------
    В Си запрещено создавать экземпляры абстрактного класса на этапе компилирования? Или запрещено даже в качестве типа переменной использовать?
  • Palladin © (14.05.08 17:46) [146]

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

    это к Юре


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

    там вообще запрещено классы объявлять :)
  • Игорь Шевченко © (14.05.08 17:48) [147]

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


    {$WARN SYMBOL_PLATFORM OFF}

    Все эти Platform-specific после смерти Kylix годятся разве что в кунсткамеру
  • DiamondShark © (14.05.08 18:40) [148]

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

    Использовать в качестве типа переменной -- это и есть создавать экземпляры.
    Разрешено использовать в качестве типа указателя.
  • Юрий Зотов © (14.05.08 19:15) [149]
    > KSergey ©   (14.05.08 11:40) [99]

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

    +100.

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

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

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


    Ну возможно. Я думаю, мы по этому поводу ещё приватно поговорим...  :)
  • Юрий Зотов © (14.05.08 19:33) [151]
    > Ega23 ©   (14.05.08 19:24) [150]

    На рыбалке?
    :о)))))))))
  • Anatoly Podgoretsky © (14.05.08 21:24) [152]
    > DiamondShark  (14.05.2008 16:05:09)  [129]

    Так и в Дельфи тоже, абстрактные классы инстанциировать нельзя.
    Но мы то не про классы, а про методы, а это разные вещи.
  • Ega23 © (14.05.08 21:45) [153]

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


    Это через полтора месяца. Я думаю 28 мая... :)
  • Loginov Dmitry © (14.05.08 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 © (14.05.08 22:48) [155]
    только некорректный...
  • ketmar © (14.05.08 22:54) [156]
    >[154] Loginov Dmitry © (2008-05-14 22:41:00)
    а ещё за вынесение классов в DLL надо бить канделябром. чтобы в следующий раз неповадно было.

    ---
    Understanding is not required. Only obedience.
  • Palladin © (14.05.08 23:03) [157]
    вынесение то фик с ним, пусть там у себя внутри длл работает сколько влезет, но возврат результатом экспортной функции чужеродного тела и работа с ним в хосте как с кровинушкой... зцих с гвоздями. пожизненный.

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

    ну или ручное инстанцирование в dll общих rtti и мм по образу и подобию bpl
  • Loginov Dmitry © (14.05.08 23:12) [158]
    > а ещё за вынесение классов в DLL надо бить канделябром.
    > чтобы в следующий раз неповадно было.


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

    ---
    Understanding is not required. Only obedience.
  • Loginov Dmitry © (14.05.08 23:33) [160]
    > что нефиг специфические вещи в DLL пихать.


    жалко что ли?
  • ketmar © (14.05.08 23:48) [161]
    >[160] Loginov Dmitry © (2008-05-14 23:33:00)
    >жалко что ли?
    глупо. завязка на один проприетарный инструмент. к тому же не лучший инструмент.

    ---
    Understanding is not required. Only obedience.
 
Конференция "Прочее" » Филосовский вопрос
Есть новые Нет новых   [134435   +13][b:0.001][p:0.004]