Année académique 2024-2025
Classe : L2IT
TDn°2 D’UML
Exercice 1
Objectif : Représenter en UML une classe simple
Le but de ce sujet est d´écrire une application pour aider à la gestion de la billetterie des différentes
salles d'un complexe cinématographique. Les places non numérotées sont vendues selon deux tarifs :
▪ un tarif "normal" qui est fixé en fonction de la salle et du film qui y est joué,
▪ un tarif réduit (familles nombreuses, militaires, chômeurs, étudiants) qui correspond à 80% du
tarif normal.
Après analyse du problème, il est décidé de représenter les salles de cinéma par des objets, instances
d'une classe SalleCinema définie comme suit :
Les informations caractérisant une Salle de cinéma sont :
▪ une chaîne de caractères qui contient le titre du film joué,
▪ un entier qui contient le nombre de places de la salle,
▪ un réel qui contient le prix unitaire d'une place à tarif normal,
▪ un entier qui contient le nombre de places qui ont été vendues à tarif normal,
▪ un entier qui contient le nombre de places qui ont été vendues à tarif réduit.
Les valeurs des trois premières caractéristiques (titre du film, nombre de place, prix de la place) sont
fixées lors de la création d'un nouvel objet SalleCinema (c'est-à-dire, sont passées en paramètres du
constructeur). Quant aux deux autres variables (nombre de places vendues à tarif normal et nombre de
places vendues à tarif réduit) elles sont bien sûr initialisées à 0.
On veut pouvoir disposer des services suivants :
→calculer et renvoyer le nombre de places encore disponibles dans la salle.
→ Vendre des billets pour la salle. Si le nombre de places demandé est supérieur au nombre
de places disponibles la vente n'est pas effectuée et il est affiché un message indiquant que la
vente n'est pas possible. Sinon le nombre de places vendues à tarif normal ou à tarif réduit
(selon qu'il y a réduction ou non, par défaut il n'y a pas de réduction) est mis à jour et le prix à
payer est affiché.
→ permettre lorsque la vente de billets pour une séance est terminée de remettre à 0 les
compteurs de nombre de places vendues en vue de la vente de billets pour la prochaine séance.
→ Avoir le chiffre d'affaires produit par la salle pour la séance en cours (total des ventes depuis
la création de l'objet salle ou la dernière remise à zéro du nombre de places vendues).
→Avoir le taux (pourcentage) de remplissage de la salle.
→afficher la valeur de chacune des informations de la salle (le titre du film, le nombre de places
de la salle, le nombre de places vendues à tarif normal, le nombre de places vendues à tarif
réduit, le prix de la place). Par exemple, pour une salle de 60 places jouant le film "Sacré Graal"
dont 20 places ont été vendues au tarif normal (de 750F) et 14 places ont été vendues au tarif
réduit l'affichage pourrait être le suivant :
Film Nombre de places : 60,
Prix d'une place : 750 F,
20 places vendues au tarif normal,
14 places joué : Sacré Graal,
vendues au tarif réduit.
Représenter la classe salleCinéma
Exercice 2
On souhaite réaliser, avec l’approche objet, une application de gestion simplifiée des pharmacies. Une
pharmacie gère des clients et des médicaments.
Un client est caractérisé par un nom (chaîne de caractères de longueur maximale 35) et un crédit (de
type réel). Le crédit représente la somme que ce client doit à la pharmacie. Le crédit peut être négatif si
le client a versé plus d'argent que le montant. On doit pouvoir :
− Initialiser un client
− Calculer le crédit d’un client, c'est-à-dire ajouter un montant (qui peut être négatif) au crédit d’un
1
client ;
− Modifier le nom d’un client ;
− Consulter le nom d’un client ;
− Consulter le crédit d’un client.
Un médicament est caractérisé par un nom (chaîne de caractères de longueur maximale 35), un prix
(de type réel) et un stock (de type entier). On doit pouvoir :
− Initialiser un médicament
− Augmenter ou diminuer le stock d’un médicament ;
− Consulter le stock d’un médicament ;
− Modifier le prix d’un médicament ;
− Consulter le prix d’un médicament ;
− Modifier le nom d’un médicament ;
− Consulter le nom d’un médicament ;
Une pharmacie est caractérisée par son nom (chaîne de caractères de longueur maximale 35), son
adresse (chaîne de caractères de longueur maximale 35), la liste de ses clients (au maximum
NBMAXCL=100) et la liste de ses médicaments (au maximum NBMAXMED=300). On doit pouvoir :
− Ajouter un client à la pharmacie. Cela consiste à vérifier que l’ajout est possible, auquel cas :
▪ Lire le nom du nouveau client depuis le terminal
▪ Vérifier qu’il n’existe pas déjà un client du même nom, si tel est le cas envoyer un message
d’erreur, sinon compléter les autres informations du client et incrémenter le nombre de
clients.
− Ajouter un médicament à la pharmacie selon le même principe que l’ajout de client ;
− Approvisionner le stock d’un médicament. Le nom du médicament à approvisionner ainsi que la
quantité à ajouter au stock doivent être lus depuis le terminal. Lorsque le nom du médicament est
introduit, il faut vérifier qu'il s'agit bien d'un nom connu dans la liste des médicaments de la
pharmacie. Cette procédure de vérification sera prise en charge par la procédure « lire un
médicament » décrit plus loin ;
− Traiter un achat de médicament fait par un client. L’achat porte sur un médicament donné dans une
quantité donnée. Pour cette transaction le client paie un certain prix. Une opération d'achat aura pour
effet de déduire la quantité achetée du stock du médicament correspondant et d'augmenter le crédit
du client (d'un montant équivalent au montant de l'achat moins la somme payée). Les noms du client
et du médicament doivent être lus depuis le terminal. Le programme doit boucler jusqu'à
introduction de noms connus aussi bien pour les clients que les médicaments. Ces procédures de
vérification seront prises en charge par les procédures « lire un médicament » et « lire un client »
décrits plus loin; La quantité achetée et le montant payé sont aussi lus depuis le terminal. Ils seront
supposés corrects.
− Lister les clients et leurs crédits respectifs ainsi que les médicaments et leurs stocks respectifs.
Pour effectuer les approvisionnements et les achats, on utilise les procédures suivantes :
▪ Lire un client consistant à lire le nom d’un client depuis le terminal et de vérifier si ce client existe
dans la liste des clients de la pharmacie. Dans ce cas le rang du client sera retourné. On doit boucler
jusqu'à ce qu'un client soit trouvé.
▪ Lire un médicament consistant à lire le nom d’un médicament depuis le terminal et de vérifier si
ce médicament existe dans la liste des médicaments de la pharmacie. Dans ce cas le rang du rang
du médicament sera retourné. On doit boucler jusqu'à ce qu'un médicament soit trouvé.
Travail à faire
Donner le diagramme de classes
Exercice 3
Une entreprise souhaite informatiser la gestion de son parc informatique (ordinateurs, imprimantes, etc.)
pour en optimiser la maintenance.
Un ordinateur est caractérisé par son numéro d’inventaire, son adresse réseau (adresse IP), son modèle,
la date de son acquisition, la date de la prochaine maintenance planifiée et le système d’exploitation
installé. Sur chaque ordinateur sont installés un ensemble de logiciels caractérisés par un numéro de
licence, un nom et une version.
Grâce à un système de mots de passe, chaque ordinateur peut être utilisé par plusieurs employés mais,
pour des raisons de sécurité des données, un employé n’a le droit d’utiliser qu’un seul ordinateur. Un
employé est caractérisé par son nom, son prénom et sa fonction dans l’entreprise.
Les ordinateurs sont reliés à un certain nombre de périphériques en réseau (imprimantes, scanners, etc.).
Chaque périphérique est caractérisé par un numéro d’inventaire, son adresse IP, son type, son modèle,
2
sa date d’acquisition et la date de la prochaine maintenance planifiée. Les périphériques pouvant servir
à plusieurs ordinateurs simultanément, un indice de priorité est affecté à chaque ordinateur pour chaque
périphérique auquel il est connecté.
Chaque ordinateur et chaque périphérique sont localisés dans un bureau donné. Les bureaux sont
caractérisés par un numéro de bureau et le numéro du bâtiment dans lequel ils se trouvent. Un numéro
de bureau est unique dans un bâtiment donné.
Travail à faire
Proposer un diagramme de classes UML modélisant les spécifications ci-dessus (classes, associations
entre classes, multiplicités des associations, attributs et opérations des classes)
NB : Compléter chaque classe par des opérations qui vous semblent pertinentes
Exercice 4
Une entreprise a un certain nombre d’employés. Un employé est connu par son nom, son matricule (qui
l’identifie de façon unique) et son indice salarial. Le salaire est calculé en multipliant cet indice par une
certaine valeur qui peut changer en cas d’augmentation générale des salaires, mais qui est la même pour
tous les employés.
Question 1
Représenter la classe des employés avec les informations utiles et des opérations pour afficher les
caractéristiques d’un employé et pour calculer son salaire.
Question 2
Certains employés ont des responsabilités hiérarchiques. Ils ont sous leurs ordres d’autres employés.
Donner une sous-classe des employés qui représente ces responsables.
Représenter l'opération qui affiche les inférieurs directs (placés directement sous leurs ordres).
Question 3
Les commerciaux ont un salaire composé d’un fixe et d’un intéressement proportionnel à leurs ventes.
Représenter une sous-classe des commerciaux qui contient l’information sur leurs ventes du dernier
mois, une opération pour mettre à jour cette information et redéfinir l'opération de calcul de leurs
salaires.
Question 4
Donner la classe représentant tout le personnel de l’entreprise, avec une opération calculant la somme
des salaires à verser.
Exercice 5
Une entreprise souhaite gérer les salaires de ses employés. Pour cela, elle crée une classe Employe
ayant les caractéristiques suivantes :
▪ Un attribut string nom
▪ Un attribut string prenom
▪ Un attribut int age
▪ Un attribut int anciennete (le nombre d’années de la personne dans l’entreprise)
▪ Une opération double calculer_base_salaire() qui calcule la base du salaire de la
personne.
▪ Une opération afficher() qui affiche la personne avec sa profession
▪ Une opération calculer_salaire() qui calcule le salaire de la personne (base de salaire
plus 10% par année d’ancienneté)
▪ Un constructeur
▪ Un destructeur
On souhaite pouvoir définir les classes dérivées de Employe suivantes :
▪ Une classe Commercial ayant un attribut chiffre_affaire et deux attributs de classe
constants double BASE et double PART. La base de salaire est donnée par la formule
suivante : BASE + chiffre_affaire * PART
▪ Une classe Technicien ayant un attribut int nb_unité_produite et trois attributs de
classe constants double BASE, double PART et double GAIN_UNITE. La base de
salaire est donnée par la formule suivante : BASE + nb_unit_produite * PART*
GAIN_UNITE
▪ Une classe Manutentionnaire ayant un attribut int nb_heures et un attribut de
classe constant double BASE_SALAIRE_HORAIRE. La base de salaire est donnée par la
formule suivante : BASE_SALAIRE_HORAIRE*nb_heures
1. Dessiner le diagramme de classes UML modélisant la gestion des salaires dans cette entreprise.
2. Quelles sont les opérations qui doivent être déclarées en tant que opérations virtuelles dans la classe
3
Employe ?
3. Quelles sont les opérations qui doivent être déclarées en tant que opérations abstraites dans la classe
Employe? La classe Employe est-elle une classe abstraite ?
4. Utiliser Staruml pour générer le code Java qui déclare les classes Employe, Commercial,
Technicien, Manutentionnaire
Exercice 6
Le service de gestion du personnel d'une entreprise désire s'équiper d'un outil lui permettant de gérer
informatiquement ses employés, leurs salaires et leurs congés. Les spécifications suivantes ont pu être mises
en exergue par une analyse des besoins réalisée auprès des utilisateurs du service du personnel.
Gestion des employés :
Tout employé est identifié par un nom, un prénom et une date de naissance.
Tout employé remplit une fonction et appartient à un service.
Pour chaque employé on gère la date d'embauche et la quotité (c'est à dire le pourcentage de temps
travaillé par rapport au temps plein ; inférieur à 1 en cas de travail à temps partiel)
Gestion des salaires :
Pour chaque employé on gère l'historique de ses salaires dans l'entreprise, chaque salaire étant affecté
à une période de temps.
Un salaire est composé d'un salaire brut, de charges patronales et de charges salariales.
On cherchera à partir de ces données à obtenir également le salaire chargé (brut + charges
patronales), et le salaire net (brut - charges salariales), et ce en particulier pour le salaire en cours
(celui que touche actuellement le salarié).
Gestion des congés :
Pour chaque employé, on mémorise chaque congé pris (posant qu'un congé concerne toujours une
ou plusieurs journées entières)
Chaque employé a le droit aux jours de congés suivants :
25 x quotité.
Chaque fonction ouvre les droits à un certain nombre de jours de Réduction du Temps de Travail
(RTT). Un jour de réduction du temps de travail est un jour de congé attribué à un salarié.
Chaque service ouvre les droits à un certain nombre de jours de RTT.
Chaque tranche de 5 ans passés dans l'entreprise donne droit à 1 jour supplémentaire.
Les employés de plus de 40 ans ont un jour supplémentaire, et ceux de plus de 50 ans deux.
Pour chaque employé on cherchera à connaître le nombre total de jours de congés autorisés, le
nombre de jours pris et le nombre de jours restants sur l'année en cours.
Question
Réaliser le diagramme de classes permettant de modéliser ce problème. On prendra particulièrement un grand
soin dans la description des opérations relatives aux salaires et aux congés
Exercice 7
Une agence d’espionnage propose ses services à des clients qui sont des organisations dont on connaît le
nom, l’adresse et le nom des contacts (entre 1 et 3 contacts). Une organisation peut commanditer des
missions, qui sont définies par un code, un objectif et une date.
L’agence emploie des personnes qui sont des espions, des ingénieurs ou autres. Chaque employé a un nom
et un prénom, mais seuls les agents (espions) ont un code et participent à des missions. Plusieurs espions
peuvent être recrutés pour la même mission, néanmoins, chaque espion dispose d’un budget propre qui lui
est alloué pour la mission.
On recense également, pour chaque espion, la liste de ses compétences. Une compétence a un libellé et une
description. Un espion peut être novice dans une compétence et expert dans un autre. Il faut donc connaître
le niveau de l’espion (1,2 ou 3) quel que soit la compétence qu’il possède.
Enfin, toute participation à une mission implique l’utilisation d’armes. Une arme a un nom et requiert la
possession d’une habileté particulière avec un niveau donné. Une arme est mise au point par un ingénieur et
ne peut être utilisée qu’une seule et unique fois.
La secrétaire de l’agence gère les missions, l’affectation des espions aux missions et l’affectation de leurs
armes ainsi que la gestion de leurs compétences. Elle doit pouvoir également calculer le budget total d’une
mission.
Proposer un diagramme de classes UML du système décrit.