Abstract data types; algebraic specification Software and programming theory mathematics