Table of Contents

Polymorphisme et Composition

Basé sur TP3 de l'Université Montpellier II — L3 Informatique 2008/09 Programmation par objets en Java

Vous avez 2 heures.
Vous rendrez ce que vous avez fait à la fin des 2 heures.

.

Enoncé (écrit par d'autres...)

Une entreprise de Patagonie développe un moteur à huile de rutabaga, et dote plusieurs véhicules de ce moteur. Avant d'effectuer des tests grandeur nature, l'entreprise conçoit un programme de simulation du comportement des véhicules. Ce programme est écrit en Java. On ne s'intéresse ici qu'à une toute petite partie de ce programme. Le problème que l'on veut résoudre dans un premier temps est celui du calcul de la vitesse maximum pouvant être atteinte par un véhicule.

Tout véhicule possède une immatriculation (propre à chaque véhicule) et un poids à vide (propre à chaque type de véhicule). Certains véhicules peuvent transporter un chargement : on appelle alors charge, le poids de ce chargement. La charge d'un véhicule ne doit pas dépasser un certain poids, que l'on appellera charge maximale, dépendant du type de véhicule.

Les différents types de véhicules dotés du fameux moteur sont les suivants : les petits bus, les camions citernes, et les camions bâchés.

On s'intéresse également à la définition de convois de véhicules. Un convoi est composé d'un ensemble de véhicules de différents types.

Question 1 : Modéliser le système

Question 2 : Implémenter tout ce qui concerne les véhicules avec les tests associés

Question 3 : Implémenter la notion de convoi

Question 4 : Extension facile

Un nouveau type de véhicule est apparu, les “voitures sans permis” pour lesquels la vitesse maximale est de 50 km, pas de chargement possible. Savez-vous calculer la vitesse maximale d'un convoi qui contient des voitures sans permis sans écrire une seule ligne de code dans la classe convoi?

Question 5 : Extension un peu moins facile

Les ingénieurs de l'entreprise ont mis au moins un calculateur (Class Simulator) qui permet de calculer la consommation moyenne en carburant d'un engin, il expose donc la méthode statique : public static double consumption (Machine machine, int speed) 1) par exemple

public class Simulator {
	public static double consumption (Machine machine, int speed) {
		return speed* (machine.getHorsePower() + machine.getWeight());
	}
}

Une Machine est définie par une interface comme suit :

public interface Machine {
	 int getWeight(); 
	 int getHorsePower();
 
}

On veut pouvoir savoir la consommation totale d'un convoi allant à sa vitesse maximale (c'est-à-dire, on le rappelle, à la plus petite des vitesses maximales des véhicules du convoi).

Au niveau du code, on considère que tous les véhicules dans notre entreprise ont la même puissance.

Questions facultatives à ne pas traiter dans le TD

Que feriez-vous si l'on vous disait que l'on veut pouvoir créer des véhicules à partir de leur poids à vide, charge maximale, etc… ?

RENDU

A la fin du TD, en l'état, un document contenant les Diagrammes UML (essentiellement un diagramme de classes) et les remarques éventuelles, réposnes aux questions, les codes et tests associés.

Dépôt sur jalon avec comme nom : GroupeNumero - Noms des etudiants

RETOUR SUR LES RENDUS

ON évite ou on ne fait pas :

public double getVitesseMax(){
        double resultat =150;
        double resultat2 =0;
        for (Vehicule v : listeVehicule) {
            if(v instanceof PetitBus){
                resultat2=((PetitBus) v).getVitesseMax();
            }
            if(v instanceof CamionCiterne){
                resultat2=((CamionCiterne) v).getVitesseMax();
            }
            if(v instanceof CamionBache){
                resultat2=((CamionBache) v).getVitesseMax();
            }
            if(v instanceof VoitureSansPermis){
                resultat2=((VoitureSansPermis) v).getVitesseMax();
            }
            if (resultat2<resultat){
                resultat = resultat2;
            }
        }
        return resultat;
    }
 
1)
Imaginez une fonction très simple