Re[2]: Design by Сontract
От: Юрий Жмеренецкий ICQ 380412032
Дата: 13.04.08 14:08
Оценка:
Здравствуйте, Андрей Коростелев, Вы писали:

АК>Здравствуйте, Юрий Жмеренецкий, Вы писали:


ЮЖ>>Как уже было сказано выше, это насильно создает новые состояния. В клинических случаях они сливаются в одно — в корневом try/catch:


АК>Если введение нового ошибочного состояния не вписывается в текущий контекст — ошибка просто прокидывается выше по стеку вызовов, покуда не встретится контекст, знающий что с ошибкой делать. Причем, при использовании исключений для этого как правило даже не придется писать дополнительный код.


Если такой контекст не существует, то исключение будет перехвачено в корневом обработчике. Мой поинт в том что этот обработчик на самом деле _не_знает_ что что делать с этим исключением. и замалчивание — есть скрытая ошибка.

АК>Вообще, в такого рода обсуждениях не может быть универсального правильного совета, пока не ясно, что представляет собой f().


Речь не об универсально-правильном совете...

АК>Очевидно, что подход к проверке предуловий будет различен, в случае, если f() является частью loosely-coupled интерфейса для конечного пользователя, и в случае, если f() предназначена для взаимодействоя в рамках high-cohesive системы.


Какой может быть подход в проверке предусловий? предусловия не нужно проверять. В этом смысл DbC. Они _всегда_ выполняются. Иначе теряется их смысл...
Если есть контракт(и не важно в чем он выражен, в документации, в ограничении на типы или другими путями), то он должен соблюдаться. Контекст использования в данном случае не имеет значения. При этом данные(аргументы, etc.) будут проверены явно при первой возможности.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.