state pattern: An object whose sole purpose is to
represent the current "state" or configuration of another
larger object.
A behavioral pattern.
Often implemented with an enum type for the states.
Each object represents one specific state for the larger object.
The larger object sets its state in response to various mutations.
Allows various observers and interested parties to quickly and
accurately know what is going on with the larger object's status.
101 trang |
Chia sẻ: nguyenlam99 | Lượt xem: 1041 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Kĩ thuật lập trình - Chapter 5: prototype and system modeling, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chapter 5 – Prototype and System Modeling
1 Chapter 5 System modeling
Topics covered
Prototyping
UML diagram types
2 Chapter 5 System modeling
Big questions
What's the point of prototyping? Should I do it?
If so, when in the overall process or "lifecycle" should I?
Should I make my prototype on paper or digitally?
How do I know whether my UI is good or bad?
What are the ways in which a UI's "quality" can be quantified?
What are some examples of software you use that have
especially good/bad UIs? What do you think makes them
good/bad?
Usability and SW design
Usability: The effectiveness with which users can
achieve tasks in a software environment.
studying and improving usability is part of
Human-Computer Interaction (HCI)
usability and good UI design are closely related
a bad UI can have unfortunate results...
Achieving usability
Some methods to achieve good usability:
user testing / field studies
• having users use the product and gathering data
evaluations and reviews by UI experts
card sorting
• Show users various UI menus and ask them to group the ones that
are similar, to see what UI tasks are seen as being related by users.
prototyping
• paper prototyping
• code prototyping
Good UI design focuses on the user, not developer or
system.
Prototyping
prototyping: Creating a scaled-down or incomplete
version of a system to demonstrate or test aspects of it.
What are some possible benefits of prototyping?
aids UI design
help discover requirements
help discover test cases and provide a basis for testing
allows interaction with user and customer to ensure satisfaction
team-building
Some prototyping methods
UI builders (Visual Studio, etc.)
draw a GUI visually by dragging/dropping UI controls on screen
implementation by hand
writing a "rough" version of your code
paper prototyping: a paper version of a UI
Question: Why not just code up a working code prototype?
much faster to create than code
can change faster than code
more visual bandwidth (can see more at once)
more conducive to working in teams
can be done by non-technical people
Where does it fit in?
At what point in the software lifecycle should we do
(paper) prototyping? When would it be most useful to do
it? Why?
We talk about requirements being about "what" and
design being about "how." Which is paper prototyping?
PP helps uncover requirements and also upcoming design
issues
do PP during or after requirements; before design
"what" vs. "how": PP shows us "what" is in the UI, but it also
shows us details of "how" the user can achieve goals in the UI
P.P. usability session
user is given tasks to perform using paper prototype
session can be observed by people or camera
one developer can "play computer"
Facilitator
User
“Computer”
Observer(s)
Schneiderman's 8 Golden Rules
• Strive for consistency.
• Give shortcuts to the user.
• Offer informative feedback.
• Make each interaction with
the user yield a result.
• Offer simple error handling.
• Permit easy undo of actions.
• Let the user be in control.
• Reduce short-term memory
load on the user.
(from Designing the User Interface, by Ben Schneiderman of UMD, HCI/UI expert)
UI design and components
When should we use:
A button?
A check box?
A radio button?
A text field?
A list?
A combo box?
A menu?
A dialog box?
Other..?
UI design examples
Apple Mac user interfaces
UI Hall of Shame
Layout and color
Bad error messages
UI design - buttons, menus
Use buttons for single independent actions that are
relevant to the current screen.
Try to use button text with verb phrases such as "Save" or
"Cancel", not generic: "OK", "Yes", "No"
use Mnemonics or Accelerators (Ctrl-S)
tool tips are helpful, but don't rely on them
(many users don't know to hover to find them)
Use toolbars for common actions.
Use menus for infrequent actions applicable to many
screens.
Users don't like menus! Try not to rely
too much on menus.Provide another way to access the same
functionality (toolbar, hotkey, etc)
Checkboxes, radio buttons
Use check boxes for independent on/off switches
(boolean)
Use radio buttons for a small number of related
choices, when only one can be activated at a time (enum
/ constants)
Lists, combo boxes, etc.
use text fields (usually with a label) when the
user may type in anything they want
you will usually have to validate the input
use lists when there are many fixed choices
(too many for radio buttons to be practical)
and you want all choices visible at once
use combo boxes when there are many
fixed choices, but you don't want to take up
screen space by showing them all at once
use a slider or spinner for a
numeric value with fixed range
An example UI
Did the designer of this UI choose the right components?
assume there are 30 collections and 3 ways to search
(by title, author, relevancy)
LIBSYS: Search
Choose collection:
Phrase:
Search by:
Adjacent words
All
T itle
Y es No
OK
Default
Cancel
UI design - multiple screens
you can use a tabbed pane when there are many
screens that the user may want to switch between at any
moment
or multiple pages, if it's a web site
use dialog boxes or option panes to present temporary
screens or options
users hate popup dialogs; use them
very rarely
don't prompt for lots of user input by
popping up dialogs
• instead, put the choices on the existing
window as buttons, etc.
"Wizards"
wizard: series of dialog boxes to progress through a task
In the mid-1990s, Microsoft changed most of its
Windows apps to use "wizards" for installation and
settings.
Why did they do this?
What are the pros and cons
of a "wizard" UI?
Creating a paper prototype
gather materials
paper, pencils/pens
tape, scissors
highlighters, transparencies
identify the screens in your UI
consider use cases, inputs and outputs to user
think about how to get from one screen to next
this will help choose between tabs, dialogs, etc.
Application backgrounds
draw the app background (the parts that matter for the
prototyping) on its own, then lay the various subscreens
on top
Representing a changing UI
layers of UI can be placed on top of background as user
clicks various options
Interactive widgets
widget how to simulate it
buttons or check boxes tape
tabs and dialog boxes index cards or small papers
text fields removable tape
combo boxes put the expanded choices on
a separate paper / Post-It
selections highlighted piece of tape
a disabled widget cut out a separate gray
version that can be placed
on top of the normal one
Example paper prot. screen
Example paper prototype
Prototyping exercise
Let's draw a prototype for a music player (e.g. iTunes).
Assume that the program lets you store, organize, and play
songs and music videos.
Draw the main player UI and whatever widgets are required to
do a search for a song or video.
After the prototypes are done, we'll try walking through each UI.
Things to think about:
How many clicks are needed? What controls to use?
Could your parents figure it out without guidance?
UML diagram types
Activity diagrams
Use case diagrams
Sequence diagrams.
Class diagrams
State diagrams
30 Chapter 5 System modeling
Use cases
use case: a written description of the user's interaction
with the software product to accomplish a goal
interactions between an actor and the system
• 3-9 clearly written steps lead to a "main success scenario"
• written from actor's point of view, not the system's
benefits of doing use cases?
helps us discover and document functional requirements
agreement as to the system's responsibilities
provides executives a skeleton for planning project priorities
helps provide a list of error cases to test
Use cases vs. internal
features
consider the software to run a mobile phone:
Use Cases
• call someone
• receive a call
• send a message
• memorize a number
Point of view: user
Internal Functions
• transmit / receive data
• energy (battery)
• user I/O (display, keys, ...)
• phone-book mgmt.
Point of view: developer / designer
Use cases and requirements
Which of these requirements would probably be
represented or mentioned directly in a use case?
Special deals may not run longer than 6 months.
Customers only become preferred after 1 year.
A customer has one and only one sales contact.
Database response time is less than 2 seconds.
Web site uptime requirement is 99.8%.
Number of simultaneous users will be 200 max.
Answer: None!
Most of these are non-functional requirements, so the use cases
wouldn't mention them. The user doesn't see them directly.
Actors, stakeholders, goals
What are actors and stakeholders in a use case?
actor: anything with behavior (that "acts" on the system)
primary actor: initiates interaction to achieve goal
supporting actor: performs sub-goals in use case
stakeholder: anyone interested in the system
supplier, stock agency, vendor
stakeholder might not "act" in any scenario
goal: action that actor wants to accomplish
summary (multi-sitting), user (one sitting), subfunction (partial)
Styles of use cases
1. Actor / goal list (or UML use case summary diagram)
shows all use cases in system
2. Informal use case
3. Formal use case
Let's examine each of these in detail...
1. Actor / goal list
Often shown as a list or table of actors and their goals,
or a diagram of actors connected to use cases:
ACTOR USE CASES INITIATED
Club Member Submit Promotion Order
Submit Regular Order
Potential Member Submit New Subscription
Past Member Submit Subscription Renewal
Membership Dept. Request Membership
Marketing Dept. Create Monthly Promotion
Create Seasonal Promotion
Create Subscription Program
Request Promotion Reports
Request Sales Reports
Services System Send Subscription Offer
Send Club Promotion
Send Subscription Renewal
Use case exercise
Consider a Netflix-like video rental web system.
A customer with an account can use their membership and credit
card in the web app to order a video for rental.
The software can look up movies and actors by keywords.
A customer can check out up to 3 movies, for 5 days each.
Late fees can be paid at the time of return or at next checkout.
Exercise:
Come up with 3-4 use case names for this software.
Identify some of the actors and stakeholders in this system.
Informal use case
informal use case: a paragraph describing the scenario
Example (for a Netflix-style video rental system):
Customer Loses a Disc
The customer reports to the system that he has lost a disc. The
clerk displays the customer's rental record and alerts the
customer that this will incur a fee. The customer is asked to
confirm the decision. After confirming the decision, the database
will be updated to reflect the lost disc, and the customer's record
is updated as well to remove the disc and add the fee. The
inventory manager is notified of the event and may authorize
purchase of a replacement disc.
Extensions
What is an "extension"? Why are they useful?
extension: A possible branch in a use case scenario,
often triggered by an error or failure in the process.
Useful for finding edge cases that need to be handled and
tested.
Do: Think about how every step of the use case could fail.
Do: Give a plausible response to each extension from the
system.
• Response should either jump to another step of the case, or end it.
Don't: List things outside the use case ("User's power goes out").
Don't: Make unreasonable assumptions ("DB will never fail").
Don't: List a remedy that your system can't actually implement.
Example formal use case
Use Case 12. Buy stocks over the web
Primary Actor: Purchaser (user) Level: user goal
Precondition: User already has PAF open and is logged in.
Minimal Guarantee: sufficient log information exists that PAF can detect what went
wrong.
Success Guarantees: remote web site acknowledged purchase, user's portfolio updated.
Main success scenario:
1. User selects to buy stocks over the web.
2. PAF gets name of web site to use (E*Trade, Schwabb, etc.)
3. PAF opens web connection to the site, retaining control.
4. User browses and buys stock from the web site.
5. PAF intercepts responses from the web site, and updates the user's portfolio.
6. PAF shows the user the new portfolio standing.
Extensions:
2a. User wants a web site PAF does not support:
2a1. System gets new suggestion from user, with option to cancel use case.
Cockburn's 4 use case steps
1. Identify actors and goals
What computers, subsystems, people will drive our system?
What does each actor need our system to do?
2. Write the main success scenario
easiest to read; everything else is a complication on this
capture each actor's intent and responsibility
3. List the failure extensions
usually almost every step can fail (bad credit, out of stock...)
note failure condition separately, after main success scenario
4. Describe failure-handling
recoverable: back to main course (low stock + reduce quantity)
non-recoverable: fails (out of stock, or not a valued customer)
Use case exercise
Recall our Netflix-like video rental web system example.
A customer with an account can use their membership and credit
card in the web app to order a video for rental.
The software can look up movies and actors by keywords.
A customer can check out up to 3 movies, for 5 days each.
Late fees can be paid at the time of return or at next checkout.
Exercise:
Write a formal use case for Customer Orders a Movie.
How do we design classes?
class identification from project spec / requirements
nouns are potential classes, objects, fields
verbs are potential methods or responsibilities of a class
CRC card exercises
write down classes' names on index cards
next to each class, list the following:
• responsibilities: problems to be solved; short verb phrases
• collaborators: other classes that are sent messages by this class
(asymmetric)
UML
class diagrams (today)
sequence diagrams
...
Diagram of one class
class name in top of box
write > on top of interfaces' names
use italics for an abstract class name
attributes
should include all fields of the object
also includes derived "properties"
operations / methods
may omit trivial (get/set) methods
• but don't omit any methods from an interface!
should not include inherited methods
Class attributes
attributes (fields, instance variables)
visibility name : type [count ] = defaultValue
visibility: + public
# protected
- private
~ package (default)
/ derived
underline static attributes
derived attribute: not stored, but can
be computed from other attribute values
attribute example:
- balance : double = 0.00
Class operations / methods
operations / methods
visibility name (parameters ) : returnType
underline static methods
parameter types listed as (name: type)
omit returnType on constructors and
when return is void
method example:
+ distance(p1: Point, p2: Point): double
Inheritance relationships
hierarchies drawn top-down with arrows
pointing upward to parent
line/arrow styles differ based on parent:
• class : solid, black arrow
• abstract class : solid, white arrow
• interface : dashed, white arrow
we often don't draw trivial / obvious
relationships, such as drawing the class
Object as a parent
Associational relationships
1. multiplicity (how many are used)
• * 0, 1, or more
• 1 1 exactly
• 2..4 between 2 and 4, inclusive
• 3..* 3 or more
2. name (what relationship the objects have)
3. navigability (direction)
Multiplicity
one-to-one
each student must have exactly one ID card
one-to-many
a RectangleList can contain 0, 1, 2, ... rectangles
Association types
aggregation: "is part of"
clear white diamond
composition: "is entirely made of"
stronger version of aggregation
the parts live and die with the whole
black diamond
dependency: "uses temporarily"
dotted line or arrow
often is an implementation
detail, not an intrinsic part of
that object's state
1
1
aggregation
Car
Engine
Lottery
Ticket
Random
dependency
Page
Book
composition
*
1
Class design exercise
Consider this Texas Hold 'em poker game system:
2 to 8 human or computer players
Each player has a name and stack of chips
Computer players have a difficulty setting: easy, medium, hard
Summary of each hand:
• Dealer collects ante from appropriate players, shuffles the deck, and
deals each player a hand of 2 cards from the deck.
• A betting round occurs, followed by dealing 3 shared cards from the
deck.
• As shared cards are dealt, more betting rounds occur, where each
player can fold, check, or raise.
• At the end of a round, if more than one player is remaining, players'
hands are compared, and the best hand wins the pot of all chips bet.
What classes are in this system? What are their responsibilities?
Which classes collaborate?
Draw a class diagram for this system. Include relationships
between classes (generalization and associational).
Class diag. pros/cons
Class diagrams are great for:
discovering related data and attributes
getting a quick picture of the important entities in a system
seeing whether you have too few/many classes
seeing whether the relationships between objects are too
complex, too many in number, simple enough, etc.
spotting dependencies between one class/object and another
Not so great for:
discovering algorithmic (not data-driven) behavior
finding the flow of steps for objects to solve a given problem
understanding the app's overall control flow (event-driven? web-
based? sequential? etc.)
Qualities of modular
software
decomposable
can be broken down into pieces
composable
pieces are useful and can be combined
understandable
one piece can be examined in isolation
has continuity
reqs. change affects few modules
protected / safe
an error affects few other modules
Heuristics 2 quick reference
Heuristic 2.1: All data should be hidden within its class.
Heuristic 2.2: Users of a class must be dependent on its public interface, but a class
should not be dependent on its users.
Heuristic 2.3: Minimize the number of messages in the protocol of a class.
Heuristic 2.4: Implement a minimal public interface that all classes understand.
Heuristic 2.5: Do not put implementation details such as common-code private
functions into the public interface of a class.
Heuristic 2.6: Do not clutter the public interface of a class with items that users of
that class are not able to use or are not interested in using.
Heuristic 2.7: Classes should only exhibit nil or export coupling with other classes,
that is, a class should only use operations in the public interface of another class or
have nothing to do with that class.
Heuristic 2.8: A class should capture one and only one key abstraction.
Heuristic 2.9: Keep related data and behavior in one place.
Heuristic 2.10: Spin off non-related behavior into another class (i.e., non-
communicating behavior).
Heuristic 2.11: Be sure the abstractions that you model are classes and not simply
the roles objects play.
Interface/implementation
public interface: visible data/behavior of an object
can be seen and executed externally
private implementation: internal data/methods in an
object
helps implement the public interface; cannot be directly
accessed
client: code that uses your class/subsystem
Example: radio
• public interface is the speaker, volume buttons, station dial
• private implementation is the guts of the radio; the transistors,
capacitors, frequencies, etc. that user should not see
Poker design question 1
Poker Deck class stores a list of cards; the game needs to
be able to shuffle and draw the top card.
We give the Deck class the following methods:
add(Card), add(index, Card), getCard(int),
indexOf(Card), remove(index), shuffle(),
drawTopCard(), etc.
What's wrong with this design?
Heuristic 2.3: Minimize the # of messages in the protocol of a
class.
Heuristic 2.5: Do not put implementation details such as common-
code private functions into the public interface of a class.
Heuristic 2.6: Do not clutter the public interface of a class with
items that users of that class are not able to use or are not
interested in using.
Minimizing public interface
Make a method private unless it needs to be public.
Supply getters (not setters) for fields if you can get away with it.
• example: Card object with rank and suit (get-only)
In a class that stores a data structure, don't replicate that
structure's entire API; only expose the parts clients need.
• example: If PokerGame has an inner set of Players, supply just an
iterator or a getPlayerByName(String) method
Use a Java interface with only the needed methods, and then
refer to your class by the interface type in client code.
Poker design question 2
Proposed fields in various poker classes:
A Hand stores 2 cards and the Player whose hand it is.
A Player stores his/her Hand, last bet, a reference to the other
Players in the game, and a Deck reference to draw cards.
The PokerGame stores an array of all Players, the Deck, and
an array of all players' last bets.
What's wrong with this design?
Cohesion and coupling
cohesion: how complete and related things are in a
class
(a good thing)
coupling: when classes connect to / depend on each
other
(too much can be a bad thing)
Heuristic 2.7: Classes should only exhibit nil or export coupling
with other classes; that is, a class should only use operations in
the public interface of another class or have nothing to do with
that class.
• (in other words, minimize unnecessary coupling)
Reducing coupling
combine 2 classes if they don't represent a whole abstraction
• example: Bet and PlayRound
make a coupled class an inner class
• example: list and list iterator; binary tree and tree node
• example: GUI window frame and event listeners
provide simpler communication between subsystems
• example: provide methods (newGame, reset, ...) in PokerGame so
that clients do not need to manually refresh the players, bets, etc.
Heuristics 3 quick reference
Heuristic 3.1: Distribute system intelligence horizontally as uniformly as possible,
that is, the top-level classes in a design should share the work uniformly.
Heuristic 3.2: Do not create god classes/objects in your system. Be very suspicious
of a class whose name contains Driver, Manager, System, or Subsystem.
Heuristic 3.3: Beware of classes that have many accessor methods defined in their
public interface.
Heuristic 3.4: Beware of classes that have too much noncommunicating behavior.
Heuristic 3.5: In applications that consist of an object-oriented model interacting with
a user interface, the model should never be dependent on the interface.
Heuristic 3.6: Model the real world whenever possible.
Heuristic 3.7: Eliminate irrelevant classes from your design.
Heuristic 3.8: Eliminate classes that are outside the system.
Heuristic 3.9: Do not turn an operation into a class. Be suspicious of any class
whose name is a verb or is derived from a verb, especially those that have only one
piece of meaningful behavior (don't count set, get, print).
Heuristic 3.10: Agent classes are often placed in the analysis model of an
application. During design time, many agents are found to be irrelevant and should
be removed.
Poker design question 3
Our PokerGame class:
stores all the players
stores an array of cards representing the card deck
stores all bets and money
does the logic for each betting round
performs the AI for each computer player's moves
What's wrong with this design?
PokerGame
God classes
god class: a class that hoards too much
of the data or functionality of a system.
Heuristic 2.8: A class should capture one and only one key
abstraction.
Heuristic 3.2: Do not create god classes/objects in your system.
Be very suspicious of a class whose name contains Driver,
Manager, System, or Subsystem.
Heuristic 3.4: Beware of classes that have too much non-
communicating behavior, that is, methods that operate on a
proper subset of the data members of a class. God classes
often exhibit much non-communicating behavior.
Poker design question 4
Each new game round, the PokerGame wants to deal
cards to each player. During the game, players draw
additional cards.
We will create a Dealer class that the PokerGame asks to deal
the cards to every player.
Player objects will store a reference to the Dealer.
During the game, they will talk to the dealer to draw their cards.
The Dealer will notify the Game once all players have drawn.
What's wrong with this design?
Poker design question 5
Cards belong to one of four suits. So we have created classes
Club, Diamond, Heart, Spade class to represent each suit.
In each game round, one player is the dealer and one is the first
better. Also each turn there is a next better waiting. So we have
created classes Dealer, NextBetter, FirstBetter.
Every game has several betting rounds, each round consisting of
several bets. So we have created classes Bet and
CurrentBettingRound.
What's wrong with this design?
Proliferation of classes
proliferation of classes: too many classes that are too
small in size/scope; makes the system hard to use,
debug, maintain
Heuristic 2.11: Be sure the abstractions that you model are
classes and not simply the roles objects play.
Heuristic 3.7: Eliminate irrelevant classes from your design.
• often have only data and get/set methods; or only methods, no
real data
Heuristic 3.8: Eliminate classes that are outside the system.
• don't model a Blender just because your company sells blenders;
don't necessarily model a User just because the system is used by
somebody
Poker design question 6
A player may bet only as much $ as they have; and if a
prior player has made a "call", the current player cannot
raise.
Where should these policies be enforced?
Design 1: Player class remembers whether that player is in the
game, what that player's current bet is, whether it is his turn, etc.
• Player checks whether a "call" has been made.
• Player checks whether he/she has enough to make a given bet.
Design 2:
• PokerGame class remembers who is in the game.
• Betting class remembers every player's current bets, checks $.
• Dealer class remembers whose turn it is.
Related data and behavior
Heuristic 2.9: Keep related data and behavior in one place.
• avoids having to change two places when one change is needed
Heuristic 3.3: Beware of classes that have many accessor
methods ... [This] implies that related data and behavior are not
being kept in one place.
• "policy" behavior should be where that policy is enforced/enacted
UML sequence diagrams
sequence diagram: an "interaction diagram" that
models a single scenario executing in the system
perhaps 2nd most used UML diagram (behind class diagram)
relation of UML diagrams to other exercises:
CRC cards class diagram
use cases sequence diagrams
Parts of a seq.diagram
Sequence diag. key parts
participant: object or entity that acts in the diagram
diagram starts with an unattached "found message" arrow
message: communication between participant objects
the axes in a sequence diagram:
horizontal: which object/participant is acting
vertical: time (down = forward in time)
Seq. diag. examples
Representing objects
Squares with object type, optionally preceded by "name
:"
write object's name if it clarifies the diagram
object's "life line" represented by dashed vert. line
messages (method calls) indicated by arrow to other
object
write message name and arguments above arrow
Messages between objects
Messages, continued
messages (method calls) indicated by arrow to other
object
dashed arrow back indicates return
different arrowheads for normal / concurrent (asynchronous)
calls
Lifetime of objects
creation: arrow with 'new'
written above it
notice that an object created
after the start of the scenario
appears lower than the others
deletion: an X at bottom of
object's lifeline
Java doesn't explicitly delete
objects; they fall out of scope
and are garbage-collected
Indicating method calls
activation: thick box over object's life line; drawn when
object's method is on the stack
either that object is running its code,
or it is on the stack waiting for another object's method to finish
nest activations to indicate recursion
Activation
Nesting
Selection and loops
frame: box around part of diagram to indicate if or loop
if -> (opt) [condition]
if/else -> (alt) [condition], separated by horizontal dashed line
loop -> (loop) [condition or items to loop over]
Linking sequence diagrams
If one diagram is too large or refers to another, indicate
with:
an unfinished arrow and comment,
or a "ref" frame that names the other diagram
• when would this occur in our system?
Example sequence diagram
Forms of system control
What can you say about the control flow of each
system?
Is it centralized?
Is it distributed?
Flawed sequence diagram 1
What's wrong with this sequence diagram?
(Look at the UML syntax and the viability of the scenario.)
Flawed sequence diagram 2
What's wrong with this sequence diagram?
Why not just code it?
Sequence diagrams can be somewhat close to the code
level.
So why not just code up that algorithm rather than
drawing it as a sequence diagram?
a good sequence diagram is still a bit above the level of the real
code (not all code is drawn on diagram)
sequence diagrams are language-agnostic (can be implemented
in many different languages
non-coders can do sequence diagrams
easier to do sequence diagrams as a team
can see many objects/classes at a time on same page (visual
bandwidth)
Sequence diagram exercise
Let's do a sequence diagram for the following
poker casual use case, Start New Game Round :
The scenario begins when the player chooses to start a new round in
the UI. The UI asks whether any new players want to join the round; if
so, the new players are added using the UI.
All players' hands are emptied into the deck, which is then shuffled. The
player left of the dealer supplies an ante bet of the proper amount. Next
each player is dealt a hand of two cards from the deck in a round-robin
fashion; one card to each player, then the second card.
If the player left of the dealer doesn't have enough money to ante,
he/she is removed from the game, and the next player supplies the ante.
If that player also cannot afford the ante, this cycle continues until such a
player is found or all players are removed.
Poker sequence diagram
Sequence diagram question
Consider the possible poker use case, Betting Round :
The scenario begins after the Start New Round case has
completed. The UI asks the first player for a bet. That player
chooses to either bet a given amount, or check (no bet).
The next player is asked what to do. If the prior player placed a bet,
the next player must either match ("see") it, or match it plus add an
additional bet ("raise"), or choose not to match and exit the round
("fold"). This continues around the table until an entire pass is made
in which all players have either matched all other players' bets or
folded.
If the next player doesn't have enough money to match the current
bet, the player is allowed to bet all of their money. But they can then
win only up to the amount they bet; the rest is a "side pot" among
the more wealthy players remaining in the round.
Why is it hard to diagram this case as a sequence
diagram?
Poker sequence diagram 2
Sequence diagram exercise
Let's do a sequence diagram for the following casual use
case for a scheduler app, Add Calendar Appointment :
The scenario begins when the user chooses to add a new appointment in
the UI. The UI notices which part of the calendar is active and pops up
an Add Appointment window for that date and time.
The user enters information about the appointment's name, location, start
and end times. The UI will prevent the user from entering an
appointment that has invalid information, such as an empty name or
negative duration. The calendar records the new appointment in the
user's list of appointments. Any reminder selected by the user is added
to the list of reminders.
If the user already has an appointment at that time, the user is shown a
message and asked to choose an available time or replace the
appointment. If the user enters an appointment with the same name
and duration as an existing meeting, the calendar asks the user whether
he/she intended to join that meeting instead. If so, the user is added to
that meeting's list of participants.
UML state diagrams
state diagram: Depicts data and behavior of a single
object throughout its lifetime.
set of states (including an initial start state)
transitions between states
entire diagram is drawn from that object's perspective
similar to finite state machines (DFA, NFA, PDA, etc.)
What objects are best used with state diagrams?
large, complex objects with a long lifespan
domain ("model") objects
not useful to do state diagrams for every class in the system!
State diagram example
States
state: conceptual description of the data in the object
represented by object's field values
entire diagram is drawn from the
central object's perspective
only include states / concepts that
this object can see and influence
don't include every possible value
for the fields; only ones that are
conceptually different
Transitions
transition: movement from one state to another
signature [guard] / activity
signature: event that triggers (potential) state change
guard: boolean condition that must be true
activity: any behavior executed during transition (optional)
transitions must be mutually exclusive (deterministic)
must be clear what transition to take for an event
most transitions are instantaneous,
except "do" activities
Internal activities
internal activity: actions that the
central object takes on itself
sometimes drawn as self-transitions
(events that stay in same state)
entry/exit activities
reasons to start/stop being in that state
State diagram example
U
se
r
a
cc
o
u
n
t
m
a
n
a
g
e
m
e
n
t
Super/substates
When one state is complex, you can include substates in
it.
drawn as nested rounded rectangles within the larger state
Caution: Don't over-use this feature.
easy to confuse separate states for sub-states within one state
State diagram example
A
T
M
s
o
ft
w
a
re
s
ta
te
s
a
t
a
b
a
n
k
State diagram example
Ja
va
t
h
re
a
d
s
ta
te
s
Implementing states
What are some ways to write
code to match a state diagram?
state tables (pseudo-code)
nested if/else
switch statements
state enums
State design pattern
state pattern: An object whose sole purpose is to
represent the current "state" or configuration of another
larger object.
A behavioral pattern.
Often implemented with an enum type for the states.
Each object represents one specific state for the larger object.
The larger object sets its state in response to various mutations.
Allows various observers and interested parties to quickly and
accurately know what is going on with the larger object's status.
Analogous to the notion of finite state machines.
Set of states (nodes)
Set of edges (mutations that cause state changes)
State pattern
State enum example
/** Represents states for a poker game. */
public enum GameState {
NOT_STARTED, IN_PROGRESS, WAITING_FOR_BETS,
DEALING, GAME_OVER;
}
/** Poker game model class. */
public class PokerGame {
private GameState state;
public GameState getState() { return state; }
public void ante(int amount) {
...
state = WAITING_FOR_BETS; // change state
setChanged();
notifyObservers(state); }
}
Các file đính kèm theo tài liệu này:
- nguyen_thi_cam_huongch4_5_prototyping_and_system_modeling_sv_078.pdf