UML: comment implémenter une classe D'Association en Java

j'ai ce cours D'Association UML. Note: la ligne horizontale est une ligne pleine et la ligne verticale est une ligne en pointillés.

 ---------                  ---------
|         |*(a)        *(b)|         |
| CLASS   |________________|  CLASS  |
|STUDENT  |     |          |  COURSE |
 ---------      |           ---------
                |*(c)
          ______|______
         |             |
         |             |
         |  CLASS      |
         | TRANSCRIPT  |
         |_____________|

je comprends cette relation mais j'ai rencontré quelques problèmes lors de l'implémentation de ce code UML. Je peux mettre en œuvre la relation entre la classe Student et la classe Course pour le code. Voici mon code:

class Student {
  Vector<Course> b;
}

class Course {
   Vector<Student> a;
}

mais, en classe Transcript, je ne comprends pas tellement, comment utiliser cette classe dans le code. Est-il la propriété de la classe Student et Course. Donc, si c'est vrai, alors le code sera:

class Student {
  Vector<Course> b;
  Vector<Transcript> c;
}

class Course {
  Vector<Student> a;
  Vector<Transcript> c;
}

est-ce vrai? Si ce N'est pas le cas, s'il vous plaît, apprenez-moi à mettre en œuvre cette UML.

Merci :)

16
demandé sur GoZoner 2012-11-18 23:29:10

3 réponses

tout d'abord, n'utilisez pas Vector, car c'est une vieille classe qui ne devrait plus être utilisée pendant plus de 10 ans. Utiliser un Set et List.

Si le Transcript class contient des informations sur la façon dont un étudiant suit un cours (par exemple, la date de son inscription au cours), vous pouvez le mettre en œuvre comme ceci:

class Student {
    Set<Transcript> transcripts;
}

class Transcript {
    Student student;
    Course course;
    Date subscriptionDate;
}

class Course {
    Set<Transcript> transcripts;
}

cela ne vous empêche pas de fournir une méthode à L'étudiant qui retourne tous ses cours:

public Set<Course> getCourses() {
    Set<Course> result = new HashSet<Course>();
    for (Transcript transcript : transcripts) {
        result.add(transcript.getCourse());
    }
    return result;
}

si Transcript ne contient aucune information, Alors il est probablement là pour modéliser comment ces classes seraient mappées dans les tables de base de données, où la seule façon d'avoir une association de plusieurs à plusieurs entre deux tables est d'utiliser une table de jointure contenant les Id des deux tables associées.

27
répondu JB Nizet 2014-04-25 18:23:31

je sais que cette question est très ancienne mais j'ai un moyen plus pratique que l'intégration N..1 relations dans la classe associative:

public class Transcript {
    //Transcript's properties
} 

public class Course {

    private Map<Student, Transcript> transcriptsByStudent;
}

public class Student {

    private Map<Course, Transcript> transcriptsByCourse;
}
2
répondu Aleks Ben Maza 2017-09-02 21:08:09

juste pour ajouter, sur votre modèle vous dénotez la multiplicité sur la classe d'association. Cela n'est pas nécessaire car la classe d'association l'association elle-même, et la relation de multiplicité des deux classes originales satisferont.

1
répondu Sean Dougan 2017-02-07 23:26:44