|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
18.01.2012, 23:27 | #11 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
|
18.01.2012, 23:35 | #12 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
Что делать объекту класса, если в результате каких-либо действий он перешёл/может перейти в некорректное состояние? Как-то умножение на несовместимую матрицу. Это один из тех примеров, где вполне оправданно использование исключений, так как класс не в состоянии ничего предпринять для устранения проблемы.
|
18.01.2012, 23:39 | #13 | ||||||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
Цитата:
это по вашему не ошибка? исключения так же приручают обрабатывать ошибки всегда, а не плевать на них(некорректный ввод, тоже ошибка) Цитата:
Цитата:
Цитата:
Цитата:
а если вызывающей стороне пофиг, на то отработал ли он или нет, то нафиг тогда вообще вызывать было? еще актуален вопрос настраиваемого поведения по исключениям. PS: я сейчас по работе пишу программу(центральная, см далее) для управления копировальным автоматом(ксерокс), обрабатываю сигналы от купюроприемника, от клавиатуры, от монетоприемника, и управляю дисплеем(из всего этого тока клава чуть менее обычная, лишь 5 клавиш). автомат должен быть полностью независим, и обработка ошибок это святое. и у меня стоит по if на каждый read,open,select. поверьте код не сильно шикарный от этого становиться. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
||||||
19.01.2012, 01:15 | #14 | ||||
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
Цитата:
Либо вызывающая сторона допускает вероятность подобной ситуации. И считает данную ситуацию частью своей штатной работы. В этом случае не_валидный аргумент никак не может угрожать ни работоспособности класса (который просто не пропустит такой аргумент), ни работоспособности вызывающей стороны (которая сознательно предусматривает подобный исход). Если вызывающей стороне обязательно нужен отчет класса о проделанной работы - пожалуйста. Для этого кодов ошибок хватит за глаза. Для безопасного кода не очень хороший подход. Для безопасности лучше совсем не умирать. Цитата:
Цитата:
Причем вызывающая сторона сама точно не знает какой именно, и когда. Но ей это и не важно. Ей все равно кто откроет файл. Главное, что бы все остальные элементы (когда им вдруг понадобится) имели дело с этим единственно открытым файлом. Есть класс, задача которого - открыть файл, и обеспечивать некие специфичные манипуляции над файлом. Причем, класс в принципе не может открыть итак уже открытый файл. Теперь Вася и Миша конструируют большую систему, а Феникс конструирует отдельный класс по работе с этим файлом. При попытке повторного открытия файла, класс не может выполнить свою работу, он же не может повторно открыть уже открытый файл. И поднимает панику - кидает исключение. Вася с Мишей заколеблются писать кучу ловушек для всех своих элементов, хотя им это исключение вообще три раза не упало. Им было бы достаточно, что бы класс просто тупо-молча возвращал этот многострадальный хэндл. Если бы такой класс делал я, то я бы не додумывал за вызывающую сторону, а возвращал бы хэндл, и делал пометку для GetLastError() Потому что я знаю: ответственность класса - делать свою работу, и при этом не допустить крэша по его вине. Если сигналы класса вызывающей стороной были проигнорированы, значит либо вызывающая сторона косячная (нарушение её инварианта), либо это нормальный рабочий Крэш по вине самой вызывающей стороны - это уже ответственность того разработчика, который её делал, и к классу никакого отношения не имеет. Итого: Если это ошибка программиста - исключения не спасут. Если это часть штатной работы вызывающей стороны - исключения не нужны, и наоборот, только мешают. Если вызывающей стороне нужна информация о ходе выполнения задачи, кода ошибки хватит за глаза. А что касается быдлокодеров - ну, заставь дурака богу молится... |
||||
19.01.2012, 02:09 | #15 | ||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
тут просто проситься синглетон(или класс со статическим полем файла) Цитата:
тот же SEH такое позволяет. а ну да, мы же гордые, нам подавай все на блюдечке с голубой каемочкой. нам подавай произвольность в выборе. лично по мне, так в Java грамотно сделали, исключения обрабатывать обязательно. только тогда приложения становяться максимум безопасными и устойчивыми. подведу итог: писать вам и дело ваше, я лично применяю опыт полученный с других ЯП. а насчет быдло-кода, в данном случае это попытка оскорбления и лишь. так как если безопасный код==быдло-код, то удачи вам. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
||
19.01.2012, 02:32 | #16 | ||
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
А вот ошибка это или нет - решать вызывающей стороне, а не классу. И исключения здесь в лучшем случае - кривая альтернатива кодам ошибки, а в худшем - костыли против ошибки программиста Цитата:
Быдло-кодера бесполезно дисциплинировать. А грамотного кодера дисциплинировать не нужно. Он проконтролирует инвариант своего класса. |
||
19.01.2012, 08:44 | #17 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
исключение оно должно бросать в том случае если файл еще не открыт и невозможно его открыть, ведь тогда класс(к примеру некий Logger) не сможет выполнять работу, а это ошибка. у класса, например FileStream практически любая ошибка будет критической, она переведет его в невалидное состояние. тут еще есть решение как относиться к исключениям, для меня обработка ошибок это святое. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
19.01.2012, 09:27 | #18 | |
Пользователь
Регистрация: 28.12.2011
Сообщений: 27
|
Цитата:
1. operator *= работает c мин. накладными затратами, чем его братья - бинарный и унарный operator * (у последних будет по крайне мере 2 выделения памяти. (вызовы конструкторов и одного деструктора !если надо)) Чтобы минимизировать затраты: а) operator *= - выполняет непосредственное умножение и присвоение б) operator * ( унарный и бинарный ) реализуют через operator *= Потому как ты реализовал крайне не рекомендуется. (Припаял еще вызов operator = ) Код:
Код:
Не стремись к универсальности, делай матрицы определенного типа, чтоб не было исключительных ситуаций (не той размерности) и тогда не потребуются исключения. Касательно матриц и их умножения - страйся вообще их не умножать - почитай "отложенные вычисления" у Страуструпа. Последний раз редактировалось ElectroMent; 19.01.2012 в 09:35. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Перегрузка операторов C++ | applegrub | Общие вопросы C/C++ | 4 | 20.12.2011 01:04 |
Перегрузка операторов | stas135642 | Общие вопросы C/C++ | 0 | 13.11.2011 23:09 |
С++,перегрузка операторов | colesik | Помощь студентам | 0 | 23.12.2010 23:07 |
Перегрузка операторов(С++) | Сергей AfeR | Помощь студентам | 0 | 16.06.2010 18:34 |
Перегрузка операторов, Организация перегрузки операторов | chagin_yav | Помощь студентам | 2 | 12.05.2008 09:15 |