aka DBC
ThePragmaticProgrammer에 등장하는 ComputerProgramming에 관한 교훈중 하나.
계약한 것만 만든다. 즉, 요구사항을 명확히 하고, 그 요구사항만 만들어야 한다. 그렇지 않으면, 너무나도 광범위한 스케일에 당신이 짜야할 코드는 끝없이 늘어만 갈것이다.
보통, 다음의 세가지로 특정기능에 대한 요구사항을 명시한다.
- Preconditions
- Postcondotions
- Class invariants
AssertiveProgramming역시 DBC 개념을 따른다.
코드상에 이 개념을 포함시킬 수 있는데, built-in으로 지원하는 ProgrammingLanguage가 Eiffel이다. Cee에선 Nana, Java에선 iContract가 이 개념을 지원하며, 굳이 지원이 안될경우, comments로도 충분한 효과를 낼 수 있다.
Python에서는 super class의 method에 raise NotImplementedError 를 적음으로써 비슷한 효과를 낸다. 이 경우, 이 class를 상속받는 class는 반드시 그 method가 있어야만 한다. 예제 FactoryMethodMaze.py의 Maze class.