半人前プログラマーの技術談議

開発したもの紹介していくブログ

C# オブジェクト指向編 クラス インスタンス part2-1

今回はオブジェクト指向について解説します.

 

はじめに

何故,オブジェクト指向を学ぶ必要があるのか.

一言で言えば,プログラムの可読性,拡張性,保守性を上げる為に学ぶ必要があります.

 

オブジェクト指向とは,あるデータの情報(データ)や機能(処理)を,クラスというプログラムの単位にまとめ,そのクラス(のインスタンス)を組み合わせて大きなプログラムを作っていくという考え方.

 

他の人のプログラムを見た時に,プログラムが読みやすければ,解読や修正も比較的短時間でできる.

 

何か機能を追加したい時に,部分的に実装して組み込めば簡単にできる.

(モジュールのように使うことができる.)

 

バグなどの不具合が見つかった時に,クラス単位でバグを探す事ができるので,全体から探すよりも短時間で修正できる.

(原因も見つかりやすい.)

 

 

などなど,メリットしかないです!

では次の項から本題に入ります.

 

 

 

クラス

先ほども,ちらっと説明に出てきましたが,もう一度整理します.

 

クラスとは,

ある情報(データ)や機能(処理)を持ったプログラムのかたまり

です.

 

※ある情報とは,データ型(int型,string型など)で宣言されたデータの事です.

 

 

また,

ある情報をフィールド,

機能をメソッド

と言います.(これらをまとめてメンバと呼ぶこともある.)

 

 

とりあえずは,

変数(定数)とメソッドを持ったかたまり ⇒ クラス

と思って貰ってもいいでしょう.

 

 

クラスの宣言

C#でクラスを記述するときには,次のように書きます.

class クラス名{
    // クラスの内容
}

このように,クラスをプログラムコードに記述することを,

クラスを定義する

または

クラスを宣言する

と言います.

 

 

例えば,このように記述します.

class Car
{
int number; // 番号 string name; // 名前 void Run() // 走行処理 { // 省略 } }

青字がフィールドで,

赤字がメソッドです.

 

 

インスタンス

クラスについては,解説しましたが,

クラスを宣言するだけでは,使うことができません.

 

実は,クラスと言うのは設計図みたいなもので,中身が存在しません.

中身を作る為に,インスタンスを生成するという操作が必要になります.

生成には,newというキーワードを使います.

new クラス名();

 

例えば,このように記述します.

new Car();

 

生成するイメージを図にするとこんな感じです.

f:id:pokoshirou:20181009204606p:plain

 

実際には,このように使う事が多いです.

クラス名 変数名 = new クラス名();

new クラス名() で生成したクラスのインスタンスを変数に代入しています. 

この変数はクラス名の型になるので,代入する事ができます.

 

例えば,このように記述します.

Car car = new Car();

 

Car型のcarにnew Car()で生成したCarクラスのインスタンスが代入されています.

このように,クラスはデータ型(int型,string型など)のように扱えるということです.

 

ちょっとややこしいのでまとめると,

① Car carでCar型の変数 car を宣言する.

② new Car(); でCarクラスのインスタンスを生成する.

③ 変数 car はCar型の変数だから,②で生成したインスタンスをそのまま代入する事ができる.

 

また,このように記述しても同じになります.

Car car;
car = new Car();

 

先ほど,クラスは設計図みたいなものと言いました.

何故ならクラスは,何度でも使う事ができるからです

イメージとしてはこんな感じです.

f:id:pokoshirou:20181009210235p:plain

 

コードで記述すると次のようになります.

Car car = new Car();        // 自動車
Car taxi = new Car();       // タクシー
Car bus = new Car();        // バス
Car fireEngine = new Car(); // 消防車

 

このように,クラスは同じ構造の物を作りたい時に凄く便利です.

 

 

インスタンス変数

最後にインスタンス変数を解説して,今回は終わろうと思います.

 

インスタンス変数は,生成したインスタンスが持つ変数(フィールド)の事を言います.

 

インスタンスを生成しただけでは,中の情報まで操作をしていないので,

フィールドの情報は空のままです.

 

インスタンスを生成した後は,インスタンス変数に値を代入する事ができるようになります.

代入するには,次のように記述します.

変数名.インスタンス変数名 = 値;

 

例えば,このように記述します.

car.number = 1;
car.name = "car";

 

これで生成したインスタンスに情報を与える事ができました!

 

 

最後にソースコードを貼って終わろうと思います

using System;

namespace Training
{
    class Program
    {
        static void Main(string[] args)
        {
            Car car = new Car();        // 自動車
            car.number = 1;
            car.name = "自動車";

            Car taxi = new Car();       // タクシー
            taxi.number = 2;
            taxi.name = "タクシー";

            Car bus = new Car();        // バス
            bus.number = 3;
            bus.name = "バス";

            Car fireEngine = new Car(); // 消防車
            fireEngine.number = 4;
            fireEngine.name = "消防車";

            Console.WriteLine("ID:" + car.number + " 名前:" + car.name);
            Console.WriteLine("ID:" + taxi.number + " 名前:" + taxi.name);
            Console.WriteLine("ID:" + bus.number + " 名前:" + bus.name);
            Console.WriteLine("ID:" + fireEngine.number + " 名前:" + fireEngine.name);
        }
    }

    public class Car
    {
        public int number;      // 番号
        public string name;     // 名前
    }
}

 

Carクラスには,publicという修飾子が付いていますが,後々解説するのでとりあえず今は付けて置いてください.

 

実行結果

f:id:pokoshirou:20181009213309p:plain

 

 

次回は,コンストラクタ,static,インスタンスの配列について解説しようと思います!