TIL/0806/Javaプロジェクト設計


野球種目実習


外部ライブラリの使用

  • gradle : Build Tool
  • バージョン、
  • を実行
    インストール
  • 外部依存ライブラリ

  • GroupId
  • groupIdはパッケージ命名規則に従う.
  • groupIdは、プロジェクトをすべてのプロジェクト間で
  • として一意に識別します.
  • 、つまり、少なくとも管理するドメイン名です.
  • 例:org.apache.maven, org.apache.commons

  • ArtificatID
  • ArtifactIdは、バージョン情報を省略するjarファイルの名前
  • である.
  • 段、小文字
  • のみ
  • maven, commons-math

  • Version
    1.数値と点からなる汎用バージョン形式(1.0、1.1、1.0.1、...)を使用します.


  • build.gradleは構築ツールを実行し、外部ライブラリを管理する場所です.
  • 1. 필요한 라이브러리 검색
    Maven Central Repository Search
    2.Gradle関連コンテンツのコピーと貼り付け
    追加


  • 外部ライブラリの使用も重要な機能です

  • たとえば、Fakerライブラリで必要な機能を使用する
    package com.programmers.java.baseball;
    
    import com.github.javafaker.Faker;
    
    import java.util.Arrays;
    import java.util.stream.Stream;
    
    public class Main {
        public static void main(String[] args) {
    
            Faker faker=new Faker();
            String title=faker.name().fullName();
            System.out.println(title);
    
            String test=faker.starTrek().character();
            System.out.println(test);
    
            long r=faker.number().randomNumber();
    
            Integer [] nums=Stream.generate(()->faker.number().randomDigitNotZero())
                    .distinct()
                    .limit(10)
                    .toArray(Integer[]::new);
    //                .forEach(System.out::println);
    
            System.out.println(Arrays.toString(nums));
    
    //        System.out.println("Hello world");
    
        }
    
    }

  • Lombokライブラリの使用

  • Lombok Gradleに関連するコンテンツを構築します.勾配に追加
    Gradle

  • intellijpluginからインストール


  • Lombokを使用してコードを簡略化
  • package com.programmers.java.baseball;
    
    import lombok.*;
    
    // 롬북
    @NoArgsConstructor   //기본 생성자
    @AllArgsConstructor //생성자
    @ToString           //toString
    @EqualsAndHashCode  // equals
    @Getter             // getter
    @Setter             // setter
    
    // 총 통들어서 ==> @Data
    @Data
    public class User {
        private int age;
        private String name;
    
    //    public User(int age, String name) {
    //        this.age = age;
    //        this.name = name;
    //    }
    }
    
    package com.programmers.java.baseball;
    
    import com.github.javafaker.Faker;
    
    import java.util.Arrays;
    import java.util.stream.Stream;
    
    public class Main {
        public static void main(String[] args) {
    
            User user=new User(1,"a");
            User user2=new User(1,"a");
            System.out.println(user);
            System.out.println(user.equals(user2));
    
            user.setName("zzz");
            System.out.println(user.getAge());
            System.out.println(user.getName());
    
            // 기본 생성자
            User user3=new User();
            System.out.println(user3);
        }
    }
    設計
  • デジタル野球ゲームデザイン
  • 要件の理解
  • ゲームルール
  • について
  • オペレーティング環境、データ範囲
  • 3ビット数(拡張可能)
  • で繰り返される数字は使用されません.
  • 1~9(0を使用しない)
  • コンソールで実行されるプログラム.
  • 日をオブジェクト/関連オブジェクトに分割
  • エンジン(実際のゲームでは)
  • BaseBall
  • NumberGenerator
  • Input
  • Output
  • アプリケーション(入力の主体として)
  • App
  • Console
  • FakeNumberGenerator
  • 設計
  • コアロジック
    1. Class Diagram
  • Flow Chart
  • インプリメンテーション
    Race Conditionが発生する可能性
    private BallCount ballCount(Numbers answer, Numbers inputNumbers) {
        int strike=0;
        int ball=0;
    
    		// 멀티 쓰레드 동작의 경우 strike와 ball 같은 경우 Race Condition이 발생 가능
    		
        answer.indexedForEach((a,i)-> {
            inputNumbers.indexedForEach((n,j)-> {
                if (a!=n) return;
                if (i.equals(j)) strike+=1;
                else ball+=1;
            });
        });
    
        return new BallCount(strike,ball);
    }

    に感銘を与える



  • 既存のjavaデザインコースはMainに重点を置いています

  • しかし、今回の講座を聞いた時、私たちは設計方法の重要性を感じました.

  • メンテナンスと拡張が容易

  • インタフェースとramda関数を使用するかどうかによって、コード(クリアコード)を簡略化できます.