NOM : SIBAFO PIERRE SALOMON
MATRICULE :24I02863
FILIERE :GI FI 2
TP4 : Programmation Orientée Objet - Classe Rational (Java)
Ce rapport présente le développement complet d’une classe Java permettant de manipuler
les nombres rationnels. Un nombre rationnel est un nombre pouvant être exprimé sous la
forme d’un ratio n/d, où n est le numérateur et d le dénominateur. L’objectif est de
construire une classe robuste, capable d’effectuer des opérations arithmétiques, de
simplifier automatiquement les fractions et de vérifier les erreurs de création (comme un
dénominateur nul).
1. Définition de la classe Rational
La classe Rational représente un nombre rationnel à l’aide de deux entiers : num
(numérateur) et denom (dénominateur). Elle contient un constructeur, des méthodes
d’accès, et plusieurs opérations pour manipuler les fractions.
public class Rational {
private int num; // numérateur
private int denom; // dénominateur
// Constructeur
public Rational(int num, int denom) {
if (denom == 0) {
throw new IllegalArgumentException("Dénominateur nul !");
}
[Link] = num;
[Link] = denom;
simplify(); // toujours créer une fraction sous forme irréductible
}
// Méthode pour simplifier le rationnel
private void simplify() {
int pgcd = pgcd([Link](num), [Link](denom));
num /= pgcd;
denom /= pgcd;
// pour que le dénominateur soit toujours positif
if (denom < 0) {
denom = -denom;
num = -num;
}
}
// Calcul du PGCD (algorithme d’Euclide)
private int pgcd(int a, int b) {
if (b == 0) return a;
return pgcd(b, a % b);
}
// Getters
public int getNum() { return num; }
public int getDenom() { return denom; }
// Représentation textuelle
@Override
public String toString() {
return num + " / " + denom;
}
// Multiplication (a ← a * b)
public void mult(Rational b) {
[Link] *= [Link];
[Link] *= [Link];
simplify();
}
// Addition (a ← a + b)
public void add(Rational b) {
[Link] = [Link] * [Link] + [Link] * [Link];
[Link] *= [Link];
simplify();
}
// Test d’égalité entre deux rationnels
public boolean equals(Rational b) {
return [Link] == [Link] && [Link] == [Link];
}
}
Le constructeur de la classe empêche la création d’un rationnel avec un dénominateur nul
grâce à l’instruction « throw new IllegalArgumentException('Dénominateur nul !') ». Chaque
fraction est automatiquement simplifiée grâce à la méthode simplify(), qui utilise le calcul
du PGCD.
2. Programme de test
public class TestRational {
public static void main(String[] args) {
Rational r1 = new Rational(3, 2);
Rational r2 = new Rational(1, 3);
[Link]("r1 = " + r1);
[Link]("r2 = " + r2);
// Test multiplication
[Link](r2);
[Link]("Après multiplication : r1 = " + r1);
// Test addition
[Link](r2);
[Link]("Après addition : r1 = " + r1);
// Test égalité
Rational r3 = new Rational(8, 12); // 8/12 = 2/3
Rational r4 = new Rational(2, 3);
[Link]("r3 = " + r3);
[Link]("r4 = " + r4);
[Link]("r3 == r4 ? " + [Link](r4));
}
}
Le programme de test crée plusieurs objets Rational et vérifie le bon fonctionnement des
différentes méthodes. Les opérations sont affichées dans la console afin d’observer les
résultats et la simplification automatique des fractions.
3. Explications et observations
• Si l’on tente de créer un objet avec un dénominateur nul, le programme lève une exception
IllegalArgumentException.
• La méthode mult() modifie l’objet courant pour le multiplier par un autre rationnel.
• La méthode add() effectue l’addition de deux rationnels en respectant la formule
mathématique classique.
• La méthode equals() compare deux rationnels simplifiés et retourne true s’ils
représentent la même valeur.
• Grâce à simplify(), toutes les fractions créées sont automatiquement réduites à leur forme
irréductible.
4. Conclusion
Cette activité pratique a permis de mettre en œuvre les concepts fondamentaux de la
programmation orientée objet en Java, tels que l’encapsulation, les méthodes, la gestion des
exceptions et les invariants de classe. La classe Rational ainsi obtenue est une
représentation robuste et correcte des nombres rationnels.