Génie Logiciel I Exam

Université de la Manouba
Page 1 sur 3Lecteur de document UniversityLib

Génie Logiciel I Exam

Université de la Manouba · Programming, Mathematics · exam

Browse all génie logiciel documents

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

Advertisement

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

Advertisement

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

Advertisement

{

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; }

Advertisement

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