There is a vast amount of literature on the algebraic specification of abstract data types. You may consult, for example, [Dahl92].