State about the pre- and post conditions
Programmers can easily document other pre- and post conditions and class invariants, though, and insert code to check most value preconditions, and some post conditions and class invariants. Checks can also be inserted easily to check that supposedly unreachable code is never executed. Assertion checks can raise suitable exceptions when they fail, hence halting erroneous programs.