Javaオブジェクト指向

オブジェクト

モノ、概念(人間、国、ノート、机、会社)存在するあらゆるものをオブジェクトと例える。
プログラムの機能や役割を区別してオブジェクトとして組み合わせることで1つのプログラムができる。
|人間というのは何で構成されてるか、それぞれの構成要素はなにでできているか
|など考えるのがオブジェクト思考に必要な要素

|人間→性別→足→手→指
|ノート→表紙+裏表紙+紙100枚
|会社→営業→事務→開発}部署>人

ECサイトの顧客管理表を作成してみる

それぞれのお客さん(User)を3人定義の顧客ランクを売上額によって判定し、
出力させるプログラムを作成する。

設計上のuserはそれぞれ必要な情報をuser側で持っているのでUserクラスを定義する

Userクラス

フィールド

お客さん: String userName;(名前)
売上額: int amount;(円)
顧客ランク: String ranking;(お得意様、常連様、新規顧客、冷やかし客)を定義する

メソッド

  • 情報:input
  • 判定:rankJudge
  • 情報出力: output

判定方法

if (amount >= 80) {
ranking = "お得意様";
} else if (amount >= 60){
ranking = "常連様";
} else if (amount >= 40) {
ranking = "新規顧客";
} else {
anking = "冷やかし客";
}
public class User {
    String userName;
    int amount;
    String ranking;
    // inputメソッドを作って、引数:名前、売上額
    /**
    * Userの入力用メソッド
    * @param inputName inputする名前情報
    * @param inputAmount inputする売上情報 
    */

    int input(String inputName, int inputAmount) {                    
        userName = inputName;
        amount = inputAmount;
        return 0; 
    }
/**
* rankJudgeメソッド 
* Userの売上額から、顧客ランク設定を行う
* 
*/
    void rankJudge() {
        if (amount >= 80) {
            ranking = "お得意様";
        } else if (amount >= 60){
            ranking = "常連様";
        } else if (amount >= 40) {
            ranking = "新規顧客";
        } else {
            ranking = "冷やかし客";
        }
    }
/**
* outputメソッド 
* User情報出力用メソッド
* 
*/
    void output() {
        System.out.println("名前:" + userName);
        System.out.println("売上:" + amount);
        System.out.println("顧客ランク:" + ranking);
    }
}

Mainクラス

Userクラスをnew Userでインスタンス化することで実体化させる。
newしたオブジェクトに対してinput,rankJudge,outputというメソッドをもたせて、そこで入力をさせる。
つまりやりたいことは、
Userでさせたいことをuserでさせて、mainクラスでコードをきりはなしていくことで役割分担させる。
Main側は指示のみ、User側はuser自身がもつ仕事や情報を切り分ける。

  • 3人のUserをNew
  • 3人のuser情報をinput指示→Userクラスのinputメソッドでやる
  • 3人の売上額によるランク設定指示→UserクラスのrankJudgeメソッド
  • 3人のUser情報を出力指示→Userクラスのoutputメソッド
public class Mainexe {
    public static void main(String[] args) {

        User user1 = new User();
        User user2 = new User();
        User user3 = new User();
        
        user1.input("meo1", 5000);
        user2.input("meo2", 2);
        user3.input("meo3", 65);
    
        user1.rankJudge();
        user2.rankJudge();
        user3.rankJudge();
    
        user1.output();
        user2.output();
        user3.output();
    }
}

直訳していく

User user1 = new User();
(AはBに対してCのメソッドをお願いしました。そのときにDの情報を渡しました。)
MainクラスはUserクラスに対してnewをお願いします。必要な値として()を渡しました。
newした結果、Userクラスから新しいオブジェクトとしてuser1が生まれた。
このオブジェクトの実体はid=〇〇で管理されたUserオブジェクトでありobj02.User@3234e239というアドレスのこと。

user1.input("meo1", 5000);
Mainクラスがuser1の参照先であるid=〇〇で管理されたuserオブジェクトに対してinputメソッドを実行します。
必要な値としてmeo1と5000を渡しました。
//user1にはid=〇〇で管理されたuserオブジェクトのアドレスがはいってる。

ここでinputメソッドの中に入るとid=〇〇で管理されたuserオブジェクトの視点にきりかわります。
Mainクラス側からmeo1,5000という引数をひっぱってきて
inputName,inputAmountというパラメータにセットされる。

そして、id=〇〇のuserオブジェクトにたいしてinputメソッドが実行され
変数thisのid=〇〇で管理されたuserオブジェクトの中に引数で定義した値がはいる。

user1.rankJudge(); Mainクラスはuser1の参照先であるid=〇〇で管理されたuserオブジェクトに対してrankJudgeメソッドを実行する。
ここでrankJudgeメソッドの中にはいってthisを見るとid=〇〇で管理されたuserオブジェクトにはいっていることがわかる。

そして、id=〇〇で管理されたuserオブジェクトに対してrankJudgeメソッドが実行され、rankJudgeメソッドの条件分けで
user1は5000なのでお得意様と判定される。

user1.output();
Mainクラスはuser1の参照先であるid=〇〇で管理されたuserオブジェクトに対してoutputメソッドを実行する。
ここでoutputメソッドの中にはいってthisを見るとid=〇〇で管理されたuserオブジェクトにはいっていることがわかる
そして、id=〇〇で管理されたuserオブジェクトに対してoutputメソッドが順に実行され、 名前、売上、顧客ランクの順で表示される。