seen from United States
seen from United States

seen from T1
seen from Germany

seen from Malaysia
seen from Germany
seen from United States
seen from United States
seen from United States

seen from France
seen from China
seen from China
seen from France
seen from United States

seen from Bangladesh
seen from France
seen from Malaysia
seen from United Arab Emirates
seen from United Kingdom

seen from Malaysia

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch • No registration required • HD streaming
オブジェクト・モデリングにおける動的モデルは状態機械で記述するのが基本です。つまり状態機械はオブジェクト・モデリングの重要な構成要素の一つということです。
ScalaでObject-Functional Programming(OFP)を行う場合でも、要求・分析・設計の各アクティビティを経て作成されたオブジェクト・モデル内の状態機械をどのように実装していくのかという実装方式が論点になります。
普通のOOP流の実装はすでに議論しつくされていると思いますが、OFPにおけるFPでの実装方式については、これから整備されていくことになると思います。
注意が必要なのはクラウド・アプリケーション開発をターゲットにする場合、伝統的なFPというよりMonadic Programming(以下MP)を経てFunctional Reactive Programming(以下FRP)がゴールになるということです。
このためFRPとして利用可能な状態機械実装を探っておきたいところです。
「モデル検査」のススメ (ゲームシナリオ進行編)
「モデル検査」のススメ (ゲームシナリオ進行編) from Masaru Nagaku

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch • No registration required • HD streaming
Stagehand_FSM - 有限状態マシン、そしてドメイン特化言語
先日、Piece FrameworkのプロダクトStagehand_FSMのバージョン2.0.0を2条項BSDライセンスでリリースしました。Stagehand_FSMのリリースは2008年7月27日のバージョン1.10.0以来5年ぶりとなります。
Stagehand_FSMは有限状態マシン(FSM: Finite State Machine)の定義・実行を行うためのPHPコンポーネントです。PHP 5.3.2以降で動作します。本記事ではStagehand_FSMがどのようなものなのか簡単に説明します。
有限状態マシンの例:有料ゲート
以下のようなお金を入れると通過できるゲートを考えます。
Stagehand_FSMを使った実装は以下のようになります。
<?php use Stagehand\FSM\StateMachine\StateMachineBuilder; $stateMachineBuilder = new StateMachineBuilder(); $stateMachineBuilder->addState('locked'); $stateMachineBuilder->addState('unlocked'); $stateMachineBuilder->setStartState('locked'); $stateMachineBuilder->addTransition('locked', 'insertCoin', 'unlocked'); $stateMachineBuilder->addTransition('unlocked', 'pass', 'locked'); $stateMachine = $stateMachineBuilder->getStateMachine(); $stateMachine->start(); echo $stateMachine->getCurrentState()->getStateID() . PHP_EOL; // "locked" $stateMachine->triggerEvent('insertCoin'); echo $stateMachine->getCurrentState()->getStateID() . PHP_EOL; // "unlocked" $stateMachine->triggerEvent('pass'); echo $stateMachine->getCurrentState()->getStateID() . PHP_EOL; // "locked"
このように簡単な状態管理であれば有限状態マシン(以下ステートマシン)を使う必要はありません。しかし、状態の数が増えるに従ってプログラムコードは複雑になり、その意図性が低下することは避けられなくなります。ステートマシンの利用は、そのような場合に極めて有効なアプローチとなります。
ドメイン特化言語の基盤としてのStagehand_FSM
Stagehand_FSMの基本的な使い方は、前述の例のように直接的にステートマシンを組み立てて実行することですが、応用としてドメイン特化言語(DSL: Domain Specific Language)の基盤として使うこともできます。現在開発中のPiece_Flow v2のように画面遷移に特化した言語を作ることもできますし、業務フローを定義・実行するワークフローエンジンを作ることもできます。言語の表現形式としてはテキストはもちろんのこと、ツリーや、UMLのステートマシン図(状態遷移図)のようにグラフィカルなものを検討することもできます。
おわりに
Stagehand_FSMは複雑な状態管理コードの置き換えに有用なコンポーネントです。また、ドメイン特化言語の基盤としてさまざまな形で応用することができるでしょう。興味を持たれた方は是非使ってみてください。
Info PHPメンターズでは、PHPソフトウェアにおけるドメイン特化言語の開発について、プロトタイプ作成や技術サポート、メンタリング等を承ります。ドメイン特化言語の開発についてサポートが必要な場合は[email protected]までお問い合わせください。
参考
有限状態マシン - Stagehand_FSM - Piece Framework