Each method has a signature indicating the number, kinds and types of its parameters and result, if any. The parameter kind is in, out, inout or once. In and once parameters are transmitted through call-by-value. Out parameters are local entities of the method whose values are transmitted through call-by-result when the method call returns to the caller; the corresponding argument must be a variable. Inout parameters are in parameters as well as out parameters, i.e. they are transmitted by cal-by-value-and-result. Once parameters are permitted for stream methods only. A once parameter is assigned only once when the stream object is established and is not reassigned at later stream calls. The signature of a method is called a method type. A bound method has a method type in which only the free parameters are specified.
Each stream object has a stream object type. It is derived from the (bound) stream type used to create the stream object but additionaly indicates that the stream is in progress.
The value of an object and the reference to a stream or reference object carry the same type as the object. The class (type) of a reference or value object is called a reference or value class (type) respectively.
Classes and stream types for which objects can be created are called concrete classes and types respectively. For use in the context of inheritance there exist also abstract classes (types) which do not necessarily describe all the details of the features of objects. They may be used for forming polymorphic types. Additionally there are external classes for describing the interface between SATHER-K and other parts of a software system.
External classes can neither be abstract nor value nor reference classes.
Reference classes cannot be subtypes of value classes and vice versa. The predefined class OB is a superclass of all reference and value classes, and is exceptional in this respect.
Simple value classes are either predefined, cf. 8.2.2, or user defined. A user defined simple value class is a class that inherits a simple value class. This must be its only inheritance, and the class must not define additional attributes.
A numeric type is given by a simple value class which inherits one of the predefined numeric types, cf. 8.2.2.
For external classes see 9.1.2.
Problem: The existence of value and reference types besides each other,
the fact that in the one case we have to create the objects explicitly
in the other case not, and the differences in interpretation of the
assignment and comparison operation constitute the most annoying
properties of most imperative object-oriented languages. These
properties are only justifiable from the efficiency point of view.