[go: up one dir, main page]

0% found this document useful (0 votes)
166 views58 pages

UML Class Diagrams

- Visibility: + (public), - (private), # (protected), ~ (package) - Name: name of attribute - Type: type of attribute (int, String, etc.) - Count: [0..1] for multi-valued attributes - Default value: (optional) So - width: int declares a private int field called width. / area: double declares a derived attribute called area. Student - name: String - id: int - totalStudents: int # getID(): int ~ getEmail(): String

Uploaded by

Sh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
166 views58 pages

UML Class Diagrams

- Visibility: + (public), - (private), # (protected), ~ (package) - Name: name of attribute - Type: type of attribute (int, String, etc.) - Count: [0..1] for multi-valued attributes - Default value: (optional) So - width: int declares a private int field called width. / area: double declares a derived attribute called area. Student - name: String - id: int - totalStudents: int # getID(): int ~ getEmail(): String

Uploaded by

Sh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 58

CSE 403: Software Engineering, Spring 2015

courses.cs.washington.edu/courses/cse403/15sp/

UML Class Diagrams

Emina Torlak
emina@cs.washington.edu
Outline

• Designing classes
• Overview of UML
• UML class diagrams
• Syntax and semantics
• Examples

2
design
design phase: from requirements to code
Software design

4
Software design

• Design: specifying the structure of how a


software system will be written and function,
without actually writing the complete
implementation

4
Software design

• Design: specifying the structure of how a


software system will be written and function,
without actually writing the complete
implementation
• A transition from "what" the system must do, to
"how" the system will do it
• What classes will we need to implement a system
that meets our requirements?
• What fields and methods will each class have?
• How will the classes interact with each other?

4
How to design classes?

Identify classes and interactions from


project requirements:
• Which nouns in your project
• Nouns are potential classes, objects, should be classes?
and fields
• Which ones are fields?
• Verbs are potential methods or
responsibilities of a class • What verbs should be methods?
• Relationships between nouns are • What are potential interactions
potential interactions (containment, between your classes?
generalization, dependence, etc.)

5
Describing designs with CRC cards

CRC (class-responsibility-collaborators) cards


• on top of the card, write down the name of the class
• below the name, list the following:
• responsibilities: problems to be solved; short verb phrases
• collaborators: other classes that are sent messages by this class

6
Describing designs with UML diagrams

• Class diagram (today)


• Shows classes and relationships among them.
• A static view of the system, displaying what interacts
but not what happens when they do interact.
• Sequence diagram (next lecture)
• A dynamic view of the system, describing how objects
collaborate: what messages are sent and when.

7
basics
describing designs with UML: an overview
What is UML?

9
What is UML?

• Pictures or views of an OO system


• Programming languages are not abstract enough for OO design
• UML is an open standard; lots of companies use it

9
What is UML?

• Pictures or views of an OO system


• Programming languages are not abstract enough for OO design
• UML is an open standard; lots of companies use it
• What is legal UML?
• A descriptive language: rigid formal syntax (like programming)
• A prescriptive language: shaped by usage and convention
• It's okay to omit things from UML diagrams if they aren't
needed by team/supervisor/instructor

9
UML: Unified Modeling Language

• Union of Many Languages


• Use case diagrams
• Class diagrams
• Object diagrams
• Sequence diagrams
• Collaboration diagrams A very big language!
• Statechart diagrams
• Activity diagrams
• Component diagrams
• Deployment diagrams
• ….

10
Uses for UML

11
Uses for UML

• As a sketch: to communicate aspects of system


• Forward design: doing UML before coding
• Backward design: doing UML after coding as documentation
• Often done on whiteboard or paper
• Used to get rough selective ideas

11
Uses for UML

• As a sketch: to communicate aspects of system


• Forward design: doing UML before coding
• Backward design: doing UML after coding as documentation
• Often done on whiteboard or paper
• Used to get rough selective ideas
• As a blueprint: a complete design to be implemented
• Sometimes done with CASE (Computer-Aided Software
Engineering) tools

