Object-Oriented Analysis Using CRC Cards and Scenarios Object-Oriented Design

advertisement
Object-Oriented Analysis
Using CRC Cards and Scenarios
to Get Started on a Good
Object-Oriented Design
Slides from Jochen Rick adapted by Dan Fleck
Coming up: Motivation
1
Motivation
• Programming classes teach
– What an object is
– How to create objects
• What is missing
– Design – finding/determining which objects should
you create?
Indeed given a set of requirements for an application and a
development system like Smalltalk, ‘finding the objects’ is easily the
most difficult task an experienced OO developer has to face.
—Simon Lewis, The Art and Science of Smalltalk
Coming up: Good Object-Oriented Style
2
Good Object-Oriented Style
• You can hack in any language, but how do
you get reusable, maintainable code?
• Just using Objects doesn’t ensure a good
design
– Many C++ programs have only have a single class
– That’s not good object-oriented style
• No process can guarantee good results
– A good process just makes them more likely
Coming up: Design is a Process,
not a Waterfall
3
Design is a Process,
not a Waterfall
• Design is an iterative activity
– Start with Object-Oriented Analysis and Design
– Move on to OO Programming
– Return to OOA/OOD when necessary
• When creating new functionality
• To solve problems with the code
• OO Analysis is just another perspective
– Good designers (in any field) shift perspective
frequently to create a better design
– The boundary between OOA and OOD is fuzzy.
Coming up: OOA vs. OOD
4
OOA vs. OOD
• Understand the problem: In analysis, we are mostly
concerned with the DOMAIN MODEL. What are the
objects in the domain and how do they collaborate.
– I want the iPod to play music (MusicPlayer class)
• Understand the solution: In design, we need to
integrate an APPLICATION MODEL. What objects
do I need to add to get this thing to run on a
computer and to be realized in some programming
language?
– The iPod should have a play button, rewind/ffwd done with
the wheel (MusicPlayer needs to interact with PlayButton
and Wheel classes)
Coming up: Object-Oriented Analysis
5
Object-Oriented Analysis
•
•
CRC Cards by Ward Cunningham
Goal: Understand the Domain as Objects
–
–
•
Steps
1.
2.
3.
4.
•
Object-Oriented Analysis is Language Independent
Force Developers to “think” in objects
Brainstorm Candidate Classes
Create Initial Class-Responsibility-Collaboration Cards
Come up with scenarios of use in the domain
Use scenarios and role playing to refine CRC Cards
When do we do it?
–
–
Before we begin coding (to get a good start)
To add new functionality (update CRC cards
and scenarios regularly)
Coming up: How things fit in CS421
6
How things fit in CS421
Problem
Statement
Use cases
CRC Cards
Class
Diagram
(high level)
Analysis Phase (understanding the problem)
UML diagrams at any time for clarity: sequence, activity, swimlane, DFD, ERD, etc…
Coming up: How things fit in CS421
7
How things fit in CS421
Design Phase (solving the problem in software).
Versions of class diagram and ERD with implementation
details
Detailed versions of any UML diagram needed for clarity
Implementation
Testing
Deployment
Maintenance
Coming up: OOA Step 1
Brainstorming Candidate Classes
8
OOA Step 1
Brainstorming Candidate Classes
• Write down all the objects that relate
– Domain Analysis
– Focus on the nouns (objects are nouns)
– Good objects will have attributes and services
• Now, filter and refine the candidates
– Deal with the interface later (Not part of the
domain, that’s the application model)
– Are some candidates attributes of others?
– Are some subclasses of others?
– Are some instances of others?
Coming up: Brainstorming Tips
9
Brainstorming Tips
•
•
•
•
•
•
•
Two’s only company, Ten’s a crowd
Don’t forget the user
All ideas are potentially good
Analyze – make connections
Think fast – ponder later
Every voice gets a turn
Relax – humor is OK.
Coming up: Candidate Class Review
10
Candidate Class Review
• Has clear unambiguous name, recognized by
domain experts
• Has name that fits in with other systems
developed by your organization
• Uses singular noun for name
• Begins with Uppercase Letter
• Has responsibilities (what NOT how)
• Remembers (knowledge)
• Is needed (collaborates)
• Actively participates
Coming up: Filter Candidate Classes
from CRC Card Book
11
Filter Candidate Classes
• Core Classes (pretty sure these are in
Analysis model)
• Undecided Classes (probably not
classes – might be attributes)
• Eliminated Classes – (outside scope of
system, Application model classes like
UI components tied to implementation)
Coming up: OOA Step 2
CRC Cards
12
OOA Step 2
CRC Cards
• For each core
candidate class,
create one CRC card
• What’s a CRC Card?
– Class-ResponsibilityCollaboration
– It’s just a 4x6in index
card
Coming up: CRC Cards: What Goes Where?
13
CRC Cards: What Goes Where?
Note: these are lined
up, Foo is needed for
BOTH responsibilities,
so it is written twice!!
Coming up: CRC Card Format (Front)
14
CRC Card Format (Front)
Class Name (OOA)
Purpose/Role (OOA):
Patterns (OOD):
Stereotypes(OOA/OOD):
Coming up: CRC Card Format (Back)
Pattern and
stereotype not
needed for the
project
15
CRC Card Format (Back)
Class Name
Superclass:
Subclasses:
Responsibilities
Coming up: CRC Card Sample Front
Collaborators
16
CRC Card Sample Front
Document
Purpose: A Document acts as a container for
graphics and text.
Patterns: Composite-Component
Stereotypes: Structurer
Coming up: CRC Card Sample Back
Pattern and
stereotype not
needed for the
project
17
CRC Card Sample Back
Document
Superclass:
Subclasses:
Responsibilities
Know Contents
Know Storage Location
Collaborators
Insert and Removes text,
graphics and other
elements
Coming up: Stereotypes
18
Stereotypes
• Information Holder
– knows and provides information
• Structurer
– Maintains relationships between objects and information about
those relationships
• Service Provider
– Performs work for other objects
• Coordinator
– Reacts to events by delegating tasks to others
• Controller
– Makes decisions and closely directs others’ actions
• Interfacer
– Transforms information and requests between different parts of our
system
Coming up: OOA Step 3
Scenarios with CRC Cards
19
OOA Step 3
Scenarios with CRC Cards
• Invent Scenarios
– What should these objects do?
– What if…?
• Play the Cards
–
–
–
–
Assign Roles
Go Through Scenario
Write down new responsibility
Add collaborator objects to help with that
responsibility
– Team members hold up cards as they participate
Coming up: Scenario Guidelines
20
Scenario Guidelines
• Concrete:
– Bob tries to Login to the system with an
incorrect password.
– Sally creates a new Sorceress character
and chooses auto-configuration.
• Focus on “must do” items first
• Start easy and move to complex
Coming up: Scenario Guidelines
21
Scenario Guidelines
• Keep a record of scenarios played out
• Explore exception conditions last
• Separate role-play from analysis
Coming up: OOA for a Clock
22
OOA for a Clock
• We want to make a clock. The clock
should:
– Have a way to set the current time
– Display the time in hours, minutes, and
seconds in different formats
– Update the time to keep it current
Coming up: OOA for a Clock
23
OOA for a Clock
• Brainstorm (Step 1 – Candidate
Classes)
– Candidate classes
Coming up: OOA for a Clock
24
OOA for a Clock
• Brainstorm
– Face for the clock, internal ticker, hours, minutes,
seconds, knob for setting the clock
• Filter for Core Objects
Coming up: OOA for a Clock
25
OOA for a Clock
• Brainstorm
• Filter
• Define the Clock class
– Attributes: hours, mins, secs, timezone,
state (low bat, etc…),
– Services: update, setTime, alarm,
setAlarm, display/time, displayDate,
setAmPm, getAmPm
Coming up: OOA for a Clock
26
OOA for a Clock
• Brainstorm
– Face for the clock, internal ticker, hours, minutes,
seconds, knob for setting the clock
• Filter
– Ticker, hours, minutes, seconds
• Define the Clock class
– Attributes: seconds, minutes, hours, displayFormat
– Services: get/set, nextSecond, display, setFormat
Coming up: ALERT!!!!
27
ALERT!!!!
• Bad OO Design in Progress
• What did we do wrong?
I’m still designing a program thinking – what’s my
data and what do I have to do?
I need to think about a community of cooperating
objects!!!
Coming up: Errors in this Design
28
Errors in this Design
• We assumed there was only one class: Clock
– What’s reusable in that?
• We started with data and not with what the
object should be responsible for
• We were way too focused on the programming
from the start
• Thinking in get/set mode (be aware of your
idioms!)
– Java/Python does that, but typically not Smalltalk
Coming up: OOA for a Clock: Second Try
29
OOA for a Clock: Second Try
•
Brainstorm objects for Clock
–
•
•
Display, Time, Ticker/SecondTimer, Clock,
Formatter
Filter:
CRC Cards
–
Two scenarios
1. When the ticker pulses the clock, the internal
representation of time must increment
2. When a display is requested, the time must be fetched
and formatted
Coming up: Scenario 1: The Ticker Ticks
30
Scenario 1: The Ticker Ticks
• The SecondsTicker
pulses the Clock
Coming up: Scenario 1: The Ticker Ticks
31
Scenario 1: The Ticker Ticks
• The SecondsTicker
pulses the Clock
• The Clock updates
Time
Coming up: Scenario 1: The Ticker Ticks
32
Scenario 1: The Ticker Ticks
• The SecondsTicker
pulses the Clock
• The Clock updates
Time
• Time updates itself
Coming up: Scenario 1: The Ticker Ticks
33
Scenario 1: The Ticker Ticks
• The SecondsTicker
pulses the Clock
• The Clock updates
Time
• Time updates itself
End of Scenario
Coming up: Scenario 2: Clock Responds with the Time
34
Scenario 2: Clock Responds with
the Time
• Display the time
Coming up: Scenario 2: Clock Responds with the Time
35
Scenario 2: Clock Responds with
the Time
• Display the time
• Return hours,
minutes, & seconds
Coming up: Scenario 2: Clock Responds with the Time
36
Scenario 2: Clock Responds with
the Time
• Display the time
• Return hours,
minutes, & seconds
• Translate the time
into the display
format
Coming up: Scenario 2: Clock Responds with the Time
37
Scenario 2: Clock Responds with
the Time
• Display the time
• Return hours,
minutes, & seconds
• Translate the time
into the display
format
End of Scenario
Coming up: OOA for a Clock: Second Try
38
OOA for a Clock: Second Try
Coming up: Why CRC Cards?
39
Lets try it: Class-ResponsibilityCollaborator (CRC)
• Create a set of CRC cards for an iPod
– Brainstorm –
• Core:
• Maybe:
• Eliminated:
– Filter
• Develop Scenarios
• Play the cards
Object-Oriented Analysis
40
Scenarios
• John searches for music by Cake, finds a
song and plays it
• John searches for music by Cake, finds a
song and deletes it
• John selects a playlist and adds a song to it
• John selects a playlist and plays it
• iPod battery is getting low and warns the
user, no response, then shutsdown
Object-Oriented Analysis
41
Why CRC Cards?
• Help you identify objects and their
responsibilities
• Help you understand how the objects interact
• Cards form a useful record of design activity
• Cards work well in group situations and are
understandable by non-technical
stakeholders.
Coming up: In-class Exercise
42
Some Examples
• You are trying to think of classes (nouns) and
what they logically need to do
(responsabilities). For a game:
– User: move, fire, pickup item, talk to NPC,
provide information (name, address, etc…)
– Item: hold and return information
– Map: track players, display player locations
Object-Oriented Analysis
This is hard to get right! Practice!
43
In-class Exercise – R&D Library
• This application will support the operations of a technical library
for an R&D organization. This includes the searching for and
lending of technical library materials, including books, videos,
and technical journals. Users will enter their company ids in
order to use the system; and they will enter material ID numbers
when checking out and returning items.Each borrower can be
lent up to five items. Each type of library item can be lent for a
different period of time (books 4 weeks, journals 2 weeks,
videos 1 week). If returned after their due date, the library user's
organization will be charged a fine, based on the type of item(
books $1/day, journals $3/day, videos $5/day).Materials will be
lent to employees with no overdue lendables, fewer than five
articles out, and total fines less than $100....(Design
Constraints)...
Coming up: In-class Exercise: Handout
44
In-class Exercise: Handout
•
•
•
•
Brainstorm Candidate Classes - Whole Class
Candidate Class Review - Whole class
Filter Classes - Individual Groups
Create the cards - Individual Groups
•
•
•
•
•
•
Information Holder - knows and provides information
Structurer - Maintains relationships between objects and information about those relationships
Service Provider - Performs work for other objects
Coordinator - Reacts to events by delegating tasks to others
Controller - Makes decisions and closely directs others’ actions
Interfacer - Transforms information and requests between different parts of our system
• Play the cards - Individual Groups
– Scenarios •
•
•
Document
Purpose: …
Patterns:
Stereotypes: …
What happens when Johnny Codewarrior returns the book Document, Your job depends on it two days late? He
has no other item checked out and no acquired fines.
What happens when Ivar Jacobson uses the search feature to look for the book Object-Oriented Software
Engineering of which there are 2 copies available?
What happens when Grady Booch uses the search feature to look for the book Object-Oriented Analysis and
Design with Application of which there is 1 copy available and the database is down?
• Present Final Card Set - Individual Groups
End of presentation
45
Download