data abstraction
abstract data type