Sequence Diagrams and Collaboration Diagrams

32
1 Sequence Diagrams and Collaboration Diagrams Rajkumar Buyya Grid Computing and Distributed Systems (GRIDS) Laboratory Dept. of Computer Science and Software Engineering University of Melbourne, Australia http://www.cs.mu.oz.au/~raj or http://www.buyya.com

description

Sequence Diagrams and Collaboration Diagrams. Rajkumar Buyya Grid Computing and Distributed Systems (GRIDS) Laboratory Dept. of Computer Science and Software Engineering University of Melbourne, Australia http://www.cs.mu.oz.au/~raj or http://www.buyya.com. Introduction/Agenda. - PowerPoint PPT Presentation

Transcript of Sequence Diagrams and Collaboration Diagrams

Page 1: Sequence Diagrams and Collaboration Diagrams

1

Sequence Diagramsand Collaboration

Diagrams

Rajkumar BuyyaGrid Computing and Distributed Systems (GRIDS)

LaboratoryDept. of Computer Science and Software Engineering

University of Melbourne, Australiahttp://www.cs.mu.oz.au/~raj or http://www.buyya.com

Page 2: Sequence Diagrams and Collaboration Diagrams

2

Introduction/Agenda

Pieces of UML: Structural Diagrams

Class and object diagram Component and Deployment Diagram

Behavioural Diagrams Use Case Diagram Activity Diagram Sequence Diagram Collaboration Diagram State Chart Diagram

Learned so far: Use case diagram, class and object diagram, class

relationships Today we will focus on:

Sequence Diagram Collaboration Diagram

Page 3: Sequence Diagrams and Collaboration Diagrams

3

Object Oriented Design

Design consists of the following steps : Refine the class diagram. Draw the interaction diagrams for the

system. Sequence Diagram Collaboration Diagram

If objects go through complex state transitions – statechart diagrams

Do the above steps iteratively as needed.

Page 4: Sequence Diagrams and Collaboration Diagrams

4

Sequence Diagram

Shows how objects communicate with each other over time. That is, sequence diagrams are used to model

object interactions arranged in time sequence and to distribute use case behavior to classes.

They can also be used to illustrate all the paths a particular use case can ultimately produce.

The sequence diagram consists of Active Objects, Messages represented as solid-line arrows, and Time represented as a vertical progression.

Page 5: Sequence Diagrams and Collaboration Diagrams

5

Sequence Diagram - Objects

A life line illustrates what is happening to an object in a chronological fashion.

:Name

Life line

Activation

Object

Page 6: Sequence Diagrams and Collaboration Diagrams

6

Sequence Diagram – Time & Messages

Messages are used to illustrate communication between different active objects of a sequence diagram.

:Name1 :Name2

Message Two

ActorMessage One

Page 7: Sequence Diagrams and Collaboration Diagrams

7

Types of Messages

