"An object is a software bundle of related variables and methods. Software objects are often used to model real-world objects you find in everyday life." (Campione, 2000). In the exhibitor's project, the main software objects are computer-simulated mice.
"Software objects interact and communicate with each other using messages." (Campione, 2000). Each Mouse defines it's own makeAMove method which returns a direction to move in a maze. The maze-solving engine calls this method. There are several methods that are used by the Mouse. For example, passagewayOpenAt to see if a direction is open, and distanceToGoal that returns the distance to the maze end.
"Inheritance is a mechanism whereby one class of objects can be defined as a special case of a more general class, automatically including the method and variable definitions of the general class." (Taylor, 1993, p. 16). In the exhibitor's case, all of the mice inherit from the base class Mouse.
The makeAMove method is defined at the base class Mouse level. Each Mouse type defines it's own makeAMove method with it's own strategy. Subclasses "can define a method that has exactly the same method signature (arguments and return type) as a method in its superclass. In that case, the method in the subclass overrides the method in the superclass and effectively replaces its implementation. Overriding methods to change the behavior of objects is another form of polymorphism: the one most people think of when they talk about the power of object-oriented languages." (Niemeyer, 1996, p. 134). Because of this, the maze-solving engine (written by the exhibitor's Father) knows how to interact with all objects, because they are all a type of Mouse, and have a makeAMove method.
Smarty is a special type of Mouse that has a brain. It remembers where it has been. Therefore all derivations of Smarty have a brain too, just because they are derived from Smarty.