freeCodeCamp/guide/arabic/software-engineering/design-patterns/finite-state-machine/index.md

66 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: Finite State Machine
localeTitle: آلة الدولة المحدودة
---
إن آلة الحالة المحدودة (FSM) هي نمط تصميم برمجي حيث ينتقل نموذج معين إلى حالات سلوكية أخرى من خلال المدخلات الخارجية.
## آلة الدولة المحدودة
يتم تعريف FSM من خلال **حالاتها** ، وهي **الحالة الأولية** **والتحولات** .
تأتي قوة FSM من القدرة على تحديد _السلوكيات_ المختلفة بوضوح في ظروف مختلفة. عادة ما يتم استخدام FSM مع البرامج النصية السلوكية التي تقوم باستمرار بتقييم الوضع الحالي في حلقة أو مع الأحداث.
للمساعدة في تشكيل صورة عن كيفية تطبيق ذلك ، سيتم استخدام ماكينة قهوة كمثال على آلة الحالة المحدودة. وسنغطي أيضًا رسمًا بيانيًا لتصور FSM وتقديم أمثلة ترميز.
### الرسم التخطيطي للدولة
![آلة القهوة آلة الدولة محدودة الرسم التخطيطي](https://raw.githubusercontent.com/arunma/blogimages/master/AkkaFSM/CoffeeMachineFSM.png) يوضح هذا الرسم البياني ثلاث حالات محتملة لآلة القهوة:
* افتح
* ReadyToBuy
* قطع التيار الكهربائي عنه
الخطوط بين هذه الدول تظهر التحولات الممكنة بين الدول وفي أي اتجاه. هذه التحولات لديها شروط عندما تحتاج إلى تغيير FSM بين الدول.
* StartUpMachine من حالة التشغيل إلى حالة الفتح ، يجب أن تبدأ الماكينة في التشغيل. يتم ذلك يدويا في هذه الحالة.
* إيداع> = تكلفة القهوة تقوم FSM بتقييم مبلغ الأموال المودعة إما في حلقة أو عندما يتغير المبلغ (موصى به في هذه الحالة) إذا قمت بإيداع ما يكفي من النقود في آلة صنع القهوة ، فستتحول FSM من "Open" إلى "ReadyToBuy".
* ShutdownMachine سينتقل الجهاز تلقائيًا من Open إلى PoweredOff من خلال أسلوب ShutDownMachine إذا تم استيفاء الشرط 'لا مزيد من القهوة المتبقية'.
* DispenseCoffee في حالة ReadyToBuy يمكن للمستخدم شراء القهوة وبعد ذلك سيتم تخميرها وصرفها. الشرط هو عندما يبدأ الحدث BuyCoffee (! رابط لنمط المراقب!). (غير موضح في الرسم التخطيطي)
* CancelCoffee إذا اختار المستخدم الإلغاء ، فسينتقل الجهاز من ReadyToBuy إلى Open.
* ShutDownMachine سوف تذهب الآلة إلى حالة النظام
### تنص على
في كل حالة هناك سلوك محدد يتم تنفيذه فقط عندما يكون الكائن في هذه الحالة. على سبيل المثال ، أثناء تشغيل الآلة ، لن تقوم آلة القهوة بتجربة القهوة قبل تشغيلها ، أثناء حالة الفتح ستنتظر إما حتى يكون هناك نقود كافية تم إدخالها ، حتى يتم إعطاء أمر خفض الطاقة ، أو حتى نفاد القهوة. خلال هذه الحالة المفتوحة ، يمكن أن يقوم بعمليات روتينية مثل التنظيف والتي لن تحدث في حالات أخرى.
### الحالة الأولية
كل حالة FSM لها حالة أولية ، وهذا يعني الحالة التي تبدأ عندها عند إنشائها ويجب أن يتم تعريفها عند إنشاءها أو إنشاءها. بالطبع من الممكن تغيير الحالة مباشرة إذا تم استيفاء الشروط.
### الانتقالات
كل ولاية إما أن تقيم باستمرار إذا كان يجب أن تنتقل إلى دولة أخرى أو سوف تنتقل إلى دولة أخرى على أساس حدث أثار.
## DFA و NFA
هناك نوعان من automaton محدود ، Deterministic (DFA) و Nondeterministic (NFA). كلاهما يقبل اللغات العادية ويعمل بشكل أكثر أو أقل بنفس الطريقة الموضحة أعلاه مع بعض الاختلافات.
يقبل DFA سلسلة من الرموز أو يرفضها وينتج فقط حسابًا فريدًا واحدًا أو آليًا لكل سلسلة إدخال. _Deterministic_ يشير إلى uniquness الحساب. تسمى آلة الحالة المحددة بـ DFA إذا كانت تتوافق مع القواعد التالية:
1. يتم تحديد كل من انتقالاته _بشكل فريد_ من خلال رمز المصدر ورمز الإدخال الخاص به
2. مطلوب قراءة رمز إدخال لكل حالة انتقال.
لا يحتاج NFA إلى الالتزام بهذه القيود ، وهذا يعني أن كل DFA هو أيضًا NFA. وبما أنهما يتعرفان على اللغات العادية فقط ، يمكن تحويل كل NFA إلى DFA مكافئ باستخدام خوارزمية إنشاء powerset.
إذن ما نوع القواعد التي يمكن أن نتوقع العثور عليها في NFAs وليس DFAs؟
1. يمكن أن يكون لدى NFA انتقال _سلسلة فارغ_ (يتم الإشارة إليه بشكل عام بواسطة epsilon). بمعنى أنه في حالة معينة مع epsilon لقاعدة انتقال ، يمكن للجهاز الانتقال إلى الحالة التالية دون قراءة رمز الإدخال
2. في NFA ، يمكن أن يكون لكل زوج من رمز الدولة والانتقال حالات وجهة متعددة بدلاً من الوجهات الفريدة للأزواج في DFAs
3. ينتج كل زوج من رمز الحالة والانتقال "فرع" حساب لكل من وجهته المحتملة بإنشاء نوع من نظام مؤشرات ترابط متعددة.
4. سترفض DFA سلسلة الإدخال إذا كانت تسقط على أي حالة أخرى غير حالة القبول. في NFA ، نحتاج فقط إلى "فرع" واحد للهبوط على حالة قبول من أجل قبول السلسلة.