# 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


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