Nom : Prénom : Contrôle continu n 4 Programmation objet Vous devez répondre dans les cadres aux questions posées. Documents de cours et notes personnelles autorisés. Téléphones portables, ordinateurs et calculatrices interdits. Partie 1 : Classes, héritage, Polymorphisme, Interfaces Vous devez définir une interface Recyclable telle que toute classe non abstraite qui implante cette interface doive nécessairement contenir une méthode Recycler, qui ne prend aucun paramètre et ne retourne aucune valeur, et une méthode getpoids qui ne prend aucun paramètre et retourne un entier représentant le poids d un objet recyclable. On définit les classes Vehicule et AppareilMenager de la manière suivante : public abstract class Vehicule implements Recyclable public abstract class AppareilMenager implements Recyclable Dans le cadre de cet exercice, ces classes ne contiennent ni variables, ni méthodes. Peut-on créer des instances de Vehicule ou de AppareilMenager. Justifiez brièvement votre réponse. Vous devez réaliser une classe Velo qui représente un vélo. La classe Velo doit hériter de Vehicule et implanter l interface Recyclable. Le constructeur de la classe Velo doit prendre en paramètre un entier représentant le poids du vélo. N implantez que les méthodes nécessaires pour permettre la compilation de la classe. La ou les méthodes de type void, si applicable, doivent simplement afficher un message spécifique à l écran. Contrôle continu n 4 - page 1 sur 8
Donnez ici la définition de la classe Velo. On suppose par ailleurs l existence d une classe MicroOnde qui implante l interface Recyclable et hérite de la classe AppareilMenager. Vous devez maintenant réaliser (page suivante) une classe StockageDechets qui aura deux classes dérivées BenneVelo et ConteneurAppMenagers. La classe StockageDechets représente une unité de stockage de déchet et doit répondre aux spécifications suivantes : 1.Il ne doit pas être possible de créer des instances de cette classe. Seules des instances de classe dérivées BenneVelos et ConteneurAppMenagers peuvent être créées. 2.La classe StockageDechets comporte une variable d instance liste de type ArrayList d objets recyclables et une variable d instance capacite de type double. La variable liste représente le contenu de l unité de stockage et la variable capacite représente le volume maximum (en mètres cubes) des déchets qui y sont stockés. 3.Le constructeur de la classe StockageDechets accepte en paramètre une valeur de type double représentant la capacité (en mètres cubes) de l unité de stockage a créer. 4.La classe StockageDechets comporte les méthodes suivantes (à vous de déterminer, si applicable, lesquelles sont virtuelles) : getpoids : retourne le poids total des déchets contenus. getvolume : retourne le volume total des objets contenus. La manière de calculer ce volume dépend du type d unité de stockage. Ce calcul sera fait de manières différentes dans les classes BenneVelos et ConteneurAppMenagers. volumerestant : retourne la volume encore disponible, à savoir la différence entre la capacité de l unité de stockage et le volumes des déchets déjà stockés. add : ajoute un nouveau déchet dans l unité de stockage. La seule restriction concernant le type de déchets acceptés par cette méthode est qu il doit s agir d objets recyclables. get : accepte un entier i en paramètre et retourne l objet recyclable situé en position i dans la liste. size : retourne le nombre de déchets (i.e. objets recyclables) contenus dans l unité de stockage. Contrôle continu n 4 - page 2 sur 8
Donnez ici la définition de la classe StockageDechets. Contrôle continu n 4 - page 3 sur 8
La classe BenneVelos représente une benne à vélo qui est un cas particulier d unité de stockage des déchets et à ce titre, dérive de la classe StockageDechets. La méthode add y est redéfinie de manière à n autoriser que l ajout de vélos dans la benne. Le volume des déchets, en mètres cubes, est calculé en divisant par deux le nombre de vélos contenus dans la benne. Réalisez cette classe de manière à réutiliser autant que possible le code déjà implanté dans la classe StockageDechets, donc en plaçant dans la classe BenneVelos juste ce qui est nécessaire et suffisant pour rendre compte des spécificités mentionnées plus haut. La classe Dechetterie représente une déchèterie pouvant contenir des unités de stockage de déchets, c est à dire des instances de classes dérivées de StockageDechets. Le stockage se fait dans une variable d instance liste de type ArrayList<StockageDechets>. Cette classe contient une méthode volumedechets qui retourne le volume total des déchets stockés dans la déchèterie. Donnez la définition de cette méthode. public double volumedechets() Contrôle continu n 4 - page 4 sur 8
Partie 2 : Exceptions Définissez une classe d exception EmptyTab et une classe Main ayant une méthode public static void moyenne(double[] tab) calculant la moyenne des valeurs situées dans un tableau de nombres flottants. La méthode moyenne doit lever une exception de type EmptyTab si le tableau est vide, i.e. si sa longueur vaut 0. Donnez ici la définition de la classe EmptyTab. Donnez ici la définition de la classe Main contenant uniquement la méthode moyenne. On ajoute à ma classe Main la méthode m ain définie ci-dessous et on tente de compiler. On obtient me message d erreur «Unhandled exception : EmptyTab». Expliquez pourquoi (page suivante) et proposez (page suivante aussi) une nouvelle version de ma méthode main qui affiche la moyenne des valeurs du tableau t s il n est pas vide et sinon affiche le message «Le tableau est vide». public static void main(string[] args) double[] t = new double[]; System.out.println(moyenne(t)); Contrôle continu n 4 - page 5 sur 8
Donnez ici l explication. Donnez ici la nouvelle méthode main. public static void main(string[] args) double[] t = new double[]; Maintenant, on remplace la déclaration double[] t = new double[]; par double[] t = null; et on exécute à nouveau le programme et cela provoque l affichage «Exception in thread "main" java.lang.nullpointerexception». Sans modifier la méthode moyenne, proposez une nouvelle version de la méthode main qui affiche la valeur retournée par moyenne si le tableau t n est ni vide ni null, le message «tableau vide» si l appel de moyenne lève l exception EmptyTab et le message «tableau inexistant» si l appel de moyenne lève l exception NullPointerException. Contrôle continu n 4 - page 6 sur 8
Partie 3 : Objets modifiables ou non modifiables On considère la classe Main définie ci-contre. Lorsqu on exécute la méthode main, la valeur 0 est affichée. Représentez graphiquement les valeurs des variables et les objets présents dans la pile et dans le tas juste après l exécution de la ligne z = new Integer(z.intValue()+1); dans la méthode incremente. public class Main public static void incremente(integer z) z = new Integer(z.intValue()+1); public static void main(string[] args) Integer cpt = new Integer(0); incremente(cpt); System.out.println(cpt); Pile Tas Vous devez maintenant réaliser (page suivante) une classe modifiable IntMod telle que l exécution de la méthode main ci-contre provoque l affichage des valeurs 1, 2 et 3. public static void main(string[] args) IntMod cpt1 = new IntMod(0); cpt1.incremente(); System.out.println(cpt1); cpt1.incremente(); System.out.println(cpt1); cpt1.incremente(); System.out.println(cpt1); Contrôle continu n 4 - page 7 sur 8
Donnez ici le détail de la classe IntMod. Est-i possible de définir une méthode static void reset (IntMod z) qui modifie l objet référencé par z en lui donnant la valeur 0? Si oui, donnez le code java de cette méthode, sinon expliquez pourquoi. Contrôle continu n 4 - page 8 sur 8