Vous êtes sur la page 1sur 4

Mécatronique 3 POO

Projet Programmation Orienté Objet

Travail Demandé :

1. Une présentation qui contient le digramme de classes (en montrant s’il y a des
liens d’héritage entre les classes). Pour chaque classe il faut mettre tous les
attributs et les méthodes en précisant les types et les droits d’accès (protected #,
private -, public +). Vous allez présenter un diagramme de classes par
présentation.
Pour le diagramme de classes, installez powerAMC (même une version
d’évaluation) et choisissez diagramme de classes.
2. Le code en JAVA pour les 3 applications. Chacune dans un projet.

Organisation :

Travail à 4 étudiants

6 sous-groupes par groupe (probablement on va avoir des groupes à 3 en cas d’un


nombre insuffisant).

Applications :

On va tester et corriger les 3 applications. Pour chaque application, deux groupes vont
présenter le travail. Mais chaque étudiant devra être capable de répondre aux questions et
de nous donner des explications quand il le faut.

Application 1 : Classes en JAVA (Notions de base)

Application 2 : Package+ Héritage

Application 3 : Héritage et polymorphisme

Remarque:

Avec Netbeans, avec Alt+Ins vous pouvez générer automatiques les accesseurs et les
mutateurs de chaque attribut privé.

Hajer Fradi ENSIO 2017/2018


Mécatronique 3 POO

Application n°1 Gestion Bancaire

On se propose d'implémenter un programme pour gérer les opérations de retrait ou de versement


dans les comptes bancaires.

Une banque gère un ensemble de comptes dont chacun possède un identificateur unique et
appartient à un client représenté, lui même par un identificateur.

Les comptes sont modélisés par une classe "Compte" qui admet les attributs privés :
idCompte(int), idClient (int) et solde (double).

Le constructeur de cette classe initialise les attributs idCompte et idClient à partir des valeurs
introduites par l'utilisateur et initialise le solde à 0.

Les méthodes implémentées par cette classe sont les mutateurs et les accesseurs des différents
attributs. En particulier, le mutateur setSolde() doit permettre soit d'incrémenter le solde, soit de
le décrémenter . Pour cela, cette méthode doit prendre comme paramètre en entrée, une variable
booléenne qui est égale à true si on fait un versement et false si on fait un retrait. Le second
paramètre est un double qui représente le montant à ajouter ou à retrancher du solde. En cas de
retrait cette méthode doit vérifier si le solde est suffisant ou non.

La banque sera modélisée par une classe "Banque" qui admet deux attributs privés : tabCpt qui
un tableau de comptes et nbCpt qui est le nombre effectif de comptes dans ce tableau. Deux
méthodes essentielles doivent être implémentées (Vous pouvez ajouter ce que vous jugez
nécessaires) :

-rechercheCompte(): prend en entrée l'identifiant d'un compte, effectue une recherche selon ce
paramètre dans le tableau de comptes et renvoie l'indice de l'objet s'il existe et la valeur -1 sinon.

-ajoutCompte(): doit permettre d'ajouter un compte après avoir vérifié qu'il n'est pas déjà
existant. Elle reçoit en paramètre le compte à ajouter et elle retourne true si l'ajout s'est bien
effectué et false sinon.

Les attributs et les méthodes doivent être accessibles sans instanciation de la banque.

On ajoute aussi une classe GestionBancaire qui admet une méthode main() permettant :

- Ajout des comptes

- Mise à jour d'un solde (versement ou retrait)

- Affichage de la liste des comptes avec tous les détails contenus dans le tableau.

Hajer Fradi ENSIO 2017/2018


Mécatronique 3 POO

Application °2 Papeterie

