UML

Introduction à UML
Author

Ludovic Deneuville

UML (Unified Modeling Language) est un langage de modélisation graphique largement utilisé dans le domaine de l’ingénierie logicielle. Il fournit un ensemble de notations et de diagrammes standardisés pour représenter visuellement différents aspects d’un système logiciel.

L’objectif principal d’UML est de faciliter la communication, la compréhension et la documentation des systèmes logiciels complexes. Il permet aux concepteurs, développeurs et parties prenantes de collaborer efficacement en utilisant des diagrammes compréhensibles et normalisés.

Les 3 principaux diagrammes :

Tip

Memento UML disponibles à la bibliothèque

1 Diagramme de cas d’utilisation

Un diagramme de cas d’utilisation UML (Unified Modeling Language) est un type de diagramme utilisé pour représenter les interactions entre les acteurs (utilisateurs ou systèmes externes) et le système logiciel. Il met l’accent sur les fonctionnalités fournies par le système du point de vue des utilisateurs.

Un diagramme de cas d’utilisation se compose de plusieurs éléments clés :

  • Acteur : Un acteur représente un rôle joué par un utilisateur ou un système externe qui interagit avec le système logiciel. Il peut s’agir d’une personne, d’un autre système, d’un périphérique matériel, etc. Les acteurs sont souvent représentés par des silhouettes.
  • Cas d'utilisation : Un cas d’utilisation représente une fonctionnalité ou une action que le système logiciel fournit à ses acteurs. Il décrit une interaction entre les acteurs et le système pour atteindre un objectif spécifique.
  • Relation d'association : Les relations d’association connectent les acteurs aux cas d’utilisation pour montrer quel acteur utilise quel cas d’utilisation.

Les diagrammes de cas d’utilisation UML sont utilisés pour :

  • capturer les exigences fonctionnelles du système
  • identifier les acteurs impliqués
  • décrire les interactions entre les acteurs et le système
  • définir les fonctionnalités attendues du système

Ils aident à communiquer efficacement les besoins des utilisateurs et à guider le processus de développement logiciel en se concentrant sur les objectifs de l’utilisateur final.

1.1 Outils

1.2 Exemple

graph LR

  player[",-. \n`-' \n/|\ \n |\n/ \ \n Player"]
  organizer[",-. \n`-' \n/|\ \n |\n/ \ \n Organizer"]

  player --> modifyProfile([Modify Profile])
  player --> register([Register Tournament])
  player --> becomeArbiter([Become Arbiter])
  
  organizer --> createTournament([Create   Tournament])
  organizer --> modifyTournament([Modify Tournament])

2 Diagramme de classe

Un diagramme de classes UML (Unified Modeling Language) est un type de diagramme utilisé pour représenter la structure statique d’un système logiciel. Il montre les classes du système, leurs attributs, leurs méthodes et les relations entre les classes.

Un diagramme de classes UML se compose de différentes boîtes représentant les classes, avec des lignes qui connectent ces boîtes pour montrer les relations entre les classes. Voici quelques éléments clés que l’on retrouve généralement dans un diagramme de classes :

  • Classe : Elle est représentée par une boîte avec trois sections :
    • le nom de la classe
    • les attributs
    • les méthodes
  • Relation d'association : Une relation d’association représente une connexion entre 2 classes. Elle montre que les objets d’une classe sont associés aux objets d’une autre classe. Par exemple, une classe Étudiant peut être associée à une classe Cours via une relation d’association pour indiquer que les étudiants suivent des cours.
  • Héritage : Cela permet de modéliser les concepts de généralisation et de spécialisation.
  • Agrégation et Composition : Ces relations décrivent la structure des classes et leur association avec d’autres classes.
    • L’agrégation est une relation où une classe peut être composée d’autres classes, mais ces classes peuvent exister indépendamment
    • La composition est une relation plus forte où une classe est composée d’autres classes, et ces classes n’existent pas sans la classe parente.
  • Multiplicité : La multiplicité spécifie le nombre d’objets d’une classe associés à un ou plusieurs objets d’une autre classe dans une relation d’association. Elle est représentée par des nombres ou des symboles tels que “0..1”, “1”, “*“, etc.

Les diagrammes de classes UML sont utilisés pour modéliser la structure conceptuelle d’un système logiciel, identifier les classes et leurs relations. Ils fournissent une représentation visuelle et standardisée pour analyser, concevoir et documenter les systèmes orientés objet.

2.1 Outils

2.2 Exemple

classDiagram
    class Adresse {
        +numero: string
        +rue: string
        +ville: string
    }

    class Personne {
        +nom: string
        +prenom: string
        +age: int
        +demenager()
    }

    class Conducteur {
        +no_permis: string
    }

    class Voiture {
        +immat : string
        +vitesse: float
    }

    class Roue {
        +taille: string
    }

    class Carrosserie {
        +couleur: string
    }

    Personne "*" -- "1" Adresse
    Personne <|-- Conducteur
    Conducteur "*" -- "*" Voiture : conduit
    Voiture o-- Roue
    Voiture *-- Carrosserie

3 Exercice

Un Courrier peut être de 2 types : Lettre ou Colis.

Une Lettre est caractérisée par :

  • poids (en grammes)
  • mode d’expédition (Rapide ou Normal)
  • adresse de destination
  • format (A3 ou A4)

Un Colis est caractérisé par :

  • poids (en grammes)
  • mode d’expédition (Rapide ou Normal)
  • adresse de destination
  • volume (en litres)

Chaque Courrier dispose des méthodes suivantes :

  • __init__() : un constructeur
  • __str__() : une méthode qui retourne une chaine décrivant le Courrier
  • calcul_affranchissement()
    • pour une Lettre : tarif_base + poids * 0.001
      • avec tarif_base = 2€50 pour le format A4 et 3€50 pour le A3
    • pour un colis : volume / 4 + poids * 0.001
    • en mode d’expédition rapide, les montants ci-dessus sont doublés

Questions

Exemple de résultat attendu

>>> l1 = Lettre("Bordeaux", 80, "normal", "A4")
>>> print(l1)
Lettre : 
    Adresse destination : Bordeaux
    Poids : 80 grammes
    Mode : normal
    Format : A4
    Prix du timbre : 2.58
>>> c1 = Colis("Rennes", 3500, "rapide", 2.25)
>>> print(c1)
Colis : 
    Adresse destination : Rennes 
    Poids : 3500 grammes 
    Mode : rapide 
    Volume : 2.25 litres 
    Prix du timbre : 8.12

La correction est disponible ici