Correction Execice2, TD4

Programming, Cohesion, Coupling · exam

Voir tous les documents en programmation

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();

}

}