Vous êtes sur la page 1sur 6

Programmation orientée objet

CP 2 TD/TP n°3
année 2016

Objectif
L'objectif de cette partie du TD est de s'exercer à la spécification et à la
programmation de classes élémentaires. En particulier, il s'agit à partir d'un énoncé
d'identifier et de définir les caractéristiques d'une classe modélisant un concept
donné.

1. "Cahier des charges"


Il s'agit de définir une classe JAVA permettant de modéliser des comptes bancaires.
Cette classe appelée Compte doit permettre à une application de créer et utiliser
autant de comptes bancaires que nécessaires, chaque compte étant un objet, instance
(ou exemplaire) de la classe Compte.
Un compte bancaire est identifié par un numéro de compte. Ce numéro de compte est
un entier positif permettant de désigner et distinguer sans ambiguïté possible chaque
compte géré par l'établissement bancaire. Chaque compte possède donc un numéro
unique. Ce numéro est attribué par la banque à l'ouverture du compte et ne peut être
modifié par la suite. Dans un souci de simplicité on adoptera la politique suivante
pour l'attribution des numéros de compte : les comptes sont numérotés de 1 à n, n
étant le nombre de comptes qui ont été créés. Lorsque un nouveau compte est créé, le
numéro qui lui est attribué est n+1.
Pour pouvoir garder un numéro unique pour chaque instance d'un
Un compte est associé à une personne (civile ou morale) titulaire du compte, cette
personne étant décrite par son nom. Une fois le compte créé, le titulaire du compte ne
peut plus être modifié.
La somme d'argent disponible sur un compte est exprimée en Euros. Cette somme est
désignée sous le terme de solde du compte. Ce solde est un nombre décimal qui peut
être positif, nul ou négatif.
Le solde d'un compte peut être éventuellement (et temporairement) être négatif. Dans
ce cas, on dit que le compte est à découvert. Le decouvert d'un compte est nul si le
solde du compte est positif ou nul, il est égal à la valeur absolue du solde si ce dernier
est négatif.
En aucun cas le solde d'un compte ne peut être inférieur à une valeur fixée pour ce
compte. Cette valeur est définie comme étant - (moins) le découvert maximal autorisé
pour ce compte. Par exemple pour un compte dont le découvert maximal autorisé est
2000 €, le solde ne pourra pas être inférieur à -2000 €. Le découvert maximal autorisé
peut varier d'un compte à un autre, il est fixé arbitrairement par la banque à la
création du compte et peut être ensuite révisé selon les modifications des revenus du
titulaire du compte.
Créditer un compte consiste à ajouter un montant positif au solde du compte.
Débiter un compte consiste à retirer un montant positif au solde du compte. Le solde
résultant ne doit en aucun cas être inférieur au découvert maximal autorisé pour ce
compte.
Lors d'une opération de retrait, un compte ne peut être débité d'un montant supérieur
à une valeur désignée sous le terme de débit maximal autorisé. Comme le découvert
maximal autorisé, le débit maximal autorisé peut varier d'un compte à un autre et est
fixé arbitrairement par la banque à la création du compte. Il peut être ensuite révisé
selon les modifications des revenus du titulaire du compte.
Effectuer un virement consiste à débiter un compte au profit d'un autre compte qui
sera crédité du montant du débit.
Lors de la création d'un compte seul le nom du titulaire du compte est indispensable.
En l'absence de dépôt initial le solde est fixé à 0. Les valeurs par défaut pour le
découvert maximal autorisé et le débit maximal autorisé sont respectivement de 800 €
et 1000 €. Il est éventuellement possible d'attribuer d'autres valeurs à ces
caractéristiques du compte lors de sa création.
Toutes les informations concernant un compte peuvent être consultées : numéro du
compte, nom du titulaire, montant du découvert maximal autorisé, montant du débit
maximal autorisé, situation du compte (est-il à découvert ?), montant du débit
autorisé (fonction du solde courant et du débit maximal autorisé).
2. Travail demandé
1.A partir du "cahier des charges" précédent élaborer une spécification
d'une classe Java modélisant un compte bancaire.
Il s'agira en analysant le texte ci-dessus de :
- définir les attributs (variables d'instance, variables de classe) de la
classe Compte,
- d'identifier les méthodes publiques proposées par la classe Compte. Pour
chaque méthode on prendra soin, outre la définition de sa signature, de
spécifier son comportement sous la forme d'un commentaire documentant.
- de proposer un ou plusieurs constructeurs pour la classe Compte. Là aussi on
complétera la donnée de la signature de chaque constructeur avec un
commentaire documentant détaillant son utilisation.
2.Réaliser une implémentation en langage Java de la classe précédemment
spécifiée.
3.Écrire un programme de test permettant de :
•Créer un compte c1, au nom de J. DUPONT avec un solde initial de 1 000 €
•Créer un compte c2, au nom de C. DURANT avec un solde initial de 50 000
€, un débit maximal autorisé de 6000 € et un découvert maximal autorisé de
5000 €.
•D'afficher les caractéristiques des comptes c1 et c2 (c'est à dire les
informations suivantes : numéro du compte, nom du titulaire, découvert
maximal autorisé, débit maximal autorisé, solde du compte et si le compte est à
découvert un message le signalant explicitement).
•Retirer 300 € du compte c1.
•Retirer 600 € du compte c2.
•Déposer 500 € sur le compte c1.
•D'afficher les caractéristiques des comptes c1 et c2.
•Virer 1000 € du compte c2 vers le compte c1.
•D'afficher les caractéristiques des comptes c1 et c2.