Soit une société qui vend des articles de papeterie. Pour la gestion de sa société, le propriétaire
vous fait appel pour lui écrire un programme JAVA mettant en valeur les notions d’héritage et de
packages.
Pour commencer, il veut se limiter aux articles suivants :
• Stylos décrits par un code (int), une marque (String), un prix unitaire (double) et une couleur
(String).
• Ramettes de papiers décrites par un code (int), une marque (String), un prix unitaire (double)
et le grammage du papier (int) par exemple 80g/m2.
Et, il décide que tous les attributs soient protégés (protected) et que vous créez trois classes dans
des fichiers JAVA différents : «Article», «Stylo» et «Ramette». Le package portera le nom de
« Papeterie »
Dans la classe « Article », écrire :
- Deux constructeurs, le premier instancie uniquement le code et le prix unitaire alors que
le second instancie les trois attributs de la classe en faisant appel au premier constructeur.
- Les accesseurs et les mutateurs nécessaires sachant que le mutateur du prix unitaire doit
vérifier que le nouveau prix ne soit pas inférieur ou supérieur à l’ancien de 20%.
- Une méthode toString() qui retourne une chaine de caractères (à afficher ultérieurement)
contenant toutes les informations sur un article.
Chacune de deux autres classes doit contenir un constructeur d’objets, un accesseur et un
mutateur de l’attribut spécifique, et une méthode toString() qui retourne une chaine de
caractères (à afficher ultérieurement) contenant toutes les informations concernant un stylo ou
une ramette de papiers ; cette méthode doit faire appel à celle de la super-classe.

Pour valider ce que vous avez implémenté, écrire une classe supplémentaire « Test_Papeterie »
ne faisant pas partie du même package et dans laquelle vous créez des instances de différents
articles et vous affichez leurs informations respectives.

Hajer Fradi ENSIO 2017/2018


Mécatronique 3 POO

Application °3 Robot

La classe Robot modélise l'état et le comportement des robot. Chaque robot :


• a un nom (attribut nom : chaîne de caractères)
• a une position : donnée par les attributs entiers x et y
• a une direction : donnée par l'attribut direction qui est une chaine de caractères pouvant être :
"Nord", "Est", "Sud" ou "Ouest"
• peut avancer d'un pas : avec la méthode sans paramètre avancer(). Si sa direction est "Nord ",
y est incrémenté. Si sa direction est "Sud", y est décrémenté. Si la direction actuelle est "Est" x
est incrémenté et pour "Ouest", x est décrémenté.
• peut tourner à droite de 90° pour changer de direction (si sa direction était "Nord" elle devient
"Est", si c'était "Est" elle devient "Sud", etc.) avec la méthode sans paramètre tourner(). Les
robots ne peuvent pas tourner à gauche.
• peut afficher son état en détail (avec System.out.println()) avec la méthode afficher().

1) Écrire les instructions Java qui permettent de définir la classe Robot, en respectant le principe
de l'encapsulation des données et en définissant deux constructeurs. Pour le premier
constructeur, le nom, la position et la direction sont donnés. Pour le deuxième seulement le nom
est donné. x, y et la direction sont définis par défaut à 0,0 et "Est".
2) On veut étendre ces robots en en créant une Nouvelle Génération RobotNG qui savent faire la
même chose mais qui peuvent aussi :
• avancer de plusieurs pas en une seule fois avec une méthode avancer() qui prend en paramètre
le nombre de pas
• tourner à gauche de 90° avec la méthode gauche()
• faire demi-tour grâce à la méthode demiTour()
Écrire cette nouvelle classe en spécialisant celle de la première question, sans modifier celle-ci :
a) dans un 1er temps, les nouvelles méthodes appellent les anciennes méthodes pour
implémenter le nouveau comportement :
• avancer de n pas se fait en avançant d’un seul pas n fois
• tourner à gauche se fait en tournant 3 fois à droite
• faire demi-tour se fait en tournant 2 fois
b) donner une 2eme solution (appelez la classe dérivée différemment exp. RobotNG2) qui
change directement l'état de l'objet sans faire appel aux anciennes méthodes (...mais attention aux
droits d'accès !)
3) On veut mettre ensemble dans un tableau des objets de type Robot et de type RobotNG.
a) comment déclarer le tableau ?
b) comment afficher l'état de tous les robots contenus dans le tableau ?
Ecrire une classe TestRobot pour répondre à la question 3 (tester certaines opérations pour
chaque type de Robot).
Remarque : la classe String a une méthode equals(String) qui compare la chaine de caractères en
paramètres avec la chaine courante (ch1.equals(ch2) ).

Hajer Fradi ENSIO 2017/2018