Contracts should include...
- the name of the type, so the client can refer to it
- the names of all primitive operations over elements of that type
- the conditions, under which these operations are applicable
- a precise specification of the (observable) behavior of those
operations, when they are applicable