Case Study: Voice Mail System
- Use text for voice, phone keys, hangup
- 1 2 ... 0 # on a single line means key
- H on a single line means "hang up"
- All other inputs mean voice
- In GUI program, will use buttons for keys (see ch. 4)
Use Case: Reach an Extension
- User dials main number of system
- System speaks prompt
Enter mailbox number followed by #
- User types extension number
- System speaks
You have reached mailbox xxxx. Please leave a message now
Use Case: Leave a Message
- Caller carries out Reach an
Extension
- Caller speaks message
- Caller hangs up
- System places message in mailbox
Use Case: Log in
- Mailbox owner carries out Reach
an Extension
- Mailbox owner types password and #
(Default password = mailbox number. To change, see Change the Passcode)
- System plays mailbox menu:
Enter 1 to retrieve your messages.
Enter 2 to change your passcode.
Enter 3 to change your greeting.
Use Case: Retrieve Messages
- Mailbox owner carries out Log in
- Mailbox owner selects "retrieve messages" menu option
- System plays message menu:
Press 1 to listen to the current message
Press 2 to delete the current message
Press 3 to save the current message
Press 4 to return to the mailbox menu
- Mailbox owner selects "listen to current message"
- System plays current new message, or, if no more new messages,
current old message.
Note: Message is played, not removed from queue
- System plays message menu
- User selects "delete current message". Message is removed.
- Continue with step 3.
Use Case: Retrieve Messages
Variation #1
1.1. Start at Step 6
1.2. User selects "save current message".
Message is removed from new queue
and appended to old queue
1.3. Continue with step 3.
Use Case: Change the Greeting
- Mailbox owner carries out Log in
- Mailbox owner selects "change greeting" menu option
- Mailbox owner speaks new greeting
- Mailbox owner presses #
- System sets new greeting
Use Case: Change the Greeting
Variation #1: Hang up before confirmation
1.1. Start at step 3.
1.2. Mailbox owner hangs up.
1.3. System keeps old greeting.
Use Case: Change the Passcode
- Mailbox owner carries out Log in
- Mailbox owner selects "change passcode" menu option
- Mailbox owner dials new passcode
- Mailbox owner presses #
- System sets new passcode
Use Case: Change the Passcode
Variation #1: Hang up before confirmation
1.1. Start at step 3.
1.2. Mailbox owner hangs up.
1.3. System keeps old passcode.
CRC Cards for Voice Mail System
Some obvious classes
- Mailbox
- Message
- MailSystem
Initial CRC Cards: Mailbox
Initial CRC Cards: MessageQueue
Initial CRC Cards: MailSystem
Telephone
- Who interacts with user?
- Telephone takes button presses, voice input
- Telephone speaks output to user
Telephone
Connection
- With whom does Telephone communicate
- With MailSystem?
- What if there are multiple telephones?
- Each connection can be in different state
(dialing, recording, retrieving messages,...)
- Should mail system keep track of all connection states?
- Better to give this responsibility to a new class
Connection
Analyze Use Case: Leave a message
- User dials extension. Telephone sends number to Connection
(Add collaborator Telephone to Connection)
- Connection asks MailSystem to find matching Mailbox
- Connection asks Mailbox for greeting
(Add responsibility "manage greeting" to Mailbox,
add collaborator Mailbox to Connection)
- Connection asks Telephone to play greeting
- User speaks greeting. Telephone asks Connection
to record it.
(Add responsibility "record voice input" to Connection)
- User hangs up. Telephone notifies Connection.
- Connection constructs Message
(Add card for Message class,
add collaborator Message to Connection)
- Connection adds Message to Mailbox
Result of Use Case Analysis
Result of Use Case Analysis
Result of Use Case Analysis
Result of Use Case Analysis
Analyse Use Case: Retrieve messages
- User types in passcode. Telephone notifies Connection
- Connection asks Mailbox to check passcode.
(Add responsibility "manage passcode" to Mailbox)
- Connection sets current mailbox and asks Telephone
to speak menu
- User selects "retrieve messages". Telephone passes key
to Connection
- Connection asks Telephone to speak menu
- User selects "listen to current message". Telephone
passes key to Connection
- Connection gets first message from current mailbox.
(Add "retrieve messages" to responsibility of Mailbox).
Connection asks Telephone to speak message
- Connection asks Telephone to speak menu
- User selects "save current message". Telephone passes
key to Connection
- Connection tells Mailbox to save message
(Modify responsibility of Mailbox to "retrieve,save,delete
messages")
- Connection asks Telephone to speak menu
Result of Use Case Analysis
CRC Summary
- One card per class
- Responsibilities at high level
- Use scenario walkthroughs to fill in cards
- Usually, the first design isn't perfect.
(You just saw the author's third design of the mail system)
UML Class Diagram for Mail System
- CRC collaborators yield dependencies
- Mailbox depends on MessageQueue
- t depends on Mailbox
- Connection depends on Telephone, MailSystem, Message, Mailbox
- Telephone depends on Connection
Dependency Relationships
Aggregation Relationships
- A mail system has mailboxes
- A mailbox has two message queues
- A message queue has some number of messages
- A connection has a current mailbox.
- A connection has references to a mailsystem and a telephone
UML Class Diagram for Voice Mail System
Sequence Diagram for Use Case: Leave a message
Interpreting a Sequence Diagram
- Each key press results in separate call to dial, but only one is shown
- Connection wants to get greeting to play
- Each mailbox knows its greeting
- Connection must find mailbox object:
Call findMailbox on MailSystem object
- Parameters are not displayed (e.g. mailbox number)
- Return values are not displayed (e.g. found mailbox)
- Note that connection holds on to that mailbox over multiple calls
Sequence Diagram for Use Case: Retrieve messages
Connection State Diagram
Reference
Cay S. Horstmann, Object-Oriented Design & Patterns, Second
Edition, John Wiley, 2006. ISBN 0-471-74487-5. Chapter 2
Maintained by John Loomis,
last updated 25 February 2007