Correction TD2
Correction TD2
Correction TD2
Exercice 1 :
package p;
public class Cercle {
private float rayon;
public static final float PI=3.14f;
protected static int nbrInstance=0;
package p;
public class Test {
public static void main(String[] args) {
Cercle c1,c2,c3;
c1=new Cercle();
c1.rayon=3;
c2.Cercle(4);
System.out.println(c2.rayon) ;
c3.setRayon(5) ;
System.out.println(c3.surface()) ;
c1.pi=3.1415f;
Cercle.pi=3.1415f;
System.out.println(Cercle.nbrInstance);
System.out.println(c1.nbrInstance);
}
}
Le code du fichier Test.java contient certaines erreurs. Mentionnez les instructions erronées
en expliquant à chaque fois la raison, et proposez une version correcte du fichier Test.java.
CORRECTION :
Erreur : c1.rayon=3;
Explication : L'attribut rayon de la classe Cercle est défini comme private, il n'est donc
pas accessible directement depuis une autre classe. On doit utiliser les méthodes
getRayon() et setRayon() pour y accéder.
Correction : Utiliser la méthode setRayon() pour modifier la valeur de rayon.
Erreur : c2.Cercle(4);
Explication : un constructeur ne peut pas être appelé explicitement après la création d'un
objet. La syntaxe correcte est d'utiliser new Cercle() pour initialiser l'objet lors de la
déclaration.
Correction : Créer l'objet c2 correctement en utilisant new Cercle(4).
Erreur : System.out.println(c2.rayon);
Explication : l'attribut rayon de c2 est private et ne peut pas être accédé directement. Il
faut utiliser la méthode getRayon() pour obtenir sa valeur.
Correction : Utiliser getRayon() pour accéder à la valeur du rayon.
Erreur : c3.setRayon(5);
Explication : L'objet c3 n'a pas été initialisé. Il faut d'abord créer une instance de Cercle
avant d'appeler la méthode setRayon().
Correction : Initialiser l'objet c3 avant de l'utiliser.
Erreur : c1.pi=3.1415f;
Explication : La constante PI est définie comme static final, ce qui signifie qu'elle est
une constante et ne peut pas être modifiée.
Correction : Supprimer cette ligne car on ne peut pas modifier une constante.
Erreur : System.out.println(c1.nbrInstance);
Explication : L'attribut nbrInstance est static et doit être accédé via la classe Cercle, et
non via une instance.
Correction : Utiliser Cercle.nbrInstance pour accéder à l'attribut static
// Affichage de la surface de c3
System.out.println(c3.surface());
Partie 2 :
Soit la classe PC définie comme suit :
public class Pc
{
private String marque; // marque du pc
private float prix; // Prix du PC
private DisqueDur dd; //disque dur du PC défini dans la partie 1
public Pc(){…}
public Pc(String m, float p, String s, int t) {…}
public void setPcInfo (String m, float p, DisqueDur d) {…}
// permet de donner des valeurs aux caractéristiques du PC
public float getPrix(){…}
public String getMarque(){…}
public DisqueDur getDisqueDur(){…}
public void afficher(){…} // Affiche les caractéristiques du pc
}
Partie 3 :
Ecrire une classe de test comprenant un programme principal qui:
- Crée une instance d1 de la classe DisqueDur, de type SCSI ayant une taille de 120 Go,
l’affiche et affiche la taille du disque en Megabit.
- Crée une instance pc1 de la classe Pc, de marque IBM qui coûte 1500 dinars formé du
disque dur d1, l’affiche et affiche la taille son disque dur en Megabit.
CORRECTION :
Partie 1 :
public class DisqueDur {
private String type;
private int taille;
public static final int GO_EN_MO = 1024;
public static final int OCTETS_EN_BITS = 8;
return type;
}
public void setType(String type) {
this.type = type;
}
public int getTaille() {
return taille;
}
public void setTaille(int taille) {
this.taille = taille;
}
}
Partie 2 :
public class Pc {
// Attributs privés
private String marque; // Marque du PC
private float prix; // Prix du PC
private DisqueDur dd; // Disque dur du PC
this.marque = m;
this.prix = p;
this.dd = d;
}
// Créer une instance pc1 de la classe Pc (marque IBM, prix 1500 dinars, avec le disque
dur d1)