powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Абстрактные классы.
63 сообщений из 63, показаны все 3 страниц
Абстрактные классы.
    #36444431
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если они нужны, но их нет в языке программирования, то остаётся только делать функции типа
Код: plaintext
1.
2.
3.
4.
    public String getXML()
    {
        throw new Exception("Not realised yet.");
    }
Что-то в этом роде? Я примерно так делаю, а как бы сделали вы? Хотя может быть return null тоже неплохой вариант...
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36444655
zloy den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше экзепшн имхо. Так будет точно понятно что этой функциональности в классе нет.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36444678
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zloy denЛучше экзепшн имхо. Так будет точно понятно что этой функциональности в классе нет.
Ну и замечательно. Спасибо. Просто хотел убедиться, что не я один так считаю :)
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36445737
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoЕсли они нужны, но их нет в языке программирования, то остаётся только делать функции типа
Код: plaintext
1.
2.
3.
4.
    public String getXML()
    {
        throw new Exception("Not realised yet.");
    }
Что-то в этом роде? Я примерно так делаю, а как бы сделали вы? Хотя может быть return null тоже неплохой вариант...
Возможно - это следствие неудачного дизайна базового класса или интерфейса. У меня тоже часто были муки творчества, когда долго смотрел на интерфейс и думал... а нахера собсно там там много методов?

А подобные throw-s вставляет Netbeans или другая IDE.

Я-бы туда запихнул assert(..)
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36445760
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLo
Код: plaintext
1.
2.
3.
4.
    public String getXML()
    {
        throw new Exception("Not realised yet.");
    }

"Метод еще не осознан"? :)

Not implemented yet... Уж лучше б по-русски писали, чем такой кривой английский потом в коде видеть.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36445959
Фотография Петросъян
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и вылетит потом в проге
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36445963
Альмалексия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петросъянну и вылетит потом в проге
Не должны быть перменные типа абстрактного класса.
Если их не будет, то и исключений соотвественно.
Если бы у меня была такая ситуация, сделал бы также как автор.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36445969
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А может быть так надо сделать? Всё таки XML... едрён-батон.
Код: plaintext
1.
2.
3.
4.
    public String getXML()
    {
        return "<?xml version='1.0'?><Exception>Not realised yet.</Exception>");
    }
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36446077
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nymXDiaBLo
Код: plaintext
1.
2.
3.
4.
    public String getXML()
    {
        throw new Exception("Not realised yet.");
    }

"Метод еще не осознан"? :)

Not implemented yet... Уж лучше б по-русски писали, чем такой кривой английский потом в коде видеть.
Тьфу, да, точно. Ошибся, с кем не бывает. Проверил, Нетбинс вообще "Not supported yet." пишет.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36446078
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonXDiaBLoЕсли они нужны, но их нет в языке программирования, то остаётся только делать функции типа
Код: plaintext
1.
2.
3.
4.
    public String getXML()
    {
        throw new Exception("Not realised yet.");
    }
Что-то в этом роде? Я примерно так делаю, а как бы сделали вы? Хотя может быть return null тоже неплохой вариант...
Возможно - это следствие неудачного дизайна базового класса или интерфейса. У меня тоже часто были муки творчества, когда долго смотрел на интерфейс и думал... а нахера собсно там там много методов?

А подобные throw-s вставляет Netbeans или другая IDE.

Я-бы туда запихнул assert(..)
Да не, просто баловался с шаблонами проектирования, читал в книге GoF, но писал не на C++, а на ActionScript, но тут пример на яве привёл. Чтобы не пугать людей. И пытался воплощать в код, именно как в книге, без своего творчества, которое на практике вообще-то вполне допустимо и желательно. Но для начала хотелось сделать точно по библии. И наткнулся на отсутствие абстрактных классов. Вот и извращаюсь.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36446079
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА может быть так надо сделать? Всё таки XML... едрён-батон.
Код: plaintext
1.
2.
3.
4.
    public String getXML()
    {
        return "<?xml version='1.0'?><Exception>Not realised yet.</Exception>");
    }

