Types may be specified in a syntactic way, semantically or purely pragmatically. In the latter case, the notion of types coincides with the notion of classes. Classes, clearly, may be regarded as an over-specification of the properties of a type. When regarded from a syntactic point of view, types specify too little. However, a purely syntactic specification allows for rigid type checking. The behavioral specification of types must be regarded as an ideal. Contracts as supported by Eiffel are one possible approximation of this ideal. See slide 8-classes and slide 8-refinement.