I think this excerpt from Object-Oriented Analysis and Design with Applications, authored by Grady Booch
Robert A. Maksimchuk, Michael W. Engle, Bobbi J. Young, Ph.D., Jim Conallen, Kelli A. Houston explains it quite well.
My take on identifying objects is in this post.
Classification helps us to identify generalization, specialization, and aggregation hierarchies among classes. By recognizing the common patterns of interaction among objects, we come to invent the mechanisms that serve as the soul of our implementation. Classification also guides us in making decisions about modularization. We may choose to place certain classes and objects together in the same module or in different modules, depending on the sameness we find among these declarations. Coupling and cohesion also indicate a type of sameness. Classification also plays a role in allocating processes to processors. We place certain processes together in the same processor or different processors, depending on packaging, performance, or reliability concerns.
The moral here is that even in scientifically rigorous disciplines, classification is highly dependent on the reason for the classification.
“The development of individual abstractions often follows a common pattern. First, problems are solved ad hoc. As experience accumulates, some solutions turn out to work better than others, and a sort of folklore is passed informally from person to person
High level process
The incremental and iterative nature of classification directly impacts the construction of class and object hierarchies in the design of a complex software system. In practice, it is common to assert a certain class structure early in a design and then revise this structure over time. At later stages in the design, once clients have been built that use this structure, we will obtain insights as to the quality of our classification. On the basis of this experience, we may decide to create new subclasses from existing ones (derivation). We may split a large class into several smaller ones (factorization), or create one larger class by uniting smaller ones (composition). Occasionally, we may even discover previously unrecognized commonality and proceed to devise a new class (abstraction) [12].
No perfection or write answer
Why, then, is classification so hard? We suggest that there are two important reasons. First, there is no such thing as a “perfect” classification, although certainly some classifications are better than others. As Coombs, Raiffa, and Thrall state, “There are potentially at least as many ways of dividing up the world into object systems as there are scientists to undertake the task” [13]. Any classification is relative to the perspective of the observer doing the classification. Second, intelligent classification requires a tremendous amount of creative insight.
The Difficulty of Classification
…Since there are parallels to the same problems in object-oriented design, consider for a
moment the problems of classification in two other scientific disciplines: biology and
chemistry. Until the eighteenth century, the prevailing scientific thought was that all living
organisms could be arranged from the most simple to the most complex, with the measure of
complexity being highly subjective (not surprisingly, humans were usually placed at the top
of this list). In the mid-1700s, however, the Swedish botanist Carolus Lirmaeus suggested a
more detailed taxonomy for categorizing organisms, according to what he called genus and
species. A century later, Darwin proposed the theory that natural selection was the
mechanism of evolution, whereby present-day species evolved from older ones. Darwin’s
theory depended upon an intelligent classification of species. As Darwin himself states,
naturalists “try to arrange the species, genera, and families in each class, on what is called the
natural system. But what is meant by this system? Some authors look at it merely as a scheme
for arranging together those living objects which are most alike, and for separating those
which are most unlike” [4]. In contemporary biology, classification denotes “the
establishment of a hierarchical system of categories on the basis of presumed natural
relationships among organisms” [5]. The most general category in a biological taxonomy is
the kingdom, followed in order of increasing specialization, by phylum, subphylum, class,
order, family, genus, and, finally, species. Historically, a particular organism is placed in a
specific category according to its body structure, internal structural characteristics, and
evolutionary relationships.
The Incremental and lterative Nature of ClassificationWe have not said all this to defend
lengthy software development schedules, although to the manager or end user, it does
sometimes seem that software engineers need centuries to complete their work. Rather, we
have told these stories to point out that intelligent classification is intellectually hard work,
and that it best comes about through an incremental and iterative process. This incremental
and iterative nature is evident in the development of such diverse software technologies as
graphical user interfaces, database standards, and even fourth-generation languages. As Shaw
has observed in software engineering, “The development of individual abstractions often
follows a common pattern. First, problems are solved ad hoc. As experience accumulates,
some solutions turn out to work better than others, and a sort of folklore is passed informally
from person to person. Eventually, the useful solutions are understood more systematically,
and they are codified and analyzed. This enables the development of models that support
automatic implementation and theories that allow the generalization of the solution.