Thinkers'Studio
JavaとC言語の自習ツール
オブジェクト指向が有効な場合とは

オブジェクト指向の学習では

 Java など オブジェクト指向 の言語の学習では、勉強のために属性と動作をクラスにまとめている感があります。 実際に、どうしてもオブジェクト指向でないと、実現できないケースはあまりないと思います。

オブジェクト指向が有効なのは

 では、オブジェクト指向が有効な場面は、どんなときでしょう?
 代表的なのは、シミュレーションを行う場合です。

シミュレーションとは

 シミュレーションは、統計的にしか求めることができないような場合に使われます。 さまざまな状況での予測を立てたり、問題を解析したりします。たとえば、道路の渋滞予測や下で例に使う「待ち行列」などです。

たとえば...

 たとえば、レジで列に並んでからサービス終了までの待ち時間の平均を求めるとします。
 客はランダムに到着し、サービスにかかる時間もまちまちです。

もしオブジェクト指向でなければ

 到着時刻は配列にする? サービス時間と併せて構造体にすべきか? それを構造体配列にする?
 それらをセットする関数は、どんな風にすればいい?  ・・・ などと考えていると、ワーッと混乱しそうです。

オブジェクト指向の考え方だと

 ひとりひとりに着目すると、シンプルに考えることができます。
 到着時刻、サービスにかかる時間、いま列の何番目か、待ち時間 ・・・ など、それぞれの人が同じ属性を持っていて、値だけが異なります。 属性の値は、自分の他の属性値によって変わったり、他の人の属性によっても変わります。ある一定の条件で妥当な値にするための手続きが必要となります。 手続きも、この属性を変えるにはこの動作、という風に考えればシンプルです。

 このように、求めたいものに応じて属性やそれに対する動作を決めれば、型紙(テンプレート)ができます。

型紙としてクラスを用意
 このような作業は、「モデル化」と呼ばれます。

 客がひとり並ぶことは、その型紙で作ったオブジェクトをひとつ用意することになります。
オブジェクトを作成
 シミュレーションする状況に合わせてオブジェクトの数や属性を調整し、ある条件下で全オブジェクトの整合性を保つことで、それらの属性値を予想や解析に使うことができます。 ひとつひとつのオブジェクトは閉じた世界ですから、コントロールがしやすく、条件を変えるのも比較的容易です。 オブジェクト指向の考え方を使わない場合と比べると、設計もコーディングも楽にできます。