Contents   Index   Search   Previous   Next
 3.2 Types and Subtypes
Static Semantics
1
   A 
type
is characterized by a set of values, and a set of 
primitive operations
which implement the fundamental aspects of its semantics. 
An
object of a given type is a run-time entity that contains (has)
a value of the type. 
 
2
   Types are grouped into 
classes
of types, reflecting the similarity of their values and primitive operations.
There exist several 
language-defined classes
of types (see NOTES below). 
Elementary types
are those whose values are logically indivisible; 
composite
types are those whose values are composed of 
component values.
 
3
   The elementary types are the
scalar types (
discrete and 
real) and the 
access
types (whose values provide access to objects or subprograms). 
Discrete
types are either 
integer types or are defined by enumeration of
their values (
enumeration types). 
Real types
are either 
floating point types or 
fixed point types.
 
4
   The composite types are the 
record types,
record extensions, 
array types, 
task types, and
protected types. 
A 
private
type or 
private extension represents a partial view (see 
7.3)
of a type, providing support for data abstraction. A partial view is
a composite type. 
 
5
   Certain composite types (and
partial views thereof) have special components called 
discriminants
whose values affect the presence, constraints, or initialization of other
components. Discriminants can be thought of as parameters of the type.
 
6
   The term 
subcomponent
is used in this International Standard in place of the term component
to indicate either a component, or a component of another subcomponent.
Where other subcomponents are excluded, the term component is used instead.
Similarly, a 
part of an object or value is
used to mean the whole object or value, or any set of its subcomponents.
 
7
   The set of possible values
for an object of a given type can be subjected to a condition that is
called a 
constraint (the case of a 
null
constraint that specifies no restriction is also included); the rules
for which values satisfy a given kind of constraint are given in 
3.5
for 
range_constraints, 
3.6.1
for 
index_constraints, and 
3.7.1
for 
discriminant_constraints.
 
8
   A 
subtype of a given
type is a combination of the type, a constraint on values of the type,
and certain attributes specific to the subtype. The given type is called
the type 
of the subtype. Similarly, the associated constraint
is called the constraint 
of the subtype. The set of values of
a subtype consists of the values of its type that satisfy its constraint.
Such values 
belong to the subtype. 
 
9
   A
subtype is called an 
unconstrained subtype if its type has unknown
discriminants, or if its type allows range, index, or discriminant constraints,
but the subtype does not impose such a constraint; otherwise, the subtype
is called a 
constrained subtype (since it has no unconstrained
characteristics). 
 
10
2  Any set of types that
is closed under derivation (see 3.4) can be
called a ``class'' of types. However, only certain classes are used in
the description of the rules of the language -- generally those that
have their own particular set of primitive operations (see 3.2.3),
or that correspond to a set of types that are matched by a given kind
of generic formal type (see 12.5). The
following are examples of ``interesting'' language-defined classes:
elementary, scalar, discrete, enumeration, character, boolean, integer,
signed integer, modular, real, floating point, fixed point, ordinary
fixed point, decimal fixed point, numeric, access, access-to-object,
access-to-subprogram, composite, array, string, (untagged) record, tagged,
task, protected, nonlimited. Special syntax is provided to define types
in each of these classes.  
11
These language-defined classes are
organized like this: 
12
all types
   elementary
      scalar
         discrete
            enumeration
               character
               boolean
               other enumeration
            integer
               signed integer
               modular integer
         real
            floating point
            fixed point
               ordinary fixed point
               decimal fixed point
      access
         access-to-object
         access-to-subprogram
   composite
      array
         string
         other array
      untagged record
      tagged
      task
      protected
13
The classes ``numeric'' and ``nonlimited''
represent other classification dimensions and do not fit into the above
strictly hierarchical picture. 
Contents   Index   Search   Previous   Next   Legal