У меня там было
Код: plaintext
1.
2.
3.
4.
5.
public String getXML()
    {
        
        return "<XML></XML>";
    }
Это в программе откуда кусок скопировал. Просто переиначил, чтобы под вопрос подходило
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36446628
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoно писал не на C++, а на ActionScript, но тут пример на яве привёл
Прелестно.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36446635
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nymXDiaBLoно писал не на C++, а на ActionScript, но тут пример на яве привёл
Прелестно.
Да один фиг, ни там, ни там абстрактных классов нет. Чегож народ пугать?
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36446951
Фотография Петросъян
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АльмалексияПетросъянну и вылетит потом в проге
Не должны быть перменные типа абстрактного класса.
Если их не будет, то и исключений соотвественно.
Если бы у меня была такая ситуация, сделал бы также как автор.
зачем тогда исключение если его все равно не будет?
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36446959
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLo
Да один фиг, ни там, ни там абстрактных классов нет. Чегож народ пугать?
На Яве нет абстрактніх классов? Это откуда такая деза?
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36446966
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПетросъянАльмалексияПетросъянну и вылетит потом в проге
Не должны быть перменные типа абстрактного класса.
Если их не будет, то и исключений соотвественно.
Если бы у меня была такая ситуация, сделал бы также как автор.
зачем тогда исключение если его все равно не будет?
Чтобы если случайно где-то вдруг попытаешься получить экземпляр абстрактного класса, получить в конце концов эксепшен. Хотя бы когда-нибудь в рантайме.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36446967
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MozokXDiaBLo
Да один фиг, ни там, ни там абстрактных классов нет. Чегож народ пугать?
На Яве нет абстрактніх классов? Это откуда такая деза?
Расскажи нам про них.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36446976
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хмм, я ошибался
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
// Абстрактный класс "Фигура"
  abstract public class Shape
{
         // Цвет фигуры
        int Color;

        // Начальная точка фигуры
        Coordinates StartPoint;

        // Нарисовать фигуру
        abstract public void Draw();
}
Ну да ладно, вопрос обсудили, уже не буду приводить примеры на ЭкшнСкрипте. Я даже и не знал про абстрактные классы в Яве, то-ли забыл, то-ли проморгал.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36447005
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoЯ даже и не знал про абстрактные классы в Яве, то-ли забыл, то-ли проморгал.
Ай-ай-ай
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36447027
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonXDiaBLoЯ даже и не знал про абстрактные классы в Яве, то-ли забыл, то-ли проморгал.
Ай-ай-ай
Совсем уже с ума свели Я пытаясь работать с тремя языками параллельно, совсем в них запутался Ща сижу, на С++ пишу, дома на ЭкшнСкрипте, а на той неделе на работе с Явой ковырялся.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36447047
Фотография Петросъян
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
везде понемногу, нигде хорошо
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36447060
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петросъянвезде понемногу, нигде хорошо
Везде хорошо, но не отлично. Так точнее будет.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36447178
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoПетросъянвезде понемногу, нигде хорошо
Везде хорошо, но не отлично. Так точнее будет.
Маловероятно. Везде удовлетворительно, нигде не хорошо.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36447247
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nymXDiaBLoПетросъянвезде понемногу, нигде хорошо
Везде хорошо, но не отлично. Так точнее будет.
Маловероятно. Везде удовлетворительно, нигде не хорошо.
Факты я уже сказал. Кончайте пытаться унизить меня. Вам от этого какой прибыток?

Модератор: Товарищи, спокойнее :)
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36447710
pizmon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По теме - assert разве не для этого? В релизе промолчит, в отладке обругается. Если нет поддржки assert со стороны языка, то всегда можно какой-нибудь заменитель изобразить, IMHO.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36448507
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pizmonПо теме - assert разве не для этого? В релизе промолчит, в отладке обругается. Если нет поддржки assert со стороны языка, то всегда можно какой-нибудь заменитель изобразить, IMHO.
А когда по вашему assert отработает?
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36448856
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoА когда по вашему assert отработает?не в этом дело, исключение можно проигнорировать, ассерт - никогда, или это не ассерт
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36449151
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychXDiaBLoА когда по вашему assert отработает?не в этом дело, исключение можно проигнорировать, ассерт - никогда, или это не ассерт
Вообще, ошибка должна и в релизе остаться ошибкой. Но я не утверждаю, что ассерты не нужны, можно и так сделать.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36449181
pizmon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как оказалось, в разных местах под "assertions" подразумеваются не совсем тождественные механизмы.

