← กลับไปยังบทความทั้งหมด

แผนภาพสถานะ UML การจำลองพฤติกรรมระบบด้วย State Machine

สรุปใจความสำคัญ

  • UML State Machine เป็นส่วนขยายของ Finite Automaton ที่รองรับสถานะแบบลำดับชั้น (Hierarchical States) และภูมิภาคแบบขนาน (Orthogonal Regions)
  • แบ่งออกเป็น 2 ประเภทหลักคือ Behavioral State Machines (จำลองพฤติกรรม) และ Protocol State Machines (กำหนดโปรโตคอลการใช้งาน)
  • ผสมผสานคุณสมบัติของ Mealy Machine (การดำเนินการขึ้นกับสถานะและเหตุการณ์) และ Moore Machine (การดำเนินการผูกกับสถานะ)
  • ช่วยลดความซับซ้อนของโค้ดในระบบ Event-driven โดยทำให้การจัดการเหตุการณ์ขึ้นอยู่กับสถานะปัจจุบันอย่างชัดเจน

UML State Machine (หรือเดิมเรียกว่า UML Statechart) คือส่วนขยายของแนวคิดทางคณิตศาสตร์เรื่อง Finite Automaton (ออโตมาตาจำกัด) ที่นำมาประยุกต์ใช้ในงานด้านวิทยาการคอมพิวเตอร์ โดยใช้สัญลักษณ์ของภาษา UML (Unified Modeling Language) เพื่อจัดระเบียบการทำงานของอุปกรณ์ โปรแกรมคอมพิวเตอร์ หรือกระบวนการทางเทคนิค ให้มีสถานะที่ชัดเจนและมีการเปลี่ยนสถานะภายใต้เงื่อนไขที่กำหนด

เป้าหมายหลักของ UML State Machine คือการก้าวข้ามข้อจำกัดของ Finite-State Machines (FSM) แบบดั้งเดิม โดยการนำแนวคิด Hierarchically Nested States (สถานะแบบลำดับชั้น) และ Orthogonal Regions (ภูมิภาคแบบขนาน) มาใช้ พร้อมทั้งขยายขอบเขตของการดำเนินการ (Actions) ให้มีความยืดหยุ่นมากขึ้น

ลักษณะทางเทคนิคของ UML State Machine

UML State Machine มีคุณสมบัติที่ผสมผสานระหว่าง Mealy machines และ Moore machines ดังนี้:

  • ลักษณะแบบ Mealy Machine: รองรับการดำเนินการ (Actions) ที่ขึ้นอยู่กับทั้งสถานะปัจจุบันของระบบและเหตุการณ์ที่มากระตุ้น (Triggering Event)
  • ลักษณะแบบ Moore Machine: รองรับการดำเนินการเมื่อเข้าสู่สถานะ (Entry Actions) และการดำเนินการเมื่อออกจากสถานะ (Exit Actions) ซึ่งผูกติดกับตัวสถานะเอง ไม่ใช่การเปลี่ยนสถานะ

ในทางปฏิบัติ UML State Machine แบ่งออกเป็นสองประเภทหลัก ได้แก่:

  1. Behavioral State Machines: ใช้สำหรับจำลองพฤติกรรมของเอนทิตีเดี่ยวๆ เช่น อินสแตนซ์ของคลาส, ระบบย่อย (Subsystem), แพ็กเกจ หรือแม้แต่ระบบทั้งหมด
  2. Protocol State Machines: ใช้สำหรับกำหนดโปรโตคอลการใช้งาน เพื่อระบุสถานการณ์การใช้งานที่ถูกต้องของ Classifier, Interface และ Port

แนวคิดพื้นฐานของ State Machine

ระบบซอฟต์แวร์จำนวนมากทำงานในรูปแบบ Event-driven (ระบบขับเคลื่อนด้วยเหตุการณ์) ซึ่งหมายความว่าระบบจะรอการเกิดขึ้นของเหตุการณ์ทั้งจากภายนอกหรือภายใน เช่น การคลิกเมาส์, การกดปุ่ม, สัญญาณนาฬิกา หรือการได้รับแพ็กเก็ตข้อมูล เมื่อระบบตรวจพบเหตุการณ์ จะทำการประมวลผลที่เหมาะสม ซึ่งอาจรวมถึงการควบคุมฮาร์ดแวร์หรือการสร้างเหตุการณ์ภายในเพื่อกระตุ้นส่วนประกอบอื่นๆ

การใช้ State Machine ในการเขียนโปรแกรมแบบ Event-driven ช่วยให้การจัดการเหตุการณ์ขึ้นอยู่กับทั้งประเภทของเหตุการณ์และสถานะปัจจุบันของระบบอย่างชัดเจน ซึ่งช่วยลดจำนวนเส้นทางการทำงานของโค้ด (Execution Paths) ลดความซับซ้อนของเงื่อนไขในจุดตัดสินใจ และทำให้การสลับโหมดการทำงานทำได้ง่ายขึ้น

