برنامه‌نویسی مبتنی بر اتوماتا
برنامه‌نویسی مبتنی بر اتوماتا یک الگوی برنامه‌نویسی است که در آن کل برنامه یا بخشی از آن به صورت مدلی از ماشین حالات متناهی (FSM) یا دیگر اتوماتاهای قراردادی دیگر (که اغلب پیچیده‌تر هستند) تصور می‌شود (نظریه اتوماتا را ببینید). اتوماتای بر اساس برنامه‌نویسی نمونه‌ای از برنامه‌نویسی می‌باشد که برنامه و قسمت‌های مختلف آن سعی بر این دارند تا یک ماشین متناهی را مدل کنند.
برنامه‌نویسی مبتنی بر FSM نیز مانند برنامه‌نویسی مبتنی بر اتوماتیک می‌باشد با این تفاوت که تمامی جنبه‌های ماشین متناهی را پوشش نمی‌دهد.
موارد زیر مشخصه‌های برنامه‌نویسی مبتنی بر اتوماتیک است:
۱-زمان اجرای برنامه به وضوح از مراحل اتوماتا جدا می‌باشد. ۲-ارتباط میان مراحل فقط از طریق رفتن از یک وضعیت به وضعیت دیگر می‌باشد.
تمام مراحل اجرای یک اتومات به‌طور کلی یک چرخهٔ اتوماتا را می‌گویند.
برنامه‌ای در زبان C را در نظر که یک متن را از ورودی می‌خواند، خط به خط کلمه اول هر خط را چاپ می‌کند.
برنامه زیر می‌تواند مورد بالا را به روش سنتی برنامه‌نویسی C انجام بدهد: int main(void)
روش برنامه‌نویسی مبتنی بر اتوماتیک
همان کاری که برنامه قبل انجام میداد را می‌توانیم با ماشین متناهی انجام دهیم.توجه داشته باشید که تجزیه خطوط سه مرحله دارد :
1- عبور کردن از space ها
2- چاپ کردن کلمه
3- گذر از همهٔ حروف کلمه
برنامه به شکل زیر می‌باشد :
int main(void)
اگرچه برنامه طولانی به نظر می‌رسد اما مزیت آن این است که فقط یک دستور خواندن دارد و همچنین تنها یک حلقه در برنامه وجود دارد نه 4 عدد.
کاملاً لازم نیست کد را به گرداننده‌ها ی جدا برای‌ها وضعیت تقسیم کنیم.برنامهٔ زیر همان کار برنامهٔ بالا را انجام می‌دهد با این تفاوت که یک مقدار کوتاه‌تر است.
int main(void)
مهمترین ویژگی برنامه قبل این است که کد مرحله اتوماتیک به صورت محلی تعریف شده‌است. با یک تابع جدا برای این قسمت ما بهتر می‌توانیم این ویژگی را اثبات کنیم.
enum states { before, inside, after }; void step(enum states *state, int c) }  int main(void)
این مثال به‌طور کامل ویژگی کد مبتنی بر اتوماتا را ثابت می‌کند.
یک اتوماتای متناهی می‌تواند به‌طور صریح و روشن توسط جدول انتقال بیان شود. در برنامه زیر جدولی وجود دارد که برای هر ترکیب جدول شامل یک وضعیت جدید و یک پرچم می‌باشد. enum states { before = 0, inside = 1, after = 2 }; struct branch { struct branch the_table[3][3] = { void step(enum states *state, int c)
اتوماتا و اتوماسیون برنامه‌نویسی مبتنی بر متن نشان دهندهٔ مطابقت میان برنامه‌نویسی و اتوماسیون می‌باشد.
یک چرخهٔ تولید به‌طور کلی به صورت زیر مدل می‌شود.
1.مجموعه‌ای از مراحل که با ورودی مطابقت دارد.
2.مجموعه‌ای از کارها که با حالت کنونی مطابقت دارد.
برنامه‌ای که در بالا ارائه شد از این دیدگاه به صورت زیر بیان می‌شود. SPC : ' ' EOL : '\n' states : (before, inside, after, end) setState(c) { doAction(c) { cycle {
در رشتهٔ اوتوماسیون از یک مرحله به مرحلهٔ دیگر رفتن به این بستگی دارد که چه حروفی به دستگاه وارد می‌شود. این می‌تواند این‌گونه ارائه شود که حروف از یک فایل متنی خوانده شود و به ترتیب وارد دستگاه شود. در واقع این اطلاعات در مورد مکان، سرعت، دما و دیگر عناصر حیاطی دستگاه می‌باشد.
مانند یک برنامه‌نویسی گرافیکی شاخه‌هایی وجود دارند که با یکدیگر اجرا می‌شوند که به صورت زیر می‌توان آن‌ها را نشان داد.
اگر زبان برنامه‌نویسی از ویژگی‌های شی گرایی استفاده کند می‌توان اوتومات‌ها را به صورت یک شی در نظر گرفت. با ابن کار چگونگی پیاده‌سازی آن و جزئیات آن پنهان می‌شود.
به عنوان مثال یک نسخه از برنامه‌ای که در بالا گفته شد با استفاده از ویژگی‌های شی گرایی به صورت زیر نوشته می‌شود. class StateMachine { public: }; struct StateMachine::branch StateMachine::the_table[3][3] = { int main(void)
اوتوماتای مبتنی بر برنامه‌نویسی به صورت گسترده‌ای در تحلیل لغوی و گرامری استفاده می‌شود.
در نظریهٔ اوتوماتیک فکر نیز می‌تواند مورد استفاده قرار بگیرد.
اوتومات‌های مبتنی بر برنامه‌نویسی برای توصیف معانی بعضی از زبان‌های برنامه‌نویسی مورد استفاده قرار میگیرد.
تکنیک مبتنی بر اوتومات‌ها به صورت گسترده‌ای در الکوریتم‌ها و نظریهٔ اوتوماتیک استفاده می‌شود. مثل تحلیل زبان‌های با قاعده.
یکی از ابتدایی‌ترین مقاله‌ها در این زمینه در سال 1968 چاپ شد.
اولین جایی که از اوتومات‌های مبتنی در برنامه‌نویسی به عنوان یک تکنیک عمومی نام برده شده‌است در سال 1963 توسط پیتر نور بود که نویسنده آن را تکنیک تورینگ ماشین نام‌گذاری کرده بود.
Nondeterministic programming
State pattern
Esterel
Umple