🐍 Pythonの状態パターン



📗 設計パターンは,オブジェクト指向プログラミングを用いたソフトウェア開発における共通の課題に対する従来の解決策である.Pythonを使用して状態パターンと有限状態マシンを実装することを学ぶ.

Design patterns ソフトウェア開発における一般的課題への従来の解決策Object-oriented programming . スケーラブルで柔軟なソフトウェアを開発するための有名なデザインパターンの一つは状態パターンである.あなたは、状態のパターンとどのようにこの記事であなたのソフトウェアプロジェクトを改善するために適用する方法について学びます.

有限状態機械
定義しましょうfinite state machine (FSM)状態設計パターンに移る前に.状態パターンと有限状態機械の概念が密接な関係を持つことはよく知られている.FSMは内部状態によって異なる振る舞いをするものです.コンピュータ・プログラミングにおいて、アプリケーションのオブジェクトの動作は、その状態に従い異なる.スイッチと電球はfsmの簡単な例である.「オン」と「オフ」は電球の2つの可能な状態です.または'オフ'の電球の状態を変更するには、単にスイッチを反転します.遷移は、ある状態から別の状態へ移動する過程です.遷移はいくつかの要因の影響を受ける.電球の場合は、スイッチからの入力によって決まる.以下に示す状態図は、状態と遷移をグラフィカルに表している.

任意のプログラミング言語を使用してステートマシンを実装することができます.いくつかの要因によって、我々のコードは異なった振る舞いをする.前の電球の例を次のように実装できます.
class LightBulb:
  _state = 'OFF'    # initial state of bulb

  def onOff(self, switch):
    if switch == 'ON':
        self._state = 'ON'
    elif switch == 'OFF':
        self._state = 'OFF'
    else:
        continue          # if we get wrong input

上記のような小さなシステムでは、コードは簡単で単純であるように見える.しかし、多くの状態と遷移があれば、私たちのコードは条件付きの声明でflabbyを得ます.コードは、より広範になり、それはアプリケーションを維持することは容易ではない.プログラムに追加状態または遷移を追加する場合は、コードベース全体を変更する必要があります.これらの場合、状態デザインパターンを使用できます.

状態パターン
それは行動設計パターンです.状態パターンを使用して、実行時にオブジェクトが機能を変更できる状態固有の動作を実装できます.状態に基づいてオブジェクトの動作を変更するときに条件文を使用しないようにすることができます.状態パターンではencapsulate 別の状態State クラス.元のクラスは、状態依存の機能を実装するために条件文を使用するのではなく、現在の状態に基づいて状態オブジェクトへの参照を保持します.

UML図

1)コンテキスト-アプリケーションのオリジナルクラスです.これは、その動作が依存する具体的な状態の1つへの参照を維持します.また、内部状態を変更する方法もあります.
2 )状態インタフェース-すべてのサポートされている状態は、同じ状態インターフェースを共有します.ステートインターフェイスのみがコンテキストを状態オブジェクトと通信できます.コンテキストは、状態インターフェイスを介して状態オブジェクトと通信できます.
3 )具体的な状態-各状態に対して、これらのオブジェクトは' state 'インターフェイスを実装します.これらは状態固有のメソッドを含む主なオブジェクトです.

どうやって動くの?
Read more...