1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-08-28

オブジェクト指向とは

  • オブジェクトという概念で処理対象を捉え、これをモジュール化していくことで全体を構成するやり方
  • モジュールの独立性が高く、保守しやすいプログラムを作ることができる。

オブジェクト指向とは、クラスを使って抽象化することです。

オブジェクト指向の三原則

継承

同じようなプログラムを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関係)

継承関係のない上位クラスと下位クラスの関係で成り立つ。

分解

下位クラスは上位クラスの性質を分解して定義したもの。

  • あるオブジェクトを構成するオブジェクトへ展開すること

気づき

グループの中の一つなのか。

集約

上位クラスは複数の下位クラスを集約して定義したもの。

  • 構成オブジェクトを一つのオブジェクトにまとめること

気づき

グループのように想像するのか。

多様性(ポリモーフィズム)

同じメッセージを複数のオブジェクトに送ると、それぞれが独立した固有の処理を行う。

出典

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?