オブジェクト指向

オブジェクト指向プログラミング( OOP:Object Oriented Programing )

手続き型プログラミング:

  今までのプログラミング方針のように、「データ+関数+アルゴリズム」でデータをどのように処理するかを順次書いていく手法
  データを型やデータ構造で表し、関数でデータを処理する。

オブジェクト指向プログラミング:

  問題に登場するモノや現象などを、抽象的に「属性と機能」を持ったオブジェクトとしてモデル化し、その登場人物やモノのの振る舞いを記述していく手法
  問題に登場するモノをメンバ変数とメンバ関数によるクラスで表し、クラス同士の振舞の相互作用(メンバ変数による機能の呼び出し)で処理していく

オブジェクト指向の三大要素

  1. カプセル化:(encapsulation:余計なものを見せないように隠蔽し、安全に機能を使わせる機構)
  2. 継承:(inheritance:クラスの機能を引き継ぎ、昨日を使いしたりした拡張されたクラスを作り出す機構(インヘリタンス))
  3. 多態性(多相性):(polymorphism:同じ機能を呼び出したときに、クラスの作りによって別の機能が呼び出される機構(ポリモーフィズム))

継承

カプセル化については、結構たくさん説明してきたから大丈夫だよね?と思います。
ここでは、継承にいて説明します。
まず、用語の整理。

クラスとオブジェクト

クラスは、オブジェクトの設計図です。
クラス(設計図)を実体化(インスタンス化)したものがオブジェクトになります。C++ではクラスのインスタンス=オブジェクトだと思って良いと思います。
(広い意味で、学術的な説明をするとちょっと変わってくるんだけど、みんながC++を使う分にはそう思ってて問題ないと思います)

  クラス    => インスタンス(=オブジェクト)
哺乳類クラス => 犬
哺乳類クラス => 猫
哺乳類クラス => 狸