UML с подклассами - PullRequest
       23

UML с подклассами

0 голосов
/ 24 ноября 2018
public class Student {
    private String name;
    private long id;
    private String grade;
    private int[] test;
    private int NUM_TESTS;

    public Student(){
        name="Un";
        id=0;
        grade="Un";
        test=new int[0];
        NUM_TESTS=5;
    }

    public Student(String x, long z) {
        name=x;
        id=z;
    }

    public void setName(String n) {
        name=n;
    }
    public void setID(long i) {
        id=i;
    }
    public void setGrade(String g) {
        grade=g;
    }
    /*public void setTestScore(int t,int s) {
        test=t;
        test=s;
    }

    public int getTestScore(int) {
        return test;
    }*/
    public int getNumTests() {
        return NUM_TESTS;
    }
    public String getName() {
        return name;
    }
    public long getID() {
        return id;
    }
    public String getGrade() {
        return grade;
    }

    public String toString() {
        return getTestScore()+getNumTests()+getName()+getID()+getGrade();
    }
    /*public void calculateResult() {
        int sum=0;
        for (int t:test)sum+=t;
        double average= 1.0t*sum/5;*/

    }
}

Вот мой код, я выделил места, где у меня возникли проблемы.Я пишу студенческий подкласс с подклассами старшекурсников и аспирантов. Вот UML Я не понимаю, как правильно реализовать testScore, если он не является одной из переменных?Не берите в расчет результат, я исправлю это сам.Я также не уверен, что мои конструкторы точны.Все студенты сдают пять экзаменов, это константа

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018
  • setTestScore(int t, int s) ... Я рекомендую использовать тщательно подобранные имена (идентификаторы).Например, если вы просто переименуете параметры в: setTestScore(int testNumber, int score), вы можете быть более знакомыми с тем, что следует добавить.
  • test = new int[0]; - это не то, что вам нужно.Вы хотите test = new int[NUM_TESTS]
  • Попробуйте пересмотреть метод setTestScore(int testNumber, int score) Первый параметр на самом деле является индексом в массиве test, а второй - значением.
  • Итак, вашМетод должен быть примерно таким:

    public void setTestScore(int testNumber, int score) {
        test[testNumber] = score;
    }
    

Я просто дал вам несколько советов для вашей собственной реализации ...

0 голосов
/ 24 ноября 2018

Прежде всего, похоже, что Student класс должен быть abstract.потому что каждый ученик UnderGraduate или PostGraduate.

Во-вторых, вы должны extend дочерние классы из Student класса.

Я надеюсь, что приведенный ниже код будет полезным:

abstract class Student {

    private String name;
    private long id;
    private String grade;
    private int[] test;
    private final int NUM_TESTS = 5;

    public Student(){
        name = "UN";
        id = 0;
        grade = "UN";
        test = new int[NUM_TESTS];
    }

    public Student(String name, long id){
        this.name = name;
        this.id = id;
    }

    @Override
    public String toString() {
        //TODO: write your desire toString method
        return getNUM_TESTS()+getName()+getId()+getGrade();
    }

    abstract void claculateResult();

    public int getTestScore(int testNumber){
        if(testNumber >= NUM_TESTS)
        return 0;

        return test[testNumber];
    }

    public void setTestScore(int testNumber, int score){
        if(testNumber >= NUM_TESTS)
            return;

        test[testNumber] = score;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getGrade() {
        return grade;
    }

    public void setGrade(String grade) {
        this.grade = grade;
    }

    public int[] getTest() {
        return test;
    }

    public void setTest(int[] test) {
        this.test = test;
    }

    public int getNUM_TESTS() {
        return NUM_TESTS;
    }
}

и класс UnderGraduate будет:

public class UnderGraduate extends Student{

    public UnderGraduate(){

    }

    public UnderGraduate(String name, long id){
        super();
    }

    @Override
    void claculateResult() {
        //TODO: DO whatever you want
    }
}

помните, что класс PostGraduate такой жекак UnderGraduate.

...