オブジェクト指向とはなにか、カプセル化とはなにか

Exceptional C++ Styleの記述に非常に感銘を受けたので引用しておきます。

オブジェクト指向におけるカプセル化の位置づけ
オブジェクト指向による設計とプログラミングにおいて、それはどれくらい重要か?


カプセル化は、オブジェクト指向プログラミングの最重要概念である。以上。

カプセル化はほとんど常にデータ隠蔽を意味する。
・仮想関数における実行時ポリモルフィズムは、基本クラスによって提供されるインターフェースを、(コードが書かれた時点では存在する必要さえない)派生クラスによって提供される実装から完全に分離する。
・テンプレートによるコンパイル時ポリモルフィズムは、インターフェースを実装から完全に分離する。必要な操作を持つクラスは、継承やその他の関係がなくても自由に交換して利用できる。

カプセル化が常にデータ隠蔽を意味するわけではないが、データ隠蔽は常にカプセル化の一種である。
カプセル化が常にポリモルフィズムを意味するわけではないが、ポリモルフィズムは常にカプセル化の一種である。

P.121

Great!

オブジェクト指向はしばしば次のように定義される。


データと、そのデータを操作する関数をひとまとめにした構造。

この定義は、強い凝集度を示しているが、真実の一部に過ぎない。オブジェクト指向における他の重要な要素への記述が不十分だからだ(これだけでは、クラスの論理的な一部である非メンバー関数、例えばoperator<<を除外してしまう)。すなわち、


データを操作する関数のインターフェースにより、そのデータと呼び出し側コードを分離する。


この補足的な定義は、組み合わされた関数の目的が、実体間の結合度を弱めて内部を保護するインターフェースであることを強調している。

簡単に言えば、オブジェクト指向とは、1つの実体の凝集度を強めながら、複数の実体間の結合度を弱めることで、インターフェースを実装から分離することに尽きる。

P.122

素晴らしく簡潔で明瞭。


オブジェクト指向オブジェクト指向、と連呼する人は多いけれど、
明瞭に人に伝えられなければそれは形骸でしかない、ということだと思う。

ぺたり。

Exceptional C++ Style―40のクイズ形式によるプログラム問題と解法=スタイル編 (C++ in‐Depth Series)

Exceptional C++ Style―40のクイズ形式によるプログラム問題と解法=スタイル編 (C++ in‐Depth Series)

  • 作者: ハーブサッター,浜田光之,Herb Sutter,浜田真理
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2006/09
  • メディア: 単行本
  • 購入: 3人 クリック: 27回
  • この商品を含むブログ (28件) を見る