インスタンス指向

以前に比べれば最近はかなり少なくなりましたが、それでもプログラムがオブジェクト指向にならないといった悩みを聞くことがよくあります。
その場合にお勧めしているのがインスタンス指向の発想です。
ソフトウェアを機能の実現と考えていると、クラス設計をしていてもそこに記述する機能(メソッド)やデータ(変数)に意識が行ってしまってどうしてもプログラムが手続き型っぽくなりがちです。
インスタンス指向ではあくまでもインスタンスインスタンス間の相互関係に着目してクラスを設計します。
具体的にはインスタンスになりそうなものを列挙してその相互関係により機能を実現するといった発想でインスタンスの責任や振る舞いを考えてクラスのインターフェイスを決めてゆきます。
UMLでのモデリングで言えば、クラス図で考えるのではなくてインスタンスの相互関係を表現するシーケンス図やコラボレーション図を用いて登場するオブジェクト間のメッセージを考えながらクラスを設計する方法が考えられます。
またこの考え方のメリットとして、オブジェクトのライフサイクルや情報のスコープが自然に適切に決まってくるということがあります。
クラス指向の発想ではこのライフサイクルやスコープを考えることが後回しになってしまって難しくなってしまうことがあると思います。
私はソフトウェアの構造的な問題は機能分割の問題より情報のライフサイクルやスコープの問題の方が大きいと思っています。
なのでこのメリットは非常に大きいと思います。


補足ですが、この考え方は日本人が得意とする擬人化による指向と良くマッチすると思います。
インスタンスを擬人化してそれれぞれに名前をつけて責任を割り当て、具体的な状況を設定してそれぞれの役割と連携を考える。
いかがでしょうか?