Data Structures: What is an Abstract Data Type (ADT)?