Я на примере Delphi поясню. Там имеется процедура Assert(Condition: Boolean; Message: string), и волшебный ключ компиляции, который, когда включен - контролирует условия Assert, а когда выключен (в релизе), то вызов Assert вообще кода не генерирует. Соответственно, можно написать

procedure TAbstractClass.SomeMethod();
begin
Assert(False, 'Do not call me!');
end;

В релизе этот вызов ни к чему не приведет, ползатель ничего не заметит (потому что ползателю такие сообщения об ошибках ни к чему). В development build под отладчиком мы просто выпадем на этом вызове. В test build тестер увидит полезное сообщение Do not call me (MyUnit10.pas, line XXX), то есть прямо с именем модуля исходника и номером строки (стека, правда, не хватает, но это уже намного лучше, чем Asbtract Error at 00719F13).

Удобно ж, ёпрст!
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36449213
pizmon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychисключение можно проигнорировать, ассерт - никогда, или это не ассерт

Ну, assert - в конечном итоге тоже исключение.
Я для себя решил так: если пользователь может что-то поделать с проблемой, то это должно быть оформлено исключением (File not found, Host unreachable, Disk full и так далее), теоретически доходящим до пользователя, а если пользователь тут ни ухом, ни рылом помочь не может, то лучше бы тут был отключаемый assert (вот вызов "запрещенного" метода - как раз тот случай).
Но это моё мнение, я на нем не настаиваю :)
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36449237
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pizmonegorychисключение можно проигнорировать, ассерт - никогда, или это не ассерт

Ну, assert - в конечном итоге тоже исключение.
Я для себя решил так: если пользователь может что-то поделать с проблемой, то это должно быть оформлено исключением (File not found, Host unreachable, Disk full и так далее), теоретически доходящим до пользователя, а если пользователь тут ни ухом, ни рылом помочь не может, то лучше бы тут был отключаемый assert (вот вызов "запрещенного" метода - как раз тот случай).
Но это моё мнение, я на нем не настаиваю :)
Ога, а юзер потом будет говорить:"у меня не работает, разберитесь", и никакой более информации. Это ещё хорошо, если получится воссоздать ошибку у себя на машине, повторив его действия. Но иногда ошибка может быть повторимой только на его машине. Как быть?
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36449259
pizmon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoНо иногда ошибка может быть повторимой только на его машине. Как быть?

Ставить ему test build, думать об этом... как-то так. Трудно и не везде применимо, согласен.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36449278
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pizmonXDiaBLoНо иногда ошибка может быть повторимой только на его машине. Как быть?

Ставить ему test build, думать об этом... как-то так. Трудно и не везде применимо, согласен.
Именно, не везде. Нужно чтобы релиз показывал все важные ошибки, а тётя, у которой ошибка случилась, могла бы зачитать сообщение.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36449320
pizmon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoНужно чтобы релиз показывал все важные ошибки, а тётя, у которой ошибка случилась, могла бы зачитать сообщение.

В порядке трёпа:
Тестирование с помощью тёти - не наш метод. Вообще-то, тёте надо видеть сообщения в форме простых команд, типа "Выкинь отсмотренное кино с винчестера", "Воткни патчкорд в дырку", "Больше так не делай". Все остальные сообщения для тёти обычно сливаются в одно могучее "Shit happens", и при анализе опираться на устные показания тёти не стоит по-любому, imho. Сбрось в файлик настоящий Exception, стек, дату, время, разные важные параметры (в том числе, например, трек пройденных и "заглоченных" assertов, если будете свою их реализацию делать), и нехай тётя файлик этот по мылу пришлёт. Не грузите тётю сообщениями типа "Abstract Error" или, например, незабываемое "Произошел разрушительный сбой по адресу XXXXXXXX". Тёте что этот адрес, что разрушительная сила сбоя, что ваши абстракции - до одного и того же фонаря.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36449348
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pizmonXDiaBLoНужно чтобы релиз показывал все важные ошибки, а тётя, у которой ошибка случилась, могла бы зачитать сообщение.

