タイトル(OO-Style)
タイトル(オブジェクト指向りゅう)

オブジェクト指向とは prev<<>>next オブジェクト指向の概念

オブジェクト指向の基本要素

一般的にいわれているオブジェクト指向の重要な要素は「カプセル化」、「継承」、「多態性」の3つかと思います。 確かにオブジェクト指向について議論をする上でこの3つはとても重要な要素です。
しかし、オブジェクト指向を紐解いて理解していくことを考えると、この要素が3つ横に並べて考えるのはちょっと意味合いが違います。 なぜなら、カプセル化の発想はオブジェクト指向以前からありましたし、多態性は継承の機能を使った結果の現象だからです。

ここではちょっと違った見方で私が(勝手に)思う、オブジェクト指向の大切な要素を整理したいと思います。■が大切な要素です。
(プログラミングからオブジェクト指向を理解する方はこちらの方がわかりが早いはずです)

  要素 ポイント
オブジェクト指向による新しい要素  ■クラス クラスとインスタンスの違いを理解する
 ■継承
  継承から現れる新しい要素
   ■a)上位クラス型へのインスタンス代入
   ■b)メソッドのオーバーライド
    a, b により実現する動作 ⇒ ■多態性(ポリモーフィズム)
a, b は重要!
多態性は a と b から起こる現象の名前
オブジェクト指向以前からあった要素  ■カプセル化
クラス設計時にカプセル化を必ず行う

まず、オブジェクト指向により登場する新しい要素は大きく「クラス」、「継承」の2つです。
全てを「クラス」という枠組みで考え、それを組み合わせていくことでシステムを構成していく、オブジェクト指向の基本構成です。 クラスとインスタンスの違いがしっかりとイメージできるようになると、いいクラス設計ができます。

継承ですが、「継承元クラス+α」という形で、機能を拡張することができます。このあたりの話はよく主張されるところではありますが、 「継承」からの現れる新しい要素として、「上位クラスへのインスタンス代入(代入互換)」,「メソッドのオーバーライド」があります。 この2つがミソです。これがわかれば多態性(ポリモーフィズム)の動作はなんということはありません。

最後に「カプセル化」ですが、決して新しい要素ではありません。今まででいう「スコープをできるだけ小さい範囲に・・」というものにオブジェクト指向風に名前をつけただけです。 ただ、クラスを作成する上でこの発想を実施すると、クラスという部品を作った際に、本当に現実世界の部品のような感覚で使えるものができます。 隠蔽が強力に行うことが可能です。必要最小限のものだけ外部に公開するという姿勢でクラス設計を行うようにします。ただの処理の集合ではないですから。

多態性の動作が理解できれば、ひとまずオブジェクト指向の動作内容の基本は理解できたと思ってもらっていいと思います。(ここから一気におもしろくなる?) そこからは、それらをシステムにどう生かすか?という本格的なクラス設計などに入っていきます。