オブジェクト指向ってなんだろう?

C#やJavaの入門を調べると
プログラムを「モノ(オブジェクト)」の集合として捉え、それらを組み合わせてシステムを構築する考え方とか
関連するデータを集めて「モノ(オブジェクト)」として捉え、それらを組み合わせてシステムを構築する考え方など
という説明が多いと思います。
そのうえでそれを成立させるために3つの仕組み
・カプセル化
・継承
・ポリモーフィズム
が必要という説明が多いかと思います。
これはこれで正しいとは思いますが、
もう一つのオブジェクト指向の考え方も実はあるのです。
それは、オブジェクト指向は
・メッセージング
・遅延束縛
・状態処理の隠蔽
という3つの要素から成り立つという考え方です。

メッセージングとは、
オブジェクトが別オブジェクトにメッセージを送り、
メッセージを受け取ったオブジェクトはそれに応じて何かを行うという考えです。
実際の送るメッセージには意味はなく、受け取った側のオブジェクトがそれに意味合いをつけて何かをする形になります。

遅延束縛とは、
その送るメッセージの意味合いを出来だけ後に決めようという考えです。
意味をつけて何かをするのは受け取る側なので受け取る側の振る舞いを
これは、上記のポリモーフィズムに近い考え方ですね。

状態処理の隠蔽とは、
オブジェクトの状態(変数やオブジェクトそのものの状態)は隠蔽し、その変化(変更)も隠蔽しよう。
という考え方です。

総じて、全体的にオブジェクトはメッセージをもって活動し、そのやり取りはメッセージで行うべきであるという指向になります。

オブジェクト指向は、1970年代から始まった、それなりに長い歴史を持つ考え方です。
その長い歴史を経て別の方法でこのオブジェクト指向を捉えた方もいますし、これからも色々と作られていくでしょう。
今一度、オブジェクト指向について考えてみる一助になればと思います。

 

技術情報

前の記事

EDTCDEについて