1. Interaction Diagram
- 특정 상황의 interaction 시나리오를 표현하는데 주로 사용된다.
- actor와 시스템, 시스템을 구성하는 서로 다른 파트들 간의 interaction을 묘사한다. 혹은 여러 process간의 소통도 묘사할 수 있을 것이다.
- 수평축 : object들 나열하는 축
- 수직축 : 시간축
- interaction diagram의 구성요소들에 대해 자세히 알아보자.
2. Interaction Partners
- 상호작용 객체들은 lifeline을 그린다.
- lifeline은 header, body로 구성된다.
- 직사각형 안에 Role이름, 클래스이름, role이름:class이름을 적을 수 있다.
- (d) 여러 partners는 배열로 표현할 수 있다.
- (e) partner가 독립된 쓰레드를 갖는 경우
- (f) 시스템 당사자를 다른 클래스와 구별해서 사용해야 할 때
3. Exchanging Messages
- 상호작용을 위해 주고 받는 이벤트 메시지이다.
- 경우에 따라서는 두꺼운 선을 생략하고 점선으로만 표현할 수도 있다.
- 메시지의 순서는 당연히 시간축에 따라 정렬된다.
- 하지만 서로 구별되어 있는 독립적인 lifeline의 경우 (오른쪽 위 예시) a->c, c->a 모두 가능하다.
- synchronous message, 동기 메시지, 이벤트를 보낸 sender는 response가 올때까지 기다린다.
- asynchronous message, 비동기 메시지, 이벤트를 보낸 sender는 메시지를 보내고 자기 할 일을 이어서 한다
- response 메시지는 점선으로 표현한다. (보통은 생략하는 경우가 많다)
- 새로운 object가 시나리오 중간에 생성되고 소멸되는 것을 나타내는 방법이다.
- 메시지를 받았는데 누가 보냈는지 모르겠거나 중요하지 않을때 표현하는 방법이다.
- 반대로 patner가 누군가에게 메시지를 보냈는데 누가 받는지 중요하지 않거나 표현하기 어렵거나 모르는 경우 표현하는 방법이다 (ex. broad cast)
- 보통 transmission에 걸리는 시간은 없다고 가정한다. 하지만 이 duration을 표현할 필요가 있는 경우는 이렇게 나타낼 수 있다.
4. Frames
- sequence diagram을 감싸는 큰 사각형을 말한다.
- 특정 Operation 이름을 붙인다.
- 이 그림은 delete 메서드의 Operation을 나타내고 있다.
- delete 메서드를 포함하고 있는 객체 자기 자신을 self라고 나타내고 있고 그 클래스 이름은 Order이다
- 이렇게 operation이 필요로하는 매개변수(parameter)나 지역변수(local attributes)를 표현할 수도 있다.
5. Combined Fragments
- combine fragment alt와 loop의 모습이다. 총 12개를 알아볼 것이다.
1) ALT, 2) OPT
- alt는 switch문과 유사하다. 위 예시에서는 status가 ok, wl, else인 세 가지 경우를 점선으로 구분해서 표현하고 있다.
- opt는 if () {} 문과 비슷하다. register on WL == true인 경우 분기를 나타낸다. (else파트는 없는 경우)
3) LOOP
- 반복 시나리오를 위해 사용한다.
- guard는 종료조건이다. 하지만 loop가 min만큼 도는 동안은 guard를 따지지 않는다. 즉 min이 보장되고나서 guard를 통한 탈출이 이루어질 수 있다.
- 위의 예시에서는 최소 한번 loop를 수행하고 나서 a<1이 될때까지 loop가 반복된다.
4) BREAK
- 조건에 해당하는 경우(예시에서는 a<1인 경우) break fragment가 수행된다.
- 단 opt와의 차이점은 break fragment종료 후 d를 수행하지 않고 seq fragment를 벗어나서 e를 수행한다.
- 즉 부모 clause를 탈출하고 다음 동작을 수행한다.
- 만약 조건에 해당하지 않는 경우 a -> d -> e 순으로 동작이 수행될 수 있다.
- 총 세번 login을 수행할 수 있다. 최소 1번 루프는 실행되고 그 이후 부터 incorrect password인 경우 루프를 최대 세번까지 반복하게 된다.
- 3번의 루프가 끝나고 여전히 incorrect password상태인 경우 break fragment로 들어간다. break의 부모 clause는 sequence diagram 전체이기 때문에 register 메시지를 보내는 단계를 건너 뛴다.
- 반면 3번의 루프이내 correct password라면 break문을 건너 뛰고 register가 수행된다.
- seq안에서 no free place의 경우 break fragment가 수행되고 종료시 examine()을 건너 뛰고 info()로 흐름이 넘어간다.
7. Concurrency and order : Combined Fragments
1) SEQ
- sequence fragment는 기본으로 탑재되는 fragment이다. 따로 표시가 안되어 있으면 모두 seq fragment이다.
- weak sequencing : 위 그림처럼 서로 다른 lifeline에서의 메시지들의 순서는 자유롭다. 단 하나의 lifeline에서의 메시지들의 경우 순서는 시간축을 따른다. T01, T02, T03 모두 가능한 경우이다.
- 조건1. a 다음에는 b가 와야 한다.
- 조건2. a 다음에는 d가 와야 한다.
- 조건3. c 다음 d 다음 e가 와야 한다.
- 조건4. c 다음 e가 와야 한다.
- 이 네가지 조건만 만족한다면 어떤 trace도 가능하다.
- 이번에는 operand로 나뉘어진 경우를 살펴보자.
- 하나의 lifeline에서 서로 다른 Operand는 순서가 정렬된다. bing검색 다음에 yahoo검색이 가능하다.
- 하지만 서로 다른 operand에서 서로 다른 lifeline에 대한 동작들이라면 순서는 자유롭다.
- {google} -> {bing->yahoo} 또는 {bing->yahoo} -> {google} 또는 {bing-> google -> yahoo} 모두 가능하다.
2) STRICT
- 서로 다른 operand들끼리의 순서도 엄격히 제약하고자 할때 strict fragment를 사용한다.
- 만약 일반 seq fragment였다면 가능했던 세 가지 경우는 여기서는 불가능하다.
- 하지만 strict fragment라고해서 반드시 한가지 trace만 가능한 것은 아니다.
- strict fragment에서 점선으로 나뉜 두 operand는 어쨌든 각각 seq fragment들이고 각 seq fragment안에서의 가능한 Trace는 얼마든지 있을 수 있다.
- { a-> b} 다음에 반드시 {c,d,e조합}만 나오면 된다.
- 반드시 register이후에 print가 수행된다.
- 반드시 google->bing->ask 순서로 검색을 수행한다.
3) PAR
- 분리된 두 Operand에서는 {a->b}, {c->d->e} 가 반드시 보장된다.
- 하지만 두 operand(seq)들은 얼마든지 서로 섞일 수 있다. {c->d->e} -> {a->b} 나 {a -> c-> d -> b ->e} 처럼 얼마든지 섞을 수 있다.
- 즉 각 seq안에서의 order만 보장되면 된다.
- google, bing, ask 아무데나 자유롭게 순서에 상관없이 search할 수 있다. 심지어 동시에 수행할 수도 있다.
- 동일한 lifeline이지만 par기 때문에 operand끼리의 순서는 자유롭다.
4) CRITICAL
- critical section은 오직 하나의 프로세스 혹은 쓰레드만 진입한 상태를 보장해야 하는 구역을 말한다.
- atomic area라고도 한다.
- 위 예시는 par이기 때문에 두 operand는 병렬적으로 수행되거나 순서가 엇갈려도 된다.
- 하지만 critical section은 atomic area이기 때문에 {c->d} 사이에 다른 메시지가 끼어들 수 없다.
- 참고로 두번째 operand는 critical section -> e 는 보장되어야 한다. 단 par기 때문에 그 사이에 어떤 다른 operand의 메시지도 끼어들 수 있다.
- 이런 경우라면 c->d, d->c 모두 가능하다. 하지만 여전히 그 사이에는 어떤 메시지도 개입할 수 없다.
- 두 operand의 순서는 자유롭다 단 critical사이에는 어떤 메시지도 끼어들 수 없다.
8. Filters and assertions : Combined Fragments
1) Ignore 2) Consider
- fragment에서 발생하는 메시지 중에서 크게 중요하지 않은 메시지는 ignore {이름}라고 표기할 수 있다.
- 반대로 fragment에서 발생하는 메시지 중에 눈여겨 보아야 할 중요한 메시지를 consider{이름}으로 표기할 수 있다.
3) assert
- assert fragment가 담고있는 흐름 외에 다른 메시지가 발생하거나 하면 안된다는 의미이다.
- 등록 -> confirm 외에 다른 시나리오는 발생하면 안된다.
4) neg
- 절대 발생되어서는 안되는 시나리오를 강조하는 fragment이다.
9. Interaction Reference
- 이미 만들어 높은 sequence diagram을 예시처럼 ref, Login으로 담아서 재사용할 수 있다.
10. static method call
- static class에게 보내는 static method call은 이렇게 표현할 수 있다.
- <<metaclass>>를 더해주면 이 클래스가 static class임을 나타낸다.
11. Polymorphic message
- 다형성도 나타낼 수 있다.
- 예를들어 payment 추상클래스를 debitpayment, creditpayment가 상속하고 있다고 하자. 누구의 authorize 메서드를 호출하냐에 따라 총 세가지 경우가 나올 수 있다.
- 이런 경우는 위처럼 나타낼 수 있다.
12. Asynchronous message
- 화살표 모양을 달리해서 동기, 비동기 콜을 구분할수도 있다.
- clock run은 asynchronous 비동기 메시지로 화살표가 좀 특이하다.
- 그리고 :Clock은 활동중인 비동기 object임을 나타내기 위해 박스 모양도 좀 다르다.
13. Time Constraints
- 메시지 전송, 수신 시간, duration 제약을 걸 수도 있다.
- {max. 2h}는 해당하는 범위가 최대 2시간 이내에 이루어져야 한다는 뜻이고
- {t+5}는 5초 뒤를 의미한다.
14. State Invariant
- state에 기반한 interaction도 표현이 가능하다.
- 학생이 enrolled된 상태이고 examDate가 오늘부터인 경우 interation이 가능하다는 뜻이다.
- 귀가 접힌 메모지를 활용하여 examDate 이후부터 registration이 가능하다는 뜻을 더 명확하게 전달할 수 있다.
15. Facebook Login example
'ComputerScience > Software Engineering' 카테고리의 다른 글
소프트웨어공학 - 12. Sequence Diagram -> Operation Contract (0) | 2022.04.14 |
---|---|
소프트웨어공학 - 11. Domain Models (0) | 2022.04.13 |
소프트웨어공학 - 9. Class diagram -> Code Generation (0) | 2022.04.06 |
소프트웨어공학 - 8. UML Class diagram (0) | 2022.03.31 |
소프트웨어공학 - 7. Use case diagram (0) | 2022.03.23 |