Objectifs: Poursuivre la découverte des bases de la programmation orientée objets en Java. les bases de la programmation orientée objet avec Java. A partir d'un cahier des charges, il s'agit d'identifier, spécifier et implémenter tester des classes simples.
1. "Cahier des charges"
Il s'agit de définir une (des) classe(s) JAVA permettant de modéliser des comptes bancaires.
-
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 le code de la classe Compte et des tests que vous allez écrire, vous ne vous préoccuperez pas de la manière dont ce numéro est obtenu ni si il est unique : vous créerez des objets compte en fournissant un numéro arbitraire, le code de la classe compte ne se souciant pas de l'unicité de ce numéro (cela sera le problème des programmes utilisant les comptes).
-
Un compte est associé à une personne titulaire du compte, cette personne étant décrite par son nom, son prénom et son adresse. Une fois le compte créé, le titulaire du compte ne peut plus être modifié. Une même personne peut être titulaire de plusieurs comptes.
-
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 seule l'identité de la personne titulaire du compte (nom, prenom, genre, date de naissance) est indispensable. En l'absence de dépot 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, identité 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. Analyse du problème, identification et spécification des classes
Exercice 1 : A partir du "cahier des charges" précédent élaborer une spécification d'une ou des classes Java peremttant de modéliser un compte bancaire et son titulaire.
Pour chacune des classes identifiées, il s'agira en analysant le texte ci-dessus de :
-
définir les attributs (variables d'instance, variables de classe) de la classe,
-
d'identifier les méthodes proposées par la classe et de définir leur signature.
-
de proposer un ou plusieurs constructeurs pour la classe et définir leur signature.
Effectuez cette spécification sous la forme d'un diagramme de classe UML que vous ferez valider par votre enseignant/p>
3. Implémentation et tests
Exercice 2 : Implémentez et testez les classes spécifiée à l'exercice 1
indications:
-
le numéro de compte est attribué à la création d'un compte (par l'application créant les comptes), il doit donc apparaître comme paramètre du(des) constructeur(s). Une fois l'objet Compte créé, ce numéro ne peut plus être modifié
-
pour tester votre code écrivez un programme principal dans une classe à part (par exemple TestCompte) qui vous permettra de créer des objets et de vérifier qu'ils se comportent comme attendu.
-
procédez de manière incrémentale. N'écrivez pas tous le code de la classe avant de la tester, mais préférez implémenter une fonctionnalité et la tester immédiatement. Par exemple :
-
commencez par implémenter un constructeur permettant de créer un compte et une méthode permettant d'afficher son état,
-
dans le programme de tests créez un compte et affichez le pour vérifier que son état est bien celui attendu,
-
rajoutez ensuite un méthode permettant de réaliser un opération et les tests permettant de vérifier qu'elle fonctionne comme prévu,
-
répetez cela jusqu'à ce que votre diagramme de classes soit totalement implémenté.
-
-
Chaque constructeur et méthode doit être documenté avec un commentaire javadoc. Lorsque vous ajouter un nouveau constructeur ou une nouvelle méthode au code de votre classe, rédigez ce commentaire avant d'écrire le corps (les instructions) du constructeur ou de la méthode,
-
lorsqu'une opération illégale est effectuée (par exemple débiter un compte avec un montant négatif), procédez comme pour le TP 4 (Nombres rationnels), levez une exception de type IllegalArgumentException (pensez à documenter cela dans la javadoc de l'opération avec une annotation @throws )