Atelier 1.2 exercice C: visibilité #
Objectifs #
-
Je crée la classe
MonAtelier1_2_C
qui hérite de la classeAtelier1_2_C
-
Je crée les classes de la hiérarchie suivante:
-
Je m’assure que
Vehicule implements Rouleur, Formateur
- j’ajoute les deux méthodes obligatoires
- il s’agit des deux seules métodes publiques de
Vehicule
-
Dans
Vehicule
, je définis cet attribut, avec la bonne visibilitédouble totalKilometres
- le nombre total de kilomètres parcourus depuis le début du programme
-
Dans la bonne classe, j’implante ou redéfini ces méthodes, avec la bonne visibilité
void rouler(double kilometres)
- ajoute
kilometres
autotalKilometres
- ajoute
String formater()
- retourne
"Ma/Mon VEHICULE a roulé TOTAL kilomètres et consomé LITRES litres d'essence."
- où:
Ma/Mon
selon si le nom du véhicule est masculin ou fémininVEHICULE
est remplacé par le nom du véhiculeTOTAL
est remplacé par le total des kilomètres parcourusLITRES
est remplacé par les litres d’essence consomés, au total
- retourne
double consommationLitresParKilometre()
- retourne la consommation théorique en
litres/kilomètres
Mobilette
:1.5
Moto
:3.5
Auto
:8.0
Fourgonnette
:12.0
Camion
: selon un calcul (voir ci-bas)
- retourne la consommation théorique en
String nomVehicule()
- retourne le nom du véhicule (en minuscule)
boolean siNomFeminin()
- retourne vrai si le nom du véhicule est féminin
- retourne faux sinon
double litresEssenceConsomes(double kilometres)
- calcule la consommation en litres pour un certain kilométrage
-
Dans
Camion
, je définis ces attributs, avec la bonne visibilitédouble consommationDeBase
- la consommation de base de
14
, en litres par kilomètre
- la consommation de base de
double chargementEnKilos
- le poids du chargement du camion,
100
kilos pour commencer
- le poids du chargement du camion,
-
Dans
Camion
, j’implante ces méthodes, avec la bonne visibilitévoid accepterChargement(double chargementEnKilos)
- mémorise le poids d’un nouveau chargement
double calculerConsommationSelonChargement
- calcule la consommation d’essence en fonction du poids du chargement
- selon la formule:
(1 + chargementEnKilos / 1E6) * consommationDeBase
-
J’ajoute une méthode
main
à la classeMonAtelier1_2_C
:public static void main(String[] args) { new MonAtelier1_2_C().valider(); }
-
J’implante les méthodes pour remplir le contrat du
Atelier1_2_C
, p.ex:@Override public Rouleur creerMoto() { return new Moto(); }
-
J’exécute mon projet et je valide mes classes et mes méthodes
-
J’ajoute les fichiers du projet dans Git
-
Je fais un
commit
et unpush
Réalisation #
Étape 01: créer la classe MonAtelier1_2_C
#
- Je crée une nouvelle classe nommée
MonAtelier1_2_C
- Clique-droit sur le projet => New => Class
- Name:
MonAtelier1_2_C
- Name:
- Clique-droit sur le projet => New => Class
Étape 02: hériter de Atelier1_2_C #
-
J’ouvre
MonAtelier1_2_C
et j’ajouteextends Atelier1_2_C
-
J’utilise Ctrl+.Eclipse: Ctrl+1 pour ajouter le
import
deAtelier1_2_C
-
J’utilise Ctrl+.Eclipse: Ctrl+1 pour générer les méthodes manquantes
- option
add unimplemented methods
- option
Étape 03: créer la classe Vehicule
#
-
Je crée une nouvelle classe nommée
Vehicule
- Clique-droit sur le projet => New => Class
- Name:
Vehicule
- Name:
- Clique-droit sur le projet => New => Class
-
J’ouvre
Vehicule
et j’ajouteimplements Rouleur, Formateur
-
J’utilise Ctrl+.Eclipse: Ctrl+1 pour ajouter les
import
-
J’utilise Ctrl+.Eclipse: Ctrl+1 pour générer les méthodes manquantes
- option
add unimplemented methods
- option
Étape 04: créer la classe Moto
#
-
Je crée une nouvelle classe nommée
Moto
- Clique-droit sur le projet => New => Class
- Name:
Moto
- Name:
- Clique-droit sur le projet => New => Class
-
J’ouvre
Moto
et j’ajouteextends Vehicule
public class Moto extends Vehicule {
Étape 05: créer la classe Mobilette
#
-
Je crée une nouvelle classe nommée
Mobilette
- Clique-droit sur le projet => New => Class
- Name:
Mobilette
- Name:
- Clique-droit sur le projet => New => Class
-
J’ouvre
Mobilette
et j’ajouteextends Vehicule
public class Mobilette extends Vehicule {
Étape 06: créer la classe Auto
#
-
Je crée une nouvelle classe nommée
Auto
- Clique-droit sur le projet => New => Class
- Name:
Auto
- Name:
- Clique-droit sur le projet => New => Class
-
J’ouvre
Auto
et j’ajouteextends Vehicule
public class Auto extends Vehicule {
Étape 07: créer la classe Camion
#
-
Je crée une nouvelle classe nommée
Camion
- Clique-droit sur le projet => New => Class
- Name:
Camion
- Name:
- Clique-droit sur le projet => New => Class
-
J’ouvre
Camion
et j’ajouteextends Vehicule
public class Camion extends Vehicule {
Étape 08: ajouter les attributs #
-
J’ouvre
Vehicule
et j’ajoute:private double totalKilometres = 0;
-
J’ouvre
Camion
et j’ajoute:private double consommationDeBase = 14; private double chargementEnKilos = 100;
Étape 09: ajouter les méthodes implantées #
-
J’ouvre
Vehicule
et j’ajoute:protected double consommationLitresParKilometre() { return 0.0; } protected String nomVehicule() { return ""; } protected boolean siNomFeminin() { return false; } private double litresEssenceConsomes() { return totalKilometres * consommationLitresParKilometre(); }
- la dernière méthode est
private
. C’est un détail d’implantation. - les autres sont
protected
car les sous-classes vont les redéfinir
- la dernière méthode est
-
J’ouvre
Camion
et j’ajoute:public void accepterChargement(double chargementEnKilos) { this.chargementEnKilos = chargementEnKilos; }
- la méthode est
public
. C’est ailleurs dans le programme qu’on va indiquer au camion d’accepter un nouveau chargement
private double calculerConsommationSelonChargement() { return (1 + chargementEnKilos / 1E6) * consommationDeBase; }
- la méthode est
private
. C’est un détail d’implantation.
- la méthode est
Étape 10: ajouter les méthodes redéfinies #
-
J’ouvre
Vehicule
et je complète les méthodes suivantes:@Override public void rouler(double kilometres) { totalKilometres = totalKilometres + kilometres; } @Override public String formater() { StringBuilder builder = new StringBuilder(); if(siNomFeminin()) { builder.append("Ma "); }else { builder.append("Mon "); } builder.append(nomVehicule()); builder.append(" a roulé "); builder.append(totalKilometres); builder.append(" kilomètres et consomé "); builder.append(litresEssenceConsomes()); builder.append(" litres d'essence."); return builder.toString(); }
-
J’ouvre
Mobilette
et je redéfinis les méthodes suivantes:@Override protected double consommationLitresParKilometre() { return 1.5; } @Override protected boolean siNomFeminin() { return true; } @Override protected String nomVehicule() { return "mobilette"; }
-
J’ouvre
Moto
et je redéfinis les méthodes suivantes:@Override protected double consommationLitresParKilometre() { return 3.5; } @Override protected boolean siNomFeminin() { return true; } @Override protected String nomVehicule() { return "moto"; }
-
J’ouvre
Auto
et je redéfinis les méthodes suivantes:@Override protected double consommationLitresParKilometre() { return 8.0; } @Override protected boolean siNomFeminin() { return false; } @Override protected String nomVehicule() { return "auto"; }
-
J’ouvre
Camion
et je redéfinis les méthodes suivantes:@Override protected double consommationLitresParKilometre() { return calculerConsommationSelonChargement(); } @Override protected boolean siNomFeminin() { return false; } @Override protected String nomVehicule() { return "camion"; }
Étape 11: ajouter la méthode main
#
- J’ouvre
MonAtelier1_2_C
et j’ajoute la méthodemain
public class MonAtelier1_2_C extends Atelier1_2_C {
public static void main(String[] args) {
new MonAtelier1_2_C().valider();
}
Étape 12: exécuter pour valider #
-
J’exécute mon programme
-
Je vérifie que la validation est réussie: