@634

オブジェクト指向 - カプセル化

Advertisement

カプセル化とは

オブジェクトは属性と操作を持っている。このまとまりをカプセル化という。

オブジェクトという枠の中に属性と操作がひとまとめになっている様がまるでカプセルに似ているためである。
カプセル化のイメージ
図1:カプセル化のイメージ

グループ化

通常カプセル化を行う際には、いろいろな属性・操作をごちゃまぜにしてカプセル化を行うのではなく分類を行う。この分類の単位は厳密に言えば「責務」である(参考)が、「物」や「概念」を意識して分類を行えばよいだろう。

例をあげてみる。テレビを表すオブジェクトと冷蔵庫を表すオブジェクトを定義する場合を考えてみる。ここで、全てをひとまとめにカプセル化を行うと、ひとつのオブジェクトの中に「チャンネル」「音量」など、テレビに関する属性と、「温度」のような冷蔵庫に関する属性が存在することになる。「チャンネルを変更する」や「温度を変更する」などの操作に関しても同じ事が言える。
ごちゃまぜカプセル
図2:ごちゃまぜカプセル

さて、上記の例では何が問題なのだろうか。一番の問題点は「理解が困難」なことだろう。表現するものが2つだけで、かつ説明のために属性や操作を省略しているにも関わらず、すでに何を表すオブジェクトなのか、わかりにくくなってしまっている。概念を持たずにオブジェクトだけを見たときに「温度と音量を持っていて、テレビの電源を入れたり温度調整を行ったりする」ということがわかるが、一体何を表しているオブジェクトなのか、想像することができない。
規模が大きい概念をオブジェクトとして表す場合に、上記のようにごちゃまぜカプセル化を行ってしまったら、恐ろしいものが出来上がるだろう。

では、このわかりにくさを解決するために、複数のものをひとまとめにせず、テレビ・冷蔵庫共に別々のオブジェクトとして、カプセル化を行ってみる。
分類後のカプセル
図3:分類結果

分類を行っている図3は分類を行っていない図2と比べて、わかりやすさが格段に増している。操作を表す名称に、物を表す名詞を付加する必要がなくなったという事もおおきなポイントだろう。
例「テレビの電源を入れる」→「電源を入れる」
これは、「テレビ」「冷蔵庫」などの物をカプセル自体が表しているので、操作の名称でそれを表す必要がなくなったためである。

カプセル化は必須

オブジェクト指向には以下の定義が成り立つ。
オブジェクト=属性+操作
すなわち、オブジェクトを定義するということは、必ずカプセル化を行うということである。

Advertisement

ショートカット

634
634ブログ
このカテゴリのトップページに戻る
Incubator(Pukiwiki)
634ラボ
   UIコレクションギャラリー
   ZO-3ジェネレーター

サイト検索


Y!ログール

ビリヤード