객체가 메시지를 통해 어떻게 상호작용하는지를 보여주는 다이어그램 →동적 객체 모델링
동등하지만, 다른 초점을 가지고 있음

public class A {
B myB;
// 기타 코드
public void doOne() {
myB.doTwo();
myB.doThree();
}
}
:Register에서 :Sale로의 링크 또는 탐색 경로가 있으며, 이 경로를 따라 makePayment 메시지와 같은 메시지가 흐를 수 있다.
msg1 메시지가 :Register 객체로 전달된다.msg2, msg3, msg4 메시지가 :Register 객체에서 :Sale 객체로 순서대로 전달된다.msg5 메시지가 :Sale 객체에서 :Register 객체로 반환된다.public class Register {
Sale mySale;
public void msg2() {
mySale.processMsg2();
}
public void msg3() {
mySale.processMsg3();
}
public void msg4() {
mySale.processMsg4();
}
public void receiveMsg5() {
// 메시지 처리 로직
}
}
public class Sale {
public void processMsg2() {
// 메시지 처리 로직
}
public void processMsg3() {
// 메시지 처리 로직
}
public void processMsg4() {
// 메시지 처리 로직
}
public void sendMsg5(Register register) {
register.receiveMsg5();
}
}create라는 메시지를 사용함(일부는 new로 표시)
UML 태그 값 {new}를 라이프라인 상자에 추가하여 생성을 강조할 수 있다.
덜 명확한 메시지 이름을 사용하는 경우, 메시지를 <<create>>와 같은 UML 스테레오타입으로 주석을 달아서 명확하게 할 수 있다.
:Register 객체가 create(cashier) 메시지를 :Sale 객체로 보낸다.:Register 객체가 create(cashier) 메시지를 :Sale {new} 객체로 보낸다.:Register 객체가 «create» 1: make(cashier) 메시지를 :Sale 객체로 보낸다.
→ 명확하지 않은 생성 메시지 이름이 사용된 경우, 메시지에 스테레오타입을 사용하여 명확하게 할 수 있다.
msg1 메시지가 :A 객체로 전달된다.1: msg2 메시지가 :A 객체에서 :B 객체로 전달된다.1.1: msg3 메시지가 :B 객체에서 :C 객체로 전달된다.
:Foo 객체가 message1 메시지를 보낸다.1 [color = red] : calculate 메시지가 조건에 따라 :Bar 객체로 전달된다.
1a [test1] : msg2와 1b [not test1] : msg4는 상호 배타적 경로다.test1 조건이 참이면 msg2가 전송되고, 거짓이면 msg4가 전송된다.msg2는 msg3로, msg4는 msg5로 이어진다.1 * [i = 1..n]과 같은 형태로 표현된다.
여기서 i는 1..n은 반복 범위를 나타낸다.
lineItems 컬렉션의 각 요소를 반복하고 있음을 나타낸다.:Sale 객체는 1 * [i = 1..n] : st = getSubtotal 메시지를 통해 lineItems[i]에서 SalesLineItem 객체를 가져온다.lineItems 컬렉션의 많은 SalesLineItem 객체 중 하나의 인스턴스를 나타낸다.lineItems[i]는 많은 SalesLineItems 컬렉션에서 하나의 요소를 선택하는 표현이다. i 값은 메시지 절에서 온다.
t = getTotal 메시지가 :Sale 객체로 전달된다.1 * : st = getSubtotal 메시지가 :Sale 객체에서 lineItems[i] : SalesLineItem 객체로 전달된다.
doX 메시지가 :Foo 객체로부터 발생한다.1: locs = getAvailableLocales 메시지가 정적 메서드 호출을 나타내며, 이는 Calendar 메타클래스에 전달된다.
authorize 메소드가 :Register 객체로부터 :Payment 객체로 전달된다.
:Payment는 추상 슈퍼클래스 역할의 객체이다

ClockStarter 객체가 Clock 객체의 run 메소드를 ClockStarter는 Clock의 응답을 기다리지 않고 바로 다음 작업을 수행할 수 있다.
ClockStarter 객체가 System 클래스의 runFinalization 메소드를 ClockStarter는 System의 응답을 받을 때까지 대기한다.
Clock 객체는 lineItems[i], 그룹에서 하나의 객체 선택
Sale 객체가 getTotal 메소드를 호출하여 총합을 계산한다.lineItems 컬렉션의 각 요소에 대해 getSubtotal 메소드를 호출하여 소계를 구한다.[ i < lineItems.size ]는 컬렉션의 크기만큼 루프를 수행하도록 한다.SalesLineItem 객체 중 하나의 인스턴스를 나타냄
lineItems[i]는 여러 SalesLineItem 컬렉션에서 하나의 요소를 선택하는 표현식; 'i' 값은 루프 프레임의 조건에서 동일한 'i' 값을 나타냄
액션 박스는 임의의 언어 구문을 포함할 수 있음 (이 경우 'i' 증가)
적용되는 생명선 위에 배치됨
:Foo 객체는 doX 메소드를 호출한다.doX 메소드 내에서 Calendar 클래스의 getAvailableLocales 정적 메소드를 호출한다.getAvailableLocales 메소드는 locale 배열을 반환하며, 이 배열은 Foo 객체 내에서 사용된다.
Register 객체는 doX 메소드를 호출하여 Payment 추상 클래스의 authorize 메소드를 호출한다.Payment의 서브클래스인 CreditPayment나 DebitPayment에서 실제로 실행된다.authorize 메소드를 고유하게 구현하여 각기 다른 방식으로 처리한다.
ClockStarter는 startClock 메소드를 호출하여 Clock 객체를 생성한다.Clock 객체는 생성된 후 run 메소드를 호출하며, 이는 비동기 호출로 표시된다.Clock 객체는 System 클래스의 runFinalization 메소드를 호출한다.Thread 객체와 start 메시지를 생략하여 단순화하였다.Clock 생성과 run 메시지가 비동기 호출을 의미한다.