On cherche à calculer le nombre d'occurences de chaque mot à l'intérieur
d'un fichier texte. Votre binôme ayant déjà commencé le travail,
il est arrivé au code suivant qui calcule le nombre d'occurences
de mots dans une ligne d'un fichier. Malheureusement,
il ne se souvient plus comment ouvrir un fichier texte
(et le refermer proprement) ni comment lire ligne à ligne ce fichier.
Dans un browser web, il n'est pas rare d'effectuer plusieurs téléchargements
en parallèle sur plusieurs threads, chaque thread effectuant un téléchargement.
Au niveau de la partie graphique du browser, en plus de voir où en est
chaque téléchargement, il est souvent possible d'avoir une vue d'ensemble
indiquant sous la forme d'une seule valeur entre 0 et 100 où en est l'ensemble
des téléchargements.
On se propose d'écrire une classe Java
ProgressionManager dont
le but est de fournir une valeur agrégée d'un ensemble de valeurs de progression
indiquées par différentes threads.
Pour simplifier le problème nous allons considérer que le nombre de threads
dont on veut surveiller la progression est connu à la création d'une instance
de
ProgressionManager et ne change pas pour toute la durée de vie de l'objet.
Enfin pour vous aider, il n'est pas nécessaire d'utiliser des classes du paquetage
java.util.concurrent; essayez de penser à des choses simples.
public class ProgressionManager {
//TODO
public ProgressionManager(int parties) {
if (parties < 0) {
throw new IllegalArgumentException();
}
this.parties = parties;
}
public int globalProgress() {
//TODO
}
public void progress(int completion) {
if (completion < 0 || completion > 100) {
throw new IllegalArgumentException();
}
//TODO
}
//TODO
}
Le constructeur prend un nombre de threads participantes en paramètre qui correspond
au nombre de threads qui vont pouvoir reporter leur progression.
La méthode
progress est appelée par chaque thread qui veut signaler
sa progression. La valeur de progression,
completion, est une valeur
entre 0 et 100 (compris).
La méthode
globalProgress renvoie la progression globale.
On peut voir la progression globale comme étant la somme des progressions
de chaque thread divisée par le nombre de threads participantes.