Correction

Transcription

Correction
USTL Licence Informatique
Interrogation no
UE Programmation Orientée Objet
1 - Correction
On fournit la définition de l’interface suivante issue du paquetage interro1.sujet.
// fichier PeutParler.java
package interro1.sujet;
public interface PeutParler {
public void parle();
}
Ainsi que les diagrammes UML des classes Horloge et Time issues du paquetage interro1.sujet.clock :
Horloge
-t:Time
+getTime():Time
Time
...
toString():String
La méthode toString de la class Time renvoie une chaı̂ne de caractères représentant l’heure sous la forme “hh:mm:ss”.
Toutes les classes que vous écrirez par la suite devront appartenir à un paquetage interro1.reponse.
Q 1 . On souhaite modéliser des grenouilles et donc pour cela définir une classe Grenouille. Les instances de cette classe
ont pour seul attribut un nom (une chaı̂ne de caractères).
Elles devront pouvoir être considérées comme étant également du “type” PeutParler et lorsqu’une grenouille parle,
elle se contente d’afficher le message "coa, coa" (System.out.println(...)).
Une grenouille est capable de sauter, vous définirez donc une méthode jump, qui prend pour paramètre la longueur l
du saut en centimètres (un entier). Cette méthode affiche le message "nom saute l cm" (ou nom est le nom de la
grenouille et l la valeur du paramètre).
Donnez le code JAVA permettant de définir la classe Grenouille.
package interro1.reponse;
import interro1.sujet.PeutParler;
public class Grenouille implements PeutParler {
private String nom;
public Grenouille(String nom) {
this.nom = nom;
}
public void parle() {
System.out.println("coa, coa");
}
public void jump(int longueur) {
System.out.println(this.nom+" saute "+longueur+" cm");
}
}
Q 2 . On souhaite modéliser des horloges à coucou par une classe HorlogeACoucou. Une horloge à coucou est en fait
une horloge qui “peut parler”. Cette classe satisfait donc l’interface PeutParler (une horloge à coucou qui parle
affiche le message "coucou ! coucou !") et ses instances possèdent un attribut qui est une instance de la classe
Horloge et dont la fonction est la gestion de l’heure.
Donnez le code JAVA permettant de définir la classe HorlogeACoucou. Les instances de cette classe doivent posséder
une méthode afficheHeure qui affiche l’heure de l’horloge (sous la forme “hh:mm:ss”).
package interro1.reponse;
import interro1.sujet.PeutParler;
import interro1.sujet.clock.*;
public class HorlogeACoucou implements PeutParler {
private Horloge horloge;
public HorlogeACoucou() {
this.horloge = new Horloge();
}
public void parle() {
System.out.println("coucou ! coucou !");
}
public void afficheHeure() {
System.out.println(this.horloge.toString());
}
}
Q 3 . Donnez la suite d’instructions JAVA permettant (dans cet ordre) :
⊲ de créer une grenouille de nom kermit et de lui faire sauter 20cm.
⊲ de définir une horloge à coucou et de lui faire afficher son heure.
Grenouille uneGrenouille = new Grenouille("kermit");
uneGrenouille.jump(20);
HorlogeACoucou unCoucou = new HorlogeACoucou();
unCoucou.afficheHeure();
Q 4 . Sur le même principe que l’horloge à coucou (on retrouve donc les mêmes attributs), on définit la classe HorlogeParlante.
Lorsqu’elle parle une horloge parlante affiche le message “il est hh heures, mm minutes, ss secondes”
(où hh, mm et ss prennent bien entendu les valeurs définies par l’attribut de type Horloge).
Q 4.1. Donnez le diagramme UML de la classe HorlogeParlante et précisez ses dépendances avec les autres
types.
Q 4.2. Donnez le code JAVA de la méthode parle() de la classe HorlogeParlante (pensez à utiliser l’annexe).
public void parle() {
String t = this.horloge.getTime().toString();
System.out.println("il est "+t.substring(0,2)+" heures, "+
t.substring(3,5)+" minutes, "+
t.substring(6,8)+" secondes");
}
Q 5 . Un interrogateur est un objet capable de faire parler des objets du “type” PeutParler (des “parleurs”).
⊲ Un interrogateur commande un nombre n de parleurs stockés dans un tableau appelé parleurs.
⊲ Un interrogateur fait parler ses parleurs en invoquant une méthode faitParler.
Complétez dans le code suivant les ‘‘...’’ :
public class Interrogateur {
private ... parleurs;
/** @param n nombre de parleurs */
public Interrogateur(int n) {
... ; // initialisation de l’attribut parleurs
}
/** fait parler chacun des parleurs,
* on suppose ’parleurs’ correctement initialisé et rempli */
public void faitParler() {
... compléter ici
}
}
public class Interrogateur {
private PeutParler[] parleurs;
/** @param n nombre de parleurs */
public Interrogateur(int n) {
this.parleurs = new PeutParler[n]; ;
}
/** fait parler chacun des parleurs,
* on suppose ’parleurs’ correctement initialisé et rempli */
public void faitParler() {
for(i=0; i < this.parleurs.length; i++) {
this.parleurs[i].parle();
}
}
}