[ガイドコース/簡単学習のJava 1]14マイアプリケーションの作成(2)-メソッド、クラス、インスタンス


Boostレッスンを簡単に学ぶJava 1



Chaper 14


14-9. 기기기기기기기기기기기


方法


メソッドはクラスの動作を表す関数です.
従来のMathクラスのfloor,ceil,PrintWriterのwrite,closeなどの方法がある.
  • MySappプロジェクトでAccountingMethodAppクラスを作成します.
  • AccountingMethodApp.JAvaソースコード

    public class AccountingMethodApp {
        public static double valueOfSupply;
        public static double vatRate;
        public static double expenseRate;
        public static void main(String[] args) {
            valueOfSupply = 10000.0;
            vatRate = 0.1;
            expenseRate = 0.3;
            print();
        }
     
        public static void print() {
            System.out.println("Value of supply : " + valueOfSupply);
            System.out.println("VAT : " + getVAT());
            System.out.println("Total : " + getTotal());
            System.out.println("Expense : " + getExpense());
            System.out.println("Income : " + getIncome());
            System.out.println("Dividend 1 : " + getDiviend1());
            System.out.println("Dividend 2 : " + getDiviend2());
            System.out.println("Dividend 3 : " + getDiviend3());
        }
     
        public static double getDiviend1() {
            return getIncome() * 0.5;
        }
        public static double getDiviend2() {
            return getIncome() * 0.3;
        }
        public static double getDiviend3() {
            return getIncome() * 0.2;
        }
     
        public static double getIncome() {
            return valueOfSupply - getExpense();
        }
     
        public static double getExpense() {
            return valueOfSupply * expenseRate;
        }
     
        public static double getTotal() {
            return valueOfSupply + getVAT();
        } 
     
        public static double getVAT() {
            return valueOfSupply * vatRate;
        }
     
    }

    メソッドとして抽出


    仮に、私たちが計算する仕事は1行のコードではなく、1億行のコードです.
    その1億行のコードを1行として表示し、元の1億行のコードを他の場所に隠すと便利ではないでしょうか.
    使用方法は、上記の操作を行うことができる.
  • 付加価値税を計算するコードをメソッドで抽出します.
  • vat値に対応する部分をブロックとして指定し、Refactor-Extractメソッドをクリックします.
  • getVATを使用してメソッドの名前を指定し、publicオプションを選択してOKをクリックします.
  • AccountingMethodApp.Javaソース分析


    メソッドを使用したコードの変更
    public class AccountingMethodApp {
    
        public static void main(String[] args) {
    
            ...
    
            double vat = getVAT(valueOfSupply, vatRate);
    
            ...
        }
    
    
    public static double getVAT(double valueOfSupply, double vatRate) {
    	return valueOfSupply * vatRate;
    }
    
    }
  • vatを求めるgetVATメソッドが提案されている.
  • vat変数はgetVATメソッドによって値を取得します.
  • getVAT変数は、主メソッドの内部変数(領域変数)valueOfSupplyおよびvatRateをパラメータとして使用します.
  • メソッドのパラメータを削除しますか?
  • getVATメソッドのパラメータを上記のように変更するとエラーが発生します.
  • valueOfSupply変数はmainメソッドで宣言されるため、mainで実行できる領域変数のみです.
  • valueOfSupply、vatRate変数をAccountingMethodAppクラスのグローバル変数として宣言すると、すべてのメソッドがアクセスできます.
  • getVATの定格OfSupply変数とvatRate変数で、Refactor - Convert Local Variable to Filedをクリックします.
  • グローバル変数はFieldとも呼ばれます.
  • 変数名を指定し、共通変数にします.
  • ValueOfSupplyはクラス内の任意の場所でアクセス可能なグローバル変数となる.
  • 変数の値はmainメソッド内で割り当てられていると判断できます.
  • 他の変数もメソッド化しましょう.
    出力にまとめるローカルメソッド
     public class AccountingMethodApp {
    
     ...
    
            print();
    
     }
    
     public static void print() {
         System.out.println("Value of supply : " + valueOfSupply);
         System.out.println("VAT : " + getVAT());
         System.out.println("Total : " + getTotal());
         System.out.println("Expense : " + getExpense());
         System.out.println("Income : " + getIncome());
         System.out.println("Dividend 1 : " + getDividend1());
         System.out.println("Dividend 2 : " + getDividend2());
         System.out.println("Dividend 3 : " + getDividend3());
     }
    
     ...
    }
  • mainメソッドの地域変数はもう不要なので、すべて削除しても大丈夫です.
  • メインメソッドの動作は簡単になり、詳細な動作は他のメソッドで定義され、ユーザの観点から可視コードに変換される.
  • 使用方法は、コードをグループ化して整理することで、コードの可読性を向上させることができます.

    14-10. アプリケーションクラスの作成


    プログラムがお金を計算する以外に多くの操作を実行する必要がある場合、プログラムはさらに複雑になります.
    これにより,コード内のメソッドと変数も混在して複雑になる.
    この状況はクラスで解決できる.

    カテゴリ


    クラスは相互に関連する変数とメソッドの集合です.
  • MySAppプロジェクトでAccountingClassAppクラスを作成します.
  • AccountingClassApp.JAvaソースコード

    class Accounting{
        public static double valueOfSupply;
        public static double vatRate;
        public static double expenseRate;
        public static void print() {
            System.out.println("Value of supply : " + valueOfSupply);
            System.out.println("VAT : " + getVAT());
            System.out.println("Total : " + getTotal());
            System.out.println("Expense : " + getExpense());
            System.out.println("Income : " + getIncome());
            System.out.println("Dividend 1 : " + getDiviend1());
            System.out.println("Dividend 2 : " + getDiviend2());
            System.out.println("Dividend 3 : " + getDiviend3());
        }
     
        public static double getDiviend1() {
            return getIncome() * 0.5;
        }
        public static double getDiviend2() {
            return getIncome() * 0.3;
        }
        public static double getDiviend3() {
            return getIncome() * 0.2;
        }
     
        public static double getIncome() {
            return valueOfSupply - getExpense();
        }
     
        public static double getExpense() {
            return valueOfSupply * expenseRate;
        }
     
        public static double getTotal() {
            return valueOfSupply + getVAT();
        } 
     
        public static double getVAT() {
            return valueOfSupply * vatRate;
        }
    }
    public class AccountingClassApp {
         
        public static void main(String[] args) {
            Accounting.valueOfSupply = 10000.0;
            Accounting.vatRate = 0.1;
            Accounting.expenseRate = 0.3;
            Accounting.print();
            // anotherVariable = ...;
            // anotherMethod = ...;
        }
     
         
     
    }
    eclipseの上部Window - Show View - Outlineをクリックします.
  • クラスに含まれる変数とメソッドをここに示します.
  • AccountingClassApp.Javaソース分析


    エディタに戻り、上部にAccountingクラスを作成します.
    Accountingクラスの作成
    class Accounting{
        public static double valueOfSupply;
        public static double vatRate;
        public static double expenseRate;
        public static void print() {
            System.out.println("Value of supply : " + valueOfSupply);
            System.out.println("VAT : " + getVAT());
            System.out.println("Total : " + getTotal());
            System.out.println("Expense : " + getExpense());
            System.out.println("Income : " + getIncome());
            System.out.println("Dividend 1 : " + getDiviend1());
            System.out.println("Dividend 2 : " + getDiviend2());
            System.out.println("Dividend 3 : " + getDiviend3());
        }
    
        public static double getDiviend1() {
            return getIncome() * 0.5;
        }
        public static double getDiviend2() {
            return getIncome() * 0.3;
        }
        public static double getDiviend3() {
            return getIncome() * 0.2;
        }
    
        public static double getIncome() {
            return valueOfSupply - getExpense();
        }
    
        public static double getExpense() {
            return valueOfSupply * expenseRate;
        }
    
        public static double getTotal() {
            return valueOfSupply + getVAT();
        } 
    
        public static double getVAT() {
            return valueOfSupply * vatRate;
        }
    }
    
    
    public class AccountingClassApp {
       
        ...
    }
  • Outlineが変更されたことを確認できます.
  • クラスの作成後のマスターメソッドの変更
    public class AccountingClassApp {
    
       
    
    	public static void main(String[] args) {
    
    		Accounting.valueOfSupply = 10000.0;
    		Accounting.vatRate = 0.1;
    		Accounting.expenseRate = 0.3;
    		Accounting.print();
    
            }
    
    }
  • ValueOfSupply、vatRate、ExpenseRate変数および印刷方法がAccountingクラスのメンバーとなっているため、以下の主な方法が変更された.
  • 14-11. アプリケーションインスタンスの作成


    ≪インスタンス|Instance|emdw≫


    インスタンスは、実際にクラスを実行するエンティティとクラスといえます.
    インスタンスを使用すると、異なる状態にある複数のクラスを迂回できます.
    すなわち、インスタンスは、クラスをコピーすることによって、異なるデータ、異なるメソッドのコピーを作成します.
    上のAccountingClassAppクラスを変更します.

    AccountingClassApp.JAvaソースコード

    class Accounting{
        public double valueOfSupply;
        public double vatRate;
        public double expenseRate;
        public void print() {
            System.out.println("Value of supply : " + valueOfSupply);
            System.out.println("VAT : " + getVAT());
            System.out.println("Total : " + getTotal());
            System.out.println("Expense : " + getExpense());
            System.out.println("Income : " + getIncome());
            System.out.println("Dividend 1 : " + getDiviend1());
            System.out.println("Dividend 2 : " + getDiviend2());
            System.out.println("Dividend 3 : " + getDiviend3());
        }
     
        public double getDiviend1() {
            return getIncome() * 0.5;
        }
        public double getDiviend2() {
            return getIncome() * 0.3;
        }
        public double getDiviend3() {
            return getIncome() * 0.2;
        }
     
        public double getIncome() {
            return valueOfSupply - getExpense();
        }
     
        public double getExpense() {
            return valueOfSupply * expenseRate;
        }
     
        public double getTotal() {
            return valueOfSupply + getVAT();
        } 
     
        public double getVAT() {
            return valueOfSupply * vatRate;
        }
    }
    public class AccountingClassApp {
         
        public static void main(String[] args) {
            // instance 
            Accounting a1 = new Accounting();
            a1.valueOfSupply = 10000.0;
            a1.vatRate = 0.1;
            a1.expenseRate = 0.3;
            a1.print();
             
            Accounting a2 = new Accounting();
            a2.valueOfSupply = 20000.0;
            a2.vatRate = 0.05;
            a2.expenseRate = 0.2;
            a2.print();
             
            a1.print();
        }
    }
    様々な条件に基づいて異なる出力を出力したいとします.
  • OO商品
  • 定価:10000
  • 増値税税率10%
  • 可用性比較:30%
  • XX商品
  • 定価:20000
  • 付加価値税率5%
  • 可用性比較:20%
  • and so on...
  • この場合、変数の調整中にプログラムが歪む可能性があります.
  • は、各状態に基づいてインスタンスを生成して実行し、問題を解決することができる.
  • AccountingClassApp.Javaソース分析


    Accountingクラス
    public double valueOfSupply;
    public double vatRate;
    public double expenseRate;
  • Accountingクラスのすべての静的キーを削除します.
  • しゅほうしき
    Accounting a1 = new Accounting();
    Accounting a2 = new Accounting();
  • 上の仮定には2つの状態があるので、2つのインスタンスが生成される.
  • ....
    
    Accounting a1 = new Accounting();
    a1.valueOfSupply = 10000.0;
    a1.vatRate = 0.1;
    a1.expenseRate = 0.3;
    a1.print();
    
    Accounting a2 = new Accounting();
    a2.valueOfSupply = 20000.0;
    a2.vatRate = 0.05;
    a2.expenseRate = 0.2;
    a2.print();
    
    ....
  • は、各インスタンスを上記の仮定に従って調整する.
  • a 1インスタンスは、a 2インスタンスの操作が終了しても引き続き存在するため、最後にa 1インスタンスの印刷方法を実行しても同じ結果が出力される.
  • コードをメソッドにグループ化して構築し,これらのメソッドをクラスに組み合わせて構築し,条件に応じてインスタンスを使用するこの方式がJavaの基本システムであるといえる.
    ガイドコース
    https://www.boostcourse.org/opencourse
    Boostレッスンを簡単に学ぶJava 1
    https://www.boostcourse.org/cs126