An Abstract Data Type is a programmer-defined data type that can be
manipulated in a manner similar to system-provided data types
- Must have the ability to instantiate many different copies of the data type.
- Data type can be manipulated using provided operations,
without knowledge of internal representation.
But ADTs were important not because they were data structures, but because
they provided an easily characterized service to the rest of an application.