オブジェクト指向について自分の考え方を整理してみた。

基本を押さえなおすと言う目的で自分の中を整理してみました。

オブジェクト指向入門レベルはできている前提の文章です。 入門書レベルの用語の説明はしていません。

オブジェクトとは

オブジェクトは物のみを意味する言葉ではない。 オブジェクトとは物だけでなく、事象や概観、目的も意味する。

オブジェクト指向設計では、 オブジェクトの連携で世界を表現する。

オブジェクトは下記の性質を持つ。

  1. オブジェクトには目的にしたがった能力が与えられる。(インターフェース)
  2. オブジェクトは能力の中の世界を外部にはさらさない。(カプセル化)
  3. オブジェクトは多態性を持ちうる。(ポリモルフィズム)

カプセル化ポリモルフィズムを駆使して、 目的に沿ったシンプルなインターフェースを構築する事が オブジェクト指向プログラミングの結論となる。

インターフェースについて

オブジェクトのインターフェースとは オブジェクトが持つ能力そのものとなる。

インターフェースは多くのオブジェクト指向言語が持つinterfaceのように メソッドやプロパティの定義だけでなく、 オブジェクトの状態遷移などの振る舞いを含む。

カプセル化について

カプセル化との概念については入門書レベルの理解で問題ないと考える。 クラスの内部実装を隠蔽する事で、 インターフェースをシンプルにする事がその目的となる。

多態性と継承について

オブジェクト指向の強力な機能として継承が強くアピールされる。

しかし、実際はオブジェクトの連携で表現した方が柔軟性が高く、 継承を利用して機能を引き継ぐ方が良いケースは特にない。

継承による差分コーディングと言う考え方があるが、 影響範囲を予想できる場合を除いてこのような方法は取るべきではない。 このような構造のプログラムは保守と追加開発を困難にする場合がある。

これらの事から継承は多態性を必要とする場合にのみ利用する。

よいインターフェースを得るのは難しいので むやみに多態性を持たせる事はしない方がよい。 多態性を利用する目的が明確な場合のみ、多態性を利用する。