One of the major problems encountered by designers of object-oriented software is classification; that is, finding which classes should be grouped together under a shared base class. When attempting to perform classification on the problem space, several issues must be addressed. For example, the designer must decide which properties should be used to determine commonality. The classification should also be flexible enough to permit the introduction of new objects into the system which appear to belong to neither class nor appear to have properties of several classes.
This is a problem faced by other members of the scientific community as well. For example, biologists have traditionally divided living beings into two classes: plants and animals; every living entity must belong to one, and only one, of these classes. However, when the euglena, a single-celled being with chloroplasts, was discovered, it seemed perfectly legitimate to place it in both classes; hence it defied classification. Also, viruses cannot accurately be portrayed as either a plant or animal; so they too defy classification under the plant/animal taxonomy.