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.