= Solution
An <abstract data type> specifies \b[a set of abstract values and the operations on them, including their observable behavior, independently of their concrete representation]. Its operation signatures say what can be requested; its laws or preconditions and postconditions say what those requests mean.
For example a <stack> can be specified by an empty value, `push`, `pop`, and `isEmpty`, with `pop(push(x,s))` returning `x` and leaving `s`. A <linked list> and an <array> can implement the same <abstract data type> if clients observe the same specified behavior. <Encapsulation> hides the representation, while a <representation invariant> describes which internal states are valid and an <abstraction function> explains which abstract value each valid internal state represents. An <abstract class> is a language mechanism; it is not by itself a full <abstract data type> specification.
Back to article page