11
Uses for UML

• As a sketch: to communicate aspects of system


• Forward design: doing UML before coding
• Backward design: doing UML after coding as documentation
• Often done on whiteboard or paper
• Used to get rough selective ideas
• As a blueprint: a complete design to be implemented
• Sometimes done with CASE (Computer-Aided Software
Engineering) tools
• As a programming language: with the right tools,
code can be auto-generated and executed from UML
• Only good if this is faster than coding in a "real" language

11
learn
UML class diagrams
What is a UML class diagram?

• A UML class diagram is a picture of


• the classes in an OO system
• their fields and methods
• connections between the classes that interact or
inherit from each other
• Not represented in a UML class diagram:
• details of how the classes interact with each other
• algorithmic details; how a particular behavior is
implemented

13
Diagram of a single class

Rectangle
- width: int
- height: int
/ area: double

+ Rectangle(w: int, h: int)


+ distance(r: Rectangle): double

Student
- name: String
- id: int
- totalStudents: int

# getID(): int
~ getEmail(): String

14
Diagram of a single class

Rectangle

• Class name - width: int


- height: int
• write «interface» on top of interfaces' names / area: double
• use italics for an abstract class name
+ Rectangle(w: int, h: int)
+ distance(r: Rectangle): double

Student
- name: String
- id: int
- totalStudents: int

# getID(): int
~ getEmail(): String

14
Diagram of a single class

Rectangle

• Class name - width: int


- height: int
• write «interface» on top of interfaces' names / area: double
• use italics for an abstract class name
+ Rectangle(w: int, h: int)
• Attributes (optional) + distance(r: Rectangle): double
• fields of the class

Student
- name: String
- id: int
- totalStudents: int

# getID(): int
~ getEmail(): String

14
Diagram of a single class

Rectangle

• Class name - width: int


- height: int
• write «interface» on top of interfaces' names / area: double
• use italics for an abstract class name
+ Rectangle(w: int, h: int)
• Attributes (optional) + distance(r: Rectangle): double
• fields of the class
• Operations / methods (optional) Student
• may omit trivial (get/set) methods - name: String
• but don't omit any methods from an interface! - id: int
• should not include inherited methods - totalStudents: int

# getID(): int
~ getEmail(): String

14
Class attributes (fields, instance variables)

visibility name : type [count] = default_value Rectangle


- width: int
- height: int
/ area: double

+ Rectangle(w: int, h: int)


+ distance(r: Rectangle): double

Student
- name: String
- id: int
- totalStudents: int

# getID(): int
~ getEmail(): String

15
Class attributes (fields, instance variables)

visibility name : type [count] = default_value Rectangle


- width: int
- height: int
• visibility / area: double
+ public
+ Rectangle(w: int, h: int)
# protected + distance(r: Rectangle): double
- private
~ package (default)
Student
/ derived
- name: String
- id: int
- totalStudents: int

# getID(): int
~ getEmail(): String

15
Class attributes (fields, instance variables)

visibility name : type [count] = default_value Rectangle


- width: int
- height: int
• visibility / area: double
+ public
+ Rectangle(w: int, h: int)
# protected + distance(r: Rectangle): double
- private
~ package (default)
Student
/ derived
- name: String
• underline static attributes - id: int
- totalStudents: int

# getID(): int
~ getEmail(): String

15
Class attributes (fields, instance variables)

visibility name : type [count] = default_value Rectangle


- width: int
- height: int
• visibility / area: double
+ public
+ Rectangle(w: int, h: int)
# protected + distance(r: Rectangle): double
- private
~ package (default)
Student
/ derived
- name: String
• underline static attributes - id: int
- totalStudents: int
• derived attribute: not stored, but can 

be computed from other attribute values # getID(): int
• “specification fields” from CSE 331 ~ getEmail(): String

