Fondamentaux des Diagrammes de Classes UML : Comprendre les Relations

Le langage UML (Unified Modeling Language) est un standard incontournable pour la modélisation des systèmes logiciels. Il permet de visualiser la structure d'un système à travers des diagrammes de classes. Une classe est représentée par un rectangle divisé en trois sections : le nom de la classe, les attributs et les méthodes. L'accessibilité est définie par des symboles spécifiques : + pour public, # pour protected et - pour private.

1. La Dépendance (Dependency)

La dépendance est la relation la plus faible. Elle indique qu'une classe utilise une autre classe de manière temporaire. Généralement, cela se traduit par le fait qu'une classe reçoit une instance d'une autre classe en tant que paramètre d'une méthode ou l'utilise comme variable locale.

En UML, elle est représentée par une ligne pointillée avec une flèche ouverte.


public class Imprimante {
    public void imprimer(Document doc) {
        System.out.println("Impression de : " + doc.getContenu());
    }
}

public class Document {
    public String getContenu() {
        return "Contenu du document...";
    }
}

2. L'Association

L'association représente une relaiton structurelle durable entre deux classes. Une classe possède une référence vers une autre sous forme de variable d'instance (attribut). Elle peut être unidirectionnelle, bidirectionnelle ou même réflexive (auto-association).

En UML, on utilise une ligne pleine (avec une flèche pour le sens unidirectionnel).


// Association unidirectionnelle
public class Utilisateur {
    private Profil profil;
}

public class Profil {
    private String biographie;
}

// Auto-association (structure de données type arbre/liste)
public class Element {
    private Element suivant;
}

3. La Généralisation (Héritage)

La généralisation correspond au concept d'héritage en programmation orientée objet. Elle définit une relation "est un" (is-a) entre une classe parente (super-classe) et une classe enfant (sous-classe).

Elle est représentée par une ligne pleine se terminant par un triangle vide pointant vers la classe parente.


public class Vehicule {
    protected String marque;
    public void demarrer() { }
}

public class Avion extends Vehicule {
    private int altitudeMaximale;
    public void decoller() { }
}

4. La Réalisation (Implémentation)

La réalisation lie une interface à une classe qui implémente ses méthodes. L'interface définit un contrat de comportement que la classe concrète s'engage à respecter.

En UML, elle est symbolisée par une ligne pointillée se terminant par un triangle vide.


public interface Volant {
    void voler();
}

public class Oiseau implements Volant {
    @Override
    public void voler() {
        System.out.println("L'oiseau bat des ailes.");
    }
}

5. L'Agrégation

L'agrégation est une forme spécifique d'association représentant une relation "tout-partie" (has-a). Les composants peuvent exister indépendamment du conteneur. Si le conteneur est détruit, les composants ne le sont pas forcément.

Elle est représentée par une ligne pleine avec un losange vide du côté du "tout".


public class Departement {
    private Professeur titulaire;

    // Le professeur est injecté, il existe indépendamment du département
    public Departement(Professeur prof) {
        this.titulaire = prof;
    }
}

public class Professeur {
    private String nom;
}

6. La Composition

La composition est une variante plus forte de l'agrégation. Ici, la vie des composants est strictement liée à celle du conteneur. Si le "tout" disparaît, les "parties" disparaissent également.

Elle est représentée par une ligne pleine avec un losange plein du côté du conteneur.


public class Batiment {
    private Piece salleDeSejour;

    public Batiment() {
        // La pièce est créée avec le bâtiment et ne peut exister sans lui
        this.salleDeSejour = new Piece("Séjour");
    }
}

public class Piece {
    private String nom;
    public Piece(String nom) { this.nom = nom; }
}

L'intensité du couplage antre les classes augmente progressivement selon cette hiérarchie : Dépendance < Association < Agrégation < Composition.

Étiquettes: UML Object-Oriented-Design Software-Architecture Java

Publié le 26 juin à 20h56