UML (3) — Sequence Diagram
Sequence Diagram = แผนภาพที่แสดงลำดับขั้นตอนการทำงานระหว่าง Class หรือ Object โดย การส่ง message ระหว่างกันตามลำดับเวลา (Sequence) ที่เกิดกิจกรรมขึ้น เป็นเครื่องมือที่ช่วยให้เห็นภาพรวมของการทำงานและการสื่อสารระหว่างวัตถุ
1. องค์ประกอบหลัก 4 อย่าง
| องค์ประกอบ | ความหมาย | รูปร่าง |
|---|---|---|
| Objects (วัตถุ) | วัตถุหรือ Class ที่เป็นตัวแทนของส่วนประกอบที่มีปฏิสัมพันธ์ในระบบ | กล่องด้านบน เขียนแบบ Object:Class |
| Lifelines (เส้นชีวิต) | แสดงช่วงเวลาของการมีอยู่ของวัตถุในช่วงการทำงาน | เส้นประแนวตั้งใต้กล่อง |
| Messages (ข้อความ) | การส่งข้อมูลหรือการเรียกใช้ method ระหว่างวัตถุ | ลูกศรแนวนอน |
| Activation Bars (บาร์การทำงาน) | ช่วงเวลาที่วัตถุกำลังดำเนินการ | แท่งสี่เหลี่ยมผอมบน lifeline |
2. ตัวอย่าง: ระบบจองตั๋วหนัง
Sequence Diagram ของระบบจองตั๋วหนัง (Activity #5 จากสไลด์)
- Customer ส่งคำขอจองตั๋ว
requestTicket()ไปยัง TicketBookingSystem - TicketBookingSystem ดำเนินการจอง และเรียก PaymentGateway
processPayment() - PaymentGateway ตอบกลับว่าชำระเงินสำเร็จ
paymentConfirmation() - TicketBookingSystem ส่งอีเมลยืนยันไปยัง EmailService
sendConfirmationEmail() - 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 ที่ปลายเส้นชีวิต | วัตถุทำงานเสร็จแล้ว และ ลบออก จากแผนภาพได้ |
หน้าตาของ 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 ที่ถูกอ้างถึงข้างใน |
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)