correction

Transcription

correction
ING 1 - POO Java année 2015 -2016
TD-TP n°7
Une entreprise de transport de marchandises et de passagers décide de demander aux étudiants
d'ING1 de l'aider pour mettre sous forme d'objets sa flotte de véhicules.
Cet exercice va nous permettre de revenir sur les concepts d'héritage.
Si ce n'est pas précisé, tous les attributs de vos méthodes auront comme mode d'accès « private »
Nous allons démarrer à partir d'une super classe appelée Véhicule qui contiendra les attributs
suivants :
• l'immatriculation du véhicule sous forme de String ;
• le poids à vide du véhicule sous forme d'entier ;
• une année d'achat sous forme d'entier ;
Nous allons spécialiser cette classe. Certains véhicules peuvent transporter des marchandises dans
ce cas, ils peuvent transporter une certaine charge. On distingue principalement deux types de
véhicule pouvant porter une charge :
• les fourgonnettes
• les camions
Les fourgonnettes ont un poids à vide de 2 tonnes et peuvent transporter au maximum 3 tonnes de
marchandise. Certains limitations s'imposent dans ce cas, les fourgonnettes à vide peuvent rouler à
110 km/h mais sont limitées à 100 km/h lorsqu'elles ont une certaine charge.
Les camions (pour simplifier nous n'aurons que de petits camions) ont un poids à vide de 5 tonnes
et peuvent transporter dans leur remorque jusqu'à 6 tonnes de marchandise. A vide, les camions
roulent à 110 km/h, à 90 km/h pour une charge comprise entre 0 et 3 tonnes et 80 km/h pour une
charge supérieure.
De même, nous aurons des véhicules de transport de passagers. Les bus qui permettent (poids 20
tonnes) de transporter entre 1 et 50 passagers et les taxis (poids 2 tonnes) qui permettent de
transporter entre 1 et 4 passagers. Pour les bus, la vitesse limite est toujours de 100 km/h et de 130
km/h pour les taxis.
Q.1
Écrire votre hiérarchie des classes dont la classe mère est la classe Véhicule (a priori 5 classes en
incluant la classe mère).
Écrire les constructeurs dont vous avez besoin pour chacune des classes et pour chaque classe une
méthode d'affichage (toString()).
Écrire une méthode public int vitesseMaximale() qui retourne la vitesse maximale du véhicule.
Cette vitesse maximal sera également reprise dans la méthode d'affichage toString() de chaque
classe.
Par exemple, pour le fichier main suivant définissant deux camions de charge respective 3 et 5
tonnes et un taxi, vous devrez avoir le fonctionnement suivant :
public class Test {
public static void main(String [] args){
Camion c1 = new Camion("TA 622 JX",2000,3);
Camion c2 = new Camion("TB 455 UY",2010,5);
Taxi t1 = new Taxi("RD 877 HG",2000);
System.out.println(c1);
System.out.println(c2);
System.out.println(t1);
}
}
camion (poids = 5) (charge = 3) (immatriculation = TA 622 JX) (vitesse maximale = 90)
camion (poids = 5) (charge = 5) (immatriculation = TB 455 UY) (vitesse maximale = 80)
taxi (poids = 4) (immatriculation = RD 877 HG) (vitesse maximale = 130)
Q.2
On s'intéresse maintenant à la définition d'une flotte de véhicule. Une flotte de véhicule est une
ArrayList de divers véhicules.
Créer une classe Flotte dont un des attributs sera une ArrayList de véhicules.
Écrire les méthodes nécessaires pour y ajouter des véhicules. Écrire une méthode toString()
permettant d'afficher tous les véhicules et leurs caractéristiques de la flotte.
Tester ces méthodes.
Le programme main suivant vous donnera des indications :
public class Test {
public static void main(String [] args){
Flotte f = new Flotte();
Camion c1 = new Camion("TA 622 JX",2000,3);
Camion c2 = new Camion("TB 455 UY",2010,5);
Taxi t1 = new Taxi("RD 877 HG",2000);
Bus b1 = new Bus("TB 468 JX",2005);
f.ajouteVéhicule(c1);
f.ajouteVéhicule(c2);
f.ajouteVéhicule(t1);
f.ajouteVéhicule(b1);
f.ajouteVéhicule(new Camion("ER 451 AU",2014,0));
System.out.println(f);
}
}
Flotte de 5 véhicules
camion (poids = 5) (charge = 3) (immatriculation = TA 622 JX) (vitesse maximale = 90)
camion (poids = 5) (charge = 5) (immatriculation = TB 455 UY) (vitesse maximale = 80)
taxi (poids = 4) (immatriculation = RD 877 HG) (vitesse maximale = 130)
bus (poids = 20) (immatriculation = TB 468 JX) (vitesse maximale = 130)
camion (poids = 5) (charge = 0) (immatriculation = ER 451 AU) (vitesse maximale = 110)
Les véhicules peuvent fonctionner en convoi (c'est-à-dire que dans ce cas la vitesse du convoi est la
vitesse minimale de tous les véhicules le composant), vous utiliserez un attribut booléen convoi
pour indiquer si la flotte fonctionne ou non en convoi.
Écrire une méthode vitesseFlotte() qui retourne la vitesse de la flotte de véhicules, si la flotte ne
fonctionne pas en convoi, vous retournerzz de manière arbitraire la vitesse de 0.
Vous devrez également pouvoir positionner l'attribut convoi à vrai ou faux et calculer la vitesse de
la flotte en conséquence.
public abstract class Véhicule {
private String immatriculation;
private int annéeAchat;
private int poids;
public Véhicule(String _immatriculation, int _annéeAchat, int _poids){
immatriculation = _immatriculation;
annéeAchat = _annéeAchat;
poids = _poids;
}
public int getPoids(){
return poids;
}
public abstract int vitesseMaximale();
public String getImmatriculation(){
return immatriculation;
}
}
public class Taxi extends Véhicule {
public Taxi(String _immatriculation, int _annéeAchat){
super(_immatriculation,_annéeAchat,4);
}
public int vitesseMaximale(){
return 130;
}
public String toString(){
String res;
res = "taxi (poids = " + getPoids() + ") (immatriculation = " +
getImmatriculation() + ") (vitesse maximale = " + vitesseMaximale() + ")";
return res;
}
}
public class Bus extends Véhicule {
public Bus(String _immatriculation, int _annéeAchat){
}
super(_immatriculation,_annéeAchat,20);
public int vitesseMaximale(){
return 130;
}
public String toString(){
String res;
res = "bus (poids = " + getPoids() + ") (immatriculation = " +
getImmatriculation() + ") (vitesse maximale = " + vitesseMaximale() + ")";
return res;
}
}
public class Camion extends Véhicule {
private int charge;
public Camion(String _immatriculation, int _annéeAchat,
int _charge){
super(_immatriculation,_annéeAchat,5);
charge = _charge;
}
public int vitesseMaximale(){
if (charge == 0)
return 110;
if (charge <= 3)
return 90;
return 80;
}
public String toString(){
String res;
res = "camion (poids = " + getPoids() + ") (charge = " + charge + ")
(immatriculation = " + getImmatriculation() + ") (vitesse maximale = " +
vitesseMaximale() + ")";
return res;
}
}
public class Fourgonnette extends Véhicule {
private int charge;
public Fourgonnette(String _immatriculation, int _annéeAchat,
int _charge){
super(_immatriculation,_annéeAchat,2);
charge = _charge;
}
public int vitesseMaximale(){
if (charge == 0)
return 110;
else
return 100;
}
}
import java.util.ArrayList;
public class Flotte {
private ArrayList<Véhicule> flotte;
private boolean convoi;
public Flotte(){
flotte = new ArrayList<Véhicule>();
convoi = false;
}
public void ajouteVéhicule(Véhicule v){
flotte.add(v);
}
public void positionneConvoi(){
convoi = true;
}
public void enleveConvoi(){
convoi = false;
}
public int vitesseFlotte(){
if (!convoi)
return 0;
int vitesse;
int min =
flotte.get(0).vitesseMaximale();
for(int i = 0; i < flotte.size(); i++){
vitesse = flotte.get(i).vitesseMaximale();
if (vitesse < min)
min = vitesse;
}
return min;
}
public String toString(){
String res="Flotte de " + flotte.size() + " véhicules\n";
}
}
for(int i = 0; i < flotte.size(); i++)
res += flotte.get(i).toString() + "\n";
return res;