"SlimeV2" contains the main method for this program. This version of the Slime Volleyball example uses essentially the same code as the original, but it has been split into a series of different class definitions. The three main abstractions introduced are (i) a Player, (ii) a Side and (iii) a Ball. Note the effects that this has on the main part of the program here -- combinations like multi-ball games or multi-player teams are readily added. Previously the fact that there were two players was heavily inter-twined with the code in the main part of the program -- for example separate fields were used for each player, rather than having separate objects which encapsulate the players' state. One further change to notice is the introduction of a "Constants" interface. This is something of an abuse of interfaces, but is a common idiom seen in Java applications. The interface does not define any methods but provides a common point to gather "public static final" constant values that are used throughout the code. Using an interface (rather than a super-class) means that classes using the "Constants" interface are still free to extend other classes.