abstract data structure