Vous êtes sur la page 1sur 11

Rapport de projet

CPOA : Projet Refactoring

Projet CPOA 2021 – Matthieu Barbe | Maxime Béziat


Table des matières
1. Notre équipe 3
2. Comment lancer le programme ? 3
3. Refactoring 4
Patron Singleton 4
Extrait du Patron Singleton 4
Pourquoi le patron Singleton ? 4
Patron Composite 5
Extrait du Patron Composite 5
Patron Factory 7
D’autres Patron … 8
4. Tests 9
Listes des test ajoutés 9
5. Les améliorations ajoutés 10
Affichage des commandes au lancement 10
Messages d’erreurs 10
6. Critères d'évaluation 11
7. Conclusion 11

Projet CPOA 2021 – Matthieu Barbe | Maxime Béziat


1. Notre équipe

- BEZIAT Maxime
- BARBE Matthieu

2. Comment lancer le programme ?

Projet CPOA 2021 – Matthieu Barbe | Maxime Béziat


3. Refactoring

Patron Singleton

Extrait du Patron Singleton

//patron singleton
private static final ActionListTaskList uniqueInstance = new
ActionListTaskList();
public static ActionListTaskList getInstance() {
return uniqueInstance;
}

Pourquoi le patron Singleton ?

L’objectif du patron “singleton” est de nous assurer qu’une seule instance soit créée. Par exemple, un
seul fichier système peut être créé, ainsi qu’un seul gestionnaire de fenêtres.

Cela nous permet d’éviter de créer plusieurs processus.

Ce patron de conception, en plus de sa facilité à être implémenté, va nous permettre d’avoir un


accès contrôlé à une instance unique, être plus flexible et d’avoir un nombre variable d’instances.

Projet CPOA 2021 – Matthieu Barbe | Maxime Béziat


Patron Composite

Extrait du Patron Composite

package application.action;

import java.util.List;

import com.codurance.training.tasks.BlocNote;
import com.codurance.training.tasks.Projet;
import com.codurance.training.tasks.Tache;

import application.GenericAction;

public class ActionAddTask extends GenericAction<Object> {

private String name = "add tache";

@Override
public void execute(Object e) throws Exception {
Projet p = null;

String nomP = ((BlocNote) e).getCurrentCommand().split("


")[2];
String contenuT = ((BlocNote)
e).getCurrentCommand().split(" ")[3];

Projet CPOA 2021 – Matthieu Barbe | Maxime Béziat


for(Projet projet : ((BlocNote)
e).getListeProjets()) {
if(projet.getName().equals(nomP)) {
p = projet;
} else {
p = null;
}
}

if (p == null) {
System.out.printf("Could not find a project with the
name \"%s\".", ((Projet) e).getName());
System.out.println();
return;
}

Tache t = new Tache(((BlocNote) e).getNumTache(), contenuT,


false);

((BlocNote) e).setNumTache();

((BlocNote) e).ajouterTache(p,t);
}

@Override
public String actionMessage() {
return name;
}

@Override
public int getNbParam() {
return 2;
}
}

Projet CPOA 2021 – Matthieu Barbe | Maxime Béziat


Pourquoi le patron Composite ?

Le patron composite est assez difficile à mettre en œuvre pour ceux qui nous ont fait perdre
beaucoup de temps de développement et d’optimisation au début.

Cependant, grâce à ce patron, le programme à une structure d’objets fortement imbriqués, à un


code assez simple et facile à comprendre et surtout cela permet une bonne capacité d’expansion.

L’ajout d’action se fait très simplement une fois que le patron composite est implémenté.

Ici, on va transformer notre menu en plusieurs objets qui nous permettent de modifier les
commandes ou d’en ajouter et supprimer très facilement.

Patron Factory

On aurait pu dans notre programme ajouter le Patron Factory afin de prévoir les futures
modifications de notre application puisque cela nous aurait laissé le choix aux sous-classes des
classes à instancier.

Projet CPOA 2021 – Matthieu Barbe | Maxime Béziat


D’autres Patron …

Au cours de ce projet, nous avons aussi vu différent Patron de Conception sur Internet que l’on a pas
vu en cours (Patron Commande, patron de Méthode, patron Monteur, …).

Ces différents patrons tel que le patron Commande aurait pu être ajouté dans notre application afin
d'améliorer la flexibilité et la simplicité de notre code.

Patron Commande

Projet CPOA 2021 – Matthieu Barbe | Maxime Béziat


4. Tests

Listes des test ajoutés

@Test
public void testAddTask() {
ActionAddTask actionAddTask = new ActionAddTask();
System.out.println(actionAddTask.getNbParam());
assertEquals(actionAddTask.getNbParam(),2);
}

@Test
public void testAddProject() {
ActionAddProject actionAddProject = new
ActionAddProject();
System.out.println(actionAddProject.getNbParam());
assertEquals(actionAddProject.getNbParam(),1);
}

@Test
public void testCheck() {
ActionCheck actionCheck = new ActionCheck();
System.out.println(actionCheck.getNbParam());
assertEquals(actionCheck.getNbParam(),1);
}

@Test
public void testUncheck() {
ActionUncheck actionUncheck = new ActionUncheck();
System.out.println(actionUncheck.getNbParam());
assertEquals(actionUncheck.getNbParam(),1);
}

@Test
public void testHelp() {
ActionHelp actionHelp = new ActionHelp();
System.out.println(actionHelp.getNbParam());
assertEquals(actionHelp.getNbParam(),0);
}

@Test
public void testShow() {
ActionShow actionShow = new ActionShow();
System.out.println(actionShow.getNbParam());
assertEquals(actionShow.getNbParam(),0);
}

Projet CPOA 2021 – Matthieu Barbe | Maxime Béziat


5. Les améliorations ajoutés

Affichage des commandes au lancement

Pour simplifier le programme, nous avons ajouté au lancement du programme la liste des
commandes qu’il est possible de lancer.

Au lancement, la liste des commandes :

Messages d’erreurs

Dans notre version du programme, nous avons aussi mis en place un système de message lorsque
l’utilisateur essaie de cocher, décocher un projet qui ne peut pas exister (avec caractère).

Il y a aussi un message d’erreur si on essaye de cocher ou décocher un projet qui n’a pas été créé.

Projet CPOA 2021 – Matthieu Barbe | Maxime Béziat


6. Critères d'évaluation

Critère A/B/C Commentaire


Pertinence des choix A
Qualité globale du code B
Qualité de la documentation A
Nombre et difficulté A Beaucoup de difficultés surtout
pour le patron Composite.

7. Conclusion
Ce projet de CPOA nous a permis de connaître et comprendre beaucoup de patrons même en dehors
des heures de cours.
Ces Patrons qui peuvent être parfois “dur” à être implémenté ou “simple” permettent aux
programmes d’être plus flexible, maintenable mais surtout beaucoup plus compréhensible dans
l’ensemble.

Projet CPOA 2021 – Matthieu Barbe | Maxime Béziat