This chapter has presented an introduction
to the theoretical foundations of
abstract data types.
In particular, a characterization was
given of types as constraints.
In section 1,
we discussed the notion of abstraction
in programming languages and
distinguished between control and
data abstractions.
Abstract data types were characterized as values in some domain,
and we looked at the various ways in which
to define mathematical models
for types.
In section 2,
we studied the algebraic specification
of abstract data types by means of
a signature characterizing producers
and observers.
We discussed the notions of equivalence
classes and initial models,
which consist of precisely the equivalence
classes that are needed.
,p>
Also, we looked at the interpretation of
objects as algebras, and we discussed
a multiple world semantics allowing for
dynamic state changes.
In section 3,
we looked at the various ways we may realize data abstractions
and we distinguished between a modular
approach, defining a collection of
operations, and a data-oriented approach,
employing objects.
Finally, in section 4, we discussed the differences
between a syntactic, semantic and operational
interpretation of types,
and how these viewpoints affect our
notion of refinement or compatible
modification.