คำถามติดแท็ก finite-state-machine

9
มีข้อยกเว้นในฐานะโฟลว์คอนโทรลที่ถือว่าเป็น antipattern ที่ร้ายแรง ถ้าเป็นเช่นนั้นทำไม
ย้อนกลับไปในช่วงปลายยุค 90 ฉันทำงานค่อนข้างน้อยด้วยรหัสฐานที่ใช้ข้อยกเว้นเป็นตัวควบคุมการไหล มันใช้เครื่องจักรสถานะ จำกัด เพื่อขับเคลื่อนแอปพลิเคชั่นโทรศัพท์ เมื่อไม่นานมานี้ฉันนึกถึงวันนั้นเพราะฉันทำเว็บแอป MVC พวกเขาทั้งคู่มีControllers ที่ตัดสินใจว่าจะไปที่ไหนต่อไปและให้ข้อมูลกับตรรกะปลายทาง การกระทำของผู้ใช้จากโดเมนของโทรศัพท์เก่าโรงเรียนเช่นโทน DTMF กลายเป็นพารามิเตอร์กับวิธีการดำเนินการ แต่แทนที่จะกลับสิ่งที่ต้องการพวกเขาโยนViewResultStateTransitionException ฉันคิดว่าความแตกต่างที่สำคัญคือวิธีการดำเนินการเป็นvoidหน้าที่ ผมจำไม่ได้ทุกสิ่งที่ฉันทำกับความเป็นจริงนี้ แต่ผมเคยลังเลที่จะได้ไปลงที่ถนนในการจดจำมากเพราะตั้งแต่งานที่เหมือน 15 ปีที่ผ่านมาผมไม่เคยเห็นนี้ในรหัสการผลิตที่งานอื่น ๆ ฉันสันนิษฐานว่านี่เป็นสัญญาณว่าเป็นรูปแบบการต่อต้านที่เรียกว่า เป็นกรณีนี้หรือไม่และถ้าเป็นเช่นนั้นทำไม อัปเดต: เมื่อฉันถามคำถามฉันมีคำตอบในใจของ @ MasonWheeler ดังนั้นฉันจึงไปพร้อมกับคำตอบที่เพิ่มความรู้ให้มากที่สุด ฉันคิดว่าเขาเป็นคำตอบที่ดีเช่นกัน

