Cours BUT Info

Le diagramme de classes

Vocabulaire UML (classes, attributs et multiplicités, associations, navigabilité), niveau de détail demandé — et la méthode de conception : une méthode par cas d'utilisation, enrichie pas à pas sur le cinéma.

Rappels de conception orientée objet

Représenter un système comme un ensemble d'objets qui interagissent. Un objet est une entité concrète ou abstraite du domaine (vélo, compte bancaire, liste chaînée), décrit par un état (ses attributs) et des comportements (ses opérations — les méthodes en Java). Une classe décrit les objets de même nature : exemple CompteBancaire — attributs numéro, propriétaires, solde ; opérations créditer, débiter, connaître le solde.

Le diagramme de classes et ses usages

Il décrit un ensemble de classes et leurs relations : lors de la conception (l'architecture d'un futur logiciel), comme documentation technique d'un existant, ou pour la génération de code. Dans ce cours, il sert à la conception.

Vocabulaire

Éléments limités au programme : classe, classe abstraite, interface ; relations : association, héritage, implémentation (flèche triangle pleine pour l'héritage, pointillée pour l'implémentation).

Un attribut est défini par son nom, son type (simple : int, double, String, char, Date — ou non simple, par association) et sa multiplicité :

MultiplicitéSignification
1exactement un (par défaut)
0..1attribut optionnel
1..★au moins un — collection non vide
★0 ou plus — collection possiblement vide
n..mentre n et m

La visibilité (+/−/#) sera omise dans ce cours.

Associations : en ligne ou par association

Une association se dessine par un trait (bi-directionnelle) ou une flèche (uni-directionnelle). La règle de choix :

Si le type de l'attribut fait partie du diagramme de classes, l'attribut se déclare par association — sinon (comme Devise), il se déclare en ligne.

Dans Personne : nom et adresse en ligne, comptes par association (multiplicité *). Dans CompteBancaire : numéro et solde en ligne, devise en ligne (type hors diagramme), propriétaire1 et propriétaire2 par association (multiplicités 1..2 : le premier ne peut pas être null). La navigabilité se justifie fonctionnellement : une Salle connaît les Film programmés (Collection<Film>, multiplicité 0..5 avec programmer(Film f) qui vérifie la limite), mais un Film n'a pas d'attribut lié aux salles.

Le niveau de détail demandé

Dans vos diagrammes : chaque classe a trois zones (nom, attributs, opérations) ; attribut en ligne avec nom, type et multiplicité ; attribut par association avec nom et multiplicités. Sont omis de préférence pour la lisibilité : la visibilité et les getters/setters.

La méthode de conception

Objectif : concevoir une application qui répond aux besoins.

  1. Créer une classe Main.
  2. Y ajouter une méthode par cas d'utilisation, avec les données en entrée de la fiche descriptive comme paramètres.
  3. Enrichir le diagramme jusqu'à ce que chaque méthode soit implémentable — ni plus, ni moins.

Le cours déroule l'exemple du cinéma pas à pas. Enregistrer film : stocker titre, description et image → la classe Film apparaît. Planifier séance : il faut une Séance liée à Film (rôle film 1) — la salle est d'abord un simple attribut salle : String. Vendre tickets : la garantie « pas plus de tickets que la capacité de la salle » fait de la salle une vraie classe Salle avec nbPlaces, et la séance suit ses ventes avec nbTicketsVendus ; le scénario alternatif (« il ne reste pas assez de places ») justifie le type de retour <boolean, int> de vendreTicket — succès et places restantes à afficher. Calculer chiffre d'affaires : par film et par période. Enfin, des méthodes d'aide rangent les traitements dans les classes qui possèdent les données : vendreTickets(qté) sur Séance, et calculerChiffreAffaires(débutPériode, finPériode) sur Film, qui connaît ses séances (rôle séances *).

MainenregistrerFilm(titre : String, descr : String, image : Path)planifierSéance(film : Film, salle : String,    début : DateTime, fin : DateTime)vendreTicket(séance : Séance, quantité : int) : <boolean, int>calculerChiffreAffaires(film : Film,    débutPériode : Date, finPériode : Date)SallenbPlaces : intSéancedébut : DateTimefin : DateTimenbTicketsVendus : intvendreTickets(qté : int)  : <boolean, int>Filmtitre : Stringdescr : Stringimage : PathcalculerChiffreAffaires(  débutPériode : Date, finPériode : Date)séances *films *salle 1séances *film 1

Si la méthode est appliquée avec rigueur, le diagramme obtenu identifie les informations nécessaires et leurs relations, sans rien de superflu. C'est un premier diagramme de classes de conception — il ne sera pas forcément implémenté tel quel, mais c'est le point de départ demandé en R3.03.

A retenir

  • attribut : nom, type, multiplicité — par association si le type est dans le diagramme ;
  • navigabilité justifiée par la fonction ;
  • conception : classe Main, une méthode par cas d'utilisation, enrichir pour rendre chaque cas implémentable ;
  • vocabulaire à connaître : classe, association, opération, multiplicité, attribut en ligne / par association.

Sujet de DS 2022.pdf

R3.03 · Pour s'entraîner : le diagramme de classes de Sansouci est la question 3 du DS 2022

Consultation seule — téléchargement désactivé

Chargement du document…

Dernière mise à jour le

Sur cette page