أي نوع من المشاكل هي الدولة آلات جيدة ؟ [مغلقة]

StackOverflow https://stackoverflow.com/questions/40602

  •  09-06-2019
  •  | 
  •  

سؤال

أي نوع من مشاكل البرمجة هي أجهزة الدولة الأنسب ؟

لقد قرأت عن موزعي يجري تنفيذها باستخدام أجهزة الدولة ، ولكن أود معرفة المشاكل التي تصرخ سيتم تنفيذها بوصفها آلة الدولة.

هل كانت مفيدة؟

المحلول

أسهل الجواب هو على الأرجح أنها مناسبة عمليا أي مشكلة.لا ننسى أن الكمبيوتر نفسه هو أيضا آلة الدولة.

بغض النظر عن أن الدولة هي آلات تستخدم عادة عن المشاكل حيث هناك تيار من المدخلات النشاط الذي يجب القيام به في لحظة معينة يعتمد العناصر الأخيرة رأينا في أن تيار في تلك المرحلة.

ومن الأمثلة على هذا تيار الإدخال:بعض النصوص الملف في حالة تحليل ، سلسلة التعابير العادية ، مثل أحداث player entered room لعبة منظمة العفو الدولية ، الخ.

أمثلة من الأنشطة:تكون على استعداد لقراءة عدد (بعد رقم آخر تليها + قد تظهر في الإدخال في محلل عن آلة حاسبة) استدر (بعد لاعب اقترب ثم عطس) ، أداء القفز ركلة (بعد لاعب الضغط يسار ، يسار ، يمين ، فوق ، فوق).

نصائح أخرى

مورد جيد هذا مجانا آلة الدولة الإليكتروني.بلدي الجواب السريع هو أدناه.

عندما المنطق الخاص بك يجب أن تحتوي على معلومات حول ما حدث آخر مرة تم تشغيل, يجب أن تحتوي على الدولة.

لذا آلة الدولة هو ببساطة أي رمز أن يتذكر (أو الأعمال) المعلومات التي يمكن الحصول عليها إلا من خلال فهم ما حدث من قبل.

فعلى سبيل المثال لدي مودم الخلوية أن البرنامج يجب أن تستخدم.وقد نفذ الخطوات التالية بالترتيب:

  1. إعادة تعيين المودم
  2. بدء الاتصالات مع المودم
  3. ننتظر قوة الإشارة للإشارة إلى علاقة جيدة مع برج
  4. ...

الآن يمكنني أن كتلة البرنامج الرئيسي و ببساطة الذهاب من خلال كل هذه الخطوات في انتظار كل تشغيل ، ولكن أريد أن أعطي بلادي ردود الفعل المستخدم و إجراء عمليات أخرى في نفس الوقت.لذا تنفيذ هذا بمثابة آلة الدولة داخل وظيفة تشغيل هذه الوظيفة 100 مرة في الثانية.

enum states{reset,initsend, initresponse, waitonsignal,dial,ppp,...}
modemfunction()
{
  static currentstate

  switch(currentstate)
  {
  case reset:
    Do reset
    if reset was successful, nextstate=init else nextstate = reset
    break
  case initsend
    send "ATD"
    nextstate = initresponse 
    break
  ...
  }
currentstate=nextstate
}

أكثر تعقيدا أجهزة الدولة تنفيذ البروتوكولات.فعلى سبيل المثال ECU التشخيص البروتوكول اعتدت يمكن فقط إرسال 8 بايت الحزم, ولكن في بعض الأحيان كنت بحاجة إلى إرسال أكبر من الحزم.وحدة نقدية أوروبية بطيئة ، لذا يجب أن تنتظر ردا.من الناحية المثالية عندما إرسال رسالة يمكنني استخدام وظيفة واحدة ثم لا يهمني ما يحدث ، ولكن في مكان ما برنامجي يجب مراقبة خط وإرسال الرد على هذه الرسائل العاجلة لهم إلى أجزاء أصغر واعادة قطعة من الرسائل الواردة في الرسالة الأخيرة.

جليل البروتوكولات مثل TCP غالبا ما تكون ممثلة على النحو أجهزة الدولة.ومع ذلك فإنه من النادر أن عليك أن ترغب في تنفيذ أي شيء كدولة آلة السليم.عادة سوف تستخدم فساد واحدة ، أييكون تنفيذ عمل المتكررة أثناء الجلوس في دولة واحدة ، تسجيل البيانات أثناء التحولات ، أو تبادل البيانات مع البقاء في دولة واحدة.

سير العمل (انظر WF في .صافي 3.0)

لديهم العديد من الاستخدامات ، موزعي كونه أحد أبرز.أنا شخصيا استخدام مبسطة أجهزة الدولة لتنفيذ المعقدة متعددة الخطوات المهمة الحوارات في التطبيقات.

محلل سبيل المثال.لقد كتبت مؤخرا محلل أن يأخذ تيار ثنائي من برنامج آخر.معنى العنصر الحالي تحليل يشير إلى حجم/معنى العناصر القادمة.هناك (صغيرة) عدد محدود من العناصر الممكنة.وبالتالي آلة الدولة.

انهم كبيرة النمذجة الأشياء التي في تغيير الوضع ، المنطق الذي يطلق على كل انتقالية.

