【初心者Unity】C#入門
C#とは
C#はプログラミング言語の1つで、Microsoft社によって開発されました。Microsoft社が開発したということもあり、Windowsとの相性が抜群に良いプログラミング言語です。その特徴としては、JavaやPythonといった言語と同様に、オブジェクト指向型であるということが挙げられます。
オブジェクト指向型とは
オブジェクトとは一般的に「モノ」のことを指します。オブジェクト指向型における「モノ」とは2つの意味があります。1つ目は実体がある物体です。例えば、ヘリコプター、潜水艦、車といったものです。2つ目は実体がない概念(イベント)です。例えば進む、止まる、曲がるといったものです。オブジェクト指向型ではこれらのモノを実装した設計図を作成し、その設計図から実体化するというプロセスを踏みます。例えば、ある車を実体化するために「色は青」「形はSUV」「全長は5m」、、、といった外装に関する情報や、「進む」「止まる」「曲がる」、、、といった動作を設計図に書き込み、その設計図を基にして車を作るといった感じです。
オブジェクト指向型の特徴
オブジェクト指向型には大きく分けて以下の3つの特徴があります。
- 継承
C#では1つ1つの設計図のことをクラスといいます。そして上の説明のように、設計図から実体を作り出すことをインスタンス化といい、作り出された実体のことをインスタンスといいます。例えば、車の設計図がクラス。その設計図を基に車を作り出すことをインスタンス化。完成した車がインスタンスとなります。そして、車の設計図には、「色は青」「材質は鉄」「全長は5m」、、、といった外装に関する情報や、「進む」「止まる」「曲がる」、、、といった動作に関する情報が書き込まれています。これらの内、外装に関する情報のことを変数、動作のことをメソッドといいます。つまりクラスは変数とメソッドで構成されているということです。
以上を踏まえたうえで継承について説明します。継承とは、元となる親クラスをコピーし、親クラスの性質を引き継いだ子クラスを作り出すことです。この子クラスを編集することによって、親クラスの性質を土台とし、新たな性質を加えた子クラスを作り出すことができます。例えば、「乗り物」という親クラスをコピーして「ヘリコプター」という子クラスを作り出すことを考えてください。親クラスである「乗り物」は「材質は鉄」という変数と「進む」「止まる」「曲がる」といったメソッドを持ちます。これをコピーすることで、「乗り物」は「材質は鉄」という変数と「進む」「止まる」「曲がる」といったメソッドを持った子クラスが生まれます。この子クラスを編集し、名前を「ヘリコプター」にし、変数に「色は黒」「全長は13m」、、、という情報を付け加え、メソッドに「上昇」「下降」という情報を付け加えることで「ヘリコプター」という子クラスが完成します。
この継承という特徴の良い所は、「ヘリコプター」クラスのみならず「潜水艦」クラスも「車」クラスも、「乗り物」クラスをコピーすることで簡単に作ることができることです。また、「ヘリコプター」「潜水艦」「車」に新たに「バック」というメソッドを追加したくなった時に、親クラスである「乗り物」クラスに「バック」メソッドを追加するだけで子クラスである「ヘリコプター」クラス、「潜水艦」クラス、「車」クラスに「バック」メソッドが追加されるという利点もあります。
- ポリモフィズム
ポリモフィズムは継承と少し似ているところがあります。コピーして、機能を編集するという流れが似ています。ただ、違いとしてはコピーする対象が異なります。継承は「クラス」をコピー・編集していたのに対し、ポリモフィズムは「メソッド」をコピー・編集します。例えば、「進む」メソッドをポリモフィズムして、「少しずつ加速しながら進む」メソッドを作るといった感じです。
- カプセル化
継承、ポリモフィズムの説明では、あるクラス(継承でいうところの「子クラス」)を作成するために基となる他のクラス(継承でいうところの「親クラス」)を利用するということを示唆しました。カプセル化では、それら基となるクラスへのアクセス権限を指定します。「クラスのアクセス権限」と書きましたが、クラスの中にある「変数」「メソッド」にも個別にアクセス権限を設定することができます。例えば、RPGゲームを作成するために、弱めの敵キャラクターとしてゴブリン、ミニデビル、ナーガを作りたいとします。継承を利用すると、「敵モンスター」という親クラスを作成し、その親クラスを継承することで「ゴブリン」クラス、「ミニデビル」クラス、「ナーガ」クラスを作成することができます。ここで1点、これらクラスのHPは同じにしたいという条件を付け加えたとします。すると、他のモンスターが「HP=10」のところ、「ナーガ」のHPを誰かが勝手に「HP=100」に変更してしまうことを防がなければなりません。そこで使われるのがカプセル化となります。親クラスである「敵モンスター」クラスの変数「HP=10」へのアクセス権限を未公開「private」に設定することによって子クラスごとに独自のHPが振られることを防ぐことができます。