To implement a program, a student must understand the fundamental programming constructs of the language, as well as the design of the program. Object-oriented development involves implementing the individual methods of each class in the design. In this phase, we might also discover that additional classes are needed, from either the Java libraries or another class that we develop. For example, we might decide that the Kennel class needs a Cage class (with a size), rather than just a list of Pets, because different Pets need different Cages of different sizes. Good program implementation adheres to the fundamental principles of encapsulation and information hiding. Encapsulation is the process of organizing some information and the operations on that information into one unit, a class. Information hiding is the technique of keeping the data representation hidden from the client (external classes) by declaring it private. Programming constructs are tools a programmer uses to implement a program. These are tied closely to the language, though most object-oriented programming languages have similar constructs, so the skills acquired by a Java programmer would carry over quite easily to another object-oriented programming language.