# TP3 Génie Logiciel ~~~~ Alif Aizat MOHD NOOR Licence 2 Informatique Université de La Rochelle 08/10/2019 ~~~~ ## Exercice 1 : Respect des conventions de codage - google java style MainGoldBach.java ```java= package goldbach; /** * La classe Goldbach pour le TP3 Génie Logiciel. * * @author alifaizat */ class Goldbach { /** * Un tableau boolean pour une liste des entiers. */ private boolean[] isprime; /** * Un entier prime. */ private int primes; /** * Une liste des entiers. */ private int[] list; /** * Retourner le nb de nombre dans le tableau des entiers correspondant. * * @param n le nombre de parcours souhaité * @return le nombre de nombre prime dans le tableau */ public int getPrimes(final int n) { // count primes this.primes = 0; for (int i = 2; i < n; i++) { if (isprime[i]) { primes++; } } return primes; } /** * Retourner un string de résultat. * * @param n le nombre de parcours * @return un string de résultat */ public String getComponents(final int n) { isprime = new boolean[n]; for (int i = 2; i < n; i++) { isprime[i] = true; } // determine primes < N using Sieve of Eratosthenes for (int i = 2; i * i < n; i++) { if (isprime[i]) { for (int j = i; i * j < n; j++) { isprime[i * j] = false; } } } primes = getPrimes(n); list = new int[primes]; System.out.println("Done tabulating primes."); // store primes in list int x = 0; for (int i = 0; i < n; i++) { if (isprime[i]) { list[x++] = i; } } // check if N can be expressed as sum of two primes int left = 0, right = primes - 1; while (left <= right) { if (list[left] + list[right] == n) { break; } else if (list[left] + list[right] < n) { left++; } else { right--; } } if (list[left] + list[right] == n) { return (list[left] + " + " + list[right]); } else { return (n + " not expressible as sum of two primes"); } } } /** * La classe main pour le projet Goldbach. * * @author alifaizat */ public class MainGoldBach { /** * Prevenir l'instantiation. */ private MainGoldBach() { } /** * Main method. * * @param args les arguments */ public static void main(final String[] args) { final int param = 42; Goldbach g = new Goldbach(); System.out.println(g.getComponents(param)); } } ``` <br><br> ## Exercice 2: Metrics pour Eclipse 1. Il y a 28 métriques disponibles | A | AC | C | D | | -------- | -------- | -------- | -------- | | **EC** | **I** | **NCP** | **NIP** | | **LCC** | **LCOM1**| **LCOM2**| **LCOM3**| | **LCOM4**| **LCOM5**| **NAK** | **NOC** | | **NOF** | **NOM** | **NOSF** | **NOSM** | | **NTM** | **TCC** | **WMC** | **NBD** | | **NOP** | **VG** | **LOC** | **LOCm** | <br> 2. La métrique qui donne la complexité cyclomatique des méthodes est VG <br> 3. Les métriques AC/EC n'ont pas de sens dans ce package car il n'y a que deux classes qui n'héritent pas de l'un à l'autre <br> 4. Le Lack Of Cohesion Method ![](https://i.imgur.com/6OSpldp.png) ![](https://i.imgur.com/VupmFHb.png) <br> ```jsx= M = 2 N = 3 LCOM = 1 - (M + F)/M*F LCOM = 1 - (3 + 2)/(3*2) LCOM = 0.16666666666 LCOM ~ 0.17 ``` <br> ## Exercice 3: Refactoring ```java= package goldbach; /** * La classe Goldbach pour le TP3 Génie Logiciel. * * @author alifaizat */ class Goldbach { /** * Un tableau boolean pour une liste des entiers. */ private boolean[] isprime; /** * Un entier prime. */ private int primes; /** * Une liste des entiers. */ private int[] list; /** * Retourner le nb de nombre dans le tableau des entiers correspondant. * * @param n le nombre de parcours souhaité * @return le nombre de nombre prime dans le tableau */ public int getPrimes(final int n) { // count primes this.primes = 0; for (int i = 2; i < n; i++) { if (isprime[i]) { primes++; } } return primes; } /** * Retourner un string de résultat. * * @param n le nombre de parcours * @return un string de résultat */ public String getComponents(final int n) { isprime = new boolean[n]; for (int i = 2; i < n; i++) { isprime[i] = true; } // determine primes < N using Sieve of Eratosthenes for (int i = 2; i * i < n; i++) { if (isprime[i]) { for (int j = i; i * j < n; j++) { isprime[i * j] = false; } } } primes = getPrimes(n); list = new int[primes]; return extractFonction(n); } /** * Stockages des valeurs. * @param n param * @return string */ public String extractFonction(final int n) { System.out.println("Done tabulating primes."); // store primes in list int x = 0; for (int i = 0; i < n; i++) { if (isprime[i]) { list[x++] = i; } } // check if N can be expressed as sum of two primes int left = 0, right = primes - 1; while (left <= right) { if (list[left] + list[right] == n) { break; } else if (list[left] + list[right] < n) { left++; } else { right--; } } if (list[left] + list[right] == n) { return (list[left] + " + " + list[right]); } else { return (n + " not expressible as sum of two primes"); } } } /** * La classe main pour le projet Goldbach. * * @author alifaizat */ public class MainGoldBach { /** * Prevenir l'instantiation. */ private MainGoldBach() { } /** * Main method. * * @param args les arguments */ public static void main(final String[] args) { final int param = 42; Goldbach g = new Goldbach(); System.out.println(g.getComponents(param)); } } ``` <br> <a href="https://hackmd.io/@AlifAizat/SJoBq1c_B">link</a>