経営・プログラミングを学ぶ あーべるBLOG

経営やプログラミングの便りを呟きます。☆をつけたり読者になってくれたりすると跳ねて喜びます。

Javaでオブジェクト指向をマスターしよう!−基本編−

Javaオブジェクト指向

オブジェクト指向とは、プログラムをどう組み立てるのかの考え方のことです。JavaC++PHPPerlPythonなどの言語で利用されています。

上記のページでオブジェクト指向とは何か?なぜオブジェクト指向プログラミングが必要なのかが分かります。

ここではさらに一歩進んで、もっと具体的な内容を解説していきます。まずはオブジェクト指向の基本用語を、次のソースコードを例に解説します。


//クラス
class Dice {
    //フィールド
    int number;    //サイコロの目
    String color;  //色
    String name;   //名前
    int maxNumber; //サイコロの最大数

    //コンストラクタ
    Dice(int number, String color, String name, int maxNumber) {
        this.number = number;
        this.color = color;
        this.name = name;
        this.maxNumber = maxNumber;
    }

    //サイコロを振る
    void play() {
        number = (int)(Math.random() * maxNumber) + 1;
    }

    //サイコロの目を確認する
    int getNumber() {
        return number;
    }
}

 

目次

クラス

クラス(Class)とは「設計図」です。


//クラス
class Dice {
    (中略)
}

オブジェクト指向では「モノ」を設計していきます。上のサンプルでは「サイコロ」の特徴や状態、動作などをクラス内に定義しています。つまりクラス(設計図)上にサイコロを設計した状態です。このサイコロは色や最大値が異なると、姿形の違うサイコロを定義することができます。次の「インスタンス」で説明します。

インスタンス

インスタンス(Instance)とは「事実」「事例」といった意味があります。オブジェクト指向でのインスタンスは「実体」がもっとも近い意味合いでしょう。


Dice cube = new Dice(4, "White", "satou's Dice", 6);
Dice octahedron = new Dice(7, "Black", "tanaka's Dice", 8);

このサンプルでは2つのダイスをクラスからインスタンスへ実体化させています。上の方は「佐藤さんが持っている白い6面体で、4が出ている状態のサイコロ」を実体化しています。下の方は「田中さんが持っている黒い8面体で、7が出ている状態のサイコロ」を実体化しています。このように1つのクラスから別々の特徴を持ったサイコロを作ることができます。

また、新しくサイコロを実体化するには「コンストラクタ」を通る必要があります。


//コンストラクタ
Dice(int number, String color, String name, int maxNumber) {
    this.number = number;
    this.color = color;
    this.name = name;
    this.maxNumber = maxNumber;
}

コンストラクタはサイコロを実体化するために必要な特徴や状態の初期値を入れるために必要で、すべてのクラスにおいて必須です。

フィールド

フィールド(field)はそのインスタンスがもつ「属性(特徴や状態)」のことです。基本的にクラスの設計はフィールドで属性を、メソッドで操作を定義します。


//フィールド
int number;    //サイコロの目
String color;  //色
String name;   //名前
int maxNumber; //サイコロの最大数

上の例だとサイコロの目は状態、それ以外はサイコロの特徴を表しています。

メソッド

メソッド(method)はインスタンス自身、またはそのインスタンスに対して行える「操作」のことです。


//サイコロを振る
void play() {
    number = (int)(Math.random() * maxNumber) + 1;
}
//サイコロの目を確認する
int getNumber() {
    return number;
}

「play」はサイコロを振る操作です。サイコロを振ることでnumber変数の値が変わる、つまり「サイコロの状態」を変えています。また「getNumber」は現在のサイコロの目を確認する操作です。

そのほかの重要な用語

オブジェクト指向を理解するにあたって避けては通れないのが「カプセル化」「継承」「ポリモーフィズム」です。

カプセル化

  

 

継承

あるクラスの属性や操作を受け継いで、新しいクラスを作ることを「継承」と言います。例えば「作業者」クラスを継承して「プログラマー」クラスを作るといったことです。

--------------------------------------------------------------------------------------------------------
※ここに「Javaオブジェクト指向をマスターしよう!−継承−」ページへのリンク挿入予定
--------------------------------------------------------------------------------------------------------

ポリモーフィズム多態性

同じクラスを継承した複数のサブクラスが持つそれぞれの動作を、異なる動作にすることを「ポリモーフィズム」と言います。例えば「生物」クラスを継承した「人間」と「猫」のサブクラスがあったとします。それぞれを走らせたい場合、人間は二足で走りますが猫は手足4本で走ります。このように、同じ「走る」でも異なる動作をさせたい場合に利用します。

--------------------------------------------------------------------------------------------------------
※ここに「Javaオブジェクト指向をマスターしよう!−ポリモーフィズム−」ページへのリンク挿入予定
--------------------------------------------------------------------------------------------------------

まとめ

いきなりすべてを理解しようとしても、思うようにいかないと思います。オブジェクト指向の用語を一つ一つ丁寧に理解していくことが、途中で挫折しないコツです。

特に「カプセル化」「継承」「ポリモーフィズム」は非常に重要なのでぜひ覚えましょう!