public class PointPlan {
private float abscisse;
private float ordonnee;
public PointPlan() { }
public PointPlan(float x, float y) {
this.abscisse = x;
this.ordonnee = y;
}
public PointPlan(PointPlan p) {
this(p.abscisse, p.ordonnee);
}
public float getAbscisse() {
return this.abscisse;
}
public float getOrdonnee() {
return this.ordonnee;
}
public String toString() {
return ("\\n abscisse = " + this.abscisse + " ordonnee = " + this.ordonnee);
}
public void init() {
// lecture des valeurs de : abscisse et ordonnee
}
}
public class Point3D extends PointPlan {
private float azimut;
public Point3D() {
super();
}
public Point3D(float x, float y, float z) {
super(x, y);
this.azimut = z;
}
public Point3D(Point3D p) {
super(p);
this.azimut = p.azimut;
}
public float getAzimut() {
return this.azimut;
}
}
Énumérer toutes les anomalies de conception de la classe Point3D ainsi que les instructions rejetées par le compilateur. Justifier chaque réponse.
Héritage inapproprié : La méthode init() de PointPlan n'est pas implémentée dans Point3D.
Redondance de méthodes : Les méthodes getAbscisse() et getOrdonnee() sont redondantes dans la classe Point3D car elles sont déjà définies dans la classe parent PointPlan.
Appel de méthode non définie : L'appel à la méthode super() dans le constructeur de la classe Point3D est incorrect car il n'y a pas de constructeur par défaut défini dans la classe parent PointPlan. Cela entraînera une erreur de compilation.
Utilisation d'attributs non accessibles : Les attributs abscisse et ordonnee sont déclarés comme private dans la classe parent PointPlan, ils ne sont pas directement accessibles dans la classe Point3D. Par conséquent, les tentatives d'accès à ces attributs dans la classe Point3D seront rejetées par le compilateur.
public void init(){
System.out.println("Veuillez saisir la valeur de l'abscisse : ");
this.abscisse = input.nextInt();
System.out.println("Veuillez saisir la valeur de l'ordonnée : ");
this.ordonnee = input.nextInt();
}
Soit la classe suivante gérant une communication téléphonique locale :
public class Communication {
private float duree; // durée de la communication
private String numero; // numéro appelé
public static final float PRIX_SECONDE = 0.01; // prix de la seconde
public Communication() {
// constructeur vide
}
// initialise une nouvelle communication de durée d et de numéro num
public Communication(float d, String num) {
this.duree = d;
this.numero = num;
}
// constructeur par copie
public Communication(Communication c) {
this(c.duree, c.numero);
}
// retourne la durée de la communication
public float getDuree() {
return this.duree;
}
// retourne le numéro appelé
public String getNumero() {
return this.numero;
}
// retourne la chaîne représentant la communication courante
public String toString() {
return ("\\n duree = " + this.duree + " numero appele = " + this.numero);
}
// initialise interactivement la communication courante
public void init() {
// lecture des valeurs de duree et numero
}
// retourne le prix de la communication courante
public float prixCommunication() {
return this.duree * Communication.PRIX_SECONDE;
}
}
On souhaite étendre cette classe de façon à gérer une communication internationale qui possède 2 données supplémentaires : le pays appelé (représenté par une chaîne de caractères) et le prix de la seconde de communication pour
ce pays.
Écrire la classe CommunicationInter
(et une classe TestCommunicationInter
) en respectant les
étapes suivantes :