Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Correction TD2

Télécharger au format docx, pdf ou txt
Télécharger au format docx, pdf ou txt
Vous êtes sur la page 1sur 7

Université virtuelle de Tunis Master N2TR

Programmation Orientée Objet et Langage Java


CORRECTION TD N°2

OBJECTIFS: - Manipuler des objets plus complexes, avec intégration de plusieurs


concepts : constructeur, surcharge, encapsulation, association entre classes

Exercice 1 :

Soit le fichier Cercle.java contenant le code suivant :

package p;
public class Cercle {
private float rayon;
public static final float PI=3.14f;
protected static int nbrInstance=0;

public Cercle (float r ){rayon=r; nbrInstance++;}


public float getRayon() {return rayon;}
public void setRayon(float rayon) {this.rayon = rayon;}
public float surface(){return pi*rayon*rayon;}
}

Soit le fichier Test.java contenant le code suivant :

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.

Tuteur : Dr Mohamed Sahbi Bahroun 1


Université virtuelle de Tunis Master N2TR

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

Version corrigée du fichier Test.java :


package p;
public class Test {
public static void main(String[] args) {
Cercle c1, c2, c3;

// Création des objets Cercle


c1 = new Cercle(3);
c2 = new Cercle(4);

// Affichage du rayon de c2 via la méthode getRayon()


System.out.println(c2.getRayon());

// Initialisation de c3 et modification du rayon


c3 = new Cercle(3);
c3.setRayon(5);

Tuteur : Dr Mohamed Sahbi Bahroun 2


Université virtuelle de Tunis Master N2TR

// Affichage de la surface de c3
System.out.println(c3.surface());

// Affichage du nombre d'instances créées


System.out.println(Cercle.nbrInstance);
}
}
Exercice 2 : (Les 3 parties peuvent être traitées indépendamment)
Partie 1 :
Soit la classe DisqueDur définie comme suit :
public class DisqueDur
{
private String type; // type de connexion du disque dur : SATA, SCSI ou IDE
private int taille; // taille du disque dur exprimée en giga octets (Go)
public DisqueDur (){…}
public DisqueDur (String s, int t) {…}
public int tailleMBit(){…} // Retourne la taille du disque dur en Mégabits
public void affiche (){…} // Affiche les informations relatives au disque dur
}
1) Implémenter la classe DisqueDur en tenant compte des indications suivantes :
- Par défaut, un disque dur est de type IDE et a une taille de 20 Go
- 1 Go = 1024 Mo et 1octet=8 bits
2) Ajouter les accesseurs mutateurs (get et set) pour chaque attribut de la classe.

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.

Tuteur : Dr Mohamed Sahbi Bahroun 3


Université virtuelle de Tunis Master N2TR

- 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;

// Constructeur par défaut (type IDE et taille de 20 Go)


public DisqueDur() {
this.type = "IDE";
this.taille = 20;
}

// Constructeur avec paramètres


public DisqueDur(String s, int t) {
this.type = s;
this.taille = t;
}

public int tailleMBit() {


// Conversion directe de Go en Mbits
return this.taille * GO_EN_MO * OCTETS_EN_BITS;
}
// Méthode pour afficher les informations du disque dur
public void affiche() {
System.out.println("Type de connexion: " + this.type);
System.out.println("Taille: " + this.taille + " Go");
System.out.println("Taille en Mbits: " + this.tailleMBit() + " Mbits");
}

public String getType() {


Tuteur : Dr Mohamed Sahbi Bahroun 4
Université virtuelle de Tunis Master N2TR

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

// Constructeur par défaut


public Pc() {
this.marque = null ;
this.prix = 0;
this.dd = new DisqueDur(); // Par défaut, on crée un disque dur IDE de 20 Go
}

// Constructeur avec paramètres


public Pc(String m, float p, String s, int t) {
this.marque = m;
this.prix = p;
this.dd = new DisqueDur(s, t);
}

// Méthode pour définir les informations du PC


public void setPcInfo(String m, float p, DisqueDur d) {
Tuteur : Dr Mohamed Sahbi Bahroun 5
Université virtuelle de Tunis Master N2TR

this.marque = m;
this.prix = p;
this.dd = d;
}

public float getPrix() {


return this.prix;
}

public String getMarque() {


return this.marque;
}

public DisqueDur getDisqueDur() {


return this.dd;
}

public void afficher() {


System.out.println("Marque du PC : " + this.marque);
System.out.println("Prix du PC : " + this.prix + " euros");
System.out.print("Caractéristiques du disque dur : ");
this.dd.affiche(); // Appelle la méthode d'affichage du disque dur
}
}
Partie 3 :
public class TestPcDisqueDur {
public static void main(String[] args) {
// Créer une instance d1 de la classe DisqueDur (type SCSI, taille 120 Go)
DisqueDur d1 = new DisqueDur("SCSI", 120);

// Afficher les informations du disque dur d1


d1.affiche();
System.out.println("Taille du disque dur d1 en Megabits: " + d1.tailleMBit());

// Créer une instance pc1 de la classe Pc (marque IBM, prix 1500 dinars, avec le disque
dur d1)

Tuteur : Dr Mohamed Sahbi Bahroun 6


Université virtuelle de Tunis Master N2TR

Pc pc1 = new Pc("IBM", 1500, d1.getType(), d1.getTaille());

// Afficher les informations du PC pc1


pc1.afficher();
System.out.println("Taille du disque dur de pc1 en Megabits: " +
pc1.getDisqueDur().tailleMBit());
}
}

Tuteur : Dr Mohamed Sahbi Bahroun 7

Vous aimerez peut-être aussi