土居です。1年ぶりの風呂…なのは怠惰ゆえですが。
今回はまじめです。が、小難しい話になってます。オブジェクト指向って何?という人は今回は縁がなかったということで、またの機会に。
オブジェクト指向については、どうたらこうたらと80年代後半くらいからもう10年以上もやってきているらしいのですが、今になってもその理解の仕方には個人差があったり、どうもきちっとしてないような印象を受けます。
といってもオブジェクト指向という概念は分析とか設計とかプログラミング言語とかにまで及んでいますし、一口にオブジェクト指向といっても様々な方法論が提唱されているわけですから、普及レベルでの見解が一致するなんてことは無理な話なのかもしれません。
しかしです、様々な方法論は出ていますが、それらは”オブジェクト指向の”方法論という点では共通しています。
つまり、オブジェクトという概念を中心に据えるという点では一致しているわけです。
(といってもちゃんと調べたわけではないのですが…お察しください。)
では何故オブジェクトなのでしょうか?物事をオブジェクトとして扱う利点はなんでしょう?
「データと振る舞いを一まとめにし、物事を自然に表現できる」からでしょうか?確かにそうかもしれません。
しかし、メソッドだけのオブジェクトやデータだけのオブジェクトもあり得ます。
これらをオブジェクトとして扱う利点は何でしょう。
プログラミング言語レベルではオブジェクトを変数として扱うことで、生成したり受け渡ししたりできるようにしています。これは間違いなくオブジェクト化によって実現された利点でしょう。
また、そもそも「オブジェクト」という言葉には「対象」という意味があります。
このことから、「対象として操作可能である」ということがオブジェクト化の本質であると考えられないでしょうか。
オブジェクトに対する基本的な操作としては「生成」「交換」「破棄」が考えられます。さらに「生成」「破棄」を「”無”との交換」と考えれば「交換」がオブジェクトの特性ということになるでしょう。
C++のSTLで、コンテナに対してアルゴリズムが付け替え可能になっている、というのは交換の利点のいい例でしょう。
こう考えると、オブジェクトにとって何が重要かが自ずと見えてきそうです。
- 使用者側への交換による影響を小さくする。できれば0にする。
→必要な情報のカプセル化。相互に交換可能なオブジェクト間での統一されたインターフェースの提供。 - 使用者の求める機能を提供することを保証する。交換可能であることの明示。
…自ずと、ではなかったかもしれませんが、結構しっくりくる考え方ではないでしょうか。
これも考え方の一つに過ぎないかもしれませんが、こんな感じでオブジェクト指向の根っこを押さえることで、様々な方法論や言語を一貫した視点から理解できるようになれば、いいと思います。
…いや、まあ、理屈こねるだけなら誰にでもできるんでしょうけどね……精進します。