クラスの定義

クラスとはデータとそれに対する操作をひとまとめに定義したもので、オブジェクト指向プログラミングにおけるオブジェクトの設計書(雛形)にあたるものです。クラスはメンバ変数とそれらを操作するためのメンバ関数を持ち、型として扱うことができます。JAVAのクラスはおおむね次のように定義します。

class クラス名{
    メンバ変数1;
    メンバ変数2;
    ...
    クラス名(引数){                // コンストラクタ
        処理;
    }

    戻り値の型 メソッド名(引数){   // メソッド(関数)
        処理;
        ...
        return 戻り値;
    }
    ...
}

クラスの定義は主にメンバ変数の宣言、コンストラクタの定義、そしてメソッドの定義から構成されています。

コンストラクタとは、インスタンス化のときに自動で呼び出されるメソッドのことです。コンストラクタの名前はクラスの名前と同じでなければなりません。

メソッドとは、ある目的のための一連の命令に名前を付けて、適時呼び出せる(使える)ようにしたものです。 関数とも呼びます。 呼び出し元からデータを受け取り、定められた処理を実行して、必要に応じて結果を返します。

メソッドが受け取るデータを引数、返すデータを戻り値と呼びます。戻り値の型は変数と同じ型を用いますが、voidを使うときもあります。voidとは、メソッドの戻り値がないことを表し、void型のメソッドではreturn文が必要なくなります。

インスタンス化

インスタンスとは、クラスを元に生成されるオブジェクトのことで、インスタンス化とは、クラスからインスタンスを生成することです。JAVAのインスタンス化は次のように書きます。

クラス名 インスタンス名 = new クラス名(引数);

インスタンスを生成すると、クラスのコンストラクタが呼び出され、実行されます。ここで生成されたインスタンスのメンバ変数やメソッドを利用するとき、次のように書きます。

インスタンス名.メンバ変数名;
インスタンス名.メソッド名(引数);

クラスの利用

次のプログラムは、クラスRobotを定義し、そのインスタンスを変数r1とr2として宣言しそれらを操作するプログラムです。

class Robot{
    int x, y, energy;
    String name;

    // コンストラクタの定義
    Robot(String n, int xx, int yy){
        name = n;
        x = xx;
        y = yy;
        energy = 100;
    }

    // メソッドの定義
    void move(int dx, int dy){
        x += dx;
        y += dy;
        energy -= Math.abs(dx) + Math.abs(dy);
    }
    void print(){
        System.out.println(name + " is at (" + x + ", " + y + ") with " + energy);
    }
}

class Main{
    public static void main(String[] args){
        // インスタンス化
        Robot r1 = new Robot("Rose", 10, 10);
        Robot r2 = new Robot("Mary", 0, 0);

        // メソッドの呼び出し
        r1.move(1, 3);
        r1.move(0, 2);
        r2.move(3, 5);
        r1.print();
        r1.move(3, -1);
        r2.move(4, 2);
        r2.print();
        r1.move(-7, 3);
        r1.print();
    }
}

出力結果:

Rose is at (11, 15) with 94
Mary is at (7, 7) with 86
Rose is at (7, 17) with 80

クラスRobotのメンバ変数はx, y, energy, nameであり、これらはこのクラスの中から(メソッドなどから)及びクラスの外から自由にアクセスすることができます。

コンストラクタではn, xx, yyを受け取りそれらをそれぞれname, x, yの初期値としています。またenergyを100に初期化しています。

クラスに定義されているmoveメソッドは引数dx, dyを受け取りそれらをそれぞれメンバ変数であるx, yに加算しています。これは、x方向y方向に動く距離を受け取りロボット(自分自身)を動かすメソッドとなります。さらに、移動した距離だけenergyを減らしています。

printメソッドはロボットの名前、現在地、残りのエネルギーを出力します。

mainメソッドでは、クラスRobotの変数r1とr2をそれぞれ初期位置(10, 10)、(0, 0)で宣言し、それらに対していくつかのメソッドを呼び出すことによってシミュレーションを行っています。


Reference

 

オンラインジャッジではじめるC/C++プログラミング入門 (マイナビ)

AIZU ONLINE JUDGE のコース問題を題材にした解説書です。各トピックごとに C/C++ 言語の基礎的な内容を学習し、Introduction to Programming の演習問題にチャレンジしていきます。内容は敷居の高いものではなく、プログラミング初学者が取り組む例題からスタートしています。