UML (3) — Sequence Diagram

Sequence Diagram = แผนภาพที่แสดงลำดับขั้นตอนการทำงานระหว่าง Class หรือ Object โดย การส่ง message ระหว่างกันตามลำดับเวลา (Sequence) ที่เกิดกิจกรรมขึ้น เป็นเครื่องมือที่ช่วยให้เห็นภาพรวมของการทำงานและการสื่อสารระหว่างวัตถุ

1. องค์ประกอบหลัก 4 อย่าง

องค์ประกอบความหมายรูปร่าง
Objects (วัตถุ)วัตถุหรือ Class ที่เป็นตัวแทนของส่วนประกอบที่มีปฏิสัมพันธ์ในระบบกล่องด้านบน เขียนแบบ Object:Class
Lifelines (เส้นชีวิต)แสดงช่วงเวลาของการมีอยู่ของวัตถุในช่วงการทำงานเส้นประแนวตั้งใต้กล่อง
Messages (ข้อความ)การส่งข้อมูลหรือการเรียกใช้ method ระหว่างวัตถุลูกศรแนวนอน
Activation Bars (บาร์การทำงาน)ช่วงเวลาที่วัตถุกำลังดำเนินการแท่งสี่เหลี่ยมผอมบน lifeline

2. ตัวอย่าง: ระบบจองตั๋วหนัง

Customer TicketBookingSystem PaymentGateway EmailService 1: requestTicket() 2: processPayment() 3: paymentConfirmation() 4: sendConfirmationEmail() 5: confirmation email เส้นทึบหัวทึบ = Synchronous / เส้นประ = Return message — เวลาไหลจากบนลงล่าง
Sequence Diagram ของระบบจองตั๋วหนัง (Activity #5 จากสไลด์)
  1. Customer ส่งคำขอจองตั๋ว requestTicket() ไปยัง TicketBookingSystem
  2. TicketBookingSystem ดำเนินการจอง และเรียก PaymentGateway processPayment()
  3. PaymentGateway ตอบกลับว่าชำระเงินสำเร็จ paymentConfirmation()
  4. TicketBookingSystem ส่งอีเมลยืนยันไปยัง EmailService sendConfirmationEmail()
  5. EmailService ส่งอีเมลยืนยันการจองกลับไปยัง Customer

3. รูปแบบของ Message — 6 แบบ

Messageลักษณะความหมาย
Synchronous messageเส้นทึบ หัวลูกศรทึบผู้ส่ง รอ ให้ผู้รับประมวลผลและส่ง Return กลับก่อน จึงส่งข้อความถัดไป
Asynchronous messageเส้นทึบ หัวลูกศรเส้น (เปิด)ผู้ส่ง ไม่รอ return แต่ส่งข้อความต่อไปให้วัตถุอื่นทันที
Return messageเส้นประผู้รับประมวลผลเสร็จและส่งกลับ จะมีหรือไม่มีก็ได้ — Synchronous บน Activation bar มี Return โดยนัยอยู่แล้ว แม้ไม่วาดเส้น เพื่อไม่ให้แผนภาพยุ่ง
Reflexive messageลูกศรเริ่มและจบบน lifeline เดียวกันวัตถุส่งข้อความหา ตัวเอง
Participant creation messageลูกศรชี้ไปที่กล่อง object ที่อยู่ต่ำลงมาวัตถุถูก สร้างขึ้น เมื่อข้อความถูกส่งไปหา ไม่จำเป็นต้องอยู่ทุกช่วงเวลาในแผนภาพ
Participant destruction messageเครื่องหมาย X ที่ปลายเส้นชีวิตวัตถุทำงานเสร็จแล้ว และ ลบออก จากแผนภาพได้
Synchronous หัวทึบ รอผลก่อน Asynchronous หัวเปิด ไม่รอ Return เส้นประ ส่งกลับ Reflexive ส่งหาตัวเอง Destruction X ปลายเส้นชีวิต
หน้าตาของ message แต่ละแบบ

4. Sequence Fragment (Optional)

Sequence Fragment = เฟรมหรือกล่องสี่เหลี่ยมใหญ่ที่ครอบ section ของการโต้ตอบ ใช้ในแผนภาพที่มีการโต้ตอบซับซ้อน มุมบนซ้ายของกล่องแสดง Fragment Operator ระบุว่าเป็น fragment ประเภทใด

Fragmentตรรกะรายละเอียด
Alternatives (alt) if then else มีตัวเลือก 2 ตัวขึ้นไป แต่ ทางเลือกเดียวเท่านั้นที่จะถูก execute กล่องถูกแบ่งเป็นส่วนๆ เรียกว่า Interaction operand ด้วยเส้นประ แต่ละ operand มี Guard (เงื่อนไข) ระบุไว้ด้านบน
Options (opt) if then ลำดับเหตุการณ์เกิดขึ้นภายใต้เงื่อนไขหนึ่งเท่านั้น ไม่เช่นนั้นจะไม่เกิด — ไม่แบ่งเป็น operand Guard อยู่มุมบนซ้าย เช่น ลูกค้าเลือกห่อของขวัญก็ได้หากต้องการ
Loops (loop) ทำซ้ำ ทำซ้ำจนกว่าค่า guard จะเป็น false — Guard มีเงื่อนไขพิเศษได้อีก 2 แบบ: minint (ทำไม่น้อยกว่าจำนวนที่ระบุ) และ maxint (ทำไม่เกินจำนวนที่ระบุ)
Reference (ref) อ้างถึง จัดการขนาดของ Sequence diagram ที่ใหญ่ ให้นำบางส่วนไปใช้ซ้ำหรืออ้างถึงส่วนอื่นได้ — กำหนด 'ref' เป็นชื่อกล่อง และใส่ชื่อของ Sequence diagram ที่ถูกอ้างถึงข้างใน
alt [ชำระเงินสำเร็จ] ออกตั๋ว + ส่งอีเมล [ชำระเงินล้มเหลว] แจ้งข้อผิดพลาด 2 operand คั่นด้วยเส้นประ ทำได้ทางเดียว opt [ลูกค้าต้องการห่อของขวัญ] addGiftWrap() loop [for each item in cart] calculatePrice()
Fragment alt / opt / loop — operator อยู่มุมบนซ้ายของกล่อง
alt vs opt: alt = if-then-else มีหลาย operand เลือกทำทางเดียว / opt = if-then มี operand เดียว ถ้าเงื่อนไขไม่จริงก็ไม่ทำอะไรเลย

เขียน Sequence เป็นข้อความ (จองตั๋วหนัง)

Customer            -> TicketBookingSystem : requestTicket()
TicketBookingSystem -> PaymentGateway      : processPayment()
PaymentGateway      --> TicketBookingSystem : paymentConfirmation()
TicketBookingSystem -> EmailService        : sendConfirmationEmail()
EmailService        --> Customer            : confirmation email

(-> = synchronous message,  --> = return message)