Design By Contract, the brain child of Bertrand Meyer, is a method of building quality software by explicitly specifying what each function in a system requires to do its job, and what it provides to the caller. Design By Contract is fully integrated into the Eiffel language, designed by Dr. Meyer. Contracts as implemented by jContractor consist of preconditions, postconditions, and class invariants. Preconditions must hold at the beginning of a method, postconditions at the end of a method, and invariants at all observable points of execution.
Although Design By Contract is a formal part of some programming languages, such as Eiffel, it is not a formal part of Java. Nevertheless, Design By Contract is very useful for designing classes and interfaces. It can both guide the discovery of a more robust design, and allow more effective expression of that design in javadoc.
Requirements are simply any conditions on use, for example
conditions on argument values
conditions on order of execution of methods
condtions on execution in a multi-threaded environment
Requirements must be stated in javadoc, and may be enforced by throwing checked or unchecked exceptions when the stated conditions are violated. Using assertions for enforcing requirements is not recommended.
Promises are stated in javadoc. They can be enforced by assertions at the end of a method.