- Generic objects with multiple possible meanings
- Concrete objects with only one intended meaning
Most objects written by programmers have only one intended meaning. I could for example create a height class which would allow me to add heights and the embedded semantics of the operations would prevent me from adding height and apples together.
Whats interesting is creating classes of the first type and then being asked what the class is for.