แผนภาพสถานะ
บทความนี้หรือส่วนนี้ของบทความต้องการปรับรูปแบบ ซึ่งอาจหมายถึง ต้องการจัดรูปแบบข้อความ จัดหน้า แบ่งหัวข้อ จัดลิงก์ภายใน และ/หรือการจัดระเบียบอื่น ๆ คุณสามารถช่วยแก้ไขปัญหานี้ได้โดยการกดที่ปุ่ม แก้ไข ด้านบน จากนั้นปรับปรุงหรือจัดรูปแบบอื่น ๆ ในบทความให้เหมาะสม |
แผนภาพแสดงสถานะ หรือ สเตตไดอะแกรม (state diagram) ใช้เพื่อแสดงสถานะของวัตถุ รวมไปถึงเหตุการณ์ต่าง ๆ ที่สามารถทำให้สถานะของวัตถุนั้นเปลี่ยนแปลงไปและการกระทำที่เกิดขึ้นเมื่อสถานะของระบบเปลี่ยนไป สามารถบอกสถานะของวัตถุได้ โดยใช้หลักการให้ความสนใจ ณ เวลาต่าง ๆ กันนั้น วัตถุจะมีสถานะเป็นแบบใดบ้าง
การเขียน State Diagram เพื่อการทำ Object Oriented Analysis and Design นั้นจะแทนด้วยสัญลักษณ์ สี่เหลี่ยมมุมมน ซึ่งแทน State โดยมีชื่อของ State ระบุอยู่ และจะใช้เครื่องหมายลูกศรเพื่อแทน Transition โดยลากจาก State เริ่มต้นไปยัง State ที่ต้องการ โดยบนลูกศรจะมีชื่อของ Transition หรือกิจกรรมกำกับอยู่ด้วย การเขียนชื่อของกิจกรรมกำกับบนลูกศร มีรูปแบบดังนี้
โดยที่
- Condition หมายถึง เงื่อนไขในการเข้าหรือออกจาก State
- Action หมายถึง กิจกรรมที่ทำระหว่างการเปลี่ยน State
- ทั้งนี้ในลูกศรจะมี Condition หรือ Action หรือไม่มีก็ได้ แต่ต้องมีตัวใดตัวหนึ่งเป็นอย่างน้อย
- จุดเริ่มต้นของกิจกรรมต่าง ๆ ใน State diagram เรียกว่า Initial state
- จุดสิ้นสุดของกิจกรรมทั้งหมดใน State diagram เรียกว่า End State
หลักในการเขียน State Diagram ให้มีประสิทธิภาพ
[แก้]- จาก Class Diagram ดูว่ามีจำนวนของ State Diagram กี่ตัวที่ต้องเขียน ปกติจะเท่ากับจำนวน Function ของแต่ละ Class รวมกัน
- ไม่จำเป็นที่จะต้องเขียน State Diagram ของทุก ๆ Function ของทุก ๆ Class Diagram ก็ได้
- ในบาง Function ที่กิจกรรมไม่ซับซ้อนมากมาย ไม่จำเป็นต้องมี State Diagram
- ให้พิจารณาว่าในแต่ละ Class จะมี State อะไรบ้าง (โดยยึดจากหลักการของความเป็นจริง) ไม่ต้องคำนึงว่ามี Function อะไรอยู่
- จาก State ที่มีอยู่ให้เขียน State Diagram ของแต่ละ Function
- เพิ่ม state ที่จำเป็นเพิ่มเติม เพื่อให้ state diagram สมบูรณ์ยิ่งขึ้น
- ทำจนกว่าจะได้ State Diagram ของ 1 Class ที่สมบูรณ์
- ทำซ้ำจนครบทุก ๆ Class ใน Class Diagram
Moore Model
[แก้]การเขียน State Diagram ของ Moore จะใช้ตัวอักษรและตัวเลขเขียนอยู่ในวงกลม โดยที่ตัวอักษรแสดงถึง State ตัวเลขแสดงถึง Output เช่น W/0 หมายความว่า ที่ State W ที่เวลาใดๆ ถ้าได้รับ Input แล้ววงจรจะเชื่อมด้วยเส้นตรงหรือเส้นโค้งมีหัวลูกศรกำกับและแต่ละเส้นที่เชื่อมกันก็ยังมีตัวเลขอีกชุด แสดงถึงการป้อน Input กำกับไว้ด้วย
Moore Model ใช้ในกรณีที่ Output ของวงจรไม่ได้ขึ้นอยู่กับ Input แต่จะขึ้นอยู่กับ Present State เท่านั้น ดังนั้น State table และ State Diagram ตามแบบของ Moore จะแตกต่างกับแบบของ Mealy
จากรูปคือ
ถ้าให้ State W เป็น Present State และวงจรได้รับ Input X=0 แล้ว Next State ของวงจรเป็น State Y และให้ Output Z=0 แต่ถ้าวงจรได้รับ Input X=1แล้ว Next State ของวงจรเป็น State X และให้ Output Z=0
ถ้าให้ State X เป็น Present State และวงจรได้รับ Input X=0 แล้ว Next State ของวงจรจะคงอยู่ที่ State X และให้ Output Z=1 แต่ถ้าวงจรได้รับ Input X=1แล้ว Next State ของวงจรเป็น State Yและให้ Output Z=1
ถ้าให้ State Y เป็น Present State และวงจรได้รับ Input X=0 แล้ว Next State ของวงจรเป็น State X และให้ Output Z=0 แต่ถ้าวงจรได้รับ Input X=1แล้ว Next State ของวงจรเป็น State W และให้ Output Z=0
ข้อดี
Output ไม่เปลี่ยนตาม Input ทำให้ไม่เกิดปัญหา momntary change หรือ Glitch
ข้อเสีย ใช้จำนวนสภาวะมากกว่าในการออกแบบวงจรชนิดเดียวกัน
อ้างอิง
[แก้]- State diagram เก็บถาวร 2011-11-05 ที่ เวย์แบ็กแมชชีน
แหล่งข้อมูลอื่น
[แก้]- Introduction to UML 2 State Machine Diagrams by Scott W. Ambler
- UML 2 State Machine Diagram Guidelines by Scott W. Ambler
- Intelliwizard - UML StateWizard - A discontinued round-trip UML dynamic modeling/development framework and tool that ran in popular IDEs under an open-source license.
- YAKINDU Statechart Tools - an Open-Source-Tool for the specification and development of reactive, event-driven systems with the help of state machines.
- Understanding and Using State Machines MATLAB Tech Talks on State Machines
- FSM: Open Source Finite State Machine Generation in Java by Alexander Sakharov FSM
- scxmlcc An efficient scxml state machine to C++ compiler.
- SMC: An Open Source State Machine Compiler that generates FSM for many languages as C, Python, Lua, Scala, PHP, Java, VB, etc. SMC