องค์ประกอบของแผนภาพสถานะ UML

แผนภาพสถานะ UML มีลักษณะเป็นกราฟระบุทิศทาง (Directed Graph) โดยมีโหนด (Node) แทนสถานะ และเส้นเชื่อม (Connector) แทนการเปลี่ยนสถานะ

ตัวอย่างแผนภาพสถานะ UML ของเครื่องคอมพิวเตอร์คีย์บอร์ด
ตัวอย่างการจำลองสถานะการทำงานของคีย์บอร์ดคอมพิวเตอร์ด้วย UML State Machine
  • สถานะ (States): แทนด้วยรูปสี่เหลี่ยมมุมมน พร้อมระบุชื่อสถานะ
  • การเปลี่ยนสถานะ (Transitions): แทนด้วยลูกศร โดยมีป้ายกำกับระบุเหตุการณ์ที่มากระตุ้น (Triggering Event) และอาจตามด้วยรายการการดำเนินการ (Actions) ที่ต้องทำ
  • การเปลี่ยนสถานะเริ่มต้น (Initial Transition): เริ่มต้นจากวงกลมทึบ เพื่อระบุสถานะเริ่มต้นเมื่อระบบเริ่มทำงาน โดยปกติจะไม่มีป้ายกำกับเหตุการณ์เนื่องจากไม่ได้ถูกกระตุ้นโดยเหตุการณ์ภายนอก

เหตุการณ์ (Events)

ในข้อกำหนดของ UML เหตุการณ์ (Event) หมายถึง ประเภท ของสิ่งที่เกิดขึ้น ไม่ใช่ตัวอินสแตนซ์ของเหตุการณ์นั้นๆ ตัวอย่างเช่น "การกดปุ่ม (Keystroke)" คือเหตุการณ์ แต่การกดปุ่ม 'A' ในเวลา 10:00 น. คืออินสแตนซ์ของเหตุการณ์ Keystroke

เหตุการณ์สามารถมีพารามิเตอร์แนบมาด้วยเพื่อส่งข้อมูลเชิงปริมาณ เช่น เหตุการณ์ Keystroke อาจส่งรหัสสแกนของตัวอักษรและสถานะของปุ่ม Shift, Ctrl หรือ Alt

วงจรชีวิตของอินสแตนซ์เหตุการณ์ประกอบด้วย 3 ระยะ:

  1. การรับเหตุการณ์ (Received): เหตุการณ์ถูกยอมรับและรอการประมวลผล (เช่น อยู่ในคิวเหตุการณ์)
  2. การส่งเหตุการณ์ (Dispatched): เหตุการณ์ถูกส่งไปยัง State Machine และกลายเป็นเหตุการณ์ปัจจุบัน (Current Event)
  3. การบริโภคเหตุการณ์ (Consumed): State Machine ประมวลผลเหตุการณ์เสร็จสิ้น และเหตุการณ์นั้นจะไม่ถูกนำมาประมวลผลซ้ำอีก

คำถามที่พบบ่อย

UML State Machine ต่างจาก Finite State Machine (FSM) ทั่วไปอย่างไร?

UML State Machine พัฒนาต่อยอดจาก FSM โดยเพิ่มความสามารถในการสร้างสถานะซ้อนสถานะ (Hierarchical Nested States) และการทำงานแบบขนาน (Orthogonal Regions) ซึ่งช่วยให้สามารถจำลองระบบที่ซับซ้อนได้โดยไม่ต้องสร้างสถานะจำนวนมหาศาล (State Explosion Problem)

Behavioral State Machine และ Protocol State Machine ต่างกันอย่างไร?

Behavioral State Machine ใช้เพื่ออธิบายว่าระบบ 'ทำงานอย่างไร' (พฤติกรรมภายใน) ในขณะที่ Protocol State Machine ใช้เพื่ออธิบายว่าระบบ 'ถูกใช้งานอย่างไร' (กฎเกณฑ์หรือข้อตกลงในการเรียกใช้งานจากภายนอก)

เหตุการณ์ (Event) ใน UML State Machine คืออะไร?

เหตุการณ์คือประเภทของการเกิดขึ้นของสิ่งที่มีผลต่อระบบ เช่น การคลิกเมาส์ หรือการหมดเวลา (Timeout) โดยใน UML จะแยกความแตกต่างระหว่าง 'ประเภทของเหตุการณ์' (Event Type) และ 'เหตุการณ์ที่เกิดขึ้นจริง' (Event Instance)