Module Java.11 – Bonnes pratiques
Objectif
Appliquer les bonnes pratiques Java : Clean Code, conventions de nommage, patterns simples, et organisation professionnelle du code.
Théorie
Clean Code
Noms clairs et descriptifs
// ❌ Mauvais
int d;
String s;
void calc() {}
// ✅ Bon
int nombreJours;
String nomUtilisateur;
void calculerMoyenne() {}
Méthodes courtes et focalisées
// ❌ Mauvais : fait trop de choses
public void traiterDonnees() {
// Validation
// Transformation
// Sauvegarde
// Envoi email
// ...
}
// ✅ Bon : une responsabilité
public void validerDonnees() {}
public void transformerDonnees() {}
public void sauvegarderDonnees() {}
DRY (Don't Repeat Yourself)
// ❌ Répétition
public void afficherNom1() {
System.out.println("Nom : " + nom);
}
public void afficherNom2() {
System.out.println("Nom : " + nom);
}
// ✅ Réutilisable
public void afficherNom() {
System.out.println("Nom : " + nom);
}
Commentaires utiles
// ❌ Mauvais : explique le "comment"
// Incrémente i de 1
i++;
// ✅ Bon : explique le "pourquoi"
// Réinitialise le compteur pour le prochain lot
i = 0;
Conventions Java
Nommage
- Classes : PascalCase (
Personne,GestionnaireUtilisateurs) - Méthodes/Variables : camelCase (
calculerMoyenne,nomUtilisateur) - Constantes : UPPER_SNAKE_CASE (
MAX_SIZE,API_URL) - Packages : lowercase (
com.monprojet)
Structure
public class MaClasse {
// 1. Constantes statiques
private static final int MAX_SIZE = 100;
// 2. Variables statiques
private static int count = 0;
// 3. Variables d'instance
private String nom;
private int age;
// 4. Constructeurs
public MaClasse(String nom) {
this.nom = nom;
}
// 5. Méthodes (getters/setters puis autres)
public String getNom() {
return nom;
}
public void afficher() {
// Code
}
}
Patterns simples
Singleton
Une seule instance de la classe.
public class Configuration {
private static Configuration instance;
private Configuration() {} // Constructeur privé
public static Configuration getInstance() {
if (instance == null) {
instance = new Configuration();
}
return instance;
}
}
// Utilisation
Configuration config = Configuration.getInstance();
Factory
Crée des objets sans exposer la logique de création.
public class PersonneFactory {
public static Personne creerEtudiant(String nom, int age, String ecole) {
return new Etudiant(nom, age, ecole);
}
public static Personne creerProfesseur(String nom, int age, String matiere) {
return new Professeur(nom, age, matiere);
}
}
Builder
Construit des objets complexes étape par étape.
public class PersonneBuilder {
private String nom;
private int age;
private String ville;
public PersonneBuilder nom(String nom) {
this.nom = nom;
return this;
}
public PersonneBuilder age(int age) {
this.age = age;
return this;
}
public Personne build() {
return new Personne(nom, age, ville);
}
}
// Utilisation
Personne p = new PersonneBuilder()
.nom("Jean")
.age(30)
.build();
Documentation JavaDoc
/**
* Classe représentant une personne
*
* @author Jean Dupont
* @version 1.0
* @since 1.0
*/
public class Personne {
/**
* Nom de la personne
*/
private String nom;
/**
* Constructeur
*
* @param nom Le nom de la personne
* @param age L'âge de la personne (doit être > 0)
* @throws IllegalArgumentException Si age <= 0
*/
public Personne(String nom, int age) {
if (age <= 0) {
throw new IllegalArgumentException("Age doit être > 0");
}
this.nom = nom;
this.age = age;
}
/**
* Obtient le nom de la personne
*
* @return Le nom de la personne
*/
public String getNom() {
return nom;
}
}
Génération :
javadoc -d docs src/com/monprojet/*.java
Organisation du code
Packages
Organiser par fonctionnalité :
com.monprojet
├── models/ # Modèles de données
├── services/ # Logique métier
├── controllers/ # Contrôleurs
├── utils/ # Utilitaires
└── exceptions/ # Exceptions personnalisées
Séparation des responsabilités
MVC (Model-View-Controller) :
- Model : Données et logique métier
- View : Affichage (console, GUI, etc.)
- Controller : Coordination entre Model et View
Exercice
-
Clean Code
- Refactorisez du code existant
- Améliorez les noms
- Raccourcissez les méthodes
-
Conventions
- Appliquez les conventions Java
- Organisez vos classes
- Respectez le nommage
-
Patterns
- Implémentez Singleton
- Créez une Factory
- Utilisez Builder
-
Documentation
- Ajoutez JavaDoc à vos classes
- Générez la documentation
- Vérifiez le résultat
-
Organisation
- Organisez en packages
- Séparez les responsabilités
- Créez une structure MVC
Quiz
-
Quelle convention pour les classes ?
- camelCase
- PascalCase
- UPPER_CASE
-
Que signifie DRY ?
- Don't Repeat Yourself
- Don't Repeat Yourself
- Do Repeat Yourself
-
Qu'est-ce qu'un Singleton ?
- Plusieurs instances
- Une seule instance
- Aucune instance
-
Que fait JavaDoc ?
- Compile le code
- Génère la documentation
- Exécute les tests
-
Quelle structure pour MVC ?
- Model-Value-Controller
- Model-View-Controller
- Method-View-Controller
Mini défi
Mission : Refactoriser un projet selon les bonnes pratiques
Prenez un projet Java existant et refactorisez-le :
Améliorations :
- Clean Code (noms, méthodes courtes, DRY)
- Conventions Java (nommage, structure)
- Patterns (Singleton, Factory si approprié)
- Documentation JavaDoc complète
- Organisation en packages
Critères :
- ✅ Code propre et lisible
- ✅ Conventions respectées
- ✅ Documentation complète
- ✅ Structure professionnelle
Objectif : Appliquer toutes les bonnes pratiques pour créer du code professionnel.
Validation : Vous pouvez passer au module suivant quand votre code respecte les bonnes pratiques.