Mesin negara paling sederhana atau mesin negara dalam tiga langkah

gambarHalo, Habr!

Mari kita turun ke bisnis, tetapi sedikit latar belakang masih diperlukan: satu setengah tahun yang lalu, menjadi perlu untuk menerapkan mesin negara sederhana (mesin negara), memiliki teori dari universitas, saya yakin bahwa masalah ini sepele (kita semua optimis).


Waktu yang dihabiskan dengan google berlalu tanpa hasil, karena solusi yang ada tidak hanya memiliki kesalahan fatal , tetapi juga sejumlah kekurangan serius lainnya, seperti struktur yang kompleks dan kurangnya dokumentasi.



Segera saya menemukan artikel ini , yang menegaskan kurangnya solusi yang mudah.



Apa yang kamu lakukan?



Karena tugas harus diselesaikan dengan cepat (seperti biasa), mesin keadaan terbatas saya diimplementasikan menggunakan kamus, yaitu:



  • ada daftar negara bagian (Enum)
  • ( )
  • (map): --


, « » , , ( )



?



« » . , , , - .



: .

, .



...





wpf ReactiveUI.



.

, xml .



gambar



, — . gif .



, ( )

Peluang



Dua topik



image



:







  • ( )




image





image





image





image





image





image





image





image



/ / xml





<?xml version="1.0" encoding="utf-8"?>
<StateMachine>
  <States>
    <State Name="Start" Position="37, 80" IsCollapse="False" />
    <State Name="State 1" Position="471, 195.54" IsCollapse="False" />
    <State Name="State 2" Position="276, 83.03999999999999" IsCollapse="False" />
  </States>
  <StartState Name="Start" />
  <Transitions>
    <Transition Name="Transition 2" From="State 2" To="State 1" />
    <Transition Name="Transition 1" From="Start" To="State 2" />
  </Transitions>
</StateMachine>


PNG/JPEG



image





:



  1. .



    StateMachine stateMachine = new StateMachine("scheme.xml");
  2. , «» , .



    stateMachine.GetState("State1").OnExit(Action1);
    stateMachine.GetState("State2").OnEntry(Action2);
    stateMachine.GetTransition("Transition1").OnInvoke(Action3);
    stateMachine.OnChangeState(Action4);
  3. .



    stateMachine.Start(parameters);


, , , , export , .



?



, Entry/Exit , :





StateMachine.InvokeTransition("Transition1", parameters);


, , , .



?



  • .
  • Data — , StateMachine .


, .



, ( )

:



  • /
  • / / xml




, .

.

, — , !



. :





. , .



:



stateMachine.GetState("State1");




stateMachine.State1;


, dynamic .

- -, .



. :



  1. .


  2. Alokasi otomatis node - tombol ajaib untuk tata letak otomatis elemen pada kanvas
  3. Cross

    - platform - Terjemahan proyek pada AvaloniaUI


kesimpulan



  • Kami membuat mesin negara dalam tiga langkah, dan kapan saja kami dapat menampilkan dan mengedit struktur mesin secara visual.
  • Pengembangan lebih lanjut dari proyek


Tautan



Editor grafis, sumber di GitHub: Perpustakaan SimpleStateMachineNodeEditor

, sumber di GitHub: SimpleStateMachineLibrary




All Articles