Serie Java Revision 2
Serie Java Revision 2
Exercice 1
1. Expliquer le rôle de la JVM (Java Virtual Machine) : La Java Virtual Machine (JVM) est une composante essentielle
de l’environnement d’exécution Java. Son rôle est d’exécuter le bytecode Java, qui est le code intermédiaire généré
après la compilation des fichiers source .java.
2. Expliquez le concept d’attribut statique en POO : Un attribut statique (ou variable de classe) est une variable déclarée
avec le mot-clé static, ce qui signifie qu’elle est partagée entre toutes les instances de la classe.
3. Expliquer la notion de surcharge de constructeurs et préciser son intérêt : La surcharge de constructeurs consiste à
définir plusieurs constructeurs dans la même classe, chacun ayant des signatures différents (Chaque constructeur
doit se différencier par le nombre ou le type de paramètres).
Intérêt : La surcharge de constructeurs améliore la flexibilité et facilite l’utilisation de la classe pour les utilisateurs
qui peuvent créer des objets en fonction des informations disponibles, rendant le code plus intuitif et adaptable.
Exercice 2
1. Codes relatif à chaque classe
— Classe Point
public class Point {
// Coordonnées du point : abs représente l’ordonnée (x) et ord représente l’abscisse (y)
private float abs, ord;
// Constructeur par défaut qui initialise le point à l’origine (0, 0)
public Point() {
[Link] = 0;
[Link] = 0;
}
// Constructeur qui initialise le point avec des coordonnées spécifiques
public Point(float x, float y) {
[Link] = x;
[Link] = y;
}
// Constructeur de copie qui crée un nouveau point à partir d’un autre point
public Point(Point p) {
1
Université de Tunis El Manar
Institut supérieur d’informatique 2 ème Computer Science
Département Génie Logiciel Programmation Orientée Objet
[Link] = [Link];
[Link] = [Link];
}
// Méthode pour obtenir la valeur de l’ordonnée (x)
public float getAbs() {
return abs;
}
// Méthode pour définir la valeur de l’ordonnée (x)
public void setAbs(float abs) {
[Link] = abs;
}
// Méthode pour obtenir la valeur de l’abscisse (y)
public float getOrd() {
return ord;
}
// Méthode pour définir la valeur de l’abscisse (y)
public void setOrd(float ord) {
[Link] = ord;
}
// Méthode pour comparer deux points : retourne vrai si les coordonnées sont identiques
public boolean equalsA(Point p) {
return ([Link] == abs && [Link] == ord) || ([Link](p));
}
// Méthode pour traduire le point en ajoutant dx et dy aux coordonnées
public void translate(float dx, float dy) {
[Link] = abs + dx;
[Link] = ord + dy;
}
// Redéfinition de la méthode toString pour afficher les coordonnées du point
@Override
public String toString() {
return "Point(" + abs + "," + ord + ")";
}
// Méthode pour afficher les coordonnées du point dans la console
public void affiche() {
[Link]("Point(" + abs + "," + ord + ")");
}
}
2
Université de Tunis El Manar
Institut supérieur d’informatique 2 ème Computer Science
Département Génie Logiciel Programmation Orientée Objet
— Classe Rectangle
public class Rectangle {
// Points représentant les coins opposés du rectangle
private Point p1, p2;
// Constructeur qui initialise le rectangle avec deux points (p1 et p2)
public Rectangle(float x1, float y1, float x2, float y2) {
this.p1 = new Point(x1, y1); // Création du premier point
this.p2 = new Point(x2, y2); // Création du deuxième point
}
// Méthode pour calculer la surface du rectangle
public float surface() {
// Calcul de la largeur et de la hauteur en utilisant les coordonnées des points
float largeur = [Link]([Link]() - [Link]());
float hauteur = [Link]([Link]() - [Link]());
return largeur * hauteur; // Retourne la surface
}
// Méthode pour calculer le périmètre du rectangle
public float perimetre() {
// Calcul de la largeur et de la hauteur comme précédemment
float largeur = [Link]([Link]() - [Link]());
float hauteur = [Link]([Link]() - [Link]());
return 2 * (largeur + hauteur); // Retourne le périmètre
}
// Méthode pour translater le rectangle en déplaçant ses deux points
public void translater(float x, float y) {
[Link](x, y); // Déplace le premier point
[Link](x, y); // Déplace le deuxième point
}
// Redéfinition de la méthode toString pour afficher les sommets du rectangle
@Override
public String toString() {
return "Rectangle de sommets: " + p1 + " et " + p2; // Affiche les coordonnées des points
}
}
— Classe Test
public class Test {
public static void main(String[] args) {
// Création de quatre points en utilisant différents constructeurs
3
Université de Tunis El Manar
Institut supérieur d’informatique 2 ème Computer Science
Département Génie Logiciel Programmation Orientée Objet
4
Université de Tunis El Manar
Institut supérieur d’informatique 2 ème Computer Science
Département Génie Logiciel Programmation Orientée Objet
2. Pour ajouter une numérotation automatique aux points du plan, voici les modifications nécessaires :
— Attribut statique : Ajouter un attribut statique, comme compteur, dans la classe Point pour garder une trace du
nombre total de points créés.
— Attribut pour le numéro de point : Ajouter un attribut d’instance, comme numero, pour stocker le numéro unique
de chaque point.
— Incrémentation automatique : Dans chaque constructeur, incrémenter le compteur statique compteur et as-
signer sa valeur au nouvel attribut numero. Cela garantit que chaque point créé reçoit un numéro unique en
fonction de l’ordre de création.
— Accesseur pour le numéro : Ajouter une méthode getNumero pour récupérer le numéro unique de chaque point
si besoin, ou l’inclure dans la méthode toString pour afficher directement ce numéro avec les coordonnées du
point.
Remarques
— Point p3 = new Point(p2) ;
Cette ligne crée un nouvel objet Point en utilisant le constructeur de copie. Cela signifie que :
p3 est une nouvelle instance de la classe Point avec ses propres coordonnées, copiées de p2.
p3 et p2 sont donc deux objets distincts en mémoire. Toute modification de l’un n’affectera pas l’autre.
— Point p3 = p2 ;
Cette ligne, en revanche, ne crée pas un nouvel objet mais une référence vers le même objet p2 en mémoire. Cela
signifie que :
p3 et p2 pointent vers le même objet Point.
Toute modification des attributs via p3 se répercutera également sur p2, et vice-versa, puisque les deux variables
référencent le même objet.