แผนภาพสถานะ

แผนภาพแสดงสถานะ หรือ สเตตไดอะแกรม (state diagram)  ใช้เพื่อแสดงสถานะของวัตถุ  รวมไปถึงเหตุการณ์ต่าง ๆ ที่สามารถทำให้สถานะของวัตถุนั้นเปลี่ยนแปลงไปและการกระทำที่เกิดขึ้นเมื่อสถานะของระบบเปลี่ยนไป สามารถบอกสถานะของวัตถุได้  โดยใช้หลักการให้ความสนใจ ณ เวลาต่าง ๆ กันนั้น  วัตถุจะมีสถานะเป็นแบบใดบ้าง

การเขียน State Diagram เพื่อการทำ Object Oriented Analysis and Design นั้นจะแทนด้วยสัญลักษณ์  สี่เหลี่ยมมุมมน  ซึ่งแทน State โดยมีชื่อของ  State ระบุอยู่  และจะใช้เครื่องหมายลูกศรเพื่อแทน    Transition โดยลากจาก State เริ่มต้นไปยัง State ที่ต้องการ  โดยบนลูกศรจะมีชื่อของ Transition หรือกิจกรรมกำกับอยู่ด้วย  การเขียนชื่อของกิจกรรมกำกับบนลูกศร   มีรูปแบบดังนี้  		

[Condition /Action]

โดยที่
 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 

 แหล่งข้อมูลอื่น 

 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

หมวดหมู่:วิทยาการคอมพิวเตอร์
หมวดหมู่:อินโฟกราฟิกส์