В порядке трёпа:
Тестирование с помощью тёти - не наш метод. Вообще-то, тёте надо видеть сообщения в форме простых команд, типа "Выкинь отсмотренное кино с винчестера", "Воткни патчкорд в дырку", "Больше так не делай". Все остальные сообщения для тёти обычно сливаются в одно могучее "Shit happens", и при анализе опираться на устные показания тёти не стоит по-любому, imho. Сбрось в файлик настоящий Exception, стек, дату, время, разные важные параметры (в том числе, например, трек пройденных и "заглоченных" assertов, если будете свою их реализацию делать), и нехай тётя файлик этот по мылу пришлёт. Не грузите тётю сообщениями типа "Abstract Error" или, например, незабываемое "Произошел разрушительный сбой по адресу XXXXXXXX". Тёте что этот адрес, что разрушительная сила сбоя, что ваши абстракции - до одного и того же фонаря.
Тёти мне звонят и пишут, описывают ситуацию. Но я всё подумываю сделать сервачок, на который будет регистрироваться весь порядок действий пользователей. Чтобы с пары нажатий кнопок, видеть всю ситуацию. Пока некогда такое делать, но сплю и вижу такое.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36449375
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Толкование стека исключений отдаётся полностью на откуп разработчику, а не пользователю. Обычно в оконном приложении при ошибке, юзер получает красный лопух с грозным сообщением "Приложение вызвало ошибку code = PIZDETS:0001. Обратитесь в службу поддержки". При этом (я очень надеюсь) полный стек ошибок должен выпасть в какой-нибудь application.YYYY-MM-DD.log. Девелопер, увидев такие дела может детализировать сообщения. Например: стартовать приложение с ассертами там, или добавить logging.level=SUPPORT и делать прочие пляски с бубном.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36449808
zloy den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имхо, стоит сделать для вывода ошибок нечто такое:
Выводится окошко с вменяемым текстом исключения (с точки зрения пользователя) и внизу нечто типа кнопки "Детали", нажав на которую будет показана полная информация о исключении в контроле, из которого можно скопировать текст. Тогда при ошибке пользователь не пугается увидев какой-то ужас, но при этом у него есть возможность просто отправить по запросу разработчика текст исключения просто скопировав его из деталей. Тут много объяснять не потребуется:
1. Нажмите кнопку "Детали"
2. Скопируйте из окошка снизу весь текст и скиньте мне на почту/в аську
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36451022
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLo
Тёти мне звонят и пишут, описывают ситуацию. Но я всё подумываю сделать сервачок, на который будет регистрироваться весь порядок действий пользователей. Чтобы с пары нажатий кнопок, видеть всю ситуацию. Пока некогда такое делать, но сплю и вижу такое.
После того, как тётя не смогла по телефону рассказать хотя бы по буквам, что там по английски написано в сообщении об ошибке, я сделал такую вещь: создал табличку (у меня база MS-SQL) в которую записывал информацию о коннектах/реконнектах и ошибках,
типа {имя пользователя, время, текст}.
Когда звонит тётя, я открываю табличку и вижу, что там у нее было.
Мне она звонит очень редко, т.к. уже все отлажено.
А если у вас часто такие ситуации встречаются, то стоит чего-нибудь подобное придумать.
По крайней мере это не так уж и сложно сделать.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36451053
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pizmonНе грузите тётю сообщениями типа "Abstract Error" или, например, незабываемое "Произошел разрушительный сбой по адресу XXXXXXXX". Тёте что этот адрес, что разрушительная сила сбоя, что ваши абстракции - до одного и того же фонаря.
Как-то играл в какую-то игру про гонки. И несколько раз она вылетала в Windows с сообщением об ошибке: я непомню точно, что там было написано, но что-то про неверный вызов чисто виртуального метода.
XDiaBlo

