オブジェクト指向の概念2〜クラスとは〜

今回はOracle Docのこのページを参考にします。日本語訳して読みます。

目的

Oracle Docを読んで、Javaの概要を理解しようという意図の記事です。

クラスとは

クラスは、オブジェクトが作成されるブループリントまたはプロトタイプです。

このセクションでは、実世界のオブジェクトの状態と動作をモデル化するクラスを定義します。

意図的に基本に焦点を当て、単純なクラスでも状態と動作をきれいにモデル化できることを示します。

詳細な説明

現実の世界では、多くの場合、すべて同じ種類の個々のオブジェクトが多数見つかります。
他にも何千もの自転車が存在し、それらはすべて同じメーカーとモデルです。
各自転車は同じ設計図から構築されているため、同じコンポーネントが含まれています。
オブジェクト指向の用語では、自転車は自転車と呼ばれるオブジェクトのクラスのインスタンスであると言います。

例として以下のような自転車クラスのコードを出していました。

つまりは、自転車をクラスで表現すると下の様になる。という事です。

しかし、現実の自転車はもっと複雑です。一部の特徴を抜粋して自転車を表現しています。

下のクラスには、以下の属性(フィールド変数)と振る舞い(メソッド)が定義されています。

  • タイヤの回転数
  • 自転車のスピード
  • ギア
  • それぞれの値を変更する振る舞い
  • 自転車の状態を表現する振る舞い
class Bicycle {

    int cadence = 0;
    int speed = 0;
    int gear = 1;

    void changeCadence(int newValue) {
         cadence = newValue;
    }

    void changeGear(int newValue) {
         gear = newValue;
    }

    void speedUp(int increment) {
         speed = speed + increment;   
    }

    void applyBrakes(int decrement) {
         speed = speed - decrement;
    }

    void printStates() {
         System.out.println("cadence:" +
             cadence + " speed:" + 
             speed + " gear:" + gear);
    }
}

ちなみに、メソッドの前に「public」がないのでメソッド(フィールドも)のスコープはpackageスコープになります。

Javaプログラミング言語の構文は新しく見えますが、このクラスの設計は自転車オブジェクトの以前の議論に基づいています。フィールドcadence、speedおよびgearオブジェクトの状態を表し、およびメソッド(changeCadence、changeGear、speedUpなど)が外の世界との相互作用を定義します。

Bicycleクラスにmainメソッドが含まれていないことに気づいたかもしれません。それは完全なアプリケーションではないからです。アプリケーションで使用される可能性のある自転車の青写真にすぎません。新しいBicycleオブジェクトを作成して使用する責任は、アプリケーションの他のクラスに属します。

そして、自転車クラスを呼び出すクラスが以下になります。
予想の通り、メインメソッドを持っています。

class BicycleDemo { 
    public static void main(String [] args){ 

        // 2つの異なる
        //自転車オブジェクトを作成
        Bicycle bike1 = new Bicycle(); 
        Bicycle bike2 = new Bicycle(); 

        // 
        //これらのオブジェクトでメソッドを呼び出します
        bike1.changeCadence(50); 
        bike1.speedUp(10); 
        bike1.changeGear(2); 
        bike1.printStates(); 

        bike2.changeCadence(50); 
        bike2.speedUp(10); 
        bike2.changeGear(2); 
        bike2.changeCadence(40); 
        bike2.speedUp(10); 
        bike2.changeGear(3); 
        bike2.printStates(); 
    }
}

考える

上の説明にある「自転車クラス」は、実際の自転車としては足りない部分があると思いますが、「何をするためのクラスか?」という疑問を解決していけば自ずと適切なクラス設計ができると思います。

クラスは

設計図のようなもので、このクラスを元に「オブジェクト(やインスタンス)」を作成しそれを使用して様々なこと(処理)を行うための部品(オブジェクト)です。

上のように自分は理解しました。なかなかに理解がしやすい内容でした。(自分にとっては)

いまいち。。。だった人は、メインメソッドをよくみてみてください。

メインメソッドの説明

上で示されたメインメソッドは以下のようなことをしています。

  1. 自転車を2台用意(インスタンス化)する
  2. 自転車の1台目に「ケーデンス」を50に設定する
  3. スピードを10加算する
  4. 1台目の状態を表示する
  5. 2台目も同様に(コード参照)設定し、状態を表示する

こんな感じです。

あとは、写経するとか実際に作って動かしてみて自分なりに理解するしかありません。
オススメする方法はやはり「写経すること」です。以下のような感じです。

  1. 写経して
  2. 動かして
  3. パラメータなどを変えてみて
  4. 新しいメソッドを追加してみて
  5. 改めてオリジナルのクラスを作成してみる(動かす)

こんな感じでやってみると「お?」とインスピレーションが舞い降りてきます(理解できます)。

でわでわ。。。



投稿者:

takunoji

音響、イベント会場設営業界からIT業界へ転身。現在はJava屋としてサラリーマンをやっている。自称ガテン系プログラマー(笑) Javaプログラミングを布教したい、ラスパイとJavaの相性が良いことに気が付く。 Spring framework, Struts, Seaser, Hibernate, Playframework, JavaEE6, JavaEE7などの現場経験あり。 SQL, VBA, PL/SQL, コマンドプロント, Shellなどもやります。

コメントを残す