1. Modélisation et objets (9 points)

Transcription

1. Modélisation et objets (9 points)
Université de Bourgogne
Année universitaire 2010-2011
I21 — programmation objet et algorithmique
TD5 — partiel 2005-2006
2. Opérations sur les Polynômes (11 points)
On souhaite définir les classes qui permettent de représenter et de manipuler des polynômes à coefficients décimaux (nombres à virgule). Un polynôme est une expression de la forme :
Objet du TD : réviser les notions avec des sujets posés en partiel
anxn+…+a3x3+a2x2+a1x+a0
1. Modélisation et objets (9 points)
définie par la liste de ses coefficients ai et par son degré — qui est le plus
grand i tel que ai est non nul 1 .
Soit la classe Vetement suivante, représentant un vêtement et l’impact environnemental de sa fabrication (en kg de CO2) :
Pour représenter un polynôme en java, on stockera ses coefficients dans un
tableau Coeff de telle manière que le coefficient de xi soit placé dans
Coeff[i]. Par exemple, pour le polynôme :
class Vetement
{
private int impact;
public Vetement(int i){impact=i;}
public int getImpact(){return impact;}
public void affiche()
{
System.out.println(
"Un vêtement ayant un impact de "+impact+"kg de CO2");
}
}
3x4-2x+1
ce tableau est le suivant :
Coeff
0
1
2
3
4
1
-2
0
0
3
Questions
Répondez aux questions suivantes en utilisant le langage objet java.
Questions
7. En fonction de la description de l’énoncé, décrivez la classe Polynome qui
permet de modéliser des polynômes en plaçant les bons modificateurs
d’accès (public, private,…). Vous vous contenterez de définir les attributs (variables d’instance) et les accesseurs qui permettent d’agir sur les
données essentielles concernant un polynôme. Ainsi, il devra être possible :
1. Pour chacune des lignes suivantes, indiquez si elle est acceptée par le
compilateur. Dans tous les cas, expliquez le problème ou le résultat obtenu : (3 points)
a. Vetement v=new Vetement(1000);
b. System.out.println(v.impact);
c. System.out.println(affiche());
2. Proposez un accesseur en écriture pour l’attribut impact. On vérifiera
que l’impact est positif, et forcément un multiple de 10. (1 point)
3. Soient les classes Vetement (vue précédemment), LeHaut, LeBas,
Pantalon, Jean, Jupe, T-shirt, Chemise, Tenue (composée d’un haut et
d’un bas). Proposez un diagramme d’héritage et d'utilisation associé
(justifiez chaque flèche dans ce diagramme). On utilisera des flèches pleines pour l’héritage et des flèches pointillées pour l'utilisation. (2 points)
4. Définir en Java la tenue suivante : une jupe d’impact 2000, une chemise
d’impact 500. (1 point)
5. Comment faire pour que la méthode affiche() ait un comportement différent selon que l’on utilise une Chemise, un Jean, etc. ? (1 point)
6. Comment faire pour que les classes Vetement, LeHaut et LeBas ne soient
jamais instanciables avec new() ? (1 point)
a. d'accéder en lecture et en écriture à chaque coefficient du polynôme ;
la lecture d'un coefficient d'indice supérieur au degré doit renvoyer 0
comme valeur,
b. de connaître le degré du polynôme.
8. Donnez les constructeurs permettant de créer :
a. une instance de polynôme nul2 ,
b. une instance de polynôme de la forme anxn où n est le degré.
dans l’exemple, si le polynôme est de degré n, an ne doit pas être nul, sauf quand le degré vaut 0
(voir l’autre note).
1
Le polynôme nul vaut 0 ; c'est le seul cas où le coefficient correspondant à son degré (degré 0) vaut
0.
2
9. Réalisez la méthode de classe permettant d’additionner deux objets (instances) polynômes passés en paramètre. Vous écrirez éventuellement des
méthodes annexes permettant de faciliter le calcul.
10. Écrivez la méthode qui permet à une instance de polynôme de s’afficher
en puissances décroissantes et sous forme simplifiée.
Par exemple, le polynôme 3.x4+0.x3+0.x2-2.x1+1.x0 doit s’écrire :
3.x^4-2.x+1.
3. Empilements d’objets 3D (9 points)
O4
O2
O3
O1
On souhaite modéliser des empilements d’objets 3D comme dans le dessin
ci-dessus. Pour ce faire, on décrit la classe Objet3D comme suit :
Class Objet3D
{
// nom de l’objet : O1, O2,…
private String Nom;
public String getNom(){…}
public void setNom(String NNom){…}
// forme de l’objet : disque, cône,parallélépipède,…
private String Forme;
public String getForme(){…}
public void setForme(String NForme){…}
// support de l’objet : vaut null si l’objet n’en a pas
private Objet3D Support;
public Objet3D getSupport(){…}
public void setSupport(Objet3D NSupport){…}
}
public Objet3D(Objet3D Modele)
{
setNom(Modele.getNom());
setForme(Modele.getForme());
setSupport(Modele.getSupport());
}
public Objet3D(
String Nom,String Forme,Object3D Support)
{
setNom(Nom);
setForme(Forme);
setSupport(Support);
}
Questions
Les objets de la situation de l’énoncé ont les caractéristiques suivantes :
O1: {Nom=O1, Forme=disque, Support=null}
O2: {Nom=O2, Forme=cône, Support=O1}
O3: {Nom=O3, Forme=parallélépipède, Support=O1}
O4: {Nom=O4, Forme=disque, Support=O3}
1. Écrivez les lignes qui permettent de modéliser cette situation en créant
des instances de Objet3D.
2. Soient les lignes suivantes :
Objet3D
Objet3D
Objet3D
Objet3D
Objet3D
F1=new Objet3D("F1","Parallélépipède",null);
F2=new Objet3D("F2","Disque",F1);
F2b=new Objet3D("F2","Disque",new Objet3D(F1));
F2t=new Objet3D(F2);
F2q=new Objet3D("F2","Disque",F1);
Expliquez ce qui rapproche et ce qui différencie les objets référencés par
les variables F2, F2b, F2t et F2q.
3. Que se passe t-il si, après l'exécution des lignes de la question précédente, l'instruction suivante est effectuée ?
F1.setSupport(new Object3D(F2b));
Dessinez la situation avant et après l'exécution de cette instruction.