15
Class operations / methods

visibility name(parameters) : return_type Rectangle


- width: int
- height: int
/ area: double

+ Rectangle(w: int, h: int)


+ distance(r: Rectangle): double

Student
- name: String
- id: int
- totalStudents: int

# getID(): int
~ getEmail(): String

16
Class operations / methods

visibility name(parameters) : return_type Rectangle


- width: int
- height: int
• visibility / area: double
+ public
+ Rectangle(w: int, h: int)
# protected + distance(r: Rectangle): double
- private
~ package (default)
Student
- name: String
- id: int
- totalStudents: int

# getID(): int
~ getEmail(): String

16
Class operations / methods

visibility name(parameters) : return_type Rectangle


- width: int
- height: int
• visibility / area: double
+ public
+ Rectangle(w: int, h: int)
# protected + distance(r: Rectangle): double
- private
~ package (default)
Student
• underline static methods - name: String
- id: int
- totalStudents: int

# getID(): int
~ getEmail(): String

16
Class operations / methods

visibility name(parameters) : return_type Rectangle


- width: int
- height: int
• visibility / area: double
+ public
+ Rectangle(w: int, h: int)
# protected + distance(r: Rectangle): double
- private
~ package (default)
Student
• underline static methods - name: String
• parameters listed as name : type - id: int
- totalStudents: int

# getID(): int
~ getEmail(): String

16
Class operations / methods

visibility name(parameters) : return_type Rectangle


- width: int
- height: int
• visibility / area: double
+ public
+ Rectangle(w: int, h: int)
# protected + distance(r: Rectangle): double
- private
~ package (default)
Student
• underline static methods - name: String
• parameters listed as name : type - id: int
- totalStudents: int
• omit return_type on constructors and

when return type is void # getID(): int
~ getEmail(): String

16
Comments

Represented as a folded note, attached to the


appropriate class/method/etc by a dashed line

Cloneable is a tagging
interface with no
«interface»
Cloneable
methods. The clone()
methods is defined in
the Object class.

17
Relationships between classes

• Generalization: an inheritance relationship


• inheritance between classes
• interface implementation
• Association: a usage relationship
• dependency
• aggregation
• composition

18
Generalization relationships «interface»
Shape
+ getArea(): double

RectangularShape
- width: int
- height: int
/ area: double

+ contains(x: int, y: int): boolean


+ getArea(): double

Rectangle
- x: int
- y: int

+ Rectangle(x: int, y: int)


+ distance(r: Rectangle): double

19
Generalization relationships «interface»
Shape
+ getArea(): double

• Hierarchies drawn top-down


RectangularShape
- width: int
- height: int
/ area: double

+ contains(x: int, y: int): boolean


+ getArea(): double

Rectangle
- x: int
- y: int

+ Rectangle(x: int, y: int)


+ distance(r: Rectangle): double

19
Generalization relationships «interface»
Shape
+ getArea(): double

• Hierarchies drawn top-down


RectangularShape
• Arrows point upward to parent
- width: int
- height: int
/ area: double

+ contains(x: int, y: int): boolean


+ getArea(): double

Rectangle
- x: int
- y: int

+ Rectangle(x: int, y: int)


+ distance(r: Rectangle): double

19
Generalization relationships «interface»
Shape
+ getArea(): double

• Hierarchies drawn top-down


RectangularShape
• Arrows point upward to parent
- width: int
• Line/arrow styles indicate if parent is a(n): - height: int
• class: solid line, black arrow / area: double
• abstract class: solid line, white arrow + contains(x: int, y: int): boolean
• interface: dashed line, white arrow + getArea(): double

Rectangle
- x: int
- y: int

+ Rectangle(x: int, y: int)


+ distance(r: Rectangle): double

19
Generalization relationships «interface»
Shape
+ getArea(): double

• Hierarchies drawn top-down