Это я к тому пишу, что хочу сказать: если язык не поддерживает абстрактные классы, то какой смысл их иммитировать? Может быть применить другое архитектурное решение, при котором не надо будет ухищрятся так?
Есть ситуации, когда не только шаблоны, но и ООП могут только повредить проекту, если применять это не там, где нужно.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36451097
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAYAKOV_SV,
А есть ситуации, где без абстрактных классов возникнет либо дублирование кода, либо базовый класс, который допускает инстанцирование, при том, что он сам по себе, использоваться не должен. Как быть?
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36451101
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBlo,
Как мне кажется, идея релизовывать вот это:
Код: plaintext
1.
2.
3.
4.
    public String getXML()
    {
        throw new Exception("Not realised yet.");
    }
Может привести ко многим проблемам:
Прежде всего будут страдать и плакать тёти, когда у них это вылетит в самый неподходящий момент.
Да и наверно писать код, который по замыслу не должен выполнятся, как-то странно...
Я не спорю, что есть такие приемы, но наверно чем меньше их в программе, тем лучше.
Простите за критику.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36451120
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoMAYAKOV_SV,
А есть ситуации, где без абстрактных классов возникнет либо дублирование кода, либо базовый класс, который допускает инстанцирование, при том, что он сам по себе, использоваться не должен. Как быть?
Тут нужно смотреть конкретную ситуацию.
А так, выход всегда есть. Да и GoF не панацея от всех проблем.
Я считаю, что нужно писать код так, чтобы многие ошибки можно было увидеть на стадии компиляции, а не во время выполнения.
Я как-то сделал абстрактный класс стратегия, потом наделал конкретных стратегий от него.
Смотрю - что-то методы у классов маленькие. Потому плюнул на это и написал простую процедуру вместо всех этих классов, которая была всего одна страница в объеме - и был просто счастлив Расширять ее не надо было, да в использовании она проще была.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36451133
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAYAKOV_SV,
Хочу кое-что со стратегиями сделать. Ща там лапша на тыщу строк, которую я уже немного упорядочил. Любопытно будет увидеть что получится.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36451138
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoMAYAKOV_SV,
А есть ситуации, где без абстрактных классов возникнет либо дублирование кода, либо базовый класс, который допускает инстанцирование, при том, что он сам по себе, использоваться не должен. Как быть?
У меня сейчас каша в голове, может не все хорошо в моем примере, но надеюсь может поможет
Проблему можно решить заменой наследования:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 class a 
 {
  private:
   CString txt;
  public:
   virtual void put() =  0 ;
 };
 class b : a
 {
   void put()
   {
     AfxMessageBox(txt);
   }
 };
На агрегирование:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
 class a 
 {
  private:
   CString txt;
  public:
   CString GetText()
   {
     return txt;
   }
 };
 class b 
 {
   a agr;
   void put()
   {
     AfxMessageBox(agr.GetText());
   }
 };
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36451153
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAYAKOV_SV,
Я подозреваю что вы всё же имеете в виду что-то типа того, чтобы наследовать все классы от одного интерфейса, а то, что было бы в абстрактном классе, реализовывать в отдельном классе, и использовать его через агрегирование. В таком случае в вашем коде не хватает общего предка. Причём в С++ сие смысла не имеет, а в языках без абстрактных классов, но с интерфейсами, имеет. Вот это уже хороший вариант, спасибо.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36451186
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoMAYAKOV_SV,
Я подозреваю что вы всё же имеете в виду что-то типа того, чтобы наследовать все классы от одного интерфейса, а то, что было бы в абстрактном классе, реализовывать в отдельном классе, и использовать его через агрегирование. В таком случае в вашем коде не хватает общего предка. Причём в С++ сие смысла не имеет, а в языках без абстрактных классов, но с интерфейсами, имеет. Вот это уже хороший вариант, спасибо.
Я где-то в книге читал про замену наследования на агрегирования, помоему по рефакторингу книга была, не помню.
Что то я читал несколько раз ваше сообщение и не совсем понимаю, голова щас другим забита...
Т.е. в каждом производном от интерфейса классе так писать?:
Код: plaintext
1.
2.
3.
4.
 void Test()
 {
    a->Test();
 }
