Отдельные методы класса по группам в Java

  1. У меня есть класс, который имеет много защищенных членов данных и много групп различных функций, которые обрабатывают эти члены данных.
  2. Я хочу разделить эти классы по подклассам, чтобы разные группы методов были в разных подклассах.

1.У меня есть этот класс

class Student {
    protected String name;
    protected int courseNumber;
    protected TreeMap<String, Integer> marks;
    protected double successRate;
    protected Pair<String, Integer>[] conferences; //name, place


    void setName(String name) { this.name = name; }
    //... setters
    String getName() { return name; }
    //... getters

    //...constructors

    int getHashCode() {
        int res = 0;
        //...
        return res;
    }
    boolean less (Student b) {
        boolean ls = false;
        //...
        return ls;
    }
    //... functions to compare objects

    String lastConferenceName() {
        return conferences[conferences.length - 1].getKey();
    }
    //... some last data

    double marksMedium(String[] s) {
        int res = 0;
        for (int i = 0; i < s.length; i++)
            res += marks.get(s[i]);
        return (double) res / s.length;
    }
    //... some medium functions

    //... some group of functions

    //... some other groups
}

Я хочу сделать что-то подобное

class Student{
    protected String name;
    protected int courseNumber;
    protected TreeMap<String, Integer> marks;
    protected double successRate;
    protected Pair<String, Integer>[] conferences; //name, place


    void setName(String name) { this.name = name; }
    //... setters
    String getName() { return name; }
    //... getters

    //...constructors
}

class StudentComparator{
    int getHashCode() {
        int res = 0;
        //...
        return res;
    }
    boolean less (Student b) {
        boolean ls = false;
        //...
        return ls;
    }
    //... functions to compare objects
}
class LastStudentInfoGetter{
    String lastConferenceName() {
        return conferences[conferences.length - 1].getKey();
    }
    //... some last data
}
class StudentMediumGetter{
    double marksMedium(String[] s) {
        int res = 0;
        for (int i = 0; i < s.length; i++)
            res += marks.get(s[i]);
        return (double) res / s.length;
    }
    //... some medium functions
}
class SomeStudentFunctions{
    //... some group of functions
}
///... SomeOtherClasses

Было бы лучше, если эти классы не используют сеттеры и геттеры


Upd

Например, у меня есть этот класс

class Handler{
    void handle(){
        Student s = new Student();
        ///////........
        System.out.println(s.lastConferenceName());
        System.out.println(s.getHashCode());
    }
}

И я хочу, чтобы handle () (или что-то вроде этого) работал после преобразования

Обратите внимание, что lastConferenceName () и getHashCode () находятся в разных группах

1 ответ

  1. Расширяет класс студента, как следует из каждого подкласса.

    public class Student {
        private String name;
        private int courseNumber;
        protected TreeMap<String, Integer> marks;
        private double successRate;
    //  protected Pair<String, Integer>[] conferences; // name, place
    
        public void setName(String name) {
            this.name = name;
        }
    
        // ... setters
        public String getName() {
            return name;
        }
        // ... getters
    
        // ...constructors
    }
    
    class StudentComparator extends Student{
        public int getHashCode() {
            int res = 0;
            // ...
            return res;
        }
    
        public boolean less(Student b) {
            boolean ls = false;
            // ...
            return ls;
        }
        // ... functions to compare objects
    }
    
    
    class StudentMediumGetter extends Student {
        double marksMedium(String[] s) {
            int res = 0;
            for (int i = 0; i < s.length; i++)
                res += marks.get(s[i]);
            return (double) res / s.length;
        }
        // ... some medium functions
    }
    
    class SomeStudentFunctions extends Student {
        // ... some group of functions
    }