Object Oriented Design
and Analysis
Exploratory Phase:
-
Read and understand the specification.
-
As you follow the steps below, walk through
various scenarios to explore possibilities. Record the results as
Use Cases.
Classes:
-
Extract noun phrases from the specification
and build a list.
-
Look for nouns that may be hidden (for example,
by the use of the passive voice) and add them to the list.
-
Identify candidate classes from the noun phrases
by applying the following guidelines:
-
Model physical objects.
-
Model conceptual entities.
-
Use a single term for each concept.
-
Be wary of the use of adjectives.
-
Model categories of objects/
-
Model external interfaces.
-
Model the values of an object's attributes.
-
Identify candidates for abstract superclasses
by grouping the classes that share common attributes.
-
Use categories to look for classes that may
be missing.
-
Write a short statement of the purpose of
the class.
Responsibilities:
-
Find responsibilities using the following
guidelines:
-
Recall the purpose of each class, as implied
by its name and specified in the statement and purpose.
-
Extract responsibilities from the specification
by looking for actions and information.
-
Identify responsibilities implied by the relationships
between classes.
-
Assign responsibilities to classes using the
following guidelines:
-
Evenly distribute system intelligence.
-
State responsibilities as generally as possible.
-
Keep behavior with related information.
-
Keep information about one thing in one place.
-
Share responsibilities among related classes.
-
Find additional responsibilities by looking
for relationships between classes.
-
Use "is-kind-of" relationships to find inheritance
relationships.
-
Use "is-analogous-to" relationships for find
missing superclasses.
-
Use "is-part-of" relationships to find other
missing classes.
Collaborations:
-
Find and list collaborations by examining
the responsibilities associated with classes. Ask:
-
With whom does this class need to collaborate
to fulfill its responsibilities?
-
Who needs to make use of the responsibilities
defined for this class?
-
Identify additional collaborations by looking
for these relationships between classes:
-
the "is-part-of" relationship,
-
the "has-knowledge-of" relationship, and
-
the "depends-upon" relationship.
-
Discard classes if no classes collaborate
with them, and they collaborate with no other classes.