أود أن استخدام الدولة المحدودة آلات تتبع الطرود عن طريق البريد ، أو لتتبع مختلف stata المستخدم أثناء عملية التسجيل ، على سبيل المثال.

كما عدد ممكن من قيم الحالة ترتفع عدد من التحولات ينفجر.أجهزة الدولة تساعد كثيرا في هذه الحالة.

الأشياء في الألعاب غالبا ما تكون ممثلة على النحو أجهزة الدولة.منظمة العفو الدولية حرف قد يكون:

  • حراسة
  • العدوانية
  • فوجئنا
  • نائما

لذلك يمكنك أن ترى هذه قد نموذج البعض بسيطة لكنها فعالة الدول.بالطبع يمكنك على الأرجح إجراء أكثر تعقيدا النظام المستمر.

مثال آخر سيكون عملية مثل الشراء من Google Checkout.جوجل يعطي عدد من الدول المالية والنظام ، ثم يعلمك من transistions مثل بطاقة الائتمان المقاصة أو الحصول على رفض يسمح لك أن تبلغها أن تم شحنها.

مطابقة التعبير العادي, تحليل, التحكم في التدفق في نظام معقد.

التعبيرات العادية هي نموذج بسيط من الدولة آلة على وجه التحديد محدودة التلقائية.لديهم الطبيعية represenation على هذا النحو ، على الرغم من أنه من الممكن تنفيذها باستخدام متبادل وظائف العودية.

أجهزة الدولة عند تنفيذ حسنا, سوف تكون فعالة جدا.

هناك حالة ممتازة آلة مترجم لعدد من اللغات المستهدفة ، إذا كنت تريد أن تجعل للقراءة آلة الدولة.

http://research.cs.queensu.ca/~ثورستون/ragel/

كما يسمح لك لتجنب اللعين 'الانتقال'.

منظمة العفو الدولية في الألعاب هو في كثير من الأحيان تنفيذها باستخدام أجهزة الدولة.يساعد على خلق منفصلة المنطق الذي هو أسهل بكثير من بناء الاختبار.

الأشياء التي تأتي إلى الذهن هي:

  • الروبوت/آلة التلاعب...تلك الأسلحة الروبوت في المصانع
  • ألعاب المحاكاة ، (سيم سيتي, لعبة سباق الخ..)

تعميم:عندما يكون لديك سلسلة من المدخلات التي عند التعامل مع أي شخص منهم ، يتطلب المعرفة السابقة المدخلات أو بعبارة أخرى ، عند معالجة أي واحد الإدخال يتطلب المعرفة السابقة من المدخلات.(أي أنه يحتاج إلى "الدول")

ليس كثيرا أن أعرف أنه لا يمكن اختزالها إلى تحليل المشكلة على الرغم من.

فقط كملاحظة جانبية, يمكنك تنفيذ أجهزة الدولة مع المناسبة ذيل المكالمات مثل ما شرحت في ذيل العودية السؤال.

في ذلك على سبيل المثال كل غرفة في اللعبة تعتبر دولة واحدة.

أيضا, تصميم الأجهزة مع VHDL (وغيرها المنطق تركيب اللغات) يستخدم أجهزة الدولة في كل مكان لوصف الأجهزة.

إذا كنت بحاجة بسيطة العشوائية العملية ، قد تستخدم سلسلة ماركوف ، والتي يمكن أن تكون ممثلة على النحو آلة الدولة (نظرا إلى الحالة الراهنة في الخطوة التالية من السلسلة سوف يكون في الدولة " س " مع وجود احتمال معين).

أي تطبيق سير العمل ، خاصة مع الأنشطة غير المتزامنة.لديك عنصر في سير العمل في دولة معينة ، آلة الدولة يعرف كيفية الرد على الأحداث الخارجية من خلال وضع بند في دولة مختلفة ، وعند هذه النقطة بعض الأنشطة الأخرى يحدث.

مفهوم الدولة هي مفيدة جدا في تطبيقات إلى "تذكر" السياق الحالي من النظام الخاص بك تتفاعل بشكل صحيح عندما قطعة جديدة من المعلومات يصل.أي غير تافهة تطبيق هذا المفهوم المضمنة في التعليمات البرمجية من خلال المتغيرات الشرطية.

حتى إذا كان التطبيق الخاص بك يجب أن تتفاعل بشكل مختلف في كل مرة يتلقى معلومة جديدة لأن السياق ، يمكن أن نموذج النظام الخاص بك مع أجهزة الدولة.على سبيل المثال سيكون كيفية تفسير مفاتيح على آلة حاسبة ، والذي يعتمد على ما هي المعالجة في هذه النقطة في الوقت المناسب.

على العكس من ذلك ، إذا كان لديك حساب لا تعتمد على السياق ولكن فقط على المدخلات (مثل وظيفة إضافة رقمين), أنت لا تحتاج إلى آلة الدولة (أو أفضل قال: سيكون لديك آلة الدولة مع صفر) ،

بعض الناس تصميم التطبيق بالكامل من حيث أجهزة الدولة لأنها التقاط الأشياء الأساسية أن نأخذ في الاعتبار في المشروع الخاص بك ومن ثم استخدام بعض الإجراءات أو autocoders لجعلها قابلة للتنفيذ.فإنه يأخذ بعض نموذج الفرصة البرنامج في هذه الطريقة, ولكنني وجدت أنه فعال جدا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top