前回「現実世界のモノの関係性をオブジェクト指向的に置き換える」という練習方法について少し述べました。では実際に現実世界を例にして、具体的に説明していきましょう。
まずオブジェクト指向においては、オブジェクト同士がメッセージを交換しあい、それぞれ独立した振る舞いをします。どういうことか詳しくみてみましょう。
#オブジェクト指向は現実世界の出来事をそのまま描ける
まず学校のクラスに「太郎君」と「花子さん」の2人がいるとします。太郎君は花子さんのことが好きですが、花子さんは太郎君のことを別に好きでも嫌いでもありません。太郎君は花子さんにまだ自分の気持ちを伝えていないので、お互いの関係はただのクラスメイトです。2人の関係はそれ以上でも以下でもありません。これをオブジェクト指向的に図示してみましょう。
これは男女の恋愛を描いたもので、恋愛をモデリングしていると考えて下さい。オブジェクト指向の設計は現実世界のモノ(オブジェクト)を、一定のルールでモデリングすることから始まります。
左側が太郎くん、右側が花子さんです。太郎君と花子さんの2人を、それぞれ単体のオブジェクトとします。
まず2人が挨拶を交わしています。この「挨拶をする」といった動詞で表せる部分が、オブジェクトの「振る舞い」や「機能」にあたり、これらを「メソッド」と呼びます。非オブジェクト指向言語ではメンバ関数(または関数)と呼ばれることもあります。
次に下部ハート枠内を見てみましょう。太郎君は花子さんのことが好きなので、相手への好感度が100という数値となって表示されています。これをプロパティ値とか単にプロパティなどと呼びます。オブジェクトの「所有」や「特性」などを表す言葉ですが、この例では太郎君が花子さんのことを「好きだ」という気持ちを数値化して表しています。
このようにオブジェクトは、機能としてのメソッド、特性としてのプロパティ、2種類の性質を持つことを理解して下さい。ちなみに、太郎くんには彼女がいません。花子さんにも彼氏がいません。こういったオブジェクトの「状態」を表すものもプロパティと呼べるでしょう。我々の身の回りにあるオブジェクトは、複数のメソッドとプロパティによって構成されています。
カプセル化
さて、この好感度プロパティ値ですが、50以上になったら友達、70以上になったら友達以上彼氏未満、100以上になった状態で告白したら彼氏彼女になると仮定しましょう。現時点で花子さんの太郎君に対する好感度は20ですので、花子さんは太郎くんのことを「ただのクラスメイト」くらいに思っています。では、太郎くんの視点で考えてみましょう。
花子さんは自分(太郎)のことが好きでしょうか?
太郎君の視点からは花子さんの好感度は見えません。花子さんの気持ちは外部(ここでは太郎くんの視点)からは、隠されています。
太郎君は花子さんの自分に対する好感度が20であることを知りません。また太郎君は花子さんのプロパティ値を100になるよう操作することもできません。太郎君は花子さんのプロパティ値を参照したり、直接的に変更することができないのです。オブジェクトのプロパティは互いに独立し、外部からの参照や変更などの干渉を直接的に受けないということです。
このように、外から中身の値を操作できない状態を「カプセル化」と呼びます。カプセル化とは、オブジェクトの中身を外部から隠蔽することにより、オブジェクト同士が干渉しておかしな動作を起こさぬよう、バランスを保つための考え方です。
花子さんの好感度を上げるためにはどうするか
太郎君は「花子さんと彼氏彼女の関係になりたい」と考えています。そのためには花子さんのハートの数値を100以上にする必要があります。具体的には「毎日挨拶する」とか「面白い話をする」とか、なんらかのメソッドを実行して花子さんの気を引かねばなりません。
対して花子さんは、太郎くんのメソッドの結果を受け、花子さん自身のメソッドで太郎くんへの好感度を上げるかどうか判断します。太郎くんのメソッドを好ましくないと判断すれば、上がるどころか逆に好感度が下がることも考えられるでしょう。
このように、お互いのオブジェクトにはそれぞれが感応し合うメソッドがあり、それらのメソッドが干渉し合うことで、オブジェクトそのもののプロパティ値が変化し、その後さらにプログラム上で様々な処理が展開されるのです。
オブジェクト指向の設計においてオブジェクトの振る舞いや特性について考えた時、まるで物語の脚本を描いて舞台演出を考えるかのような側面があります。オブジェクト同士がメッセージを交換しあい、それぞれ独立した振る舞いをした結果、徐々にプロパティ値が変化し、今後の物語が展開してゆくのです。
まとめ
メソッド…オブジェクトの振る舞い
プロパティ…オブジェクトの特性
カプセル化…オブジェクトのプロパティ値が外部から操作・干渉できない状態
次は多態性について学んでいきます。それではまた次回お会いしましょう。
NEXT→オブジェクト指向を説明しよう(第4回/全5回)ポルモルフィズム(多態性)とは
BACK→オブジェクト指向を説明しよう(第2回/全5回)学習前に、まず知っておくべき注意点