|
|
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
Если они нужны, но их нет в языке программирования, то остаётся только делать функции типа Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2010, 13:36:56 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
Лучше экзепшн имхо. Так будет точно понятно что этой функциональности в классе нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2010, 14:46:25 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
zloy denЛучше экзепшн имхо. Так будет точно понятно что этой функциональности в классе нет. Ну и замечательно. Спасибо. Просто хотел убедиться, что не я один так считаю :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2010, 14:53:12 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
XDiaBLoЕсли они нужны, но их нет в языке программирования, то остаётся только делать функции типа Код: plaintext 1. 2. 3. 4. Возможно - это следствие неудачного дизайна базового класса или интерфейса. У меня тоже часто были муки творчества, когда долго смотрел на интерфейс и думал... а нахера собсно там там много методов? А подобные throw-s вставляет Netbeans или другая IDE. Я-бы туда запихнул assert(..) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2010, 21:11:39 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
XDiaBLo Код: plaintext 1. 2. 3. 4. "Метод еще не осознан"? :) Not implemented yet... Уж лучше б по-русски писали, чем такой кривой английский потом в коде видеть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2010, 21:33:15 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
ну и вылетит потом в проге ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 00:37:38 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
Петросъянну и вылетит потом в проге Не должны быть перменные типа абстрактного класса. Если их не будет, то и исключений соотвественно. Если бы у меня была такая ситуация, сделал бы также как автор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 00:45:53 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
А может быть так надо сделать? Всё таки XML... едрён-батон. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 00:55:14 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
an0nymXDiaBLo Код: plaintext 1. 2. 3. 4. "Метод еще не осознан"? :) Not implemented yet... Уж лучше б по-русски писали, чем такой кривой английский потом в коде видеть. Тьфу, да, точно. Ошибся, с кем не бывает. Проверил, Нетбинс вообще "Not supported yet." пишет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 06:51:02 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
maytonXDiaBLoЕсли они нужны, но их нет в языке программирования, то остаётся только делать функции типа Код: plaintext 1. 2. 3. 4. Возможно - это следствие неудачного дизайна базового класса или интерфейса. У меня тоже часто были муки творчества, когда долго смотрел на интерфейс и думал... а нахера собсно там там много методов? А подобные throw-s вставляет Netbeans или другая IDE. Я-бы туда запихнул assert(..) Да не, просто баловался с шаблонами проектирования, читал в книге GoF, но писал не на C++, а на ActionScript, но тут пример на яве привёл. Чтобы не пугать людей. И пытался воплощать в код, именно как в книге, без своего творчества, которое на практике вообще-то вполне допустимо и желательно. Но для начала хотелось сделать точно по библии. И наткнулся на отсутствие абстрактных классов. Вот и извращаюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 06:54:13 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
maytonА может быть так надо сделать? Всё таки XML... едрён-батон. Код: plaintext 1. 2. 3. 4. У меня там было Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 06:55:42 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
XDiaBLoно писал не на C++, а на ActionScript, но тут пример на яве привёл Прелестно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 12:05:26 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
an0nymXDiaBLoно писал не на C++, а на ActionScript, но тут пример на яве привёл Прелестно. Да один фиг, ни там, ни там абстрактных классов нет. Чегож народ пугать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 12:07:09 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
АльмалексияПетросъянну и вылетит потом в проге Не должны быть перменные типа абстрактного класса. Если их не будет, то и исключений соотвественно. Если бы у меня была такая ситуация, сделал бы также как автор. зачем тогда исключение если его все равно не будет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 13:30:47 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
XDiaBLo Да один фиг, ни там, ни там абстрактных классов нет. Чегож народ пугать? На Яве нет абстрактніх классов? Это откуда такая деза? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 13:32:33 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
ПетросъянАльмалексияПетросъянну и вылетит потом в проге Не должны быть перменные типа абстрактного класса. Если их не будет, то и исключений соотвественно. Если бы у меня была такая ситуация, сделал бы также как автор. зачем тогда исключение если его все равно не будет? Чтобы если случайно где-то вдруг попытаешься получить экземпляр абстрактного класса, получить в конце концов эксепшен. Хотя бы когда-нибудь в рантайме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 13:34:12 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
MozokXDiaBLo Да один фиг, ни там, ни там абстрактных классов нет. Чегож народ пугать? На Яве нет абстрактніх классов? Это откуда такая деза? Расскажи нам про них. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 13:34:31 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
Хмм, я ошибался Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 13:37:13 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
XDiaBLoЯ даже и не знал про абстрактные классы в Яве, то-ли забыл, то-ли проморгал. Ай-ай-ай ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 13:43:41 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
maytonXDiaBLoЯ даже и не знал про абстрактные классы в Яве, то-ли забыл, то-ли проморгал. Ай-ай-ай Совсем уже с ума свели Я пытаясь работать с тремя языками параллельно, совсем в них запутался Ща сижу, на С++ пишу, дома на ЭкшнСкрипте, а на той неделе на работе с Явой ковырялся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 13:48:32 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
везде понемногу, нигде хорошо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 13:53:09 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
Петросъянвезде понемногу, нигде хорошо Везде хорошо, но не отлично. Так точнее будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 13:55:07 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
XDiaBLoПетросъянвезде понемногу, нигде хорошо Везде хорошо, но не отлично. Так точнее будет. Маловероятно. Везде удовлетворительно, нигде не хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 14:28:29 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
an0nymXDiaBLoПетросъянвезде понемногу, нигде хорошо Везде хорошо, но не отлично. Так точнее будет. Маловероятно. Везде удовлетворительно, нигде не хорошо. Факты я уже сказал. Кончайте пытаться унизить меня. Вам от этого какой прибыток? Модератор: Товарищи, спокойнее :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 14:42:11 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
По теме - assert разве не для этого? В релизе промолчит, в отладке обругается. Если нет поддржки assert со стороны языка, то всегда можно какой-нибудь заменитель изобразить, IMHO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 17:18:51 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
pizmonПо теме - assert разве не для этого? В релизе промолчит, в отладке обругается. Если нет поддржки assert со стороны языка, то всегда можно какой-нибудь заменитель изобразить, IMHO. А когда по вашему assert отработает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2010, 06:55:32 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
XDiaBLoА когда по вашему assert отработает?не в этом дело, исключение можно проигнорировать, ассерт - никогда, или это не ассерт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2010, 10:53:00 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
egorychXDiaBLoА когда по вашему assert отработает?не в этом дело, исключение можно проигнорировать, ассерт - никогда, или это не ассерт Вообще, ошибка должна и в релизе остаться ошибкой. Но я не утверждаю, что ассерты не нужны, можно и так сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2010, 12:04:55 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
Как оказалось, в разных местах под "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). Удобно ж, ёпрст! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2010, 12:15:02 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
egorychисключение можно проигнорировать, ассерт - никогда, или это не ассерт Ну, assert - в конечном итоге тоже исключение. Я для себя решил так: если пользователь может что-то поделать с проблемой, то это должно быть оформлено исключением (File not found, Host unreachable, Disk full и так далее), теоретически доходящим до пользователя, а если пользователь тут ни ухом, ни рылом помочь не может, то лучше бы тут был отключаемый assert (вот вызов "запрещенного" метода - как раз тот случай). Но это моё мнение, я на нем не настаиваю :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2010, 12:22:53 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
pizmonegorychисключение можно проигнорировать, ассерт - никогда, или это не ассерт Ну, assert - в конечном итоге тоже исключение. Я для себя решил так: если пользователь может что-то поделать с проблемой, то это должно быть оформлено исключением (File not found, Host unreachable, Disk full и так далее), теоретически доходящим до пользователя, а если пользователь тут ни ухом, ни рылом помочь не может, то лучше бы тут был отключаемый assert (вот вызов "запрещенного" метода - как раз тот случай). Но это моё мнение, я на нем не настаиваю :) Ога, а юзер потом будет говорить:"у меня не работает, разберитесь", и никакой более информации. Это ещё хорошо, если получится воссоздать ошибку у себя на машине, повторив его действия. Но иногда ошибка может быть повторимой только на его машине. Как быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2010, 12:29:28 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
XDiaBLoНо иногда ошибка может быть повторимой только на его машине. Как быть? Ставить ему test build, думать об этом... как-то так. Трудно и не везде применимо, согласен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2010, 12:35:45 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
pizmonXDiaBLoНо иногда ошибка может быть повторимой только на его машине. Как быть? Ставить ему test build, думать об этом... как-то так. Трудно и не везде применимо, согласен. Именно, не везде. Нужно чтобы релиз показывал все важные ошибки, а тётя, у которой ошибка случилась, могла бы зачитать сообщение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2010, 12:40:22 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
XDiaBLoНужно чтобы релиз показывал все важные ошибки, а тётя, у которой ошибка случилась, могла бы зачитать сообщение. В порядке трёпа: Тестирование с помощью тёти - не наш метод. Вообще-то, тёте надо видеть сообщения в форме простых команд, типа "Выкинь отсмотренное кино с винчестера", "Воткни патчкорд в дырку", "Больше так не делай". Все остальные сообщения для тёти обычно сливаются в одно могучее "Shit happens", и при анализе опираться на устные показания тёти не стоит по-любому, imho. Сбрось в файлик настоящий Exception, стек, дату, время, разные важные параметры (в том числе, например, трек пройденных и "заглоченных" assertов, если будете свою их реализацию делать), и нехай тётя файлик этот по мылу пришлёт. Не грузите тётю сообщениями типа "Abstract Error" или, например, незабываемое "Произошел разрушительный сбой по адресу XXXXXXXX". Тёте что этот адрес, что разрушительная сила сбоя, что ваши абстракции - до одного и того же фонаря. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2010, 12:52:45 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
pizmonXDiaBLoНужно чтобы релиз показывал все важные ошибки, а тётя, у которой ошибка случилась, могла бы зачитать сообщение. В порядке трёпа: Тестирование с помощью тёти - не наш метод. Вообще-то, тёте надо видеть сообщения в форме простых команд, типа "Выкинь отсмотренное кино с винчестера", "Воткни патчкорд в дырку", "Больше так не делай". Все остальные сообщения для тёти обычно сливаются в одно могучее "Shit happens", и при анализе опираться на устные показания тёти не стоит по-любому, imho. Сбрось в файлик настоящий Exception, стек, дату, время, разные важные параметры (в том числе, например, трек пройденных и "заглоченных" assertов, если будете свою их реализацию делать), и нехай тётя файлик этот по мылу пришлёт. Не грузите тётю сообщениями типа "Abstract Error" или, например, незабываемое "Произошел разрушительный сбой по адресу XXXXXXXX". Тёте что этот адрес, что разрушительная сила сбоя, что ваши абстракции - до одного и того же фонаря. Тёти мне звонят и пишут, описывают ситуацию. Но я всё подумываю сделать сервачок, на который будет регистрироваться весь порядок действий пользователей. Чтобы с пары нажатий кнопок, видеть всю ситуацию. Пока некогда такое делать, но сплю и вижу такое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2010, 12:59:17 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
Толкование стека исключений отдаётся полностью на откуп разработчику, а не пользователю. Обычно в оконном приложении при ошибке, юзер получает красный лопух с грозным сообщением "Приложение вызвало ошибку code = PIZDETS:0001. Обратитесь в службу поддержки". При этом (я очень надеюсь) полный стек ошибок должен выпасть в какой-нибудь application.YYYY-MM-DD.log. Девелопер, увидев такие дела может детализировать сообщения. Например: стартовать приложение с ассертами там, или добавить logging.level=SUPPORT и делать прочие пляски с бубном. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2010, 13:05:40 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
Имхо, стоит сделать для вывода ошибок нечто такое: Выводится окошко с вменяемым текстом исключения (с точки зрения пользователя) и внизу нечто типа кнопки "Детали", нажав на которую будет показана полная информация о исключении в контроле, из которого можно скопировать текст. Тогда при ошибке пользователь не пугается увидев какой-то ужас, но при этом у него есть возможность просто отправить по запросу разработчика текст исключения просто скопировав его из деталей. Тут много объяснять не потребуется: 1. Нажмите кнопку "Детали" 2. Скопируйте из окошка снизу весь текст и скиньте мне на почту/в аську ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2010, 15:05:04 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
XDiaBLo Тёти мне звонят и пишут, описывают ситуацию. Но я всё подумываю сделать сервачок, на который будет регистрироваться весь порядок действий пользователей. Чтобы с пары нажатий кнопок, видеть всю ситуацию. Пока некогда такое делать, но сплю и вижу такое. После того, как тётя не смогла по телефону рассказать хотя бы по буквам, что там по английски написано в сообщении об ошибке, я сделал такую вещь: создал табличку (у меня база MS-SQL) в которую записывал информацию о коннектах/реконнектах и ошибках, типа {имя пользователя, время, текст}. Когда звонит тётя, я открываю табличку и вижу, что там у нее было. Мне она звонит очень редко, т.к. уже все отлажено. А если у вас часто такие ситуации встречаются, то стоит чего-нибудь подобное придумать. По крайней мере это не так уж и сложно сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 08:13:40 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
pizmonНе грузите тётю сообщениями типа "Abstract Error" или, например, незабываемое "Произошел разрушительный сбой по адресу XXXXXXXX". Тёте что этот адрес, что разрушительная сила сбоя, что ваши абстракции - до одного и того же фонаря. Как-то играл в какую-то игру про гонки. И несколько раз она вылетала в Windows с сообщением об ошибке: я непомню точно, что там было написано, но что-то про неверный вызов чисто виртуального метода. XDiaBlo Это я к тому пишу, что хочу сказать: если язык не поддерживает абстрактные классы, то какой смысл их иммитировать? Может быть применить другое архитектурное решение, при котором не надо будет ухищрятся так? Есть ситуации, когда не только шаблоны, но и ООП могут только повредить проекту, если применять это не там, где нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 08:43:49 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
MAYAKOV_SV, А есть ситуации, где без абстрактных классов возникнет либо дублирование кода, либо базовый класс, который допускает инстанцирование, при том, что он сам по себе, использоваться не должен. Как быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 09:17:25 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
XDiaBlo, Как мне кажется, идея релизовывать вот это: Код: plaintext 1. 2. 3. 4. Прежде всего будут страдать и плакать тёти, когда у них это вылетит в самый неподходящий момент. Да и наверно писать код, который по замыслу не должен выполнятся, как-то странно... Я не спорю, что есть такие приемы, но наверно чем меньше их в программе, тем лучше. Простите за критику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 09:18:28 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
XDiaBLoMAYAKOV_SV, А есть ситуации, где без абстрактных классов возникнет либо дублирование кода, либо базовый класс, который допускает инстанцирование, при том, что он сам по себе, использоваться не должен. Как быть? Тут нужно смотреть конкретную ситуацию. А так, выход всегда есть. Да и GoF не панацея от всех проблем. Я считаю, что нужно писать код так, чтобы многие ошибки можно было увидеть на стадии компиляции, а не во время выполнения. Я как-то сделал абстрактный класс стратегия, потом наделал конкретных стратегий от него. Смотрю - что-то методы у классов маленькие. Потому плюнул на это и написал простую процедуру вместо всех этих классов, которая была всего одна страница в объеме - и был просто счастлив Расширять ее не надо было, да в использовании она проще была. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 09:26:51 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
MAYAKOV_SV, Хочу кое-что со стратегиями сделать. Ща там лапша на тыщу строк, которую я уже немного упорядочил. Любопытно будет увидеть что получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 09:39:06 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
XDiaBLoMAYAKOV_SV, А есть ситуации, где без абстрактных классов возникнет либо дублирование кода, либо базовый класс, который допускает инстанцирование, при том, что он сам по себе, использоваться не должен. Как быть? У меня сейчас каша в голове, может не все хорошо в моем примере, но надеюсь может поможет Проблему можно решить заменой наследования: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 09:42:03 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
MAYAKOV_SV, Я подозреваю что вы всё же имеете в виду что-то типа того, чтобы наследовать все классы от одного интерфейса, а то, что было бы в абстрактном классе, реализовывать в отдельном классе, и использовать его через агрегирование. В таком случае в вашем коде не хватает общего предка. Причём в С++ сие смысла не имеет, а в языках без абстрактных классов, но с интерфейсами, имеет. Вот это уже хороший вариант, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 09:50:24 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
XDiaBLoMAYAKOV_SV, Я подозреваю что вы всё же имеете в виду что-то типа того, чтобы наследовать все классы от одного интерфейса, а то, что было бы в абстрактном классе, реализовывать в отдельном классе, и использовать его через агрегирование. В таком случае в вашем коде не хватает общего предка. Причём в С++ сие смысла не имеет, а в языках без абстрактных классов, но с интерфейсами, имеет. Вот это уже хороший вариант, спасибо. Я где-то в книге читал про замену наследования на агрегирования, помоему по рефакторингу книга была, не помню. Что то я читал несколько раз ваше сообщение и не совсем понимаю, голова щас другим забита... Т.е. в каждом производном от интерфейса классе так писать?: Код: plaintext 1. 2. 3. 4. А я толкал мысль о том, что можно попробывать выбрать какое-нибудь другое архитектурное решение. Не могу сказать точно какое, потому как не знаю вашу задачу. По крайней мере я держу у себя в уме такое правило: если что-то слишком сложно в коде получается, то явно что-то не то в самой идее и нужно ее пересмотреть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 10:08:37 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
MAYAKOV_SV, Да ёмоё, если нужно чтобы всё же было наследование, но при этом не подходит конкретный класс в качестве родителя, и нужно не дублировать код в наследниках, то как вы предлагаете обойтись без абстрактного класса, как не совмещением наследования интерфейса и агрегирования? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 10:14:55 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
XDiaBLoMAYAKOV_SV, Да ёмоё, если нужно чтобы всё же было наследование, но при этом не подходит конкретный класс в качестве родителя, и нужно не дублировать код в наследниках, то как вы предлагаете обойтись без абстрактного класса, как не совмещением наследования интерфейса и агрегирования? Если вам агрегирование поможет, я только рад, я не против. Главное не забывайте тестировать, если рефакторите существующий код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 11:16:41 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
MAYAKOV_SVXDiaBLoMAYAKOV_SV, Да ёмоё, если нужно чтобы всё же было наследование, но при этом не подходит конкретный класс в качестве родителя, и нужно не дублировать код в наследниках, то как вы предлагаете обойтись без абстрактного класса, как не совмещением наследования интерфейса и агрегирования? Если вам агрегирование поможет, я только рад, я не против. Главное не забывайте тестировать, если рефакторите существующий код. Да, хотелось бы в юнит-тесты завернуть, да что-то не пойму как их к С++ Билдеру прикрутить. Вручную тестирую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 12:01:58 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
XDiaBLo Да, хотелось бы в юнит-тесты завернуть, да что-то не пойму как их к С++ Билдеру прикрутить. Вручную тестирую Тестирование - вообще мое самое слабое место. Книгу все собираюсь почитать по этой теме. Но мой опыт мне показал, что к тестированию нужно очень серьезно относиться. Хорошо, если пользователь - добрая и терпеливая тётя, или ошибка в программе не так серьезно может отразится. А если нет?... В этом плане, я побаиваюсь делать рефакторинг. Если делаю, то только на разрабатываемом проекте, но не на уже работающем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 12:47:39 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
MAYAKOV_SV, рекомендую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 12:56:42 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
MAYAKOV_SVXDiaBLo Да, хотелось бы в юнит-тесты завернуть, да что-то не пойму как их к С++ Билдеру прикрутить. Вручную тестирую Тестирование - вообще мое самое слабое место. Книгу все собираюсь почитать по этой теме. Но мой опыт мне показал, что к тестированию нужно очень серьезно относиться. Хорошо, если пользователь - добрая и терпеливая тётя, или ошибка в программе не так серьезно может отразится. А если нет?... В этом плане, я побаиваюсь делать рефакторинг. Если делаю, то только на разрабатываемом проекте, но не на уже работающем. Я делаю рефакторинг на уже работающем проекте. Ибо приходится вносить изменения, а программа настолько неповоротлива, что нужно по всему телу программы вносить изменения, ради какой-нибудь мелочи. Поэтому я стараюсь локализовать изменения, переименовать объекты из ComboBox1 во что-нибудь внятное, типа cmbClientGroups и всякое в этом роде. Вчера как раз занимался переименованием всех этих комбо, чек, и каких бы то ни было боксов. Не понимаю, как тот программист вообще с этим управлялся... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 13:03:45 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
XDiaBLo, Извините меня, пожалуйста, наверно у меня и правда сегодня каша в голове, по-моему я агрегирование с делегированием спутал... Ну не важно, вот книга: Рефакторинг: улучшение существующего кода. Авторы: Мартин Фаулер, ... Глава 11. Решение задач обобщения. ... Замена наследования делегированием (Replace Inheritance with Delegation) Книга вообще хорошая, если есть у вас время на нее можно и почитать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 13:50:59 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
MAYAKOV_SVXDiaBLo, Извините меня, пожалуйста, наверно у меня и правда сегодня каша в голове, по-моему я агрегирование с делегированием спутал... Ну не важно, вот книга: Рефакторинг: улучшение существующего кода. Авторы: Мартин Фаулер, ... Глава 11. Решение задач обобщения. ... Замена наследования делегированием (Replace Inheritance with Delegation) Книга вообще хорошая, если есть у вас время на нее можно и почитать... У меня она есть, но я хотел её почитать, когда паттерны в голове утрясутся. А я их ещё и не все знаю пока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 14:01:28 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
XDiaBLo У меня она есть, но я хотел её почитать, когда паттерны в голове утрясутся. А я их ещё и не все знаю пока. Очень хорошо, что есть, вот и посмотрите 11 главу. Она вообще намного проще паттернов и читается легко, да и тема там немного другая... Да что я вам тут все советую, я ведь тоже учусь пока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 14:07:00 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
MAYAKOV_SVXDiaBLo У меня она есть, но я хотел её почитать, когда паттерны в голове утрясутся. А я их ещё и не все знаю пока. Очень хорошо, что есть, вот и посмотрите 11 главу. Она вообще намного проще паттернов и читается легко, да и тема там немного другая... Да что я вам тут все советую, я ведь тоже учусь пока. Тема то другая, но вечно читаю кучу книг параллельно, в итоге каша в голове. Надо бы посвятить ближайший месяц, добиванию книги GoF, а то я так и не понял, почему меня на этом форуме пытались убедить, что фабричный метод и абстрактная фабрика сильно разные вещи, если по мне так абстрактная фабрика, это набор фабричных методов? Короче пока не вижу важных нюансов видимо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 14:10:34 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
XDiaBLoНадо бы посвятить ближайший месяц, добиванию книги GoF, а то я так и не понял, почему меня на этом форуме пытались убедить, что фабричный метод и абстрактная фабрика сильно разные вещи, если по мне так абстрактная фабрика, это набор фабричных методов? Короче пока не вижу важных нюансов видимо. По своему опыту обучения, скажу, что выучить наизусть паттерны можно и если человека разбудят ночью и спросят - он сможет по памяти UML диаграмму нарисовать любого шаблона. Но применять реально на практике, где и какие шаблоны в проекте применить - вот главная трудность. Здесь уже показатель мастерства, который приходит с опытом, т.е. не сразу, а спустя какое-то длительное время Так что не стоит прямо торопить время и стараться стать знатоком за месяц. Я вот два года назад прочел GoF и так до сих пор не владею шаблонами сильно-то, да хотя и практики мало было... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 14:26:17 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
MAYAKOV_SVXDiaBLoНадо бы посвятить ближайший месяц, добиванию книги GoF, а то я так и не понял, почему меня на этом форуме пытались убедить, что фабричный метод и абстрактная фабрика сильно разные вещи, если по мне так абстрактная фабрика, это набор фабричных методов? Короче пока не вижу важных нюансов видимо. По своему опыту обучения, скажу, что выучить наизусть паттерны можно и если человека разбудят ночью и спросят - он сможет по памяти UML диаграмму нарисовать любого шаблона. Но применять реально на практике, где и какие шаблоны в проекте применить - вот главная трудность. Здесь уже показатель мастерства, который приходит с опытом, т.е. не сразу, а спустя какое-то длительное время Так что не стоит прямо торопить время и стараться стать знатоком за месяц. Я вот два года назад прочел GoF и так до сих пор не владею шаблонами сильно-то, да хотя и практики мало было... Да мне ща нужно паттерны в мозг вбить, а то я понимаю что мне нужен один из порождающих паттернов, а какой, месяц решить не могу, т.к. времени сосредоточиться на проблеме нет, а так, от балды писать программу на основе абстрактной фабрики, не решаюсь. Просто я вижу что иначе никак, код получится грязным и негибким, но с каким шаблоном он будет чище и понятнее, пока не врубаюсь. То ли не париться, и сделать на одном из них, а потом если чё, долго и нудно рефакторить, зато практика будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 14:31:34 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
XDiaBLo Да мне ща нужно паттерны в мозг вбить, а то я понимаю что мне нужен один из порождающих паттернов, а какой, месяц решить не могу, т.к. времени сосредоточиться на проблеме нет, а так, от балды писать программу на основе абстрактной фабрики, не решаюсь. Просто я вижу что иначе никак, код получится грязным и негибким, но с каким шаблоном он будет чище и понятнее, пока не врубаюсь. То ли не париться, и сделать на одном из них, а потом если чё, долго и нудно рефакторить, зато практика будет Я вас прекрасно понимаю, у меня точно такая же логика мыслей была в свое время. Можно наверно попробывать так: сделать параллельно какие-то модели программы - потыкатся прикинуть как будет она модифицироватся, наращиваться, проверить ее гибгость. Т.е. обязательно предположения и теорию проверить на практике, а там видно будет. На модели побалаваться, поэкспериментировать, если понравится, можно будет применить и к рабочей программе. Т.е. вы сразу не будете ломать, не подумав, главную программу и опыт наберете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 14:47:01 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
MAYAKOV_SV, Да просто как время появляется, пытаюсь переделать с нуля одну рабочую программу. А то она писец разрастается постоянно, костылей навырастало. Стыдно код показывать, а у нас новых программистов взяли, нужно будет потом показывать, обучать. Опять же программа на С++, а я беседовал, они как-то на Java предпочитают писать. А я как раз подумывал на Жаву переписать эту программу. Опять же поскольку у меня штук 5 программ, с частично схожим функционалом, думал сделать общую библиотеку для всех программ, чтобы сразу во всех править нужные участки. В общем некая унификация, качественный код, и обернуть юнит-тестами. Это было бы идеально. Чем оставлять старый срач в коде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 14:55:25 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
MAYAKOV_SV По своему опыту обучения, скажу, что выучить наизусть паттерны можно и если человека разбудят ночью и спросят - он сможет по памяти UML диаграмму нарисовать любого шаблона.Но применять реально на практике, где и какие шаблоны в проекте применить - вот главная трудность. Здесь уже показатель мастерства, который приходит с опытом, т.е. не сразу, а спустя какое-то длительное время +100500 Мне вообще кажется, что влияние паттернов на lifecycle проектов немного преувеличено. В конечном счёте, если руководитель - с головой то всё у него работает и без советов GoF. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 15:17:00 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
maytonMAYAKOV_SV По своему опыту обучения, скажу, что выучить наизусть паттерны можно и если человека разбудят ночью и спросят - он сможет по памяти UML диаграмму нарисовать любого шаблона.Но применять реально на практике, где и какие шаблоны в проекте применить - вот главная трудность. Здесь уже показатель мастерства, который приходит с опытом, т.е. не сразу, а спустя какое-то длительное время +100500 Мне вообще кажется, что влияние паттернов на lifecycle проектов немного преувеличено. В конечном счёте, если руководитель - с головой то всё у него работает и без советов GoF. Я сам пишу приложения от начала и до конца. Мне только примерно описывают что должна делать программа. И я вижу, что без паттернов тут никуда, дурно пахнущий код получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 15:22:40 |
|
||
|
Абстрактные классы.
|
|||
|---|---|---|---|
|
#18+
XDiaBLoЯ сам пишу приложения от начала и до конца. Мне только примерно описывают что должна делать программа. И я вижу, что без паттернов тут никуда, дурно пахнущий код получается. Здесь еще один вопрос возникает. Если двум девелоперам, хорошо знающим GoF, независимо дать одну и ту-же постановку, будут ли они использовать одинакоые наборы паттернов? Я думаю - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 15:26:54 |
|
||
|
|

start [/forum/topic.php?all=1&fid=16&tid=1343905]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
55ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
88ms |
get tp. blocked users: |
1ms |
| others: | 186ms |
| total: | 367ms |

| 0 / 0 |
