Coming up: Motivation
Using CRC Cards and Scenarios to Get Started on a Good Object-
Oriented Design
Slides from Jochen Rick adapted by Dan Fleck
1
• It’s all very well understanding what an object is , but it’s much harder to decide what kinds of object you should design in order to implement an application in Smalltalk. 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
• 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 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
• In analysis, we are mostly concerned with the
DOMAIN MODEL. What are the objects in the domain and how do they collaborate.
• 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?
Coming up: Object-Oriented Analysis 5
• CRC Cards by Ward Cunningham
• Goal: Understand the Domain as Objects
– Object-Oriented Analysis is Language Independent
– Force Developers to “think” in objects
• Steps
1.
Brainstorm Candidate Classes
2.
Create Initial Class-Responsibility-Collaboration Cards
3.
Come up with scenarios of use in the domain
4.
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: OOA Step 1
Brainstorming Candidate Classes
6
• 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 7
• 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 8
• 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
9
• 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
10
• For each core candidate class, create one CRC card
• What’s a CRC Card?
– Class-Responsibility-
Collaboration
– It’s just a 4x6in index card
• Analysis vs. Design
Information
Coming up: CRC Cards: What Goes Where?
11
Coming up: CRC Card Format (Front) 12
Class Name (OOA)
Purpose/Role (OOA):
Patterns (OOD):
Stereotypes(OOA/OOD):
Coming up: CRC Card Format (Back) 13
Class Name
Superclass:
Subclasses:
Responsibilities Collaborators
Coming up: CRC Card Sample 14
Document
Purpose: A Document acts as a container for graphics and text.
Patterns: Composite-Component
Stereotypes: Structurer
Coming up: CRC Card Sample 15
Document
Superclass:
Subclasses:
Responsibilities
Know Contents
Know Storage Location
Insert and Removes text, graphics and other elements
Coming up: Stereotypes
Collaborators
16
• 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
17
• 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 18
• 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 19
• Keep a record of scenarios played out
• Explore exception conditions last
• Separate role-play from analysis
Coming up: OOA for a Clock 20
• 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 21
• Brainstorm (Step 1 – Candidate
Classes)
– Candidate classes
Coming up: OOA for a Clock 22
• 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 23
• 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 24
• 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!!!!
25
• 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 26
• 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 27
• 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 28
• The SecondsTicker pulses the Clock
Coming up: Scenario 1: The Ticker Ticks 29
• The SecondsTicker pulses the Clock
• The Clock updates
Time
Coming up: Scenario 1: The Ticker Ticks 30
• The SecondsTicker pulses the Clock
• The Clock updates
Time
• Time updates itself
Coming up: Scenario 1: The Ticker Ticks 31
• The SecondsTicker pulses the Clock
• The Clock updates
Time
• Time updates itself
End of Scenario
Coming up: Scenario 2: Clock Responds with the Time 32
• Display the time
Coming up: Scenario 2: Clock Responds with the Time 33
• Display the time
• Return hours, minutes, & seconds
Coming up: Scenario 2: Clock Responds with the Time 34
• Display the time
• Return hours, minutes, & seconds
• Translate the time into the display format
Coming up: Scenario 2: Clock Responds with the Time 35
• 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 36
Coming up: Why CRC Cards?
37
• 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 38
• 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 39
• 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
Document
Purpose: …
Interfacer - Transforms information and requests between different parts of our system Patterns:
• Play the cards - Individual Groups
– Scenarios -
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
Coming up: OO Analysis Exercise:
Checkers
40
• Checkers is played by two people, one with light and one with dark pieces.
• Pieces move diagonally and opponents are captured by jumping over them.
Coming up: OO Analysis Exercise:
Checkers
41
• Things to keep in mind
– http://www.jimloy.com/checkers/rules2.htm
– A Piece can only move and capture forward.
– When a piece makes it to the other side of the board, it becomes a king and can move diagonally in any direction as far as it wants.
– Capturing is mandatory. A piece (or king) that is captured is removed from the board.
– The player who has no pieces left or cannot move anymore has lost the game.
Coming up: Candidate Classes 42
• Brainstorming:
Coming up: Scenarios 43
• Bob moves first in the new game and moves a checker with a legal move.
• Late in the game, Sally moves a checker into Bob’s home row, changing it to a King.
• Sally takes Bob’s last checker, ending the game.
End of presentation 44