Kay then refined this idea into six principles of object-oriented programming.
First, everything is an object. Rather than thinking about a single memory cell as being our fundamental unit of computation, let us imagine a little computing engine as our basic unit.
Objects must interact to get anything accomplished. So we will say that objects proceed by making requests on each other. We will call such a request a message.
Like the computer-in-the-small that we imagine it is, an object has its own memory, which (following the principle of recursive design) will consist of other objects.
A universe that consists of a large number of objects turns out to be rather unwieldy unless we impose some form of structure. We can add structure by saying that every object is an instance of a class. A class is similary just a grouping of similar objects.
In particular, we will say that the class is the repository for behavior associated with an object. By that we mean that all instances of the same class will have the same behavior.
Finally, even more structure can be provided by organizing classes into singly-rooted tree structures, which we will call an inheritance hierarchy.
We can illustrate these principles by considering how I go about solving a problem in real life.