2013-02-11 17 views
12

हाल ही में, मैंने जावास्क्रिप्ट में फिनिट स्टेट मशीनों में कुछ शोध करना शुरू कर दिया है और मैं भी found a library जो उन्हें कार्यान्वित करना आसान बनाता है। जबकि मुझे लगता है कि मैंने इस विचार को समझ लिया है कि किसी ऑब्जेक्ट की "स्थिति" को ट्रैक करने और बदलने के लिए एक राज्य मशीन का उपयोग किया जाता है (उदाहरण के लिए, 'तैयार', 'पूर्ण', 'निष्क्रिय', आदि), मैं नहीं करता मुझे लगता है कि मैं उनके व्यावहारिक प्रभाव को पूरी तरह से समझता हूं।एक परिमित राज्य मशीन क्या है और इसके लिए क्या उपयोग किया जाता है?

  • क्या बिल्कुल एक परिमित राज्य मशीन है [या यह सिर्फ एक राज्य मशीन कहा जाता है: किसी कृपया निम्नलिखित स्पष्ट द्वारा मदद कर सकता है? मैंने सुना है कि यह दोनों तरीकों से संदर्भित है]?
  • परिमित राज्य मशीनों (जावास्क्रिप्ट में) के लिए कुछ व्यावहारिक उपयोग क्या हैं?
  • मैं नहीं एक सीमित राज्य मशीन का उपयोग करना चाहता हूं?
  • कौन सी किताबें, लेख, ट्यूटोरियल इत्यादि, परिमित राज्य मशीनों (जावास्क्रिप्ट में) पर अधिक गहन रूप से दिखती हैं?
+0

विकिपीडिया? गूगल? बीटीडब्ल्यू, ध्यान दें कि कैसे जावास्क्रिप्ट केवल एक ** स्क्रिप्टिंग ** भाषा है (यानी यह केवल मूल एपीआई परिभाषित करता है)। इसलिए, व्यावहारिक उपयोग ** पर्यावरण ** (वेब ​​ब्राउज़र, वेब-सर्वर, विन 8) पर निर्भर करता है, न कि भाषा पर ही। –

+2

मैंने वास्तव में Google को यह किया था। यही कारण है कि मैंने उल्लेख किया था कि मैं इस तथ्य को समझ दूंगा कि एक राज्य मशीन का उपयोग किसी एप्लिकेशन में "राज्य" को ट्रैक करने के लिए किया जाता है, लेकिन मुझे इसके व्यावहारिक प्रभावों को समझने में कठिनाई हो रही है और मुझे उम्मीद है कि कोई स्पष्टीकरण दे सकता है। –

+0

मल्टी-स्टेप फॉर्म शायद? –

उत्तर

9

एक फिनिट स्टेट मशीन एक अमूर्त अवधारणा है। इस प्रकार, राज्य मशीन की अवधारणा किसी विशेष भाषा के लिए ऑर्थोगोनल है। यदि आप look at wikipedia कहते हैं, तो यह "कंप्यूटर प्रोग्राम और अनुक्रमिक तर्क सर्किट दोनों को डिजाइन करने के लिए गणना की गणना का गणितीय मॉडल है"।

इसका मतलब है कि एफएसएम आमतौर पर गणितीय अवधारणा के रूप में प्रयोग किया जाता है जिसका प्रयोग कंप्यूटर वैज्ञानिकों द्वारा अनुशासन के साथ प्रश्नों को हल करने के लिए किया जाता है, जैसे "xyz की गणना की जा सकती है?"

आपके प्रश्न और आपके लिंक के आधार पर, मुझे लगता है कि आप राज्य आरेख (या स्टेटचार्ट) के बारे में पूछना चाहते हैं जो अलग है। जब आप एक राज्य आरेख बनाते हैं, तो आप अपने कार्यक्रम को राज्यों की एक श्रृंखला में विभाजित कर रहे हैं, और उन राज्यों में होने वाली घटनाएं। उदाहरण के लिए, आपका प्रोग्राम "एडिटिंगफॉर्म" स्थिति में हो सकता है, ईवेंट "डूसेव" प्राप्त करें, और फिर "सेविंग" स्थिति में जाएं, ईवेंट 'सेव पूर्ण करें' प्राप्त करें, और "व्यूइंग" स्थिति में वापस जाएं।

यह अवशोषण अविश्वसनीय रूप से उपयोगी है क्योंकि यह प्रोग्रामर को अवधारणात्मक रूप से व्यवस्थित करने की अनुमति देता है कि जब चीजें सही ढंग से लागू होती हैं, तो क्लीनर और अधिक संगठित कोड की ओर जाता है। इससे बदले में कम बग होती है। एक राज्य आरेख, कार्यान्वयन, केवल राज्य के लिए परिभाषित घटनाओं को संभालने से अनपेक्षित प्रभावों को रोक सकता है - उदाहरण के लिए, "देखने" में शायद 'सेव' ईवेंट परिभाषित नहीं होता है, इस प्रकार यदि प्रोग्राम "देखने" स्थिति में है तो कोई भी बचत व्यर्थ है , क्योंकि यह केवल "संपादन" स्थिति में होना चाहिए।

