Define ADT
a specification of the fundamental operations that characterise a data type without supplying an implementation
What can we do with abstractions
create new instances using constructor methods
modify values (or states) by providing arguments to public methods
inspect values (or states) by providing public methods
hide implementation using private