CORRECTION
GESTION DES NOTES DE MODULES
1.
Résultat de la consultation
Spec
des méthodes :
Vector()
Constructs
an empty vector so that its internal data array has size 10 and its standard
capacity increment is zero.
void addElement(Object obj)
Adds the
specified component to the end of this vector, increasing its size by one.
Enumeration elements()
Returns an
enumeration of the components of this vector.
int size()
Returns the
number of components in this vector.
A
remarquer :
a.
paramètre
de type Object. Cela implique pour stocker une note de type réel de convertir
cette note en une instance de la classe java.lang.Float. Puis lors de la
récupération de cet objet, il est nécessaire de « caster » le type
Object pour retrouver un Float !
b.
découverte
de l’interface Enumeration.
c.
Redéfinition
de toString() pour l’affichage des informations de la classe !
/**
* CumulNotes.java
* Classe
permettant de cumuler une série de notes et d'en calculer la moyenne
* Created on 9 octobre 2000, 13:29
*/
package note;
import
java.lang.*;
import
java.util.*;
import java.io.*;
public class CumulNotes {
private Vector notes; // Vecteur de
notes
public static final int MIN_VALUE = 0; //
Note minimale
public static
final int MAX_VALUE = 20; // Note maximale
/** Creates new CumulNotes */
public
CumulNotes() {
notes = new Vector();
}
/** Insertion d'une note */
public void
insererNote(float n) {
notes.addElement(new Float(n));
}
/**
Calcul de la moyenne */
public float calculerMoyenne() {
float somme = 0;
Enumeration
e = notes.elements();
while
(e.hasMoreElements()) {
somme =
somme + ((Float)e.nextElement()).floatValue(); }
return
somme/notes.size();
}
public String
toString() {
// Rq. possibilité d'écrire:
// return notes.toString(); // liaison
dynamique
// mais
le formatage proposé ne nous convient pas
// à savoir: [7.0 , 14.5, 16.5]
// D’où, notre développement :
String s =
new String();
Enumeration
e = notes.elements();
while (e.hasMoreElements())
{
s = s + " " +
(e.nextElement()).toString(); }
return
s;
}
}
2. Classe Module
a.
classe
Hashtable
Une table de hachage sert à associer des objets à d'autres objets; ces derniers servent de clé, ce qui signifie essentiellement qu'ils doivent être tous distincts; nous les appellerons donc les clés ; on retrouvera un objet en donnant la valeur de la clé associée. En Java, tous ces objets, clés ou objet accédés par les clés, doivent être des instances de la classe Object ou d'une sous-classe de la classe Object. L'organisation interne d'une telle structure fait que les objets sont retrouvés avec une grande rapidité. Pour qu'une table de hachage puisse fonctionner, il faut que la classe des clés redéfinisse les méthodes hashCode() et equals() de la classe java.lang.Object.
Dans la classe Module, nous devons associer des noms (de matière) a deux informations : coefficient + un cumul de notes.
Or, seulement des objets peuvent être stockés dans une table, nous devons donc créer une classe interne à la classe Module juste pour les besoins de stockage.
D’où, la définition de la classe Matiere (sans attribut « nom » puisse le nom de la matière constituera la clé de la Hashtable).
/*
* Module.java
*/
package
note;
import
java.lang.*;
import
java.util.*;
import
java.io.*;
public class Module extends Object {
private
class Matiere {
public
CumulNotes notes;
public
float coeff;
public
Matiere(float c) {
coeff =
c;
notes =
new CumulNotes();
}
public String
toString() {
return
"Coefficient : "+coeff+"\n"+notes.toString();
}
} // class Matiere
private String nom; // nom du module
private Hashtable matieres; // table des
matières
}
// class Module
b.
Developpement
/** Creates new Module */
public
Module(String n) {
nom = n;
matieres =
new Hashtable();
}
public void
insererNouvelleMatiere(String m, float c){
matieres.put(m, new Matiere(c));
}
public void
insererNoteMatiere(String m, float n) {
Matiere mat
= (Matiere)matieres.get(m);
mat.notes.insererNote(n);
}
public float calculerMoyenneModule(){
float s = 0; //
somme des moyennes des matières pondérées
Enumeration m = matieres.keys();
while
(m.hasMoreElements()) {
String
libMat = (String) m.nextElement();
Matiere
matiere = (Matiere)matieres.get(libMat);
s = s + (matiere.notes.calculerMoyenne()*matiere.coeff);
}
return s;
}
public String
toString() {
String s =
new String("MODULE : "+nom);
Enumeration
m = matieres.keys();
while
(m.hasMoreElements()) {
String
libMat = (String) m.nextElement();
Matiere
matiere = (Matiere)matieres.get(libMat);
s = s + "\nMatiere : " + libMat + "\n"
+ matiere.toString();
}
return s;
}
}
3. TEST
// test.java
package note;
public class Test {
/**
* @param args
the command line arguments
*/
public static void main (String args[]) {
Module
pJava = new Module("Programmation Java");
pJava.insererNouvelleMatiere("JavaDeBase",(float)1/4);
pJava.insererNouvelleMatiere("JavaReseau",
(float)1/4);
pJava.insererNouvelleMatiere("Projet", (float)1/2);
pJava.insererNoteMatiere("JavaDeBase", (float)10.0);
pJava.insererNoteMatiere("JavaDeBase", (float)15.0);
pJava.insererNoteMatiere("JavaReseau",
(float)13.5);
pJava.insererNoteMatiere("JavaReseau", (float)9.0);
pJava.insererNoteMatiere("Projet", (float)15.0);
System.out.println(pJava.toString());
System.out.println("Moyenne
du module :"+pJava.calculerMoyenneModule());
} // main()
}
// class