यदि आप जिस फ्रेमवर्क को लिंक करते हैं, उसके बारे में आप देखेंगे, तो आप देखेंगे कि हैंडलर का एक समूह है जिसका उपयोग आप राज्यों में प्रवेश करने, राज्यों को छोड़ने, कार्यवाही करने आदि में शामिल होने के लिए कर सकते हैं। इससे आपको वास्तव में ऐसी चीजें करने की अनुमति मिलती है जो मेल खाते हैं राज्य/कार्रवाई के लिए। उदाहरण के लिए, "संपादन" स्थिति दर्ज करने पर आप उपयोगकर्ता को फॉर्म प्रस्तुत कर सकते हैं और सहेजें बटन सक्षम कर सकते हैं। "सेविंग" स्थिति दर्ज करने पर आप बटन को अक्षम कर सकते हैं और सहेजने का अनुरोध आग लगा सकते हैं। "SaveComplete" ईवेंट प्राप्त करने पर आप "देखने" स्थिति में संक्रमण कर सकते हैं, फ़ॉर्म को हटा सकते हैं, और कुछ और दिखा सकते हैं।

+0

तो राज्य मशीन "राज्य" को ट्रैक करके प्रबंधित करती है कि क्या आवेदन कर रहा है (एक पृष्ठ "देख रहा है) और फिर या तो उन घटनाओं पर अभिनय या अनदेखा कर रहा है जो निकाल दिए गए हैं (जावास्क्रिप्ट शर्तों में)? यह लगभग एक नियंत्रक (एमवीसी) या एक घटना बस की तरह लगता है। –

+1

यह बहुत समान है। कार्यान्वयन में मैंने उपयोग किया है, आप राज्य सरकार पर घटनाओं का आह्वान करके अपने आवेदन के माध्यम से आगे बढ़ते हैं, इसलिए यह वास्तव में ट्रैक नहीं करता है - यह प्रोग्राम नियंत्रण के लिए प्रवेश का बिंदु है। – hvgotcodes

+0

जैसा कि मैं फ्लक्स और विशेष रूप से रेडक्स के साथ क्लाइंट-साइड अनुप्रयोगों में यूनिडायरेक्शनल डेटा प्रवाह का अध्ययन और उपयोग कर रहा हूं, मैंने यह समझना शुरू कर दिया है कि रेडक्स वास्तव में आपको अपने यूआई राज्य को संभालने के लिए निर्धारिती परिमित राज्य मशीन का उपयोग करने में मदद कर रहा है। रेडक्स में, उठाए गए कार्यक्रमों को क्रियाओं के रूप में दर्शाया जाता है, और शुद्ध कार्य होते हैं जो शुद्ध कार्य होते हैं, संक्रमण कार्यों की तरह होते हैं, जो वर्तमान स्थिति और उठाए गए घटनाओं/कार्यों से इनपुट लेते हैं, और एक नया राज्य बनाते हैं, इस प्रकार आपके यूआई को अगले में बदलते हैं राज्य। – lastmjs

2

इसे अक्सर भाषा पार्सर के स्कैनर और लेक्सर में उपयोग किया जाता है। कुछ वाक्यविन्यास नियमों के आधार पर स्रोत कोड में प्रत्येक टोकन बनाना और फिर विश्लेषण करना।

असल में, यहां आप वर्तमान स्थिति की जांच करते हैं कि यह देखने के लिए कि अगले पात्र या टोकन समझ में हैं या उन्हें कैसे व्यवस्थित किया जाना चाहिए।

+0

आह हाँ, महान उदाहरण। –

10

एक सीमित राज्य मशीन क्या है?

यह घटनाओं और उनके बीच संक्रमण के साइड इफेक्ट्स घोषित करने का एक तरीका है।

परिमित अवस्था की मशीनों में से कुछ व्यावहारिक उपयोग क्या हैं?

कोड की बजाय इस तरह

:

function decide() 
{ 
    if(mouseButtonIsDown && mouseIsMoving && mouseCoordinatesAreWithin(0, 0, 100, 100) && thePixelIsRed) { 
    clearBuffers(); 
    startPlaying(); 
    cursorBecomeHand(); 
    } 
    else if(!mouseButtonIsDown && !mouseIsMoving && mouseCoordinatesAreWithin(0, 0, 100, 100) && thePixelIsRed) { 


    } 
    // more ifs 
} 

आप को परिभाषित क्या जो राज्य में होता है केवल कुछ ही राज्यों रखने के लिए और कार्यों में अपनी घटनाओं को तोड़ने,।

function drag_started() { 
switch(your_state) { 
    case "within_box": 
    clearBuffers(); 
    cursorBecomeHand(); 
    your_state= "playing"; 
    startPlaying(); 
    break; 
} 

}

जिसमें कहा गया है और घटनाओं की जुदाई, जो कम प्रतिगमन और अधिक रख-रखाव का मतलब होता है।

मैं एक सीमित राज्य मशीन का उपयोग नहीं करना चाहूंगा? इस बिंदु पर

जवाब ही। यदि आपके पास सिर्फ एक राज्य है, तो राज्य मशीन से परेशान न हों।

कौन सी किताबें, लेख, ट्यूटोरियल इत्यादि, परिमित राज्य मशीनों (जावास्क्रिप्ट में) पर अधिक गहराई से देखने की पेशकश करते हैं?

अकादमिक के खिलाफ, मैं jquery प्लगइन्स के स्रोत को पढ़ने की अनुशंसा करता हूं। उदाहरण के लिए _mouseMove और _mouseUp के अंतर्गत देखें the jquery ui source

संबंधित मुद्दे

 संबंधित मुद्दे