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 :