Bonjour,
je sollicite la communauté car je suis un peu largué entre le passage du diagramme de classe UML au code Java.
j'ai les cas de figures de l'image ci-dessous et le code Java associé mais je ne comprends pas toutes les lignes
si je reprend classe par classe pour ressayer de comprendre chaque ligne de code
Classe0 est une interface qui liste les méthodes sans le corps de la méthode d'où le point-virgule à la fin de chaque méthode. Les corps de ces méthodes devront être écrits dans d'autres classes. D'après le code, la méthode1 est décrite dans la classe1 qui "implements" la classe0 (flèche en pointillés) c'est assez logique.
Par contre la méthode2 est décrite dans la Classe2 mais je ne vois pas comment on peut le savoir sur le diagramme. Est-ce parce que la Classe1 est abstraite ?
Classe1 est une classe abstraite (mot clé <<Abstract>>) qui implémente la classe0 (flèche pointillés). Cette Classe1 possède des attributs protégés (#) dont un est un attribut de classe (souligné et mot clé static). Classe1 voit Classe3 d'où un attribut de classe Classe3 monC3 (cardinalité de l'association : 1). Classe1 possède par ailleurs 3 méthodes public (+) dont une (méthode3) est abstraite (mot clé <<Abstract>>). méthode1 ne renvoie rien (void) et prend un String en paramètre.
Je ne comprends pas la ligne idClasse1 = nombreObjets++;
Classe2 est une classe fille de Classe1 dont elle hérite (flèche pleine et mot clé extends). Classe2 voit Classe4 d'où un attribut de classe Classe4 monC4 (cardinalité de l'association : 1). Classe2 possède un constructeur (Classe2 même nom que la classe) qui prend en paramètres un objet Classe3 et un objet Classe4). La méthode3 qui était abstraite dans Classe1 est rédigée dans Classe2.
Par contre, pourquoi methode2 de Classe0 est rédigée ici ?
Classe 3 possède 2 attributs privés (-) dont un est un attribut de classe (souligné et mot clé static). Classe3 possède également une méthode de classe (soulignée) public (+) getNombreClasses3(). Classe3 voit Classe1 d'où un attribut de type Collection<Classe1> mesC1s (cardinalité : *).
Je ne comprends pas les lignes mesClasses1 = new ArrayList<Classe1>(); et id = nombreObjets++; correspondant au constructeur.
Classe4 possède 2 attributs privés (-) dont un est un attribut de classe (souligné et mot clé static). Classe4 possède une méthode public createObjet6 qui prend en argument un int et un objet de type Classe5. Classe4 voit Classe1 d'où un attribut de type Collection<Classe1> mesC1s (cardinalité : *).
De même Classe4 voit Classe5 pourtant il n'y a pas d'attribut de type Collection<Classe5> mesC5s (cardinalité : *) mais attribut de type Collection<Classe6> mesC6s relative à la classe association Classe6 ? Pourquoi ?
Je ne comprends pas les lignes mesClasses1 = new ArrayList<Classe6>(); mesClasses6 = new ArrayList<Classe6>(); et id = nombreObjets++; correspondant au constructeur.
Je ne comprends pas non plus la méthode createobjet6.
Classe5 possède 2 attributs privés (-) dont un est un attribut de classe (souligné et mot clé static). Classe5 possède une méthode public addC6 qui prend en argument un objet de type Classe6.
De même que pour Classe4, Classe5 voit Classe4 pourtant il n'y a pas d'attribut de type Collection<Classe4> mesC4s (cardinalité : *) mais attribut de type Collection<Classe6> mesC6s relative à la classe association Classe6 ? Pourquoi ? Classe5 possède une méthode addC6 public qui prend en argument un objet de type Classe6 : cette méthode ajoute un objet (comme son nom semble l'indiquer) à la collection mes C6s en utilisant la méthode .add de l'interface Collection. Je ne comprends pas les lignes mesClasses6 = new ArrayList<Classe6>(); et id = nombreObjets++; correspondant au constructeur.
Enfin, Classe6 est donc une classe associative entre les CLasse4 et Classe5. Elle possède un attribut privé et une méthode public le constructeur, Classe6 qui prend en paramètre un int et 2 objet de type Classe4 et Classe5.
Je ne comprends pas la ligne c5.addObjet6(this); Ne devrait-il pas y avoir également un équivalent c4.addObjet6(this) ?
cela fait beaucoup de questions, d'avance merci pour votre aide
d'avance merci pour votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105 public interface Classe0 { public void methode1(String nom); public void methode2(Color color); } public abstract class Classe1 implements Classe0 { <br>protected int id ; protected static int nombreObjets = 0; private Classe3 monC3; public void methode1(String s){} abstract public boolean methode3() ; public Classe1(Classe3 c){ System.out.println("constructeur de Classe1 avec argument"); monC3 = c; idClasse1 = nombreObjets++; } } public class Classe2 extends Classe1 { private Classe4 monC4; public Classe2(Classe3 c3, Classe4 c4) { super(c3); monC4=c4; System.out.println("constructeur de Classe2"); } public void methode2(Color color) {} <br> public boolean methode3() {return true;} } public class Classe3 { private int id ; private static int nombreObjets = 0; private Collection<Classe1> mesClasses1; public static int getNombreClasses3() { return nombreObjets; } public Classe3() { System.out.println("constructeur de Classe3"); mesClasses1 = new ArrayList<Classe1>(); id = nombreObjets++; } } public class Classe5 { private int id ; private static int nombreObjets = 0; private Collection<Classe6> mesC6s; public Classe5() { System.out.println("constructeur de Classe5"); mesC6s = new ArrayList<Classe6>(); id = nombreObjets++; } public void addObjet6(Classe6 c6) { mesC6s.add(c6); } } public class Classe6 { private int att6; private Classe4 monC4; private Classe5 monC5; public Classe6(Classe4 c4, Classe5 c5, int i){ System.out.println("constructeur de Classe6, att6 : "+i); monC4 = c4; monC5 = c5; att6=i; c5.addObjet6(this); } } public class Classe4 { private int id ; private static int nombreObjets = 0; private Collection<Classe1> mesC1s; private Collection<Classe6> mesC6s; public Classe4() { System.out.println("constructeur de Classe4"); mesC1s = new ArrayList<Classe1>(); mesC6s = new ArrayList<Classe6>(); id = nombreObjets++; } public void createObjet6(Classe5 c5, int i) { <br> Classe6 c6 = new Classe6(this, c5, i); <br> mesC6s.add(c6); } }
Partager