В споре рождается истина

- А я так не думаю!

Posts Tagged ‘Классы

Чуть-чуть о классах

с одним комментарием

Как известно, в университетах надо делать лабораторные работы.

Если верить старшекурам, то реакция нашего теперешнего препода по проге на несвоевременную сдачу лабок весьма негативная. В конце концов, рискуешь быть нахрен выпиленым из университета.

Даже учитывая всю бредовость заданий, все равно хочется поебать моск найти в них что-то интересное.

Вот, например, такой фрагмент:
“Побудувати та візуалізувати список файлів, що є у каталозі (із підкаталогами включно) Каталог обирається візуально. Усі дії над файлами заносити у протокол роботи, що можна візуалізувати. Для відібраного файлу із зображенням знайти усі HTML-файли, що посилаються на нього. ” (это конкретно мой вариант).

Как же быть? Чуть-чуть подумав, я сотворил новый класс Task4() для решения этой задачи, который имеет свои параметры в конструкторе, собственно после завершения работы конструктора объект и удаляется. Может, это идиотский стиль, но сейчас не об этом.

Ситуация такова. На форме/фрейме/_еще_чем_нибудь (лично я использовал C++/wxWidgets ) есть батон.
В обработчике клика по нему – вызывается метод Analyze(). Наконец, в методе Analyze() создается объект класса Task4() с передачей определенных параметров. Изначально список был примерно таким: string path_name, string file_name, list &L.

И вроде все нормально, НО. Вдруг я понял, что хочу, чтобы все было красивенько. Я хочу, чтобы юзер видел информацию типа “Просмотрено ххх файлов, из них ууу содежрат нужную ссылку”.

И почему-то мне в голову пришла ну очень плохая идея. А именно – я решил передавать в конструкторе указатель на callback, принимающий и возвращающий какие-то параметры!
Т.е. я передаю указатель на функцию, имеющую сигнатуру, скажем int f(int*, int*).
Зачем так сложно? Просто потому, что я не хотел пихать цикл обработки файлов в каталоге+подкаталогах в обратотчик нажатия на кнопочку или даже в Analyze.
В общем-то и цикл там не такой уж простой, чтобы делать такую начинку.

В общем, две крайности одной и той же сущности, как оказывается.
1) Выносить цикл в обработчик нажатия – некрасиво
2) Делать с колбэками.. слишком монструозно.

Спустя некоторое время (а правда ведь, что мозг подсознательно ищет решения!), где-то около двух недель, до меня дошло! Оказывается, можно себе упростить жизнь, если в Task4() реализовать что-то наподобие итераторов.
И применять єто как-нибудь вроде:

while (Task4.GetNextFile())
{
    //
    if (Task4.ProcessCurrentFile())
    {
    //
      cntAll++;
      cntSucc++;
    //
    }
    //
}

Кавайненько!

Написано jtimv

03.01.2010 в 05:01

Опубликовано в Программирование

Отмечено как ,

Follow

Get every new post delivered to your Inbox.