オブジェクト指向とは
- オブジェクトという概念で処理対象を捉え、これをモジュール化していくことで全体を構成するやり方
- モジュールの独立性が高く、保守しやすいプログラムを作ることができる。
オブジェクト指向とは、クラスを使って抽象化すること
です。
オブジェクト指向の三原則
継承
同じようなプログラムを1か所にまとめてコードを再利用しやすくする
仕組み
似たようなオブジェクトを複数作る時に、全てのプロパティやメソッドをいちいちプログラミングするのは非常に手間が掛かりますが、継承を使うことにより、同じ機能を実装
できます。
ゲーム作成に例えると、「車」に「トラック」も追加しようとした場合。基本操作は同じため追加も簡単にできるのです。
差分プログラミング
継承している上で不足している部分だけプログラミングを行う手法。
出典 https://gihyo.jp/book/2022/978-4-297-12375-8
カプセル化
他のプログラムからできるだけ変更できない
仕組み
オブジェクトが持つデータや処理のうち、別のオブジェクトから直接利用される必要のないものを隠す
ことを言い、利用する場合は外部から操作するために作られた処理を設ける
ことを言います。
プログラムが壊れにくくなると共に、大人数で開発をするときすべてのコードを認識
する必要がなくなります。
ポリモーフィズム
継承したコードの一部を変更して利用するための仕組み
クラスによって同一のメソッドで異なる処理が行える
という性質をいいます。
世の中の家電は説明書を見なくてもだいたい使い方がわかりますよね。
車においてもアクセルが右というふうに決まっています。
プログラムも同じ処理の名前で動いてくれると、処理名を覚える必要もないし、ミスも減らすことが出来るのです。
出典 https://robo-done.com/blog/2021/04/doneship_object_oriented/#:~:text=%E3%80%8C%E3%81%82%E3%82%8B%E5%BD%B9%E5%89%B2%E3%82%92%E6%8C%81%E3%81%A3%E3%81%9F,%E3%82%92%E6%84%8F%E5%91%B3%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%80%82
オブジェクト指向の「カプセル化」とは
データやメソッドという複数の要素たちをまとめたもの
。
ひとまとめの構造にカプセル化
されることで、オブジェクト内部の構造は、外部から知ることができなくなる
。
知るべき情報以外は知らなくて良い
と隠すことができる。
これを情報隠蔽
というカプセル化の利点。
オブジェクトの実装方法に修正を加えても、その影響を最小限にとどめる。
クラスとインスタンス
クラス
オブジェクトが持つ性質を定義したもの
インスタンス
属性値を与え、メモリ上に生成して実体化させたもの
クラスには階層構造がある
クラスの考え方の基本は、「オブジェクトを抽象化して定義する」こと。
抽象化とは?
- 「抽象的な概念を理解する」とは、物事を「大きな視点で
俯瞰(ふかん)的に捉えられる
」ことです。また、大きな視点で俯瞰的
に捉えることによって、「全体の構造を把握
する」 - 細かなことは取りあえず脇に置いておいて、「
特徴を理解しやすくする
」感じです。 -
物事の目的や意味、本質
を捉えられる。
階層構造の特徴
p589の図を見る。
下位クラスは上位クラスのデータやメソッドなどの構造を受け継ぐことができる。
継承
このようにサブクラスがスーパークラスの特性を受け継ぐ
こと
スーパークラス(基底クラス)
オブジェクト指向においてクラスの親子関係が成り立つ場合の親側
のクラスのこと
出典 https://www.sophia-it.com/content/%E3%82%B9%E3%83%BC%E3%83%91%E3%83%BC%E3%82%AF%E3%83%A9%E3%82%B9
サブクラス(派生クラス)
オブジェクト指向において、クラスの親子関係が成り立つ場合の子側
のクラスのこと
出典 https://www.sophia-it.com/content/%E6%B4%BE%E7%94%9F%E3%82%AF%E3%83%A9%E3%82%B9
汎化と特化(is a関係)
スーパークラスとサブクラスの関係で成り立つ。
汎化
下位のクラスが持つ共通の性質を、抽出
して上位クラスとして定義する
気づき
抽象的にするのか。
特化
抽象的な上位クラスを、より具体的
なクラスとして定義する。
気づき
具体的にするのか。
集約と分解(part of関係)
継承関係のない上位クラスと下位クラスの関係で成り立つ。
分解
下位クラスは上位クラスの性質を分解
して定義したもの。
- あるオブジェクトを構成するオブジェクトへ展開すること
気づき
グループの中の一つなのか。
集約
上位クラスは複数の下位クラスを集約
して定義したもの。
- 構成オブジェクトを一つのオブジェクトにまとめること
気づき
グループのように想像するのか。
多様性(ポリモーフィズム)
同じメッセージを複数のオブジェクトに送ると、それぞれが独立した固有の処理
を行う。
出典