Exercices dirigés n°5

Transcription

Exercices dirigés n°5
ED n°5
Exercices dirigés n°5
Design Pattern Composite : étant données 2 schémas de classes représentant des exemples de
formes possibles :
public class Cercle{
private Point centre;
private double rayon;
private Color couleur;
public Cercle(Point p,double r,Color c){
centre = p; rayon = r; couleur = c;
}
public void seDessiner(){// connaissance du code non indispensable}
}
public class Polygone{
private Point[] sommets;
private Color couleur;
public Polygone(Point[] s,Color c){
sommets = s; couleur = c;
}
public void seDessiner(){// connaissance du code non indispensable}
}
et une classe Dessin capable de dessiner un ensemble de formes. Elle devra rester invariante en
cas d'introduction de nouvelles formes.
public class Dessin{
private Vector elements;
public void ajouter(Forme f){
if(elements == null) elements = new Vector();
elements.add(f);
}
}
Compléter, modifier ce programme pour faire en sorte de pouvoir dessiner n'importe quel dessin quelles que
soient les formes qui le composent. On aura ainsi créé un schéma de conception unique tel qu'une classe
quelconque composée d'un nombre quelconque d'objets présentant des fonctionnalités communes pourra
appliquer ces fonctionnalités à chacune d'entre elles.
Compléter ce programme en remplaçant les points de suspension par le code adapté en ayant en
tête d'utiliser au maximum les possibilités offertes par l'héritage.
class Point{
protected int x;
protected int y;
public Point(int x, int y){ .... }
public void deplacer(int dx, int dy){
x=x+dx; y=y+dy;
}
public void ou(){
System.out.println"(position du point : x = "+x+", y = "+y);
}
}
1
ED n°5
class PointZCouleur extends Point{
private int z;
private Color c;
public PointCouleur(int x,int y,int z,Color c){ ... }
public void deplacer(int dx,int dy){
....
}
public void ou(){
....;
System.out.println"(couleur du point : "+c+", z = "+z);
}
}
Considérant le programme suivant :
interface Personne{
public void quiEsTu();
public Personne complement();
}
abstract class PersonneAbstraite implements personne{
public void quiEsTu(){ System.out.print("Je suis "); }
}
class Femme extends PersonneAbstraite{
public void quiEsTu(){
super.quiEsTu();
System.out.println("une femme");
}
public Personne complement(){ return new Homme(); }
}
class Homme extends PersonneAbstraite{
public void quiEsTu(){
super.quiEsTu();
System.out.println("un homme");
}
public Personne complement(){ return new Femme(); }
}
Compléter la classe Test en remplaçant les commentaires par le code adapté :
class Test{
public
static void main(String[] args){
// Création d'un tableau constitué de 2 hommes et de 2 femmes
// Parcourir ce tableau et afficher le statut (méthode quiEsTu())
// de chaque élément ainsi que le statut de son complément.
// Afficher aussi le message suivant seulement s'il s'agit d'une
// femme : " Je suis blonde " (vous pouvez changer le message)
}
Quel est le résultat de l'exécution de ce programme (C2.java)? Le constructeur sans paramètre de
la classe Object est-il invoqué lorsque new B(5) est exécuté :
public
class C2{
public
static void main(String[] args){
B b = new B(5);
}
}
2
ED n°5
class A{
public A(){
System.out.println("Je suis dans A ");
}
}
public class B extends A{
public B(int x){
System.out.println("Je suis dans B");
}
}
Quels sont les problèmes identifiés à la compilation dans ce fichier source (C3.java):
public class C3{
public static void main(String[] args){
B b = new B();
}
}
class A{
public A(int x){
System.out.println("Je vaux: "+x);
}
}
public class B extends A{
public B(){
System.out.println("Je suis dans B");
}
}
La classe B peut-elle être compilée ? Quelle que soit la réponse, déterminer le modificateur le plus
adapté aux membres i et m de la classe A ?
// fichier A.java
package p1;
public class A{
int i;
void m(){ System.out.println("i= "+i); }
}
// fichier B.java
package p1;
public class B extends A{
public void main(String[] args){
System.out.println("i= "+i);
m();
}
}
3
ED n°5
Les assertions suivantes sont elles vraie ou fausse ?
- un membre protected (donnée ou méthode) peut-il être accédé par n'importe quelle classe du
même package ?
- un membre protected (donnée ou méthode) peut-il être accédé par n'importe quelle classe de
différents packages ?
- un membre protected (donnée ou méthode) peut-il être accédé par ses sous-classes de
différents packages ?
- une classe final peut-elle être instanciée ?
- une classe final peut-elle être étendue (dérivée) ?
- une méthode final peut-elle être surchargée ?
Déterminer 2 façons de compléter le constructeur de la classe B pour qu'il initialise les variables
d'instance x et y :
public class A{
protected int x,y;
public A( int x,int y ){
this.x = x;this.y = y;
}
}
public class B extends A{
private int r;
public B( int x,int y,int r ){
….....;
this.r = r;
}
}
4