ÉCOLE SUPERIEURE DE LA
STATISTIQUE ET
DE L'ANALYSE DE L'INFORMATION
ANNEE UNIVERSITAIRE : 2011-20012
PROGRAMMATION ORIENTEE OBJET (JAVA)
SERIE N°2 (TD-TP)
Classes et Objets
ENSEIGNANTS : Z. BRAHMI && W. SFAÏHI
AUDITOIRE : 2
EXERCICE 2.1 : Carnet d’adresses
Toutes les classes, qui seront implémentées dans cet exercice, appartiennent au même package
nommé «probleme1».
1) complétez la classe « Coordonnees » représentant les coordonnées d’une personne avec les
champs : nom, prénom, téléphone, adresse. Munissez-la d'un constructeur et d'une méthode
toString().
class Coordonnees
{
private String nom ;
private String prenom ;
private String telephone ;
private String adresse ;
//…à compléter
}
2) compléter ensuite la classe « CarnetCoordonnees » représentant un carnet de coordonnées.
Elle contiendra les attributs privés suivants :
(cid:1)
(cid:1)
Un tableau de coordonnées nommé « carnet ».
Un entier nommé « nbCoordonnees » représentant le nombre d’éléments de « carnet ».
Les méthodes suivantes :
(cid:1)
Un constructeur pour définir un carnet vide pouvant contenir 100 coordonnées au maximum.
(cid:1)
void ajouter(Coordonnees c) : pour ajouter les coordonnées d’une personne dans « carnet ».
(cid:1)
void rechercher(String nom, String prenom) pour retrouver et afficher les coordonnées du
premier personne (téléphone, adresse) dans le carnet à partir de son nom et prénom. Si cette
Publicité
méthode ne trouve pas les coordonnées d’une personne dans le carnet elle affiche que cette personne
n’existe pas dans le carnet.
(cid:1)
void affiche() : pour afficher toutes les coordonnées se trouvant dans le carnet.
POO-Java (Soir) : Série n°2 classes et objets
Page 1/ 5
Voici la squelette du programme à compléter
class CarnetCoordonnees {
//…à compléter
CarnetCoordonnees() {
//…à compléter
}
void ajoutCoordonnees(Coordonnees c){
//…à compléter
}
void chercherCoordonnees(String nom, String prenom){
//…à compléter
}
void affiche(){
//…à compléter
}
}
class TestCarnetCoordonnees{
public static void main(String args[]) {
CarnetCoordonnees c=new CarnetCoordonnees();
c.ajouterCoordonnees(new Coordonnees(“Ben Ali”, “Mohamed”,”654645”, “Tunis”));
c.ajouterCoordonnees(new Coordonnees(“Ben Amor”, “Seif”,”678695”, “sousse”));
c.ajouterCoordonnees(new Coordonnees(“Selmani”, “Akram”,”256987”, “Sfax”));
c.affiche();
c.chercherCoordonnees(“Ben Amor”, “Seif”);
}
}
EXERCICE 2.1 : Point
1) Ecrire une classe Point qui permet de représenter un point sur un plan cartésien. Chaque
point est caractérisé par son abscisse et son ordonnée (de type float), une méthode afficher()
imprimant sur l'écran ses coordonnées et une méthode deplacer() effectuant son déplacement
selon les pas communiqués à la méthode comme arguments (déplacement par rapport à la
Publicité
position courante).
Remarque : on utilisera le constructeur par défaut.
2) Ecrire une classe TestPoint décrivant un petit programme utilisant la classe Point. Ce
programme permet de créer un point, en afficher ses coordonnées, le déplacer (abscisse +2.5
et ordonnée -1) et en afficher de nouveau ses coordonnées.
3) Peut-on déplacer un point à partir de TestPoint sans appeler la méthode deplacer()? Aussi,
est ce que l'appel de deplacer() (à partir de TestPoint) est toujours possible? Faire une
discussion.
4) Reprendre la définition de la classe Point en ajoutant :
• un constructeur sans paramètres
• un constructeur recevant en arguments les coordonnées d'un point
• une méthode getAbscisse() retournant la valeur actuelle de l'abscisse d'un point
• une méthode getOrdonnee() retournant la valeur actuelle de l'ordonnée d'un point
POO-Java (Soir) : Série n°2 classes et objets
Page 2/ 5
• une méthode setAbscisse() qui modifie la valeur de l'abscisse d'un point par la valeur de
l'argument de cette méthode
• une méthode setOrdonnee() qui modifie la valeur de l'ordonné d'un point par la valeur de
l'argument de cette méthode
• une méthode toString() permettant de retourner une chaîne de caractères (un String)
décrivant un point (dans ce cas ses coordonnées)
• une méthode compareTo() qui retourne un résultat booléen selon que les attributs de l'objet
point communiqué en argument possèdent les même valeurs que ceux de l'objet courant ou
non.
5) Modifier la classe TestPoint de façon à créer deux objets Point, le premier avec le constructeur
paramétré (abscisse =1 et ordonnée =2.3) et le deuxième avec le constructeur sans paramètres.
Le premier point doit être déplacé (abscisse –0.5 et ordonné +0.7), ensuite, le deuxième point
doit être confondu (même position) avec le premier point. Afficher les coordonnées des deux
points (de deux façons).
6) Comparer les deux points crées précédemment en appliquant l'opérateur == sur leurs références
puis en faisant l'appel à la méthode compareTo() de Point. Refaire la comparaison avec la
méthode compareTo() après la rendre static.
7) Modifier la classe TestPoint de façon à accepter toute coordonnée et toute valeur de
déplacement de l'utilisateur en utilisant la classe Clavier.
Modifier encore une fois la classe TestPoint afin de pouvoir gérer plusieurs points en utilisant un
tableau dont la taille sera déterminée par l'utilisateur. Faire des manipulations analogues aux
questions précédentes, en particulier, faire confondre le premier point avec le dernier point du
Publicité
tableau à la manière de la question 5).
EXERCICE 2.3 : Cercle et Point
Un cercle (Cercle) est défini par un point (Point) correspondant à son centre, et un rayon.
1. Reprendre la classe Point de l’exercice précédent.
2. Écrire la classe Cercle ainsi que son constructeur.
3. Ajouter la méthode toString qui affiche le centre et le rayon.
4. Ajouter la méthode translate (int dx,int dy) qui translate un cercle
5. Ajouter la méthode equals() qui renvoie vrai si deux cercles ont le même centre et le
même rayon.
6. Ajouter la méthode contains() qui renvoie vrai si un point est contenu dans un cercle.
7. Qu'affiche le code suivant, expliquez.
Point p=new Point(1,2);
Circle c=new Circle(p,1);
Circle c2=new Circle(p,2);
c2.translate(1,1);
System.out.println(c+' '+c2);
8. Ecrire une classe Test permettant de tester tous les comportements du cercle et du point.
POO-Java (Soir) : Série n°2 classes et objets
Page 3/ 5
EXERCICE 2.4 : Book
Le but de cet exercice est de définir des objets Book. Nous allons pour cela créer la classe
Book défini par :
• son titre (une chaîne de caractères) ;
• son auteur ;
• son numéro ISBN (une chaîne de caractères) ;
• son prix en euros (un nombre réel).
Écrire une classe Book dont les attributs sont tout ce qui caractérise un livre. Dans la classe Book,
mettre un constructeur public Book(String title, String author, tring isbn, double price) servant à
initialiser les attributs des instances de la classe Book (les arguments du constructeur sont
respectivement le titre, les auteurs, l'ISBN et le prix).
Comment faire pour construire un objet livre (une instance de la classe Book) ?
EXERCICE 2.5 : Une bibliothèque
Une bibliothèque contient des livres. Nous représenterons les bibliothèques par des objets instances
de la classe Library qu'il nous faudra écrire. On trouvera en attribut de la classe un tableau de
références sur des instances de Book.
1. Définir la classe Library contenant :
• un constructeur, qui prend en paramètre le nombre maximum de livres que peut contenir la
Publicité
bibliothèque (sa capacité) ;
• une méthode int capacity() retournant la capacité de la bibliothèque ;
• une méthode void add(Book b) qui ajoute un livre dans la bibliothèque ;
• une méthode int size() retournant le nombre de livres contenus dans la bibliothèque ;
• une méthode public void display (), qui affiche l'ensemble des livres contenus dans la
bibliothèque.
2. Modifier l’attribut tableau référençant les instances de Book par un vecteur (utiliser la classe
Vector de la package import java.util). Redéfinir les méthodes add (Book b) et display ().
POO-Java (Soir) : Série n°2 classes et objets
Page 4/ 5
EXERCICE 2.6 : Comptes clients
On se propose de modéliser la relation qui existe entre les clients d'une banque et les comptes qu'ils
possèdent.
• Un compte est caractérisé par un numéro, un solde, un titulaire, une opération de débit et
une opération de crédit. Un compte peut informer sur son solde, afficher à la fois son numéro
et son solde ou les retourner accompagnées par le nom et le prénom du titulaire du compte.
Chaque nouveau compte est ouvert avec un certain montant.
• Un client est caractérisé par son nom, son prénom, le nombre de comptes au sein de la
banque et bien sûr par tous ses comptes. Un client peut : connaître son nom, son prénom, le
nombre de ses comptes, le numéro et le solde de chaque compte et finalement le solde global
de tous ses comptes.
1) Définir les classes Client et Compte
Quelles sont les méthodes demandées dans la classe Client. Est ce qu'on envisage l'ajout d'un
nouveau compte après la création d'un client ? Est ce qu'il y a un nombre limité de compte pour un
client ? Est ce que le nombre maximal de comptes diffère d'un client à un autre ?
2) Définir une classe TestBanque qui permet de :
• Prendre en charge plusieurs clients dont les références seront mises dans un tableau
• Créer pour chaque client un ensemble de comptes
• Faire des opérations sur certains comptes de certains clients puis afficher les informations
nécessaires
3) Reprendre les définitions précédentes en utilisant au lieu des tableaux, des objets de la classe
Vector.
POO-Java (Soir) : Série n°2 classes et objets
Page 5/ 5