แผนภาพสถานะ

thumb|ตัวอย่างแผนภาพแสดงสถานะ

**แผนภาพแสดงสถานะ** หรือ **สเตตไดอะแกรม** (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

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