Correction Execice2, TD4
Exercice 2
1. Quels sont les problèmes de cohésion liés au code C1. Proposer une solution
pour corriger C1.
2. Quels sont les problèmes de couplage liés au code C2. Proposer une solution
pour corriger C2.
C1
public static void circonferenceCercle()
{
// Lecture du rayon
System.out.print("Entrer le rayon du cercle: ");
double rayon = Keyboard.readDouble();
while(Keyboard.error() || rayon < 0)
{
System.err.println("Mauvaise valeur de rayon.");
System.out.print("Entrer le rayon du cercle: ");
rayon = Keyboard.readDouble();
}
// Calcul du circonference
double circonference = 2 Math.PI rayon;
// Affichage du circonference
System.out.println("La circonference est " +
circonference);
}
Publicité
C2
public class Triangle {
// Colonne courante, ligne courante et nombre
total de lignes
public static int colonne, ligne, total;
// Affiche un triangle de nbLignes lignes.
public static void afficheTriangle(int nbLignes) {
total = nbLignes;
for(ligne = 0; ligne < total; ++ligne) {
colonne = 0;
afficheEspaces();
afficheLettres();
System.out.println(); }
}
// Affiche les espaces au debut de la ligne
courante.
public static void afficheEspaces() {
while(colonne < ligne) {
System.out.print(’ ’);
++colonne; }
}
// Affiche les ´etoiles de la ligne courante.
public static void afficheLettres() {
while(colonne < total) {
Publicité
System.out.print((char)(’a’ + ligne));
++colonne; }
}
}
1/Problèmes de cohésion
• trois taches indépendantes : lecture, calcul et affichage.
• Problèmes de réutilisation et de maintenabilité
Solution : Fractionnement en méthodes plus cohésives et plus réutilisables
// Lit le rayon (positif) d’un cercle au clavier.
public static double lireRayon()
{
System.out.print("Entrer le rayon du cercle: ");
double rayon = Keyboard.readDouble();
while(Keyboard.error() || rayon < 0)
{
System.err.println("Mauvaise valeur de rayon.");
System.out.print("Entrer le rayon du cercle: ");
rayon = Keyboard.readDouble();
}
return rayon;
}
// Calcule la circonference d’un cercle de rayon donne.
public static double circonferenceCercle(double rayon)
{
Publicité
return 2 Math.PI rayon;
}
// Affiche la circonference d’un cercle
public static void afficheCirconference(double circonference)
{
System.out.println("La circonference est " + circonference);
}
2/Problèmes de couplage
• ces méthodes ne sont pas réutilisables
• maintenabilité: le changement d’une méthode ou variable affectera le comportement
d’autres méthodes
• afficheEspaces() et afficheLettres() dépendent des variables globales colonne, ligne
et total
• afficheEspaces() dépend d’afficheTriangle()
• afficheLettres() dépend d’afficheEspaces() et d’afficheTriangle()
et Généraliser
son
enlever
couplage
Solution : Ecrire des méthodes indépendantes
Eviter autant que possible les variables globales (statiques de classe)
Réécrire afficheEspaces() pour enlever son couplage
public static void afficheEspaces(int combien)
{
Publicité
int i;
for(i = 0; i < combien; ++i)
System.out.print(’ ’);
}
Réécrire afficheLettres() pour
afficheEspaces() pour repeteCaracteres()
public static void repeteCaracteres(char c, int combien)
{
int i;
for(i = 0; i < combien; ++i)
System.out.print(c);
}
Réécrire afficheTriangle() pour enlever son couplage
public static void afficheTriangle(int nbLignes)
{
int ligne;
for(ligne = 0; ligne < nbLignes; ++ligne)
{
repeteCaracteres(’ ’, ligne);
repeteCaracteres((char)(’a’ + ligne), nbLignes - ligne);
System.out.println();
}
}