<p>An "Abstract Datatype" (ADT) is a specification of a set of data and the set of operations that can be performed on the data.
Such a data type is abstract in the sense that it is independent of various concrete implementations.
The definition can be mathematical, or it can be programmed as an interface.
A first class ADT supports the creation of multiple instances of the ADT, and the interface normally provides a constructor,
which returns an abstract handle to new data, and several operations,
which are functions accepting the abstract handle as an argument.</p>