The public interface of a well-designed data type provides a complete,yet minimal, set of public methods and hides the implementation of the data type using private data members and methods. What is this called?