Мне кажется вы всеми силами пытаетесь смоделировать абстрактный класс, т.е. обхитрить язык.
А я толкал мысль о том, что можно попробывать выбрать какое-нибудь другое архитектурное решение. Не могу сказать точно какое, потому как не знаю вашу задачу.
По крайней мере я держу у себя в уме такое правило: если что-то слишком сложно в коде получается, то явно что-то не то в самой идее и нужно ее пересмотреть...
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36451199
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAYAKOV_SV,
Да ёмоё, если нужно чтобы всё же было наследование, но при этом не подходит конкретный класс в качестве родителя, и нужно не дублировать код в наследниках, то как вы предлагаете обойтись без абстрактного класса, как не совмещением наследования интерфейса и агрегирования?
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36451383
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoMAYAKOV_SV,
Да ёмоё, если нужно чтобы всё же было наследование, но при этом не подходит конкретный класс в качестве родителя, и нужно не дублировать код в наследниках, то как вы предлагаете обойтись без абстрактного класса, как не совмещением наследования интерфейса и агрегирования?
Если вам агрегирование поможет, я только рад, я не против.
Главное не забывайте тестировать, если рефакторите существующий код.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36451557
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAYAKOV_SVXDiaBLoMAYAKOV_SV,
Да ёмоё, если нужно чтобы всё же было наследование, но при этом не подходит конкретный класс в качестве родителя, и нужно не дублировать код в наследниках, то как вы предлагаете обойтись без абстрактного класса, как не совмещением наследования интерфейса и агрегирования?
Если вам агрегирование поможет, я только рад, я не против.
Главное не забывайте тестировать, если рефакторите существующий код.
Да, хотелось бы в юнит-тесты завернуть, да что-то не пойму как их к С++ Билдеру прикрутить. Вручную тестирую
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36451733
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLo
Да, хотелось бы в юнит-тесты завернуть, да что-то не пойму как их к С++ Билдеру прикрутить. Вручную тестирую
Тестирование - вообще мое самое слабое место.
Книгу все собираюсь почитать по этой теме.
Но мой опыт мне показал, что к тестированию нужно очень серьезно относиться.
Хорошо, если пользователь - добрая и терпеливая тётя, или ошибка в программе не так серьезно может отразится. А если нет?...
В этом плане, я побаиваюсь делать рефакторинг.
Если делаю, то только на разрабатываемом проекте, но не на уже работающем.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36451784
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36451823
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAYAKOV_SVXDiaBLo
Да, хотелось бы в юнит-тесты завернуть, да что-то не пойму как их к С++ Билдеру прикрутить. Вручную тестирую
Тестирование - вообще мое самое слабое место.
Книгу все собираюсь почитать по этой теме.
Но мой опыт мне показал, что к тестированию нужно очень серьезно относиться.
Хорошо, если пользователь - добрая и терпеливая тётя, или ошибка в программе не так серьезно может отразится. А если нет?...
В этом плане, я побаиваюсь делать рефакторинг.
Если делаю, то только на разрабатываемом проекте, но не на уже работающем.
Я делаю рефакторинг на уже работающем проекте. Ибо приходится вносить изменения, а программа настолько неповоротлива, что нужно по всему телу программы вносить изменения, ради какой-нибудь мелочи. Поэтому я стараюсь локализовать изменения, переименовать объекты из ComboBox1 во что-нибудь внятное, типа cmbClientGroups и всякое в этом роде. Вчера как раз занимался переименованием всех этих комбо, чек, и каких бы то ни было боксов. Не понимаю, как тот программист вообще с этим управлялся...
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36451987
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLo,

