Deciding what is data and what should be a routine

A simple rule is simply to ask yourself: what is the minimal data required for the object to do the things I want it to? It is these data which are placed into the type definition.

Sometimes, particular data are generated from the minimal required data, and these data are re-used many times. In this case, it might be useful for efficiency reasons to include such "non-moinimal" data also in the type definition for efficiency reasons.

All the remaining functionality can be coded as subroutines or functions.