UNIVERSITE DE LA MANOUBA
Module : Génie Logiciel I
-----¤¤¤¤-----
Classes : II.2
ECOLE NATIONALE DES SCIENCES DE L'INFORMATIQUE
A-U : 2016-2017
TD 3 : Conception
Exercice 1
Soit le code Java suivant :
package fr.netapsys.training;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class A {
public String manageUser( String login, String password)
throws ClassNotFoundException, SQLException {
String uiMessage = "";
User user = new User();
// first check user parameters
boolean isParametersValid = !login.equals(null) &&
!password.equals(null)&& ( login.length() > 3 ) ;
// then retrieve everything from database
if (isParametersValid) {
Class.forName("org.postgresql.Driver");
String url = "jdbc:postgresql://localhost:5433/CBDB";
String dbUser = "cashbird";
String dbPassword = "cashbird";
Connection connection = DriverManager.getConnection(url, dbUser,
dbPassword);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(
"SELECT * FROM utilisateur WHERE login='" + login + "' AND
password = '" + password+"'");
while(resultSet.next()){
user.setFirstname(resultSet.getString("FIRSTNAME"));
user.setLastname(resultSet.getString("LASTNAME"));
Publicité
user.setAuthenticate(true);
}
statement.close();
connection.close();
// finally format GUI message
if (user.isAuthenticate()) {
uiMessage = "M. " + user.getFirstname() + " " +
user.getLastname() + ", bienvenue chez NETAPSYS !";
}else {
uiMessage = "login ou mot de passe incorrect !";
}
return uiMessage;
}else {
uiMessage = "Vous devez renseignez tous les champs !";
}
return uiMessage;
}}
1. Que fait ce code.
2. Evaluer la cohésion de ce code. Expliquer.
3. Proposer une solution qui améliore la cohésion.
1/3
Exercice 2
1. Quels sont les problèmes de cohésion liés au code C1. Proposer une solution pour le corriger.
2. Quels sont les problèmes de couplage liés au code C2. Proposer une solution pour le corriger.
C1
C2
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
Publicité
double circonference = 2 Math.PI rayon;
// Affichage du circonference
System.out.println("La
circonference);
}
circonference
est
" +
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) {
System.out.print((char)(’a’ + ligne));
++colonne; }
}
}
Exercice 3
Partie1 : Cohésion
Soit la classe java suivante :
Public class Carrée
Publicité
{
Public double lectureReel (String msg);
Public double lectureReelValidee (String msg, double borneInf, double
borneSup);// permet de lire un réel compris entre borneInf et borneSup
Public double lectureReelPositif (String msg);
Public double lireCôté ();
Public double SurfaceCarrée (double côté);
Public double afficheSurface (double surface);
}
1. Préciser le type de la cohésion de cette classe.
2. Quels sont les problèmes liés à la cohésion de cette classe. Proposer une solution pour les
corriger.
Partie2 : Couplage
Soit les deux classes Voiture et Roue :
class Voiture {
Roue roue;
public void montage(){
roue = new Roue();
roue.diametre = 12.5;
roue.poids = 19;
}
2/3
}
class Roue {
public double poids;
public double diametre;
}
3. Préciser le type du couplage entre les deux classes.
4. Quels sont les problèmes liés à ce couplage. Proposer une solution pour corriger.
Exercice 4
Pour le programme C++ ci-dessous :
1. Présenter le couplage entre classes par un diagramme de classes. Préciser le type du
couplage.
2. Calculer la métrique de manque de cohésion des méthodes LCOM.
class Point {
float x; float y;
public :
Point(float nouvx, float nouvy) { x=nouvx; y=nouvy; }
Publicité
getx() { return x; }
gety() { return y; }
};
class Rectangle {
Point Pt1; Point Pt2;
public :
Rectangle(float pt1x, float pt1y, float pt2x, float pt2y) :
Pt1(pt1.x, pt1.y), Pt2(pt2.x, pt2.y) { }
float dist(Point A, Point B)
{ return sqrt( sqr( A.getx()-B.getx() ) + sqr( A.gety()-B.gety() ) ) ; }
bool PtInRect(Point A, Rectangle R) { // sans l'utilisation de Pt1 et Pt2 }
};
class NoeudListe {
rectangle noeud; NoeudListe suivant;
public :
NoeudListe(Rectangle *nvRect) { noeud = nvRect; suivant=null; }
NoeudListe * getSuivant () { return suivant; }
void setSuivant (NoeudListe * suiv) { suivant = suiv; }
Rectangle * getRectangle() { return noeud; }
};
class ListeRectangles {
NoeudListe * tete; static int compteur; static int couleur ;
public:
ListeRectangles () { tete = null; }
void ajout(float x1, float y1, float x2, float y2)
{ Rectangle * tmpRect = new Rectangle(x1,y1,x2,y2);
NoeudListe * tmpNoeud = new NoeudListe(tmpRect);
tmpNoeud->setSuivant(tete);
tete = tmpNoeud; }
};
Exercice5 : Conception architecturale
Proposer une architecture pour chacun des exercices du TD2. Indiquez le(s) style(s)
d’architectures utilisé(s) en justifiant.
3/3