Имплимент UML Тройная Ассоциация в Java коде - PullRequest
0 голосов
/ 15 октября 2018

В настоящее время у меня возникают проблемы с реализацией троичных ассоциаций в коде.Я получаю двоичные, но я не уверен насчет троичных ассоциаций.

это типичный сценарий в университете.

Лектор может преподавать один предмет одному или нескольким студентам
Студент может преподавать один предмет только от одного лектора
Лектор может преподавать одинучащийся только по одному предмету

Между этими тремя классами существует троичная связь.

Отношение между этими тремя классами, показанными на диаграмме классов UML ниже, а также их кратности

enter image description here

Я читал в разных источникахв отношении всего Интернета и не может найти решение

Как реализовать связь между этими тремя классами?или, вообще, каковы возможные способы реализации связи между классами (в Java)?

Ответы [ 3 ]

0 голосов
/ 15 октября 2018

согласно Амадану, я готовил ответ

, поскольку я новичок в Java, синтаксис может быть неправильным, если это решение неверно, пожалуйста, исправьте меня

//Lecturer class
class Lecturer{
    private List<Klass> klassList; 

    public List<Klass> getKlasses(Klass klassList){
        retrun klassList;
    }

    public List<Klass> addKlasses(Klass klassList){
        this.klassList = klassList;
    }

    teachStudents(){
        klassList = getKlasses()

        for (int i = 0; i < klassList.size(); i++) {
            (klassList.get(i)).teachSubjectToStudent();
        }
    }
}

//Student class
class Student{
    private Klass klass;
    private List<Subject> learnedSubjectList; 

    public void learn(Subject subject){
        learnedSubjectList.add(subject);
    }
}

//Subject class
class Subject{
    private Klass klass;
}

//Klass class
class Klass{
    private Lecturer lecturer;
    private Student student;
    private Subject subject;

    Klass(Lecturer lecturer,Student student,Subject subject){
        private this.lecturer = lecturer;
        private this.student  = student;
        private this.subject  = subject;
    }

    //implimentation of how subject was teach to a student
    public void teachSubjectToStudent(){
        this.student.learn(subject)
    }
}

//this class is use for code execution
public class TestA {
    public static void main(String[] args) {
        Lecturer lecturer = new Lecturer();
        Subject subject   = new Subject();

        Student student1   = new Student();
        Student student2   = new Student();
        Student student3   = new Student();

        Klass klass1 = new Klass(lecturer,student1,subject);
        Klass klass2 = new Klass(lecturer,student2,subject);
        Klass klass3 = new Klass(lecturer,student3,subject);

        List<Klass> list = new ArrayList<Klass>();
        list.add(klass1);
        list.add(klass2);
        list.add(klass3);

        //create association link between lecturer class and klass class list
        lecturer.addKlasses(list);
    }
}
0 голосов
/ 15 октября 2018

Как всегда, это зависит.

Обычный способ реализации ассоциативных классов - использование ассоциативных массивов.В вашем примере у вас (в конце концов) будет комбинация Lecturer / Subject для доступа к списку Student с.Если ваши требования отличаются, вы можете, например, вернуть список Subject / Student s при предоставлении Teacher.

При использовании базы данных у вас будут первичные ключи Lecturer / Subject / Student в таблице Teaching.Это позволяет делать отдельные выборки, такие как упомянутые выше.

Некоторые псевдокоды из моей шляпы:

class Teaching {
  private Hash lectRef; // assoc. array 

  public void addTeaching(Lecturer lect, Student stud, Subject subj) {
    if lectRef[lect.hash] == None { lectRef[lect.hash] = []; }  
    // if none, default an empty array here
    // lect.hash is a unique hash code for the Lecturer object

    lectRef[lect.hash].append((stud, subj); 
    // tuple of student/subject referenced

    // if you need other fast results (e.g. subjects per student or the like) you need to hash them here too
  }

  public [(Stud, Subj)] studSubj (Lecturer lect) {
    return lectRef[lect.hash];  
    // returns the array of student/subject tuples
  }

  // add other result operations like subjects per student as needed
}
0 голосов
/ 15 октября 2018

Как правило, вы сами моделируете ассоциацию как отдельную сущность (нельзя назвать ее класс Class, поскольку это уже занято java.lang.Class; обычно люди называют такой класс Klass, какочевидно, к чему это относится, вы также можете использовать свой Teaching, если хотите).Тогда у вас просто есть двоичные ассоциации между Klass и Teacher, Klass и Subject, Klass и Student.Teacher и Student, с этой точки зрения, вообще не связаны, кроме как косвенно через их участие с Klass (аналогично другим парам).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...