10
ตัวอย่างของไฟไนต์สเตทจักร [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันกำลังมองหาตัวอย่างที่ดีของเครื่องจักรสถานะ จำกัด ; ภาษาไม่สำคัญเป็นอย่างยิ่ง แต่เป็นตัวอย่างที่ดี การใช้งานโค้ดมีประโยชน์ (หลอกรหัสทั่วไป) แต่ก็มีประโยชน์มากในการรวบรวมการใช้งานต่างๆของ FSM ตัวอย่างไม่จำเป็นต้องใช้คอมพิวเตอร์ตัวอย่างเช่นเครือข่ายรถไฟของ Mike Dunlavey นั้นมีประโยชน์มาก

10
เครื่องรัฐเทียบกับหัวข้อ
Alan Cox เคยกล่าวไว้ว่า "คอมพิวเตอร์เป็นเครื่องสถานะหัวข้อสำหรับผู้ที่ไม่สามารถตั้งโปรแกรมเครื่องสถานะ" เนื่องจากการถามอลันโดยตรงไม่ใช่ตัวเลือกสำหรับฉันที่ต่ำต้อยฉันจึงอยากถามที่นี่: วิธีใดที่ทำให้การทำงานแบบมัลติเธรดในภาษาระดับสูงเช่น Java โดยใช้เพียงหนึ่งเธรดและเครื่องสถานะ ตัวอย่างเช่นจะเกิดอะไรขึ้นถ้ามี 2 กิจกรรมที่ต้องดำเนินการ (ทำการคำนวณและทำ I / O) และกิจกรรมหนึ่งสามารถบล็อกได้ ใช้ "เครื่องรัฐเท่านั้น" ทางเลือกที่ทำงานได้กับหลายเธรดในภาษาระดับสูง?

4
โดยหลักการแล้วจะสร้างเอ็นจินกฎ / ข้อ จำกัด (ไม่ใช่กราฟิก / ฟิสิกส์) สำหรับเกมได้อย่างไร
ฉันต้องการสร้างเกมง่ายๆคล้ายกับหนังสือที่คุณเลือกเอง ผู้เล่นจะได้รับข้อความบรรยายและเลือกการกระทำของเขาจากรายการความเป็นไปได้ ในทางกลับกันสิ่งนี้นำไปสู่ข้อความบรรยายเรื่องใหม่ infinitum โฆษณา สิ่งเดียวที่จับได้คือขึ้นอยู่กับการตัดสินใจก่อนหน้านี้รายการของความเป็นไปได้ที่อาจแตกต่างกัน ในภาพรวมก่อนหน้านี้ดูเหมือนว่าจะมีคำสั่ง if-else โหลดดังนั้นการอ้างถึงเอ็นจินกฎจะถูกนำมาใช้ แต่มันก็ดูเหมือนเครื่องจักรสถานะ จำกัด สำหรับฉัน ฉันกำลังจะเขียนสิ่งนี้ใน Java หรืออาจจะเป็น Groovy ปัจจุบันฉันสนใจประเด็นเกี่ยวกับแนวคิดมากขึ้นเช่นจะทำอย่างไรในระดับกว้างขึ้น (ผู้คนใช้เกมหมากรุกหรือไพ่อย่างไร?) แต่ก็มีคำแนะนำบางอย่างเกี่ยวกับห้องสมุดเฉพาะด้วยเช่นกัน เห็นได้ชัดว่า "เกมเอ็นจิ้น" จากชื่อไม่ได้หมายถึงการตรวจจับการชนหรือกลไกฟิสิกส์ / กราฟิกอื่น ๆ แต่ตรรกะตัดสินใจว่าผู้เล่นตัวเลือกได้ให้สถานการณ์และสถานะปัจจุบันของเขา

4
คำจำกัดความของ "รัฐ"
เป็นวิธีที่ดีในการกำหนด "รัฐ" เช่นเดียวกับในรัฐตัวแปรหรือเครื่องรัฐเป็นโปรแกรมเมอร์ใหม่ (ไม่ใช่ก่อนหน้านี้) คืออะไร? อะไรคือวิธีที่ดีในการอธิบายว่าทำไมแนวคิดนี้มีประโยชน์สำหรับการเขียนซอฟต์แวร์? แนวคิดของรัฐสอนอย่างชัดเจนในการเริ่มต้นหลักสูตรการเขียนโปรแกรมหรือหนังสือทั่วไปหรือไม่?

6
วิธีการกู้คืนจากการแยกเครื่อง จำกัด ?
คำถามของฉันดูเหมือนจะเป็นเรื่องวิทยาศาสตร์ แต่ฉันคิดว่ามันเป็นปัญหาที่พบบ่อยและนักพัฒนาที่มีประสบการณ์และโปรแกรมเมอร์หวังว่าจะมีคำแนะนำเพื่อหลีกเลี่ยงปัญหาที่ฉันพูดถึงในชื่อ Btw. สิ่งที่ฉันอธิบายร้องเป็นปัญหาจริงฉันพยายามแก้ปัญหาเชิงรุกในโครงการ iOS ของฉันฉันต้องการหลีกเลี่ยงค่าใช้จ่ายทั้งหมด โดยเครื่องสถานะ จำกัด ฉันหมายถึงสิ่งนี้> ฉันมี UI ที่มีปุ่มไม่กี่รัฐหลายเซสชันที่เกี่ยวข้องกับ UI นั้นและสิ่งที่ UI นี้แสดงถึงฉันมีข้อมูลบางอย่างที่แสดงค่าบางส่วนใน UI ฉันได้รับและจัดการทริกเกอร์ภายนอกบางอย่าง (แสดงโดยการเรียกกลับจากเซ็นเซอร์) ฉันทำแผนภาพสถานะเพื่อทำแผนที่สถานการณ์ที่เกี่ยวข้องให้ดีขึ้นและเป็นที่พึงปรารถนาใน UI และแอปพลิเคชันนั้น เมื่อฉันค่อยๆติดตั้งโค้ดแอปเริ่มทำงานมากขึ้นตามที่ควรจะเป็น อย่างไรก็ตามฉันไม่มั่นใจมากว่าจะแข็งแกร่งพอ ความสงสัยของฉันมาจากการเฝ้าดูกระบวนการคิดและการนำไปใช้ของฉันเอง ฉันมั่นใจว่าฉันมีทุกอย่างที่ครอบคลุม แต่ก็เพียงพอที่จะทำการทดสอบสัตว์เดรัจฉานใน UI และฉันก็รู้ได้อย่างรวดเร็วว่ายังมีช่องว่างในพฤติกรรม ... ฉันทำการปะแก้พวกเขา อย่างไรก็ตาม ในขณะที่แต่ละองค์ประกอบขึ้นอยู่กับพฤติกรรมจากการป้อนข้อมูลจากส่วนประกอบอื่น ๆ การป้อนข้อมูลบางอย่างจากผู้ใช้หรือแหล่งภายนอกทำให้เกิดห่วงโซ่ของเหตุการณ์เปลี่ยนแปลงสถานะ .. เป็นต้น ฉันมีองค์ประกอบหลายอย่างและแต่ละพฤติกรรมทำงานเช่นเดียวกับทริกเกอร์นี้ที่ได้รับเมื่อทริกเกอร์อินพุท -> และผู้ส่งวิเคราะห์ -> เอาท์พุทบางอย่าง (ข้อความการเปลี่ยนสถานะ) จากการวิเคราะห์ ปัญหาคือสิ่งนี้ไม่ได้มีการควบคุมตัวเองอย่างสมบูรณ์และส่วนประกอบของฉัน (รายการฐานข้อมูลสถานะเซสชันสถานะของปุ่มบางปุ่ม) ... สามารถเปลี่ยนแปลงอิทธิพลลบหรือแก้ไขนอกขอบเขตของเหตุการณ์หรือ สถานการณ์ที่พึงประสงค์ (โทรศัพท์ล่มแบตเตอรี่จะหมดทันทีเมื่อเปิดเครื่อง) …

5
โปรแกรมเชิงวัตถุสามารถมองเห็นเป็นเครื่องสถานะ จำกัด ได้หรือไม่?
นี่อาจเป็นคำถามเชิงปรัชญา / พื้นฐาน แต่ฉันแค่ต้องการชี้แจง ในความเข้าใจของฉัน Finite State Machine เป็นวิธีการสร้างแบบจำลองระบบซึ่งผลลัพธ์ของระบบจะไม่เพียงขึ้นอยู่กับอินพุตปัจจุบัน แต่ยังรวมถึงสถานะปัจจุบันของระบบด้วย นอกจากนี้ตามชื่อที่แสดงให้เห็นมันเครื่องสถานะ จำกัด สามารถแบ่งออกเป็นจำนวน จำกัด ของรัฐที่มีสถานะและพฤติกรรมของตน ถ้าสิ่งนี้ถูกต้องวัตถุทุกชิ้นที่มีข้อมูลและฟังก์ชั่นควรเป็นสถานะในแบบจำลองเชิงวัตถุของเราหรือไม่ทำให้การออกแบบเชิงวัตถุใด ๆ เป็นเครื่องสถานะ จำกัด ? ถ้านั่นไม่ใช่การตีความของ FSM ในการออกแบบวัตถุสิ่งที่ผู้คนหมายถึงอย่างแน่นอนเมื่อพวกเขาใช้ FSM ในซอฟต์แวร์? ฉันพลาดอะไรไปรึเปล่า? ขอบคุณ

4
เครื่องจักรสถานะลูกสามารถปล่อยการควบคุมกลับไปยังเครื่องสถานะหลักได้อย่างไร
เครื่องสถานะระดับบนสุดของฉันมีสถานะและขอบบางอย่าง ฉันจะเรียกสิ่งนี้ว่าเครื่องสถานะแม่ A ----> B ----> C สถานะใด ๆ ภายในเครื่องสถานะแม่สามารถเป็นเครื่องรัฐเกินไป ฉันจะเรียกเด็กเหล่านี้เครื่องจักรรัฐ ___________ / \ A ----> | B0->B1->B2 | ----> C \____________/ หากเครื่องสถานะแม่เปลี่ยนจาก A ถึง B, เครื่องสถานะของ B ใช้เวลามากกว่า เมื่อ B รันเสร็จสิ้นแล้วมันจะปล่อยการควบคุมไปยังเครื่องสถานะหลักและเปลี่ยนไปใช้สถานะ C ได้อย่างไร คุณใช้รูปแบบการออกแบบแบบใด หากคุณสงสัยว่าฉันมีเครื่องลูกแสดงสถานะภายในเครื่องแม่เพราะโครงการที่แน่นอนของฉันค่อนข้างซับซ้อนและเป็นเรื่องธรรมดาที่จะสรุปการทำงานภายในของสถานะลูก
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.