RectangularShape
• Arrows point upward to parent
- width: int
• Line/arrow styles indicate if parent is a(n): - height: int
• class: solid line, black arrow / area: double
• abstract class: solid line, white arrow + contains(x: int, y: int): boolean
• interface: dashed line, white arrow + getArea(): double

• Often omit trivial / obvious generalization


relationships, such as drawing the Object class
Rectangle
as a parent
- x: int
- y: int

+ Rectangle(x: int, y: int)


+ distance(r: Rectangle): double

19
Associational (usage) relationships

Class A Class B
1..* k
contains

20
Associational (usage) relationships

1. Multiplicity (how many are used)


• * (zero or more) 1 1
• 1 (exactly one) Class A Class B
• 2..4 (between 2 and 4, inclusive) 1..* k
• 3..* (3 or more, * may be omitted) contains

20
Associational (usage) relationships

1. Multiplicity (how many are used)


• * (zero or more) 1 1
• 1 (exactly one) Class A Class B
• 2..4 (between 2 and 4, inclusive) 1..* k
• 3..* (3 or more, * may be omitted) contains
2. Name (what relationship the objects have)
2

20
Associational (usage) relationships

1. Multiplicity (how many are used)


• * (zero or more) 1 1
• 1 (exactly one) Class A Class B
• 2..4 (between 2 and 4, inclusive) 1..* k
• 3..* (3 or more, * may be omitted) contains
3
2. Name (what relationship the objects have)
2
3. Navigability (direction)

20
Association multiplicities

• One-to-one Car
1 1
Engine
• Each car has exactly one engine.
• Each engine belongs to exactly one car.
• One-to-many Book Page
1 *
• Each book has many pages.
• Each page belongs to exactly one book.

21
Association types

Car Engine
1 1

22
Association types

• Aggregation: “is part of” Car


1 1
Engine
• symbolized by a clear white diamond

22
Association types

• Aggregation: “is part of” Car


1 1
Engine
• symbolized by a clear white diamond
• Composition: “is entirely made of”
• stronger version of aggregation Book Page
1 *
• the parts live and die with the whole
• symbolized by a black diamond

22
Association types

• Aggregation: “is part of” Car


1 1
Engine
• symbolized by a clear white diamond
• Composition: “is entirely made of”
• stronger version of aggregation Book Page
1 *
• the parts live and die with the whole
• symbolized by a black diamond
• Dependency: “uses temporarily”
• symbolized by dotted line Lottery Random

• often is an implementation detail, not


an intrinsic part of the object's state

22
Aggregation / composition example

• If the movie theater goes away


• so does the box office: composition
• but movies may still exist: aggregation

MovieTheater BoxOffice
1 1

*
Movie

23
Class diagram example: video store

Multiplicity
Customer 1
Class
Aggregation

Rental Invoice
Abstract class
1..*
Rental Item 1 0..1
Generalization Composition
Association

Checkout Screen
DVD VHS Game

24
Class diagram example: people

Let’s add visibility


attributes.

25
Class diagram example: student

StudentBody Student
1 100
- firstName : String
+ main (args : String[]) - lastName : String
- homeAddress : Address
- schoolAddress : Address
+ toString() : String
Address
- streetAddress : String
- city : String
- state : String
- zipCode : long
+ toString() : String

26
Tools for creating UML diagrams

• Violet (free)
• http://horstmann.com/violet/
• Rational Rose
• http://www.rational.com/
• Visual Paradigm UML Suite (trial)
• http://www.visual-paradigm.com/
• There are many others, but most are commercial

27
What (not) to use class diagrams for

28
What (not) to use class diagrams for

• 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

28
What (not) to use class diagrams for

• 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.)

28
Summary

• A design specifies the structure of


how a software system will be written
and function.
• UML is a language for describing
various aspects of software designs.
• UML class diagrams present a static
view of the system, displaying classes
and relationships between them.

29

You might also like