JAVA実習


21/05/31

パッケージ->インスタンス、分類



責任の転嫁->ロールとしてのオブジェクト=オブジェクト向け
インスタンス、分類
例示的な方法で実装
  • オブジェクトを先に作成するので、より便利に感じます!
  • switch(menu) {
    	case 1:
             	//ExamList.inputList(list);
                  list.inputList(); 
                   //인스턴스메소드 형식으로 구현
                     break;
    void inputList() {
                    Scanner scan = new Scanner(System.in);
                    System.out.println("성적입력");
                    int kor, eng, math;
    
                    //{... 중략}
    
                    Exam exam = new Exam();
                    exam.kor = kor;
                    exam.eng = eng;
                    exam.math = math;
    
                    Exam[] exams = this.exams;
                    int size = this.current;
    
                    if (exams.length == size) {
                            //1. 크기가 더 큰 배열을 생성하기
                            Exam[] temp = new Exam[size + 5];
                            // 2. 값을 이주 시키기
    
                            for (int i = 0; i < size; i++)
                                    temp[i] = exams[i];
                            //3. list.exams가 새로 만든 temp배열을 넘겨받아 참조할 수 있게 한다.
                            this.exams = temp;
                    }
                    this.exams[this.current] = exam;
                    this.current++;
    
            }
    inputlistメソッドコードの変化部分
    静的削除
  • インスタンスメソッド
  • list.exams, list.currentなどはリストメソッドとして宣言されているので、this.exams, this.宣言はcurrentなど
  • に変更されました.

    アクセス制御インジケータとカプセルの破壊



    アクセス制御インジケータによりクラス内部の機能使用を制限できます.
     private int current;
    //이 클래스 외에 다른 클래스에서 current를 선언해도 문제가 발생하지 않는다.
    

    作成者とオブジェクトの初期化


    変更前
    public static void init(ExamList list) {
                    list.exams = new Exam[3];
                    list.current = 0; 
    }
    変更後
    public ExamList() { 
                    this.exams = new Exam[3];
                    this.current = 0;
     }
    変更の理由は?
    オブジェクトを作成すると、initは宣言した値をオブジェクトを実体化するために使用し、関数を個別に作成および使用する方法を利用します.ただし、例のExamListのように、ジェネレータを初期化するには特殊な関数が必要です.
    作成者の条件
    1.オブジェクトが作成されたら、まず実行する必要があります.
    2.作成時に1回のみ実行できます.
    呼び出しと同時に初期化を行うのでInitの役割を果たす.ジェネレータExamListには戻り値がありません.戻りの目的ではないためです.作成されたオブジェクトを巡回し、重要なのは、実際には関数名ではありません.ジェネレータには関数名がありません.初期化するオブジェクトの名前を限定するだけです!

    ロードジェネレータ過負荷


    の時の寸法に基づいて、寸法の個数に応じて並べ替えを初期化したいジェネレータを書き出します.
    ジェネレータは関数の特徴もあるので、パラメータを渡すことができるので、ジェネレータを2つの方法で呼び出すことができます.
  • new ExamList();
    デフォルト作成者
  • new ExamList(10);
    アレイをオンデマンドで準備するジェネレータ(オーバーロードジェネレータ)
  • 注意事項
    1.デフォルトジェネレータがない場合、オーバーロードされたジェネレータのみを作成する場合、デフォルトジェネレータを呼び出すことはできません.
    2.ジェネレータのリロードは、同じ機能を異なるパラメータに設定して使用しやすいようにします.同じ機能を実現しているため,コード重複を解消する必要がある.デフォルトのジェネレータからオーバーロードジェネレータを呼び出すことで、重複データを除去できます.ジェネレータを呼び出す方法は、作成したばかりのオブジェクトでのみ呼び出されます.
    2-1. 呼び出し方法 ExtamList()は、ExtamList(int size)を呼び出そうとする.this(); カッコに値を入れると、パラメータを持つジェネレータに値が移行します.値を出さないと、自分で自分を呼び出すことが起こります.
    3.ジェネレータが定義されていない場合、new ExamList()()のみでオブジェクトが作成されているため、定義する必要がなく、コンパイラはデフォルトのジェネレータを自動的に作成します.