답변:
계약에 의한 설계와 방어 프로그래밍은 서로 상반됩니다. DbC에서는 공동 작업자 간의 계약을 정의하고 공동 작업자가 계약을 존중한다는 가정하에 프로그램을 작성합니다. 방어 프로그래밍에서는 공동 작업자 가 계약을 위반한다고 가정하여 프로그래밍합니다 .
DbC 스타일로 작성된 실제 제곱근 루틴은 계약에서 음수를 전달할 수 없으며 음수를 절대로 만날 수 없다고 가정합니다. 방어 적으로 작성된 실제 제곱근 루틴은 그것이 음수로 전달되고 적절한 예방 조치를 취한다고 가정합니다.
참고 : 물론 DbC에서는 다른 사람 이 계약을 확인할 수 있습니다. 예를 들어 Eiffel에서는 계약 시스템이 런타임에 음수를 확인하고 적절한 예외를 발생시킵니다. Spec #에서 정리 증명자는 컴파일 타임에 음수를 확인하고 루틴에 음수가 전달되지 않는다는 것을 증명할 수없는 경우 빌드에 실패합니다. 차이점은 프로그래머 가이 검사를하지 않는다는 것입니다.
계약에 의한 설계 (DbC)는 방어 적으로 프로그래밍하는 방법 일 수 있습니까?
예.
"방어 프로그래밍"은 종종 시간을 낭비하는 변명입니다. 일상적인 예외를 유발하는 것들을 검사하는 데 종종 시간을 낭비합니다. 예외 대신 예외 처리 절 대신 추가 IF 문이 작성됩니다.
계약을 정의하고 완료하십시오.
누군가가 계약을 위반하면 프로그램은 정상적인 이벤트 과정에서 정상적으로 처리 할 수있는 정상적인 예외를 해제하고 제기합니다.
"방어 프로그램"및 "오류 방지"는 오류를 방지하기보다는 오류를 추가하는 것으로 표시 될 수 있습니다 (오류 방지 검사 자체가 잘못 되었기 때문에).
예외 처리는 "방어 프로그래밍"보다 훨씬 더 나은 예외를 침묵, 기록 및 처리 할 수 있습니다.