TP Poo
TP Poo
TP Poo
Objective:
Le but principal de Ce projet est de perfectionner l'utilisation des
concepts de la programmation orientéeobjet (POO) a fin derésoudre
efficacement des problème
Material:
Un ordinateur qui contient :
- Visual Studio Code (avec le pack de développement Java)
- Java
VSCode, notre éditeur de code pour cette tâche, Notre choix du langage de programmation
propose un surlignage syntaxique de qualité et orienté objet pour cette tâche offre une
des fonctionnalités d'exécution et de débogage structure modulaire et organisée, avec des
avancées grâce à ses extensions variées. Son principes clés tels que l'héritage et
support étendu pour la correction des erreurs l'encapsulation. Son soutien à la réutilisabilité et
en fait un choix idéal pour notre projet. à la sécurité répond parfaitement à nos besoins
pour ce projet.
Exercice 1
1 - Créez une classe Person avec les attributs suivants : matricule, nom, âge et adresse.
package exo1;
public class Person{
int matricule;
String nom;
int age;
String adresse;
Person(){
};
}
2 - Créez les objets : (1000, Pierre, 30, Montréal) et (2000, Adam, 40, Québec).
3 - Affichez les informations de Pierre et d’Adam.
package exo1;
public class Main1 {
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person();
p1.matricule = 1000;
p1.nom = "Pierre";
p1.age = 30;
p1.adresse = "Montréal";
p2.matricule = 2000;
p2.nom = "Adam";
p2.age = 40;
p2.adresse = "Québec";
// Print information for Pierre
System.out.println("Informations de Pierre :\n" +
"Matricule : " + p1.matricule + "\n" +
"Nom : " + p1.nom + "\n" +
"Âge : " + p1.age + "\n" +
"Adresse : " + p1.adresse + "\n");
// Print information for Adam
System.out.println("Informations d'Adam :\n" +
"Matricule : " + p2.matricule + "\n" +
"Nom : " + p2.nom + "\n" +
"Âge : " + p2.age + "\n" +
"Adresse : " + p2.adresse);
}
}
Exercice 1
Console
Exercice 2
package exo2;
public class Animal {
String nom;
String color;
void setNom(String Nom) {
this.nom = Nom;
}
String getColor() {
return color;
}
String getNom() {
return nom;
}
void setColor(String Color) {
this.color = Color;
}
}
package exo2;
public class Main2 {
public static void main(String[] args) {
Animal chien = new Animal();
Animal chat = new Animal();
chat.setNom("Lucifer");
chat.setColor("noir");
chien.setNom("Spike");
chien.setColor("blanc");
System.out.println("Nom et couleur du chat : " + chat.getNom() + "
(" + chat.getColor() + ")");
Console
Exercice 2 - 2 Compte
1 - Écrire la classe Compte
2 - Ajouter un constructeur sans paramètre
3 - Ajouter un constructeur avec paramètre
package exo2;
public class Compte {
private int numero;
private String intitule;
private double solde;
private double decouvertMax;
private double debitMax;
package exo2;
/**
* Classe représentant un compte bancaire.
* Auteur: Heddab Selsabil
* Version: 1.0
* Date de création: 21/03/2024
* Description: Cette classe représente un compte bancaire avec ces fonctionnalités.
*/
public class Compte {
private int numero;
private String intitule;
private double solde;
private double decouvertMax;
private double debitMax;
/**
* Constructeur par défaut de la classe Compte.
* Initialise les champs à leurs valeurs par défaut.
*/
Compte() {
}
/**
* Constructeur avec paramètres de la classe Compte.
* @param Numero Le numéro du compte.
* @param Intitule L'intitulé du compte.
* @param Solde Le solde du compte.
* @param DecouvertMax Le découvert maximum autorisé du compte.
* @param DebitMax Le débit maximum autorisé du compte.
*/
Compte(int numero, String intitule, double solde, double decouvertMax,
double debitMax) {
this.numero = numero;
this.intitule = intitule;
this.solde = solde;
this.decouvertMax = decouvertMax;
this.debitMax = debitMax;
}
/**
* Méthode pour verser de l'argent sur le compte.
* @param sol Le montant à verser.
*/
void verser(double sol) {
}
/**
* Méthode pour retirer de l'argent du compte.
* @param sol Le montant à retirer.
* Cette méthode permet de retirer de l'argent du solde du compte,
* en respectant le débit maximum autorisé.
*/
void retirer(double sol) {
}
}
Exercice 2 - 2 Compte
6-Les commentaires
/**
* Méthode pour afficher le solde du compte.
*/
void afficherSolde() {
}
/**
* Méthode pour afficher les informations du compte.
*/
void afficherInfoCompte() {
}
/**
* Méthode pour transférer des fonds vers un autre compte.
*
* @param destination Le compte de destination.
* @param montant Le montant à transférer.
* Cette méthode permet de transférer de l'argent du compte actuel vers un
autre compte,
* en vérifiant que le montant à transférer respecte le débit maximum autorisé.
*/
void transfererFond(Compte destination, double montant) {
}
/**
* Méthode pour afficher si le débit maximum est atteint.
* Cette méthode vérifie si le solde du compte dépasse le découvert maximum
autorisé.
*/
void afficherDebitMaxAtteint() {
}
}
Exercice 2 - 2 Compte - Source Code
package exo2;
public class Compte {
private int numero;
private String intitule;
private double solde;
private double decouvertMax;
private double debitMax;
// Constructeur sans paramètres
public Compte() {
}
// Constructeur avec paramètres
public Compte(int numero, String intitule, double solde, double decouvertMax, double debitMax) {
this.numero = numero;
this.intitule = intitule;
this.solde = solde;
this.decouvertMax = decouvertMax;
this.debitMax = debitMax;
}
public void verser(double montant) {
solde += montant;
System.out.println("Vous avez ajouté " + montant + " DA à votre compte bancaire avec succès.
Votre nouveau solde est " + solde + " DA.");
}
public void retirer(double montant) {
if (montant <= debitMax && montant <= solde) {
solde -= montant;
System.out.println("Vous avez retiré " + montant + " DA de votre compte bancaire.
Votre nouveau solde est " + solde + " DA");
} else {
System.out.println("Impossible de retirer ce montant de votre compte bancaire.\n");
}
}
public void afficherSolde() {
System.out.println("Le solde du compte numéro '" + numero + "' est : " + solde + " DA\n");
}
public void afficherInfoCompte() {
System.out.println("Informations du compte numéro '" + numero + "' :\n\nNumero: "
+ numero + "\nIntitulé: " + intitule + "\nSolde: " + solde + " DA\nDecouvert maximum: "
+ decouvertMax + " DA\nDebit maximum: " + debitMax + " DA\n");
}
public void transfererFond(Compte destination, double montant) {
if (montant <= debitMax) {
if (montant <= solde) {
retirer(montant);
destination.verser(montant);
System.out.println("Transfert de fonds réussi.");
} else {
System.out.println("Fonds insuffisants pour effectuer le transfert.");
}
} else {
System.out.println("Montant de transfert supérieur au débit maximum autorisé.");
}
}
public void afficherDebitMaxAtteint() {
if (solde < 0 && Math.abs(solde) > decouvertMax) {
System.out.println("Le solde dépasse le découvert maximum autorisé.");
} else {
System.out.println("Le solde est dans les limites autorisées.");
}
}
public static void main(String[] args) {
Compte cpt1 = new Compte(1, "User1", 50000, 10000, 25000);
Compte cpt2 = new Compte(2, "User2", 60000, 15000, 26000);
cpt1.afficherSolde();
cpt1.verser(10000);
cpt1.retirer(5000);
cpt1.afficherInfoCompte();
cpt2.afficherSolde();
cpt2.retirer(25000);
cpt2.transfererFond(cpt1, 7000);
cpt2.afficherInfoCompte();
cpt1.afficherDebitMaxAtteint();
}
}
Exercice 2 - 2 Compte
Console
Exercice 3
1-Indiquer la différence entre les deux constructeurs.
Dans l'exécution, il n'y a pas de différence, mais le premier constructeur est créé
par nous, tandis que le constructeur par défaut est généré par Java. Les deux
initialisent les attributs à 0. Cependant, avec le premier constructeur, nous
pouvons initialiser un objet sans paramètre, qu'il y ait ou non un constructeur
avec des paramètres. En revanche, si on utilise le constructeur par défaut avec
un constructeur ayant des paramètres, cette possibilité n'est pas disponible.
3-IModifier le constructeur avec paramètre, pour n’inclure que le premier paramètre int
a, le y doit être initialisé à zéro.
publicPoint(inta){
x=a;
y=0;
}
Exercice 4
Q1 - Q2 - Q3
package tp2;
public class Calculatrice {
private double operande1, operande2, resultat;
private char operateur;
private int erreur; // Cette variable permet d'indiquer un mauvais opérateur dans une opération
// Constructeur sans paramètre
public Calculatrice() {
System.out.println("Ma première calculatrice\n");
}
// Constructeur avec initialisation des attributs
public Calculatrice(double operande1, double operande2, char operateur) {
this.operande1 = operande1;this.operande2 = operande2;
switch (operateur) {
case '+':case '-':case '*':case '/':this.operateur = operateur;
break;
default:System.out.println("Opérateur indisponible\n");erreur = 1;
}
}
// Cette méthode permet d'effectuer l'addition
public void additionner() {
switch (operateur) {
case '+':
resultat = operande1 + operande2;erreur = 0;break;
default:erreur = 1;
}
}
// Cette méthode permet d'effectuer la soustraction
public void soustraire() {
switch (operateur) {
case '-':
resultat = operande1 - operande2;erreur = 0;break;
default:erreur = 1;
}
}
// Cette méthode permet d'effectuer la multiplication
public void multiplier() {
switch (operateur) {
case '*':
resultat = operande1 * operande2;
erreur = 0;break;
default:erreur = 1;
}
}
// Cette méthode permet d'effectuer la division
public void diviser() {
if (operande2 != 0) {
switch (operateur) {
case '/':
resultat = operande1 / operande2;erreur = 0;break;
default:erreur = 1;
}
} else {
System.out.println("Division par zéro impossible\n");erreur = 1;
}
}
// Cette méthode permet d'afficher le résultat
public void afficher() {
if (erreur != 1) {
System.out.println("Résultat : " + operande1 + " " + operateur + " " + operande2 + " = " + resultat + "\n");
} else {
System.out.println("Vous avez utilisé un faux opérateur pour cette opération.\n");
}
}
}
Exercice 4
6- Les commentaires
package exo4;
class Calculatrice {
/**
* La classe Calculatrice représente une calculatrice simple
* capable d'effectuer des opérations mathématiques basiques
* telles que l'addition, la soustraction, la multiplication et la division.
*
* Auteur: Haddab Selsabil
* Version: 1.0
* Date de création: 21/03/2024
*/
private double operande1, operande2, resultat;private char operateur;
private int erreur;
/**
* Méthode pour effectuer l'addition des deux opérandes.
* @return La somme des deux opérandes.
*/
public int additionner() {}
/**
* Méthode pour effectuer la soustraction des deux opérandes.
* @return La différence des deux opérandes.
*/
public int soustraire() {}
/**
* Méthode pour effectuer la multiplication des deux opérandes.
* @return Le produit des deux opérandes.
*/
public int multiplier() {}
/**
* Méthode pour effectuer la division des deux opérandes.
* @return Le quotient des deux opérandes.
*/
public int diviser() {}
/**
* Méthode pour afficher le résultat de la dernière opération.
*/
void afficher() {}
// Constructeur sans paramètre
Calculatrice() {
System.out.println("Ma première calculatrice\n");
}
// Constructeur avec initialisation des attributs
public Calculatrice(double operande1, double operande2, char operateur) {
// Initialisation des attributs ici
}
}
Exercice 4 - Source Code
package exo3;
import java.util.Scanner;
public class Main_calculatrice {
public static void main(String[] args) {
Calculatrice calculate = new Calculatrice();
Scanner scanner = new Scanner(System.in);
String stop ;
do {
System.out.println("Entrez l'opérande 1: ");
calculate.operande1 = scanner.nextDouble();
switch (calculate.operateur) {
case '+':
calculate.additionner();
calculate.afficher();
break;
case '-':
calculate.soustraire();
calculate.afficher();
break;
case '*':
calculate.multiplier();
calculate.afficher();
break;
case '/':
calculate.diviser();
calculate.afficher();
break;
default:
System.out.println("Opérateur invalide.");
break;
}
System.out.println("stop? press q");
stop = scanner.next();
} while (!stop.equals("q"));
Calculatrice cal = new Calculatrice(186,78,'-');
cal.additionner();
cal.afficher();
cal.soustraire();
cal.afficher();
scanner.close();
}
}
Exercice 4
Console
Exercice 5
1- Créer une classe Point, avec les attributs privés x et y, représentant l’abscisse et
l’ordonnée respectivement.
package exo5;
public class Point {
private double x, y;
public double getX() {
return x;
}
public double getY() {
return y;
}
public void setX(double X) {
this.x = X;
}
public void setY(double Y) {
this.y = Y;
}
public Point(double X, double Y) {
this.x = X;
this.y = Y;
}
public Point() {
// Default constructor
}
public void deplacer(double x, double y) {
this.x += x;
this.y += y;
}
public void afficher() {
System.out.println("(" + this.x + "," + this.y + ")\n");
}
}
Q4 - La visibilité de ces méthodes doit être “public” pour qu’elles soient accessibles depuis
l’extérieur de la classe ou du package (world), permettant ainsi de lire (getter ou récupérer) et
de modifier (setter) les coordonnées du point.
Exercice 5
5 - Ajouter un constructeur avec paramètres et un constructeur sans paramètre
6 - Quelle est l’utilité de l’ajout du constructeur sans paramètre alors que tous les objets
hérite un constructeur par défaut hérité de la classe Objet().
Le constructeur sans paramètre est ajouté pour permettre la création de points par défaut
(0.0) dans notre cas, sans avoir à spécifier des coordonnées spécifiques à chaque fois. Cela
offre une plus grande flexibilité lors de la création d’objets de la classe Point. En d’autres
termes, je peux créer des objets de la classe Point avec les valeurs (0,0) sans avoir à fournir
des coordonnées spécifiques à chaque instant.
8 - Ajouter une méthode afficher() qui permet d’afficher les coordonnées d’un point p.
L’encapsulation dans cette classe est réalisée en déclarant les attributs x et y comme privés.
Cela signifie que ces attributs ne peuvent être modifiés ou consultés que par les méthodes
publiques de la classe (getX, setX, etc.). Cette approche permet de contrôler l’accès aux
données et d’éviter les modifications accidentelles.
Exercice 5
10 - Créer les objets : a(-1,2) et b(-3,-5)
package exo5;
public class Main {
public static void main(String[] args) {
Point a = new Point(-1, 2);
Point b = new Point(-3, -5);
System.out.print("Affichage des coordonnees de 'a': ");
a.afficher();
System.out.print("Affichage des coordonnees de 'b': ");
b.afficher();
a.deplacer(-3, 3);
System.out.print("Affichage des nouveaux coordonnees de 'a': ");
a.afficher();
}
}
Console
Q14 - Dans la méthode main(), vous ne pouvez pas accéder directement à a.x et a.y car les attributs x
et y de la classe Point sont déclarés comme privés (private). Cela est dû au principe d'encapsulation
en Java.
Q15 - Le programme compile sans erreur car aucun objet n'a été instancié sans paramètres.
Cependant, si un objet était instancié sans paramètres, une erreur serait générée car le constructeur
par défaut ne fonctionne pas en présence d'un constructeur avec paramètre.
Exercice 5 - Source Code
package exo5;
public class Point {
private double x, y;
public double getX() {
return x;
}
public double getY() {
return y;
}
public void setX(double X) {
this.x = X;
}
public void setY(double Y) {
this.y = Y;
}
public Point(double X, double Y) {
this.x = X;
this.y = Y;
}
public Point() {
}
public void deplacer(double x, double y) {
this.x += x;
this.y += y;
}
void afficher() {
System.out.println("(" + this.x + "," + this.y + ")\n");
}
public static void main(String[] args) {
Point a = new Point(-1, 2);
Point b = new Point(-3, -5);
System.out.print("Affichage des coordonnées de 'a': ");
a.afficher();
System.out.print("Affichage des coordonnées de 'b': ");
b.afficher();
a.deplacer(-3, 3);
System.out.print("Affichage des nouveaux coordonnées de 'a': ");
a.afficher();
}
}
Exercice 6
1 - Exécuter le code
Console
4 - Modifier le code
package exo6;
import java.util.Scanner;
public class AddNumbers {
public static int addition(int num1, int num2) {
int add = num1 + num2;
return add;
}
public static void main(String[] args) {
int number1, number2, sum;
Scanner scan = new Scanner(System.in);
System.out.println("Enter 1st number: ");
number1 = scan.nextInt();
System.out.println("Enter 2nd number: ");
number2 = scan.nextInt();
sum = AddNumbers.addition(number1, number2);
System.out.println("Sum = " + sum);
// Close the Scanner object
scan.close();
}
}
Exercice 6
5 - Documenter votre classe
6 - Source Code
package exo6;
import java.util.Scanner;
public class AddNumbers {
/**
* Méthode pour effectuer l'addition de deux nombres entiers.
* @param num1 Le premier nombre entier.
* @param num2 Le deuxième nombre entier.
* @return La somme des deux nombres entiers.
*/
public static int addition(int num1, int num2) {
int add = num1 + num2;
return add;
}
/**
* Méthode principale pour exécuter le programme.
*/
public static void main(String[] args) {
// Création d'une instance de la classe AddNumbers
AddNumbers calcul = new AddNumbers();
int number1, number2, sum;
Scanner scan = new Scanner(System.in);
System.out.println("Entrez le premier nombre : ");
number1 = scan.nextInt();
System.out.println("Entrez le deuxième nombre : ");
number2 = scan.nextInt();
// Appel de la méthode addition sur l'instance de la classe
AddNumbers
sum = calcul.addition(number1, number2);
System.out.println("Somme = " + sum);
scan.close();
}
}
Merci