ショートカット
ファシリテーター × あり方
コーディングの向こう側
Hello, ANOTHER world!
オブジェクト指向のはなし
プログラミングのはなし
C言語実力診断クイズ
eSkillBooks
オブジェクト指向のはなし

自分自身を観察してみる

導入

人間もオブジェクトのひとつと言えます。自分自身を観察することで、オブジェクトの性質を理解できるかも知れません。

用語
このトピックでは次の用語を覚えます:
  • 状態機械 (state machine)
解説

人間にはいろいろな機能があります。食べたり、考えたり、歩いたり、眠ったり、怒ったり、歌ったり、驚いたり、おしゃべりしたり、くしゃみをしたりします。これらの機能は、すべて外界との関わりの中で意味を持ちます。消化液を分泌したり、神経伝達物質を放出したりといった機能は人間の機能というよりは、むしろ内蔵とか体内の機能なので、ここでは考えないことにします。外の世界との関わりの中で意味を持つはたらきに注目します。

外界との接触によって機能するということは、外界からの何らかの刺激に反応してリアクションをとるということです。例えば:

  • お笑い番組をみて(刺激)→ 笑う(リアクション)
  • 呼ばれて → 振り向く
  • だれかがボケたら → ツッコミを入れる
  • 一目で → 惚れる
  • つまずいて → 転ぶ ・・・これは冗談!

というぐあいに、人間はいろいろな刺激に対する反応のパターンを持っています。

今度は、同じ刺激を続けて何度も受ける場合を考えてみましょう。

  • 1回目:
    「金貸してくれ」と頼まれ → 快く貸す
  • 2回目:
    「金貸してくれ」と頼まれ → しぶしぶ貸す
  • 3回目:
    「金貸してくれ」と頼まれ → もう貸さない

このように、人間は同じ刺激に対していつでも同じリアクションをとるわけではありません。そのときの気分次第でいろいろな行動をとる可能性があります。いい気分のときと機嫌が悪いときとでは、同じ刺激でも対応する反応が違ってきます。

人間の機能を、もっと形式的に表現してみましょう。

刺激は「入力」、リアクションは「出力」、気分は「状態」という言葉で置き換えます。すると、図のように表現できます。

機能に入力が行われると、そのときの状態に応じた出力を行います。同時に、次の状態を生成します。生成された新しい状態は、次回の入力と一緒に使うためにフィードバックされます。

このような、状態の変化を伴う入出力を行う装置のことを状態機械と呼びます(厳密な定義ではありませんが)。また、状態の変化のことを状態遷移と呼びます。

例題として、先程の3回続けて「金貸してくれ」と頼まれるパターンを状態機械で表してみましょう。貸した金を返済してもらった後は、またはじめの状態に戻るということにします。

状態 入力 出力 次の状態
金貸せ いいとも
しかたない
いやだ
2または3 金返す 律儀なやつだ

状態機械はオブジェクト指向特有の概念ではありません。ずっと以前からある基本的な考え方のひとつです。オブジェクト指向では、これをもう一歩発展させて、より扱いやすいものにしています。

(「オブジェクト指向のはなし」は1999年2月から2000年4月にかけて作成されたコンテンツです。)