2ème partie : Expérimentation sur machine


a) Écriture d'une classe simple
Objectif : écrire une classe simple et un programme de test s'y afférant.
Le but de ce sujet est d´écrire un programme JAVA 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 JAVA instances d'une classe SalleCinema définie comme suit :
Les informations caractérisant un objet SalleCinema 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 objetSalleCinema (c'est-à-dire,
sont passées en paramètres du constructeur). Quand aux deux autres variables
(nombre de places vendues à tarif normal et nombre de places vendues à tarif réduit)
elles sont bien sur initialisées à 0.
La classe SalleCinema possède les méthodes suivantes :
•public int nbPlacesDisponibles()
-> calcule et renvoie le nombre de places encore disponibles dans la
salle.
•public void vendrePlaces(int nbre, boolean tarifReduit)
-> permet de vendre des billets pour la salle. nbre indique le nombre de
places demandées et le booléen tarifReduit indique si une réduction est
demandée ou non (si le paramètre tarifReduit vaut true une réduction est
demandée, si il vaut false les places sont achetées au tarif normal sans
réduction). Si le nombre de places demandé est supérieur au nombre de
places disponibles la vente n'est pas effectuée et la méthode affiche un
message indiquant que la vente n'est pas possible. Sinon la variable
d'instance correspondant au nombre de places vendues à tarif normal ou
à tarif réduit (selon la valeur du paramètre tarifReduit) est mise à jour et
le prix à payer est affiché.
•public void remiseAZero()
-> permet 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.
•public double chiffreAffaires()
-> retourne 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 à zero du nombre de places vendues).
•public double tauxRemplissage()
-> retourne le taux (pourcentage) de remplissage de la salle.
•public String toString()
-> retourne une représentation sous forme d'une chaîne de caractères de
l'objet SalleCinema. Cette chaîne indique la valeur de chacun des
attributs (chacune des variables d'instances) de l'objet (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 7,5 €) et 14 places ont été
vendues au tarif réduit l'affichage de la chaîne retournée
par toString pourrait être le suivant :
Film joué : Sacré Graal ,
Nombre de places : 60 ,
Prix d'une place : 7.50 €,
20 places vendues au tarif normal ,
14 places vendues au tarif réduit.

Travail demandé
1.Écrire le code JAVA de la classe SalleCinema en respectant
scrupuleusement les spécifications données ci-dessus.
2.Écrire un programme simple de test pour la classe SalleCinema.

Ce programme doit créer deux salles correspondant aux informations définies


dans la table ci-dessous. Deux places à tarif normal puis trois places à tarif
réduit doivent être achetées pour la première salle. Pour la deuxième salle trois
places à tarif normal puis six places à tarif réduit doivent être ensuite achetées.
Finalement les attributs des deux salles doivent être affichées ainsi que le
nombre de places encore disponibles et le chiffre d'affaire produit
Titre Nombre de Places Normales Prix de la place (tarif normal)
Chat Blanc, Chat Noir 120 8,5 €
La vie est belle 50 7.5 €

b) Utilisation de la classe SalleDeCinema, une première utilisation de tableaux


d'objets
Écrire un programme de "billetterie" respectant les spécification suivantes.
Ce programme permet d'enregistrer les entrées effectuées dans les différentes salles et
de calculer et d'afficher le taux d'occupation et le chiffre d'affaire produit par chaque
salle lorsque la vente des billets pour la séance est terminée.
Le programme de billetterie est lancé au début de la mise en vente des billets pour la
prochaine séance de projection. Chaque salle est identifiée par un numéro unique (les
numéros allant de 1 à n, n étant le nombre total de salles). Lorsqu'un client se
présente, le guichetier tape le numéro de la salle pour lequel le client désire des
billets. Le programme affiche alors les différents attributs de la salle sélectionnée (le
titre du film, le nombre de places de la salle, le nombre de places vendues...). Le
guichetier fournit ensuite au programme le nombre de places que le client désire
acheter en indiquant également si le client bénéficie ou non d'une réduction. Si la
demande du client peut être satisfaite le programme affiche le prix à payer sinon il
affiche un message indiquant que le nombre de places demandé est incorrect. Lorsque
la vente des billets est terminée, le programme affiche alors pour chaque salle son état
(la valeur des ses attributs),son taux d'occupation et le chiffre d'affaire produit. Le
programme calcule aussi le chiffre d'affaires total et l'affiche.
La structure du programme pourra être la suivante :
creation des objets SalleDeCinéma
venteTerminée un boolean initialisé à false
tantque (! venteTerminée) {
lire un numero de salle
si le numéro de la salle est correct alors
afficher les informations de la salle
lire nb le nombre de places à acheter
demander si réduction ou non
vendre pour la salle sélectionné les nb places demandées
demander à l'opérateur si il veut poursuivre ou non la vente
selon la réponse mettre à jour venteTerminée
sinon
afficher un message d'erreur "numéro de salle incorrect"
fintantque

calculer et afficher pour chaque salle le taux de remplissage et le chiffre


d'affaire produit
afficher le chiffre d'affaire total

Indication : pour stocker les salles on pourra utiliser un tableau.

Vous aimerez peut-être aussi