Each type is characterized by the set of attributes and their respective values. An attribute can be described as:
Type-level attributes express the type information which determines
the structure and the value of all of the instances sharing that type.
The domain of an attribute is not modifiable in any case. The value of
a type-level attribute cannot be modified either, even though it is
possible to redefine it when a subtype is created.
Instance-level attributes express the state of an instance during execution. These attributes may be modifiable, even though their structure is the same for all the instances of the same type.
A type also provides for the definition of type-level and instance-level procedures. These correspond to ``methods'' in the classical object-orientation paradigm. Type-level procedures deal with the creation and the modification of the type itself. Their instance-level counterparts manipulate the derivated instances. Two classical aspects of object-orientation are present: