Université cadi Ayyad P.O.
O JAVA avancée Année universitaire
FSSM ELBACHARI Essaid 2024-2025
TP N°02
Java : Approfondissement POO
Préparée par : LAMSSANE Fatima
Configuration
Pour ce travail, l’environnement de développement utilisé est IntelliJ IDEA, avec le JDK 21. Le
choix de ces outils permet d’assurer la compatibilité avec les fonctionnalités récentes de Java.
Figure 1 – Icône de IntelliJ IDEA
Implémentation :
Exercice 01 :
— Écrire une classe Personne permettant de décrire complètement une personne, avec les
informations de la phrase suivante : “M. Rafiq Ahmed est né en 1985, il est célibataire.”
1 public class Personne {
2 private String lastName;
3 private String firstName;
4 private int birthYear;
5 private boolean isSingle;
6
7 public Personne(String lastName, String firstName, int birthYear, boolean
isSingle) {
8 [Link] = lastName;
9 [Link] = firstName;
10 [Link] = birthYear;
11 [Link] = isSingle;
12 }
13 }
14
Listing 1 – Classe Personne
— Ajouter une méthode retourneInfos() qui retourne une chaîne de caractères simi-
laire à la phrase donnée.
1 public String retourneInfos() {
2 String status = isSingle ? "c libataire" : " m a r i (e)";
ISI 1 Documentation TP02 - JAVA
Université cadi Ayyad P.O.O JAVA avancée Année universitaire
FSSM ELBACHARI Essaid 2024-2025
3 return firstName + " " + lastName + " est n (e) en " + birthYear + ", il
/elle est " + status + ".";
4 }
5
Listing 2 – Méthode retourneInfos
— Écrire un programme qui déclare 3 variables de type Personne, crée 3 instances de per-
sonne et affiche leurs informations.
1 public static void main(String[] args) {
2 Personne p1 = new Personne("LAMSSANE", "Elhassan", 1979, false);
3 Personne p2 = new Personne("LAMSSANE", "Naima", 1982, false);
4 Personne p3 = new Personne("LAMSSANE", "Med Amine", 2006, true);
5
6 [Link]([Link]());
7 [Link]([Link]());
8 [Link]([Link]());
9 }
10
Listing 3 – Programme principal avec 3 instances
— Ajouter une méthode age() qui renvoie l’âge de l’individu en fonction d’une année donnée
en paramètre.
1 public int age(int currentYear) {
2 return currentYear - birthYear;
3 }
4
Listing 4 – Méthode age
— Ajouter à la classe Personne un attribut conjoint et examiner les conséquences.
1 private Personne conjoint; // Conjoint(e) de la personne
2
Listing 5 – Ajout de l’attribut conjoint
Conséquences : L’ajout de l’attribut conjoint nécessite de modifier la méthode re-
tourneInfos() pour afficher les informations du conjoint.
— Ajouter une méthode marier(Personne p) qui permet de marier une personne à
une autre.
1 public void marier(Personne p) {
2 if ([Link] && [Link]) {
3 [Link] = false;
4 [Link] = p;
5 [Link] = false;
6 [Link] = this;
7 }
8 }
9
Listing 6 – Méthode marier
ISI 2 Documentation TP02 - JAVA
Université cadi Ayyad P.O.O JAVA avancée Année universitaire
FSSM ELBACHARI Essaid 2024-2025
— Modifier la méthode retourneInfos() pour refléter le nom de mariage.
1 public String retourneInfos() {
2 if (conjoint != null) {
3 return "Mme " + [Link] + " n e " + lastName +
4 " est n e en " + birthYear + ", elle est m a r i e .";
5 } else {
6 String status = isSingle ? "c libataire" : " m a r i (e)";
7 return firstName + " " + lastName + " est n (e) en " + birthYear +
8 ", il/elle est " + status + ".";
9 }}
10
Listing 7 – Méthode retourneInfos modifiée
Exercice 02 :
— Définir une classe Point avec un constructeur.
1 public class Point {
2 private int x;
3 private int y;
4
5 public Point(int x, int y) {
6 this.x = x;
7 this.y = y;
8 }}
9
Listing 8 – Classe Point avec constructeur
— Ajouter des méthodes d’accès et de modification des coordonnées.
1 public int getX() {
2 return x;
3 }
4
5 public void setX(int x) {
6 this.x = x;
7 }
8
9 public int getY() {
10 return y;
11 }
12
13 public void setY(int y) {
14 this.y = y;
15 }
16
Listing 9 – Méthodes d’accès et de modification
— Ajouter une méthode deplacer() qui effectue une translation définie par les arguments.
1 public void deplacer(int dx, int dy) {
2 this.x += dx;
3 this.y += dy;}
4
Listing 10 – Méthode deplacer pour translation
ISI 3 Documentation TP02 - JAVA
Université cadi Ayyad P.O.O JAVA avancée Année universitaire
FSSM ELBACHARI Essaid 2024-2025
— Ajouter une méthode afficher() qui affiche les coordonnées du point.
1 public void afficher() {
2 [Link]("Point (" + x + ", " + y + ")");}
3
Listing 11 – Méthode afficher
— Ajouter une méthode toString() pour transformer un point en une chaîne de caractères
“(x,y)”.
1 @Override
2 public String toString() {
3 return "(" + x + ", " + y + ")";
4 }
5
Listing 12 – Méthode toString
— Écrire un programme principal pour tester la classe Point.
1 public static void main(String[] args) {
2 Point p = new Point(3, 4);
3 [Link](); // Affiche : Point (3, 4)
4 [Link]([Link]()); // Affiche : (3, 4)
5 [Link](2, 3);
6 [Link](); // Affiche : Point (5, 7)
7 }
8
Listing 13 – Programme principal de test
Exercice 03 :
— Définir une classe Individu composée d’un nom, d’une adresse, et d’un numéro de télé-
phone.
1 public class Individu {
2 private String nom;
3 private String adresse;
4 private String telephone;
5
6 public Individu(String nom, String adresse, String telephone) {
7 [Link] = nom;
8 [Link] = adresse;
9 [Link] = telephone;
10 }
11
12 public String getNom() {
13 return nom;
14 }
15
16 public void setNom(String nom) {
17 [Link] = nom;
18 }
19
20 public String getAdresse() {
21 return adresse;
ISI 4 Documentation TP02 - JAVA
Université cadi Ayyad P.O.O JAVA avancée Année universitaire
FSSM ELBACHARI Essaid 2024-2025
22 }
23
24 public void setAdresse(String adresse) {
25 [Link] = adresse;
26 }
27
28 public String getTelephone() {
29 return telephone;
30 }
31
32 public void setTelephone(String telephone) {
33 [Link] = telephone;
34 }
35 }
36
Listing 14 – Classe Individu
— Écrire une méthode pour afficher les informations de l’individu.
1 public void afficher() {
2 [Link]("Nom: " + nom);
3 [Link]("Adresse: " + adresse);
4 [Link](" T l p h o n e : " + telephone);
5 }
6
Listing 15 – Méthode afficher
Exercice 04 :
— Ajouter un compteur pour suivre le nombre d’objets créés.
1 import [Link];
2
3 public class Individu {
4 private static int nbIndividus = 0; // Compteur d'objets crees
5 private static Vector<Individu> listeIndividus = new Vector<>();
6 private String nom;
7 private String adresse;
8 private String telephone;
9
10 public Individu(String nom, String adresse, String telephone) {
11 [Link] = nom;
12 [Link] = adresse;
13 [Link] = telephone;
14 nbIndividus++;
15 [Link](this); // Ajouter l'individu a la liste}
16
17 public static int getNbIndividus() {
18 return nbIndividus;}
19 public static void afficherListeIndividus() {
20 for (Individu individu : listeIndividus) {
21 [Link]([Link] + " - " + [Link] + " -
" + [Link]);}}}
22
Listing 16 – Ajout du compteur et liste
ISI 5 Documentation TP02 - JAVA
Université cadi Ayyad P.O.O JAVA avancée Année universitaire
FSSM ELBACHARI Essaid 2024-2025
— Afficher le nombre d’individus créés.
1 public static void main(String[] args) {
2 Individu i1 = new Individu("ElHassan", "Safi", "0600000001");
3 Individu i2 = new Individu("Naima", "Safi", "0600000002");
4 Individu i3 = new Individu("Med Amine", "Safi", "0600000003");
5
6 [Link]("Nombre total d'individus c r s : " + Individu.
getNbIndividus());
7 [Link]();
8 }
9
Listing 17 – Affichage du nombre d’individus
Exercice 05 :
— Définir la classe Mesure avec ses attributs.
1 public class Mesure {
2 private int valeur; // Valeur de la mesure
3 private static final int MIN = -100; // Limite minimale
4 private static final int MAX = 100; // Limite maximale
5
6 // Attributs statiques pour suivre le nombre de mesures et la somme des
valeurs
7 private static int nbMesures = 0;
8 private static int sommeMesures = 0;
9
10 public Mesure(int val) {
11 if (val >= MIN && val <= MAX) {
12 [Link] = val;
13 nbMesures++;
14 sommeMesures += val;
15 } else {
16 [Link]("Mesure hors intervalle");
17 }
18 }
19
20 public static void afficherMoyenne() {
21 if (nbMesures > 0) {
22 double moyenne = (double) sommeMesures / nbMesures;
23 [Link]("La moyenne des " + nbMesures + " mesures est
: " + moyenne);
24 } else {
25 [Link](" Z r o mesures");
26 }
27 }
28 }
29
Listing 18 – Classe Mesure
ISI 6 Documentation TP02 - JAVA
Université cadi Ayyad P.O.O JAVA avancée Année universitaire
FSSM ELBACHARI Essaid 2024-2025
— Écrire la classe principale EntrerMesures pour tester l’application.
1 import [Link].*;
2
3 public class EntrerMesures {
4 public static void main(String[] args) throws IOException {
5 int valeur;
6 BufferedReader entree = new BufferedReader(new InputStreamReader(
[Link]));
7 do {
8 [Link]("Entrez une mesure : ");
9 valeur = [Link]([Link]());
10 if (valeur != 0) {
11 new Mesure(valeur);
12 }
13 } while (valeur != 0);
14
15 [Link]();
16 }
17 }
18
Listing 19 – Classe EntrerMesures
Exercice 06 :
— Définir la classe Livre avec ses attributs et ses constructeurs.
1 public class Livre {
2 private String auteur;
3 private String titre;
4 private int nbPages;
5 private String editeur;
6
7 private static int numLivre = 0; // Compteur de livres
8 private int numero; // N u m r o du livre
9
10 // Constructeur avec nombre de pages et diteur (optionnels)
11 public Livre(String auteur, String titre, int nbPages, String editeur) {
12 [Link] = auteur;
13 [Link] = titre;
14 [Link] = nbPages;
15 [Link] = editeur;
16 [Link] = ++numLivre;}
17
18 // Constructeur sans nombre de pages ni diteur
19 public Livre(String auteur, String titre) {
20 this(auteur, titre, 0, "Inconnu");}
21
22 @Override
23 public String toString() {
24 return "Livre #" + numero + " : " + titre + " par " + auteur +
25 (nbPages > 0 ? ", " + nbPages + " pages" : "") +
26 (editeur != null ? ", dit par " + editeur : "");}}
27
Listing 20 – Classe Livre
ISI 7 Documentation TP02 - JAVA
Université cadi Ayyad P.O.O JAVA avancée Année universitaire
FSSM ELBACHARI Essaid 2024-2025
— Écrire un programme principal pour tester la classe Livre.
1 public static void main(String[] args) {
2 Livre l1 = new Livre("Zahrae", "After the Sunset", 380, "Editor");
3 Livre l2 = new Livre("Zahrae", "Masacre bajo el Cobertizo");
4 Livre l3 = new Livre("Dan Brown", "Inferno", 642, "Jason Kaufman");
5
6 [Link]([Link]());
7 [Link]([Link]());
8 [Link]([Link]());
9 }
10
Listing 21 – Programme principal de test
ISI 8 Documentation TP02 - JAVA