UML Class Diagrams: Thanks To Marty Stepp, Michael Ernst, and Other Past Instructors of CSE 403
UML Class Diagrams: Thanks To Marty Stepp, Michael Ernst, and Other Past Instructors of CSE 403
Lecture 8
UML Class Diagrams
Thanks to Marty Stepp, Michael Ernst, and other past instructors of CSE 403
http://www.cs.washington.edu/403/
• UML
– class diagrams (today)
– sequence diagrams
– ...
2
Introduction to UML
• Unified Modeling Language (UML): depicts an OO system
– programming languages are not abstract enough for OO design
– UML is an open standard; lots of companies use it
• many programmers either know UML or a "UML-like" variant
• UML is ...
– a descriptive language: rigid formal syntax (like programming)
– a prescriptive language: shaped by usage and convention
3
Diagram of one class
• class name in top of box
– write <<interface>> 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
4
Class attributes
• attributes (fields, instance variables)
– visibility name : type [count ] = defaultValue
– visibility: + public
# protected
- private
~ package (default)
/ derived
– underline static attributes
– attribute example:
- balance : double = 0.00
5
Class operations / methods
• operations / methods
– visibility name (parameters ) : returnType
– method example:
+ distance(p1: Point, p2: Point): double
6
Inheritance relationships
– hierarchies drawn top-down with arrows
pointing upward to parent
7
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)
B contains A
8
Multiplicity
The relationships on the original slides were drawn backwards
• one-to-one These show the correct diamond placement.
Student 1 IDCard
1
• one-to-many
– a RectangleList can contain 0, 1, 2, ... rectangles
Rectangle RectangleList
* 1
9
Association types Car
1
• aggregation: "is part of" These relationships were
1
aggregation
drawn OK
– clear white diamond Engine
– black diamond 1
*
• dependency: "uses temporarily" Page
– dotted line or arrow
– often is an implementation dependency
detail, not an intrinsic part of
that object's state Lottery Random
Ticket
10
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.
Relationships marked
Class diagrams show
the responsibilities and
have the diamond relationships of each
class, but not behavior.
at the wrong end
on this diagram 12
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
• 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
14
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.
• from Object-Oriented Design Heuristics by Arthur J. Riel (Addison-Wesley Professional, 1996), ISBN-13: 978-0-201-63385-6
15
Interface/implementation
• public interface: visible data/behavior of an object
– can be seen and executed externally
– 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
16
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.
17
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)
– Use a Java interface with only the needed methods, and then
refer to your class by the interface type in client code.
18
Poker design question 2
• Proposed fields in various poker classes:
19
Cohesion and coupling
• cohesion: how complete and related things are in a class
(a good thing)
20
Reducing coupling
– combine 2 classes if they don't represent a whole abstraction
• example: Bet and PlayRound
21
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.
• from Object-Oriented Design Heuristics by Arthur J. Riel (Addison-Wesley Professional, 1996), ISBN-13: 978-0-201-63385-6
22
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
PokerGame
23
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.
25
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.
26
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.
– 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.
28
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
29