> For the complete documentation index, see [llms.txt](https://kurohasu.gitbook.io/fsharpabout/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kurohasu.gitbook.io/fsharpabout/objects/basic.md).

# 基礎

### そもそもオブジェクト指向とは？

オブジェクト指向では手続き（メソッド・関数）や使用する変数を一つのオブジェクトにまとめ、その中にある機能を呼び出して1つのプログラムを作る考え方です\
「段ボール(=クラス)に入ってる荷物(=処理)を取り出す」と考えると分かりやすいかもしれません\
また、オブジェクト指向ではクラスを定義するだけでなく、実体化した「インスタンス」を生成しないとプログラムを呼び出せません

<figure><img src="/files/64YsBsv5nXhEgOhIDf0P" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/OxxaQhgFySS0VdVNy58j" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/1X6BJpWUm3K7JlhOFurV" alt=""><figcaption></figcaption></figure>

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

#### １，カプセル化

カプセル化とは、内部の処理や手続きを外部から隠蔽するという特性です\
これにより別オブジェクトからの介入によって変数・処理が変更されることを防ぎます\
F#ではC#と同様に「public」「private」キーワードがサポートされています(詳しくは[アクセス制御](/fsharpabout/seprate/access.md)へ)

#### ２，抽象化

抽象化とは、その名の通りインターフェースをシンプルにし様々なオブジェクトで使用できる特性です\
カプセル化に近い考え方でこちらもオブジェクト外の影響を受けません\
F#では引数と戻り値の型を指定し、継承先でプログラムを実装するスタイルとなっております\
(詳しくは[抽象クラスとインターフェース](/fsharpabout/objects/abstract-interface.md)へ)

#### ３，ポリモーフィズム（多様性）

ポリモーフィズムとは、呼び出された処理がオブジェクトによって異なる動作を行える特性です\
親クラスの処理を受け継ぐ「継承(インヘリタンス)」\
親クラスの処理を再定義する「[オーバーライド](/fsharpabout/objects/inherit.md)」\
同じ処理名で異なる動作を定義する「[オーバーロード](/fsharpabout/objects/ride-load.md)」の\
3種類があります

#### ４，インヘリタンス（継承）

インヘリタンスとは、子クラスとして親クラスの処理を行えるという特性です\
継承によって受け継ぎたい処理を再定義する必要が無くなるのでコード記述量を減らせます\
(詳しくは[オブジェクトの継承](/fsharpabout/objects/inherit.md)へ)

さっそくF#のオブジェクトを見ていきましょう
