C#|オブジェクト指向|方法|多態性|カプセル化|継承

オブジェクト指向って聞いたことがあるけど、実際にどう考えたら良いかわかりますか?
私も最初は、どのように実装したら良いのかわかりませんでした。
また、なぜオブジェクト指向が良いのかわからずなんとなく理解しているつもりでいました。
でも、実際のコードを見ることで使い方や、なぜオブジェクト指向が良いのか理解できました。
「オブジェクト指向」についてわかりやすく説明していきます。
オブジェクト指向は、現在主流となっているソフトウエア開発技法に用いられる考え方です。
「ソフトウエアをオブジェクトの集まりとして構成し、それらのオブジェクトがメッセージによって
協力し合ってプログラムを動かす」という考え方をオブジェクト指向と呼びます。
もくじ
オブジェクトとは?

そもそも、オブジェクトとは何かわかりますか?
これが分からないと、オブジェクト指向は始まらないと思います。
オブジェクトとは、人が認識できる具体的な物事は何でもオブジェクトです。
物理的な「モノ」と概念的な「こと」がオブジェクトになります。
そして、同じ種類のオブジェクトをまとめて抽象化したものが「クラス」です。
では、「オブジェクト指向言語とは」なんでしょうか。
オブジェクト指向言語とは

オブジェクト指向言語とは、「クラス」や「継承」が記述できるJavaやC++、C#などのプログラミング言語のことです。
従来主流であった手続き型言語に比べて
- 「変更に強い」
- 「再利用し易い」
- 「拡張しやすい」
などの優れた特徴を持つプログラムを作成することがきます。
では、「手続き型言語」と「オブジェクト指向言語」は何が違うのでしょうか?
手続き型言語

従来の手続き型言語(C言語など)は、「手続き」と「データ」が別々で管理されています。
そのため、「データ2」を変更しようとするとそれを参照している所(「手続きB」、「手続きC」)にも影響があります。
データを変更するのに、関係ない手続きにも影響があり変更箇所の特定が難しく、「抜け」や「漏れ」の原因にもなります。
このような問題を解決するために、「オブジェクト指向言語」があります。
オブジェクト指向言語

オブジェクト指向言語は、手続き型言語と違い「データ」と「手続き」がひとつのクラスとしてまとまっています。
「データ」を変更しても、そのクラス内の「手続き」にしか影響がないので
影響範囲が容易に特定でき「変更に強い」、「拡張しやすい」プログラムを作成することができます。
プログラムは変更されることが多いため、影響範囲が特定することで
プログラムの変更を容易にすることができるようになります。
続いて、オブジェクト指向で重要な「カプセル化」について説明します。
カプセル化

まず最初に関連する一組の「データ」と「手続き」をクラスとして定義します。
そして、このクラスの「データ」に外部からアクセスするには、
「手続き」を呼び出してアクセス するようにします。
これをカプセル化と呼びます。
オブジェクト指向言語を使う上で、簡単であるが非常に重要なことです。
これをすることで、 「変更に強い」、「拡張しやすい」 プログラムにすることができます。
「データ」を外部に直接アクセスさせないため、「データ」の扱い方はこのクラスだけに知識が集約されることができます。
そうすることで、重複した「手続き」がいたるところに実装されるようなことがなくなり、変更しやすいコードになります。
継承

継承は、すでにあるクラスを拡張して新しいクラスを作成することができます。
既存のクラスが持っている「手続き」を全て内包できるので、機能拡張が容易に行うことができます。
多態性(ポリモフィズム)

多態性はひとつの面積()を求めることだけをユーザー(画面)が意識して呼び出します。
「長方形」と「三角形」と同じ使い方で異なる意味を持たせることができます。
画面は、面積を求める手続きを呼び出すということだけを知っていて、
そのオブジェクトが長方形か三角形かを意識しないで使います。
以下に実装イメージを示します。
//手続き型の例
if(図形種別==長方形){
return 長方形Obj.面積();
} else if(図形種別==三角形){
return 三角形Obj.面積();
}//多態性の例
obj.面積();多態性は同じ処理でもユーザー(画面)は、オブジェクトが何か(長方形か三角形)は意識して使わなくも良いのです。
コードがシンプルになり、実装が楽になります。
このように実装することで、 「拡張しやすい」 プログラムにすることができます。
新しい図形が増えたときにも、画面には影響なく機能拡張することができます。
インターフェイス

インターフェイスは、ほぼ多態性と同じです。
多態性で説明した図形の面積()が、インターフェイスにあたります。
ユーザーが使用するときに接している部分を指しています。
多態性とほぼ同じという理解でよいのですが、
多態性を持たせたときに「データ」を持たせないで「手続き」だけを登録する使い方を「インターフェイス」と呼びます。

まとめ
オブジェクト指向で重要なことは、
- 「変更に強い」
- 「再利用し易い」
- 「拡張しやすい」
プログラムにすることです。
これを実現するために、「カプセル化」、「継承」、「多態性」、「インターフェイス」を意識して設計、実装する必要があります。
そうすることでオブジェクト指向脳となり、保守性の良いコードが完成します。
おすすめの講座
私がオブジェクト指向を勉強するときに利用した教材をご紹介します。
- Udemyの講座(動画)
- 書籍
Udemyの講座(動画)
Udemyの「C#でオブジェクト指向をする方法」講座です。
動画で1.5時間の内容です。
超入門レベルですので、はじめてオブジェクト指向を理解するときにおすすめの講座です。
一度理解してしまうと、その後はオブジェクト指向を意識した設計、実装でないと気持ち悪くなります。
私も何度も挫折しましたが、この講座で完全に理解できました。
一度身に着けてしまえば、今後の仕事に活用できるので早めに理解することをお勧めします。
興味がある方は、こちら「【超入門】C#でオブジェクト指向する方法」もご覧ください
書籍
「ゼロからわかる オブジェクト指向超入門」です。

言語はJaveをベースになっていますが、概念的なことが中心に説明されています。
Javeは私も実際にほとんど知識はなかったですが、気になるようなことがなく理解できました。
絵が多く、初心の人でも読みやすい内容になっています。
入門にはちょうどよい感じになっています。


