uml 인터랙션 다이어그램...

35
UML 인터랙션 다이어그램 표기법 (UML Interaction Diagram)

Upload: others

Post on 18-Mar-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

UML 인터랙션 다이어그램 표기법 (UML Interaction Diagram)

Objectives

• 자주 사용되는 UML 순차도와 협력도를 그릴 수 있다.

2

소개

• 동적 객체 모델링은 객체들이 메시지를 주고 받으면서 상호작용하는 것을 표현

• Interaction Diagram 을 사용 – 순차도(sequence diagram)과 협력도 (communication diagram)으로 구분.

• 표기법보다는 객체지향 설계의 핵심원칙은 무엇인가가 더 중요!

3

1. 순차도와 협력도

• 교류도

– 순차도 (sequence diagram)와 협력도

– 표현력은 같음

: A myB : B

doTwo

doOne

doThree

: A

myB : B

1: doTwo

2: doThree

doOne

4

public class A { private B myB = new B(); public void doDone() { myB.doTwo(); myB.doThree(); } //… }

순차도 vs. 협력도

• 객체 간의 메시지 통신을 표현하며 표현력은 같다.

• 순차도 장단점

– 보기에 편하다. 많이 사용한다.

– 공간을 많이 차지

• 협력도 장단점

– 공간을 적게 차지하면서 객체간의 협력관계를 볼 수 있다.

– 순서는 1,2,… 를 따라가야 하므로 순서를 보기에는 어려움

5

예제: makePayment

: Register : Sale

makePayment(cashTendered)

makePayment(cashTendered)

: Paymentcreate(cashTendered)

6

• 1. makPayment 메시지가 Register 객체에 도착. 발신자는 모름.

• 2. Register 객체는 Sale 객체에 같은 메시지를 전달.

• 3. Sale 객체는 Payment 객체를 생성

public Sale { private Payment payment; Public void makePayment (Money cashTendered) { payment = new Payment(cashTendered); //… } }

예제: makePayment (협력도)

1: makePayment(cashTendered)

1.1: create(cashTendered)

:Register :Sale

:Payment

makePayment(cashTendered)

direction of message

7

2. 초보 UML모델러는 동적 모델에 충분한 관심이 없다.

• 지침

– 클래스 다이어그램을 이용한 정적 객체 모델링에만 시간을 소비하지 말고, 인터랙션 다이어그램을 이용하여 동적 객체 모델링을 하는 데도 시간을 할애하라.

8

3. UML 인터랙션 다이어그램의 일반적 표기법

• 생명선 박스를 이용한 객체 표현

9

sales : ArrayList < Sale >

: Sale s 1 : Sale

lifeline box representing an instance of an ArrayList class , parameterized ( templatized ) to hold Sale objects

lifeline box representing an unnamed instance of class Sale

lifeline box representing a named instance

sales [ i ] : Sale

lifeline box representing one instance of class Sale , selected from the sales ArrayList < Sale > collection

x : List

«metaclass» Font

lifeline box representing the class Font , or more precisely , that Font is an instance of class Class – an instance of a metaclass

related example

List is an interface

in UML 1 . x we could not use an interface here , but in UML 2 , this ( or an abstract class ) is legal

교류도의 일반적 표기법

• 기본 메시지 표현 문법

– 중요하지 않은 부분은 생략할 수 있다.

• Initialize(cod)

• Initialize

• D = getProductDescription(id)

• D = getProductDescription(id:ItemID)

• D = getProductDescription(id:ItemID) : ProductDescription

• Singleton 객체

10

return = message (parameter: Type) : returnType

: Register 1 : Store

r=doA(m:Money):Int doX

the ‘ 1 ’ implies this is a Singleton , and accessed via the Singleton pattern

4. 순차도의 기본적인 표기법 1

• 생명선 박스와 생명선

– UML 1.x : 점선

– UML 2.x : 점선 또는 실선

• 메시지

– 생명선 사이를 연결하는 수평 화살표 (대부분 동기 메시지)

– 메시지 호출 시간 순서는 위에서 아래로.

11

: Register : Sale

doA

doB

doX

doC

doD

typical sychronous message shown with a filled - arrow line

a found message whose sender will not be specified

실행명세 bar indicates focus of control

4. 순차도의 기본적인 표기법 2

• 응답 또는 반환 나타내기

– 1. 메시지 문법을 이용, return = message(params)

– 2. 응답 (또는 반환) 메시지 선 (점선)을 이용

: Register : Sale

d1 = getDate

getDate

doX

aDate

12

4. 순차도의 기본적인 표기법 3

: Register

doX

clear

13

• “self” 또는 “this”로의 메시지

– 중첩된 활성화 막대 (실행 명세)를 사용

public Register { public void doX ( ) { clear() //… } private void clear() { }

4. 순차도의 기본적인 표기법 4

• 인스턴스의 생성

– 점선 호출과 create 라는 관용적 함수

– “new” 연산자를 실행하여 생성자를 호출시켜라는 뜻

• 객체 생명선과 객체 소멸

– C++ 같이 garbage collection이 안 되는 경우 명시적으로 기술

14

: Sale

: Payment create ( cashTendered )

... the «destroy» stereotyped message , with the large X and short lifeline indicates explicit object destruction

«destroy» X

4. 순차도의 기본적인 표기법 5 - Frame

enterItem(itemID, quantity)

: B

endSale

a UML loop frame, with a boolean guard expression description, total

makeNewSale

[ more items ]loop

: A

15

• UML 순차도에서의 프레임(frame)

– 조건문이나 반복부분에 사용

– 프레임 연산자나 레이블, 가드로 구성

– 조건은 생명선 위에 위치

– 프레임 연산자의 종류

• alt : 가드 조건에 따라 배타적으로 실행

• loop : 가드가 참일 때만 반복적으로 실행

• Opt : 가드가 참일 때만 선택적으로 실행

• Par : 병렬적으로 수행되는 부분

• Region : 임계 영역 (오직 하나의 쓰레드만 실행 가능)

4. 순차도의 기본적인 표기법 5 - Frame

calculate

: Bar

yy

xx

[ color = red ]opt

: Foo

[ color = red ] calculate

: Bar

yy

xx

: Foo

16

• UML 2.x

– Option frame 사용

– Color 가 red 일 때만 수행

• UML 1.x

– 메지지 앞에 사용

– 간단할 경우 사용 가능

4. 순차도의 기본적인 표기법 5 - Frame

: B: A

calculate

doX

: C

calculate

[ x < 10 ]alt

[ else ]

17

• 상호 배타적 실행

– 프레임을 점선으로 나눔

4. 순차도의 기본적인 표기법 5 - Frame

• 컬렉션에 대한 반복

st = getSubtotal

lineItems[i] :SalesLineItem

t = getTotal

loop

: Sale

18

st = getSubtotal

lineItems [ i ] : SalesLineItem

t = getTotal

[ i < lineItems . size ] loop

: Sale This lifeline box represents one instance from a collection of many SalesLineItem objects .

lineItems [ i ] is the expression to select one element from the collection of many SalesLineItems ; the ‘i” value refers to the same “i” in the guard in the LOOP frame

an action box may contain arbitrary language statements ( in this case , incrementing ‘i’ )

it is placed over the lifeline to which it applies

i ++

4. 순차도의 기본적인 표기법 5 - Frame

calculate

: Bar

xx

[ color = red ]opt

: Foo

loop(n)

19

• 프레임의 중첩

4. 순차도의 기본적인 표기법 6 – 순차도 연관

• 인터렉션의 사용

– 다른 인터랙션을 참조

– 단순화하거나, 다른 인터렉션을 포함시키고 싶을 때 사용

20

interaction occurrence

note it covers a set of lifelines

note that the sd frame it relates to has the same lifelines : B and C

doA

: A : B : C

doB

sd AuthenticateUser

ref AuthenticateUser authenticate ( id )

doX

doM 1

: B : C

authenticate ( id )

doM 2

ref DoFoo sd DoFoo

doX

: B : C

doY

doZ

4. 순차도의 기본적인 표기법 6 – 정적 클래스로의 메시지

• 클래스 또는 정적 메소드 호출을 위한 도식

– 보통은 객체에게 호출하지만, 클래스의 정적 메소드를 호출할 때는 클래스가 필요

– 특정 클래스는 자바에서 메타클래스인 “Class”의 인스턴스임

– .NET에서는 “Type”이 모든 클래스의 메타클래스임

21

1 : locs = getAvailableLocales : Foo

«metaclass» Calendar

doX

message to class , or a static method call

4. 순차도의 기본적인 표기법 6 – 다형성 표기

• virtual 함수는 {abstract}로 표기

22

: Register

authorize

doX

: Payment { abstract }

polymorphic message object in role of abstract superclass

: DebitPayment

doA

authorize

: Foo

stop at this point – don’t show any further details for this message

doB

: CreditPayment

doX

authorize

: Bar

Payment { abstract }

authorize () { abstract } ...

CreditPayment

authorize () ...

DebitPayment

authorize () ...

Payment is an abstract superclass , with concrete subclasses that implement the polymorphic authorize operation

separate diagrams for each polymorphic concrete case

4. 순차도의 기본적인 표기법 7 – 비동기적 호출과 동기적 호출

• 비동기적 메시지 호출

– 응답을 기다리지 않는다. 즉 블락(block)되지 않음

– .NET 또는 java 의 쓰레드 환경에서 사용

– 실행 도중에 쓰레드를 생성하고 초기화할 수 있다. (Thread.start)

– 선으로 된 화살촉

• 동기적 메시지 호출

– 보통의 함수 호출

– 결과가 올 때까지 호출한 객체는 기다림

– 속이 꽉 찬 화살촉

23

4. 순차도의 기본적인 표기법 7 – 액티브 객체

• 액티브 객체

– 객체 자신만의 쓰레드를 실행시키고 제어함

– 박스 양쪽에 바가 추가됨

• 비동기적 호출

– run 메소드

24

: ClockStarter

: Clock

run

startClock

create

a stick arrow in UML implies an asynchronous call

a filled arrow is the more common synchronous call

In Java , for example , an asynchronous call may occur as follows :

// Clock implements the Runnable interface Thread t = new Thread ( new Clock () ) ; t . start () ;

the asynchronous start call always invokes the run method on the Runnable ( Clock ) object

to simplify the UML diagram , the Thread object and the start message may be avoided ( they are standard “overhead” ) ; instead , the essential detail of the Clock creation and the run message imply the asynchronous call

runFinalization

System : Class

active object

4. 순차도의 기본적인 표기법 7 – 액티브 객체의 java 구현

25

public class Clock implements Runnale { public void run() // 쓰레드의 start함수를 부르면 자동 호출되는 함수 { while (true) // 쓰레드안에서 무한 반복 { /// } } Public class ClockStarter { public void startClock() { Thread t = new Thread(new Clock()); t.start(); // Clock 쓰레드의 run 메소드의 비동기적 호출 System.runFinalization(); } }

5. 협력도의 기본적인 표기법 - 링크

1: makePayment(cashTendered)2: foo

2.1: bar: Register :Sale

link line

26

• 링크

– 두 객체 사이의 연결 경로로서 연관관계의 인스턴스임

– 예를 들어 Register 클래스와 Sale 클래스의 연관이 있다면 Register 객체와 Sale 객체 사이에 링크가 존재한다.

– 링크 하나에는 여러 종류의 메시지가 흘러갈 수 있다.

5. 협력도의 기본적인 표기법 - 메시지

• 메시지

– 링크 위에 메시지 표현식과 작은 화살표로 흐름방향을 표현

– 순서번호를 사용하여 흐름 순서를 표시

– 첫 번째 메시지는 순서번호를 붙이지 않는다.

1: msg22: msg33: msg4

3.1: msg5: Register :Sale

all messages flow on the same link

msg1

27

5. 협력도의 기본적인 표기법 – “self” 및 인스턴스 생성

• “self” 또는 “this”로의 메시지

– 자신으로의 루프

• 인스턴스의 생성

– <<create>> 스테레오 타입 사용

– 생성된 인스턴스 {new} 태크 사용

: Register

msg1

1: clear

28

1 : create ( cashier )

: Register : Sale

create message , with optional initializing parameters . This will normally be interpreted as a constructor call .

«create» 1 : make ( cashier )

: Register : Sale

if an unobvious creation message name is used , the message may be stereotyped for clarity

1 : create ( cashier )

: Register : Sale { new }

Three ways to show creation in a communication diagram

5. 협력도의 기본적인 표기법 –순서번호 매기기

• 순서번호 (sequence number) 규칙

– 1. 첫 번째 메시지는 번호를 붙이지 않는다.

– 2. 첫 번째 메시지를 호출 받은 객체가 다른 객체들에게 메시지를 보낼 때는 1,2,3…으로 붙이고, 그 다른 객체들이 또 다시 중첩하여 메시지를 보낼 때는 1.1, 1.2, 등으로 dot 기호를 사용한다.

: Amsg1 : B1: msg2

: C

1.1: msg3

2.1: msg5

2: msg4

: D

2.2: msg6

first second

fourth

sixth

fifth

third

29

5. 협력도의 기본적인 표기법 – 조건부 메시지 전달

• 조건 메시지

– 가드를 사용

– 번호 [ 조건 ] : 메시지

• 상호 배타적인 조건

1 [ color = red ] : calculate: Foo : Bar

message1

conditional message, with test

1a [test1] : msg2: A : B

: C

1a.1: msg3

msg1

: D

1b [not test1] : msg4

1b.1: msg5

: E

2: msg6

unconditional after either msg2 or msg4 1a and 1b are mutually

exclusive conditional paths

30

5. 협력도의 기본적인 표기법 – 반복

1 * [ i = 1..n ]: num = nextInt: SimulatorrunSimulation : Random

iteration is indicated with a * and an optional iteration clause following the sequence number

31

• 반복 혹은 루프

– 조건 앞에 ‘*’ 를 붙임.

5. 협력도의 기본적인 표기법 – 컬렉션에 대한 반복

1 * [i = 1..n]: st = getSubtotal: Salet = getTotal

This lifeline box represents one instance from a collection of many SalesLineItem objects.

lineItems[i] is the expression to select one element from the collection of many SalesLineItems; the 멼?value comes from the message clause.

lineItems[i]:SalesLineItem

this iteration and recurrence clause indicates we are looping across each element of the lineItems collection.

1 *: st = getSubtotal: Salet = getTotal lineItems[i]:SalesLineItem

Less precise, but usually good enough to imply iteration across the collection members

32

• 컬렉션의 객체들에 대한 똑같은 메시지 호출

5. 협력도의 기본적인 표기법 – 정적 클래스 또는 메소드

• 순차도 참조하여 이해

33

1 : locs = getAvailableLocales : Foo

«metaclass» Calendar

doX

message to class , or a static method call

5. 협력도의 기본적인 표기법 – 다형적 메시지

• 객체에 {abstract} 태그를 붙여 다형적 메시지임을 표현

34

: Register authorize doX : Payment { abstract }

polymorphic message

object in role of abstract superclass

: DebitPayment

authorize

: Foo

stop at this point – don’t show any further details for this message

separate diagrams for each polymorphic concrete case

doA doB : CreditPayment

authorize

: Bar doX

5. 협력도의 기본적인 표기법 – 비동기/동기 호출

• 비동기 – 열린 화살표, 대부분 액티브 객체로의 메시지

• 동기적 호출 – 채워진 화살표

3: runFinalization:ClockStarter System : Class

startClock

:Clock

1: create

2: runasynchronous message

active object

35