Synchronous (flow interrupt until the message has completed.

Asynchronous (don’t wait for response)

Flat – no distinction between sysn/async

Return – control flow has returned to the caller.

Page 8: Sequence Diagrams and Collaboration Diagrams

8

Sequence Diagram – Compilation

:Compiler LinkerActor

Compile

FileSystem

Load Files

Save OBJ Files

Compile files

Link

Load OBJ files

Link OBJ files

Write EXE file

Page 9: Sequence Diagrams and Collaboration Diagrams

9

Branching Flow: flow goes to different objects [if condition is

met]:Editor FileSystem

Load File

:BinaryViewer :TextViewer

[text file][binary file]

Page 10: Sequence Diagrams and Collaboration Diagrams

10

Alternative Flow: flow changes to alternative lifeline branch of the same

object

EditorActor

Exit App

FileSystem

[delete file]

[save file]

Page 11: Sequence Diagrams and Collaboration Diagrams

11

Sequence diagram -example

Use case Add Subject Use Case to URS (University

Record System):

Scenario Scenario 1 : Subject gets added

successfully. Scenario 2 : Adding the subject fails

because the subject is already in the database.

Page 12: Sequence Diagrams and Collaboration Diagrams

12

System Design Principles

System input can take different forms. E.g. From a graphical user interface From a command file

URS system should be designed such that the functionality can be re-used.

Command reading and functionality implementation have to be separated.

Page 13: Sequence Diagrams and Collaboration Diagrams

13

Reading from a command file - example

class URS{ public static void main(String[] args){

URSDatabase u = new URSDatabase(); //Read command from file;

while ( not end of file) {u.procCommand(cmd);//Read next commad;

}//Close file

}}

Page 14: Sequence Diagrams and Collaboration Diagrams

14

execute()

Sequence Diagram – URS Add Subject Scenario

u:URSDatabase

procCmd(cmd)

sub1:SubjectSubject(id,name)

<< create >>

parseCommand(cmd)

addSubject(sub1)

{transient}

a:AddSubCmd << create >>

[if cmdN = ADDSUB]AddSubCmd(u,cmdA)

Page 15: Sequence Diagrams and Collaboration Diagrams

15

Creating and Deleting objects

c:Client

:Transaction

p: ODBProxy

setVales(a,d,3,4)

<<destroy>>

<<create>>

committed

setAction(a, d, 0)

{transient}

Page 16: Sequence Diagrams and Collaboration Diagrams

16

Collaboration Diagrams

Page 17: Sequence Diagrams and Collaboration Diagrams

17

Collaboration Diagrams

Class diagrams indicates what classes are part of our system, what they offer, how they relate, but they don’t tell us how they communicate.

Collaboration diagrams show (used to model) how objects interact and their roles.

They are very similar to sequence diagrams. Actually they are considered as a cross between class and sequence diagram.

Sequence Diagrams are arranged according to Time. Collaboration Diagrams represent the structural

organization of object. [Both sequence and collaboration diagrams are

called interaction diagrams]

Page 18: Sequence Diagrams and Collaboration Diagrams

18

Collaboration Diagram – URS Add Subject Scenario

u:URSDatabase

<<self>>

a:AddSubCmd

2:[if cmdN = ADDSUB]AddSubCmd(u,cmdA)

<<local>>

{new}

{transient}

3: execute()

3.2: addSubject(sub1)

1:parseCommand(cmd)

procCmd(cmd)

sub1:Subject

3.1: Subject(id,name){new}

Page 19: Sequence Diagrams and Collaboration Diagrams

19

Collaboration Diagram – URS Add Subject Scenario

u:URSDatabase

<<self>>

1:parseCommand(cmd)

procCommand(cmd)

class URSDatabase{ private String cmdN; private String cmdA; private parseCommand(String cmd){ cmdN = …. cmdA = …. } public procCommand(String cmd){ parseCommand(cmd); }}

Page 20: Sequence Diagrams and Collaboration Diagrams

20

Collaboration Diagram – URS Add Subject Scenario

u:URSDatabase a:AddSubCmd 2: AddSubCmd(u,cmdA)

{new}

{transient}

class URSDatabase{ private String cmdN; private String cmdA;

public procCommand(String cmd){ parseCommand(cmd); if (cmdN == ADDSUB){ AddSubCmd a = new AddSubCmd(u,cmdA); } }}

Page 21: Sequence Diagrams and Collaboration Diagrams

21

Collaboration Diagram – URS Add Subject Scenario

class abstract Command { protected String cmd; protected URSDatabase u; public abstract void execute();} class AddSubCmd extends Command{ public AddSubCmd(URSDatabase urs, String cmd){ u = urs; // parse command and set the arguments } public void execute(){ // implement here }}

Page 22: Sequence Diagrams and Collaboration Diagrams

22

Collaboration Diagram – URS Add Subject Scenario

u:URSDatabase a:AddSubCmd<<local>>

3: execute()

class URSDatabase{ private String cmd; public procCommand(String cmd){ parseCommand(0); if (cmd == ADDSUB){ AddSubcmd a = new AddSubCmd(……); } a.execute();

}}

Page 23: Sequence Diagrams and Collaboration Diagrams

23

Collaboration Diagram – URS Add Subject Scenario

a:AddSubCmd

sub1:Subject

3.1: Subject(id,name)

class AddSubCmd{ URSDatabase u;

public execute(){

subject sub1 = new Subject(id,name); }}

Page 24: Sequence Diagrams and Collaboration Diagrams

24

Collaboration Diagram – URS Add Subject Scenario

u:URSDatabase a:AddSubCmd3.2: addSubject(sub1)

class AddSubCmd{ URSDatabse u; public execute(){

subject sub1 = new Subject(……); u.addSubject(sub1); }}

Page 25: Sequence Diagrams and Collaboration Diagrams

25

Collaboration Diagram – URS Add Subject Scenario

class URSDatabase{ private String cmd; private Hashtable subjectHash = new HashTable(); public procCommand(String cmd){ parseCommand(0); if (cmd == ADDSUB){ AddSubcmd a = new AddSubCmd(……); } a.execute(); } public addSubject(Subject sub); {

subjectHash.put(sub.getKey(), sub); }

}

Page 26: Sequence Diagrams and Collaboration Diagrams

26

URS -High Level Class Diagram

URSDatabase

UniversityMember

AcademicStaff Student

Subject

1

*has

1

*

has

teaches

0..3

1

takes *

0…10

Page 27: Sequence Diagrams and Collaboration Diagrams

27

Collaboration Diagrams

Collaborations Diagrams show transient links that exists between objects. <<self>> - A message from object to itself << local>> - A message sent due to the

object begin defined as a local variable in the method.

<<parameter>> - The object reference was sent as a parameter to the method.

<<global>> The object is global.

Page 28: Sequence Diagrams and Collaboration Diagrams

28

Use Case Vs Scenarios

Use case Enroll Subject Use Case:

Scenario Scenario 1 : Student is enrolled for

the subject. Scenario 2 : Enrollment fails since the

student is already enrolled in 10 subjects.

Page 29: Sequence Diagrams and Collaboration Diagrams

29

Sequence Diagram – Enroll Student for subject successfully

u:URSDatabase

procCmd(cmd)parseCommand(cmd)

execute()

{transient}

a:AssgSubCmd<< create >>

AssgSubCmd(u,cmdA)

getStudent(id)

return stu

getSubject(subId)

return sub[if stu != NULL and sub != NULL]

stu:Student

addSubject(sub)

Page 30: Sequence Diagrams and Collaboration Diagrams

30

Collaboration Diagram – Enroll Student in Subject Scenario

u:URSDatabase

{new}

a:AssgSubCmd

2:AddSubCmd(u,cmdA)

{transient}

<<local>>

3: execute()

3.1: stu: =getStudent(id)

<<self>>

1:parseCommand()

procCmd(cmd)

stu:Student

3.3: [stu !=NULL and sub!= NULL]:

addSubject(sub){parameter}

3.2: sub: = getSubject(subId)

Page 31: Sequence Diagrams and Collaboration Diagrams

31

Collaboration Diagram – Enroll Student in Subject subject - implementation

u:URSDatabase

{new}

a:AssgSubCmd

{transient}

<<local>>

3: execute()

3.1: stu: =getStudent(id)

procCmd(cmd)

stu:Student

3.3: [stu !=NULL and sub!= NULL]:

addSubject(sub){parameter}

3.2: sub: = getSubject(subId)

class AssgSubCmd{ private URSDatabase u; public execute(){ Student stu = u.getStudent(id); Subject sub = u.getSubject(subId); if (stu != null && sub != null){ stu.addSubject(sub); } }}

Page 32: Sequence Diagrams and Collaboration Diagrams

32

Sequence Diagram – Enroll Student for subject - Failure

u:URSDatabase

procCmd(cmd)parseCommand()

execute()

{transient}

a:AssgSubCmd<< create >>

AssgSubCmd(u,cmd)

[if stu != NULL and sub != NULL]

stu:Student

addSubject(sub)

getNumSubjects()

return num

Excp[num >= 10]

return e