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 implemented using provided operations, without knowledge of
internal representation.