TD de modélisation
I. COURS
classDiagram
A --> B
C --|> D
E --* F
G -- H
I ..|> J
- A-B : ??? (svp aider moi je sais pas)
- C-D : Héritage (classes)
- E-F : Composition (possède)
- G-H : Association
- I-J : Implémentation (interface)
II. EXOS
Exercice 1 : Diagramme de classe, échauffement
1) Tout auteur a écrit au moins un livre :
classDiagram
Auteurs "1" --|> "1..n" Livre
Livre
2) Un rectangle à deux sommet qui sont des points. On construit un rectangle à partir des coordonnées de deux points. IL est possible de calculer son périmètre et sa surface, ou encore le translater
classDiagram
Rectangle "0..n" --|> "2" Point
Point
class Rectangle{
-Point[] points
+Rectangle(Point p1, Point p2)
+void Translater(Point p)
+double Surface()
+double Perimetre()
}
class Point{
+int x
+int y
}
3) Les personnes peuvent être associées à des établissements en tant qu'étudiants mais aussi professeurs
classDiagram
Etablissement
Personne "Professeur" --|> Etablissement
Personne "Etudiant" --|> Etablissement
4) Tout es jours le facteur distribue des plis recommandés dans une zone géographique qui lui est affectée. Les habitants sont également associées à une zone géographique. Les recommandées sont de deux sortes : lettres ou colis. Comme plusieurs facteurs peuvent intervenir dans la même zone, on souhaite, pour chaque recommandé, connaître le facteur qui l'a distribué, en plus du destinataire.
classDiagram
Zone
Habitant "1"-- "1..n" Zone
Facteur "1" -- "1..n" Zone
Recommande "1" -- "0..n" Habitant
Recommande "1" -- "0..n" Facteur
Lettre --|> Recommande
Colis --|> Recommande
5) Les cinémas sont composés de plusieurs salles. Les films sont projetés dans des salles. Les projections correspondantes ont lieu à chacune à une heure déterminé (utiliser une classe association)
classDiagram
Salle "*" --* "1" Cinema
Cinema "1" *-- "*" Projection
Film "1" *-- "*" Projection
Projection
Exercice 2 : [Annale d'examen] Diagrammes de classe, exercice type
classDiagram
class Compagnie{
+Vol[] vols
}
class Vol{
+bool estOuvert
+Areoport lieuDepart
+Areoport lieuArriver
+Date dateDepart
+Date dateArriver
+Escale[] escales
+void Ouvrir()
+void Fermer()
}
class VolGenerique{
+int numVolGenerique
+Date date
+Vol[] vols
}
class Reservation{
+bool annule
+Vol vol
+Passager passager
}
class Personne{
+int id
+String Nom
+String Prenom
+String Adresse
}
class Client{
+Reservation[] reservations
}
class Passager{
+int code
+int nbPointsFidelite
}
class Areoport{
+Ville[] villesDesservient
}
class Ville{
}
class Escale{
+Areoport areoport
+Vol vol
+Date arriver
+Date depart
}
Compagnie "1" -- "*" Vol
Vol "1" -- "*" Reservation
Vol "*" --|>"1" VolGenerique
Reservation "*" -- "1" Client
Reservation "1" -- "*" Passager
Client --|> Personne
Passager --|> Personne
Vol "*" -- "1" Areoport : "Départ"
Vol "*" -- "1" Areoport : "Arriver"
Areoport "0..*" -- "1..*" Ville
Ville
Escale "*" -- "1" Vol
Escale "*" -- "1" Areoport
Exercice 3 : [Annale d'examen] Modification de diagramme de classe
classDiagram
class Terme{
+calculerValeur(): int
}
class Expression{
+operateurBinaire: char
}
class Variable{
+nom: String
+valeur: int
}
class Constante{
+valeur: int
}
Terme --* "1" Opérande : "Opérande"
Expression --|> Terme : "Extends"
Variable --|> Terme
Constante --|> Terme
Binaire --|> Opérande
Unitaire --|> Opérande
Opérande
classDiagram
class Terme{
+calculerValeur(): int
}
class Expression{
+operateurBinaire: char
}
class Variable{
+nom: String
+valeur: int
}
class Constante{
+valeur: int
}
Terme --* "1" Opérande : "Opérande"
Expression --|> Terme : "Extends"
Variable --|> Terme
Constante --|> Terme
Binaire --|> Opérande
Unitaire --|> Opérande
Opérande
Exercice 5 : [Annale d'examen] Du code le diagramme de classe
classDiagram
class Dessinable{
+void dessiner()
+void effacer()
}
<> Dessinable
class Figure{
#String couleur
#String getCouleur()
#void setCouleur(String c)
}
<> Figure
class Point{
-float x
-float y
+Point(float x, float y)
+float getX()
+float getY()
}
class Cercle{
-float rayon
-Point centre
+Cercle(Point centre, float rayon)
+void dessiner()
+void effacer()
}
class Rectangle{
#Point sommets[]
+Rectangle(Point, p, Point q)
+void dessiner()
+void effacer()
}
class Losange{
#Point sommets[]
+Losange(Point p, Point q)
+void dessiner()
+void effacer()
[]() }
Figure ..|> Dessinable : "Implements"
Cercle --|> Figure
Rectangle --|> Figure
Losange --|> Figure
Point "1" --* Cercle
Point "2" --* Rectangle
Point "2" --* Losange
Exercice 6 : [Annale d'examen] Diagramme d'états-transition
classDiagram
class Container{
+capacite: int
+taille: int
+Container(cap: int)
+ajouter(c: int, v: Objet)
+retirer(c: Objet)
+present(c: Objet) boolean
}
stateDiagram
[*] --> Vide : Container(n)
Vide --> NonVide : ajouter(c,v)
NonVide --> NonVide : ajouter(c,v)
NonVide --> Vide : retirer(v)
NonVide --> Plein : ajouter(c,v)
Plein --> NonVide : retirer(v)
- Pas oulbier aussi qu'on peut retirer si meme si le container est vide (mais ne fait rien dans ce cas)
- Pas oulbier aussi qu'on peut ajouter si meme si le container est plein (mais ne fait rien dans ce cas)
Donc deux flèche vers eux même mais le rendu après il est moche
Exercice 4 : Diagramme de classe
classDiagram
class Universite{
}
class Salle{
+identifiant: int
}
<> Salle
class Bureau{
}
class Classe{
+nbChaise: int
}
class Departement{
+nom: String
+bureaux: Bureau[]
}
class Personne{
+identifiant: int
}
<> Personne
class Professeur{
+statut: int
}
class Employe{
}
Universite -- "*" Departement
Universite -- "*" Salle
Bureau --|> Salle
Classe --|> Salle
Professeur --|> Personne
Employe --|> Personne
Departement -- "*" Bureau
Professeur "*" -- "1" Departement
Employe "0..1" -- "1" Bureau : "Travaille"