Извините меня, пожалуйста, наверно у меня и правда сегодня каша в голове, по-моему я агрегирование с делегированием спутал...
Ну не важно, вот книга:
Рефакторинг: улучшение существующего кода.
Авторы: Мартин Фаулер, ...
Глава 11. Решение задач обобщения.
...
Замена наследования делегированием (Replace Inheritance with Delegation)

Книга вообще хорошая, если есть у вас время на нее можно и почитать...
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36452022
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAYAKOV_SVXDiaBLo,

Извините меня, пожалуйста, наверно у меня и правда сегодня каша в голове, по-моему я агрегирование с делегированием спутал...
Ну не важно, вот книга:
Рефакторинг: улучшение существующего кода.
Авторы: Мартин Фаулер, ...
Глава 11. Решение задач обобщения.
...
Замена наследования делегированием (Replace Inheritance with Delegation)

Книга вообще хорошая, если есть у вас время на нее можно и почитать...
У меня она есть, но я хотел её почитать, когда паттерны в голове утрясутся. А я их ещё и не все знаю пока.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36452042
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLo
У меня она есть, но я хотел её почитать, когда паттерны в голове утрясутся. А я их ещё и не все знаю пока.
Очень хорошо, что есть, вот и посмотрите 11 главу.
Она вообще намного проще паттернов и читается легко, да и тема там немного другая...
Да что я вам тут все советую, я ведь тоже учусь пока.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36452058
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAYAKOV_SVXDiaBLo
У меня она есть, но я хотел её почитать, когда паттерны в голове утрясутся. А я их ещё и не все знаю пока.
Очень хорошо, что есть, вот и посмотрите 11 главу.
Она вообще намного проще паттернов и читается легко, да и тема там немного другая...
Да что я вам тут все советую, я ведь тоже учусь пока.
Тема то другая, но вечно читаю кучу книг параллельно, в итоге каша в голове. Надо бы посвятить ближайший месяц, добиванию книги GoF, а то я так и не понял, почему меня на этом форуме пытались убедить, что фабричный метод и абстрактная фабрика сильно разные вещи, если по мне так абстрактная фабрика, это набор фабричных методов? Короче пока не вижу важных нюансов видимо.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36452093
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoНадо бы посвятить ближайший месяц, добиванию книги GoF, а то я так и не понял, почему меня на этом форуме пытались убедить, что фабричный метод и абстрактная фабрика сильно разные вещи, если по мне так абстрактная фабрика, это набор фабричных методов? Короче пока не вижу важных нюансов видимо.
По своему опыту обучения, скажу, что выучить наизусть паттерны можно и если человека разбудят ночью и спросят - он сможет по памяти UML диаграмму нарисовать любого шаблона.
Но применять реально на практике, где и какие шаблоны в проекте применить - вот главная трудность. Здесь уже показатель мастерства, который приходит с опытом, т.е. не сразу, а спустя какое-то длительное время
Так что не стоит прямо торопить время и стараться стать знатоком за месяц.
Я вот два года назад прочел GoF и так до сих пор не владею шаблонами сильно-то, да хотя и практики мало было...
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36452105
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAYAKOV_SVXDiaBLoНадо бы посвятить ближайший месяц, добиванию книги GoF, а то я так и не понял, почему меня на этом форуме пытались убедить, что фабричный метод и абстрактная фабрика сильно разные вещи, если по мне так абстрактная фабрика, это набор фабричных методов? Короче пока не вижу важных нюансов видимо.
По своему опыту обучения, скажу, что выучить наизусть паттерны можно и если человека разбудят ночью и спросят - он сможет по памяти UML диаграмму нарисовать любого шаблона.
Но применять реально на практике, где и какие шаблоны в проекте применить - вот главная трудность. Здесь уже показатель мастерства, который приходит с опытом, т.е. не сразу, а спустя какое-то длительное время
Так что не стоит прямо торопить время и стараться стать знатоком за месяц.
Я вот два года назад прочел GoF и так до сих пор не владею шаблонами сильно-то, да хотя и практики мало было...
Да мне ща нужно паттерны в мозг вбить, а то я понимаю что мне нужен один из порождающих паттернов, а какой, месяц решить не могу, т.к. времени сосредоточиться на проблеме нет, а так, от балды писать программу на основе абстрактной фабрики, не решаюсь. Просто я вижу что иначе никак, код получится грязным и негибким, но с каким шаблоном он будет чище и понятнее, пока не врубаюсь. То ли не париться, и сделать на одном из них, а потом если чё, долго и нудно рефакторить, зато практика будет
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36452159
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLo
Да мне ща нужно паттерны в мозг вбить, а то я понимаю что мне нужен один из порождающих паттернов, а какой, месяц решить не могу, т.к. времени сосредоточиться на проблеме нет, а так, от балды писать программу на основе абстрактной фабрики, не решаюсь. Просто я вижу что иначе никак, код получится грязным и негибким, но с каким шаблоном он будет чище и понятнее, пока не врубаюсь. То ли не париться, и сделать на одном из них, а потом если чё, долго и нудно рефакторить, зато практика будет
Я вас прекрасно понимаю, у меня точно такая же логика мыслей была в свое время.
Можно наверно попробывать так: сделать параллельно какие-то модели программы - потыкатся прикинуть как будет она модифицироватся, наращиваться, проверить ее гибгость.
Т.е. обязательно предположения и теорию проверить на практике, а там видно будет.
На модели побалаваться, поэкспериментировать, если понравится, можно будет применить и к рабочей программе.
Т.е. вы сразу не будете ломать, не подумав, главную программу и опыт наберете.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36452189
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAYAKOV_SV,
Да просто как время появляется, пытаюсь переделать с нуля одну рабочую программу. А то она писец разрастается постоянно, костылей навырастало. Стыдно код показывать, а у нас новых программистов взяли, нужно будет потом показывать, обучать. Опять же программа на С++, а я беседовал, они как-то на Java предпочитают писать. А я как раз подумывал на Жаву переписать эту программу. Опять же поскольку у меня штук 5 программ, с частично схожим функционалом, думал сделать общую библиотеку для всех программ, чтобы сразу во всех править нужные участки. В общем некая унификация, качественный код, и обернуть юнит-тестами. Это было бы идеально. Чем оставлять старый срач в коде.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36452256
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAYAKOV_SV По своему опыту обучения, скажу, что выучить наизусть паттерны можно и если человека разбудят ночью и спросят - он сможет по памяти UML диаграмму нарисовать любого шаблона.Но применять реально на практике, где и какие шаблоны в проекте применить - вот главная трудность. Здесь уже показатель мастерства, который приходит с опытом, т.е. не сразу, а спустя какое-то длительное время
+100500

