2012-06-12 4 views
4

UML 시퀀스 다이어그램에서 메소드에는 리턴 라인이 하나만있을 수 있습니다 (적어도 Astah에서는 한 개의 메소드에서 두 개의 리턴 라인을 그릴 수 없습니다). if-else 블록?UML 시퀀스 다이어그램에서 여러 개의 리턴을 그리는 방법

아래의 예에서 반환 선 'a'는 methodX()를 끝내며 'b'를 반환하는 방법은 무엇입니까?

String methodX(int i) { 
    if (i>0) 
    return 'a'; 
    else 
    return 'b'; 
} 

    +------------+   +------------+ 
    | Foo  |   |  Bar | 
    +-----+------+   +------+-----+ 
      |       | 
      |  methodX(i)   | 
      +-+----------------------->+-+ 
      | |      | | 
    +-----+------------------------------------+ 
    | alt | | | [i>0]     | |  | 
    +-----+ | |   a   | |  | 
    |  | |<- - - - - - - - - - - -+-+  | 
    |  | |       |  | 
    |  | |       |  | 
    +------------------------------------------+ 
    |  | | [else]     |  | 
    |  | |       |  | 
    |  | |   b    |  | 
    |  | |<- - - - - - - - - - - - | ?? | 
    |  | |       |  | 
    |  | |       |  | 
    +------------------------------------------+ 
      | |       | 
      +-+       | 
      +       + 

답변

1

문제는 UML이 아니라 도구에 있습니다. visual paradigm for UML을 확인하십시오. 각 alt 조각의 시작 부분에 수동으로 활성화를 추가 할 수 있으며 활성화가 끝나면 반환 메시지를 보냅니다.

1

빠른 관찰 :

(1) 기억은, 클래스/객체 자체 ("해봐요을") 메시지를 보낼 수 있다는 것을, 이 있습니다 "대안"appreaciate 더 diificult.

(2) "alt"를 사용할 때 조건을 언급해야합니다. "alt"는 "if-then-else", "switch-case"및 프로그래밍 언어의 유사한 개념을 나타냅니다.

이러한 문장에는 UML 다이어그램 ("[조건]")에 추가해야하는 조건이 있습니다.

(3) "alt"의 각 조건이나 케이스 안에는 여러 개체 사이 또는 여러 개체 사이에 여러 개의 메시지가 있거나 없음 ("반환"화살표 만 있음)이있을 수 있습니다.

.......................................................... 
.......+---------+..............+---------+............... 
.......| Foo |..............| Bar |............... 
.......+----+----+..............+----+----+............... 
............|........................|.................... 
..........+-+-+....................+-+-+.................. 
..........| |......methodX().....| |.................. 
..........| +------------------->+ |.................. 
..........| |....................| |..DoSomething()... 
..........| |....................| +---+.............. 
..........| |....................| |...|.............. 
..........| |....................| |...|.............. 
..........| |....................| |...|.............. 
..........| |....................| |<--+.............. 
..........| |....................| |.................. 
..+-----+-------------------------------------+........... 
..|.alt.|.| |....................| |......|........... 
..+-----+-------------------------------------+........... 
..|.[option=1].....................| |......|........... 
..|.......| |....................| |......|........... 
..|.......| |....................| +---+..|........... 
..|.......| |....................| |...|..|........... 
..|.......| |....................| |...|..|........... 
..|.......| |....................| |...|..|........... 
..|.......| |....................| |<--+..|........... 
..|.......| |<-------------------+ |......|........... 
..|.......| |....................| |......|........... 
..+-----+-------------------------------------+........... 
..|.[option=2].....................| |......|........... 
..|.......| |....................| |......|........... 
..|.......| |....................| |......|..// The wide bar its kept, 
..|.......| |<-------------------+ |......|..// even if there is a 
..|.......| |....................| |......|..// previous return arrow 
..+-------------------------------------------+........... 
..|.[else]|...|....................| |......|........... 
..|.......| |....................| |......|........... 
..|.......| |....................| |......|........... 
..|.......| |<-------------------+ |......|........... 
..|.......| |....................| |......|........... 
..+-------------------------------------------+........... 
..........| |....................| |.................. 
..........+-+-+....................+-+-+.................. 
............|........................|.................... 
............|........................|.................... 
............X........................X.................... 
.......................................................... 

건배.

경찰서. 고양이를위한 치즈 버거 또는 참치 샌드위치 버거?

+0

당신의 대답은 방법에서 둘 이상의 반환 선을 그리는 방법에 대한 나의 문제를 해결하지 못합니다. doSomething()의 반환 줄은 호출하는 클래스/객체 (예 : Foo가 아니라 Bar)를 가리킬 수 있습니다. 예 : UML 도구로 사용해보십시오. 아스타. – aleung

+0

아스키 드로잉을 명확하게하기 위해 가드를 생략했습니다. – aleung

+0

@aleung : 업데이트를 확인하십시오. 이전에 "돌아 가기 화살표"가있는 경우에도 클래스 와이드 막대가 유지됩니다. "가드"가 사실이 아니라면 생략되고 무시되며 다음 존재하는 "alt"등을 확인하십시오. 차트는 첫 번째 가드에서 넓은 막대를 자릅니다. – umlcat