オブジェクト指向
オブジェクトとは簡単に言えば「モノ」「物体」。
世の中にある多くのものは、「モノ」というまとまりで、世界から切り出すことができる。
例えば、メーカーはトヨタ、色は白、タイヤが4つある、エンジンがある、アクセルを踏むと走る、ブレーキを踏むと止まる
という個別の情報を、一つの言葉で表すと「車」と表すことができる。
単に「車」というモノの名前の中には、実際には多くの情報が詰まっている。
プログラミングの世界でも、現実世界のように「モノ」という概念を取りいれようと考え出されたものが「オブジェクト指向プログラミング」である。
実世界であれば、車はそのボディで周りのモノから区別され、容易にひとつのモノとして認識することができる。
しかし、プログラムのコードは文字の羅列なので、それらを文字であらわす必要がある。
そのためにクラスというものを使う。
まとめ★実世界で当たり前のように使っているモノという概念をプログラミングで使おうというのがオブジェクト指向。
クラスとその構成要素
クラスは、「オブジェクトの設計図」や「鋳型」であるとよく例えられる。
鋳型だと、全く同じものを作るための型のようなイメージもあるので若干違うかもしれない。
クラスとはオブジェクトの定義を記したものである。
オブジェクトは、「データ」と「振る舞い」で構成される。
車で言えば、車種や色は「データ」、走るや止まるは「振る舞い」に分類できる。
ゲームのキャラクターなら、名前やHPは「データ」、攻撃や逃げるは「振る舞い」となる。
クラスはオブジェクトの定義を記したものだから、クラスも「データ」と「振る舞い」で構成される。
クラスが持つデータを「フィールド」
振る舞いを「メソッド」という。
まとめ★クラスは「フィールド」と「メソッド」を持っている。
クラスの実体化
クラスは定義であり、設計図のようなものと言われるように、クラスそのものはオブジェクトとして使用できない。
実際にコード中で使用するときには「実体化」することで「個別のオブジェクト」として使用できるようになる。
クラスのフィールドには基本的に項目名のみが定義されており、その具体的な値は実体化するときに与えられる。
[フィールド]
車種
色
型式
価格
↑実体化時に(ベンツ,黒,AB-12345,8000000)を設定
クラスを元にたくさんの個別のオブジェクトを生成できるため、例えば車というクラスからは多数の異なる車種等の車オブジェクトを生成できる。
まとめ★クラスを実体化することで、個別のオブジェクトとして使用できる。
カプセル化
モノはカプセル化されている。
スマホというモノは、金属やプラスチックの殻でおおわれていて中身は見えない。
中身が見えていたら、簡単に壊してしまうだろう。
スマホの持つ電話番号という情報も、知ろうとしない限り知ることはできないし、勝手に書き換えることもできない。
プログラムの世界でも簡単に壊したり、データを書き換えたりできないように「カプセル化」が取り入れられている。
基本的にオブジェクトの中身はカプセル化により隠蔽されている。
オブジェクトの持つデータを読み書きしたり、振る舞い(機能)を使うには、決まった手続きが必要になる。
まとめ★カプセル化により、システムが破壊されるのを防いでいる。
プロパティ
カプセル化されたオブジェクト内のデータにアクセス(読み書き)するには、プロパティという機能を使う。
プロパティというワンクッションを介すことで、知らずにオブジェクトの内容を書き換えてしまったり、変なデータを入れて壊してしまうことを防ぐことができる。
フィールドは非公開にしてカプセル化し、プロパティを介してフィールドにアクセスするのが普通である。
まとめ★プロパティを使えば、カプセル化を実現させながら安全にデータにアクセスできる。