Мне вообще кажется, что влияние паттернов на lifecycle проектов немного преувеличено. В конечном счёте, если руководитель - с головой то всё у него работает и без советов GoF.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36452273
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonMAYAKOV_SV По своему опыту обучения, скажу, что выучить наизусть паттерны можно и если человека разбудят ночью и спросят - он сможет по памяти UML диаграмму нарисовать любого шаблона.Но применять реально на практике, где и какие шаблоны в проекте применить - вот главная трудность. Здесь уже показатель мастерства, который приходит с опытом, т.е. не сразу, а спустя какое-то длительное время
+100500

Мне вообще кажется, что влияние паттернов на lifecycle проектов немного преувеличено. В конечном счёте, если руководитель - с головой то всё у него работает и без советов GoF.
Я сам пишу приложения от начала и до конца. Мне только примерно описывают что должна делать программа. И я вижу, что без паттернов тут никуда, дурно пахнущий код получается.
...
Рейтинг: 0 / 0
Абстрактные классы.
    #36452285
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoЯ сам пишу приложения от начала и до конца. Мне только примерно описывают что должна делать программа. И я вижу, что без паттернов тут никуда, дурно пахнущий код получается.
Здесь еще один вопрос возникает. Если двум девелоперам, хорошо знающим GoF, независимо дать одну и ту-же постановку, будут ли они использовать одинакоые наборы паттернов?

Я думаю - нет.
...
Рейтинг: 0 / 0
63 сообщений из 63, показаны все 3 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Абстрактные классы.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]