ntro.ca

        • Contrats de classe
        • Liens utiles
        • Calendrier
        • Calendrier groupe 2
        • Calendrier groupes 1, 3
        • Structure du cours
        • Évaluations
        • Matériel à se procurer
        • Les profs
          • Marc-Olivier Tremblay
          • Mathieu Bergeron
        • Module 1.1: installation + trier des cartes
        • Module 1.2: rappels POO
        • Module 1.3: tableau d'objets
        • Examen 1
        • Module 2.1: données JSON
        • Module 2.2: données en Java
        • Module 2.3: récursivité
        • Examen 2
        • Module 3.1: structure générique
        • Module 3.2: efficacité (1)
        • Module 3.3: efficacité (2)
        • Examen 3
        • Module 4.1: liste naïve
        • Module 4.2: liste par tableau
        • Module 4.3: liste chaînée
        • Examen 4
        • Module 5.1: mappage naïf
        • Module 5.2: mappage par hachage
        • Module 5.3: mappage par arbre
        • Examen 5
        • Équipes
          • Horaire groupe 1
          • Horaire groupe 2
          • Horaire groupe 3
          • Groupe 1
          • Groupe 2
          • Groupe 3
        • Projets vedettes 2022
        • Projets vedettes 2023
        • Projets vedettes 2024
        • Survol
        • Structure
        • Calendrier
        • Calendrier des séances
        • Évaluations
        • Exemples de jeu
        • Exemples de pages
        • Réponses à vos questions
        • Module 1: créer le projet
        • Module 2: concevoir l'application
        • Module 3: vues NtroFx
        • Module 4: modèle et navigation
        • Module 5: ajouter le dorsal, modifier le modèle
        • Module 7: améliorer l'affichage
        • Module 8: jeu en 2d
        • Module 9: client/serveur
        • Module 10: plusieurs instances du même modèle
        • TP1
        • Examen 1
        • TP2
        • Examen 2
        • Projet de fin de session
      • Ajout Format JSON
        • Calendrier
        • Évaluations
        • Structure du cours
        • Contrat de classe
        • Le prof
        • 01: Windows et Word
          • Astuces et raccourcis
        • 02: Word
        • 03: Word
          • Exercice Word: insertion d'éléments spéciaux
          • Exercice Word: tableaux
        • 04: Word
          • Exercice Word: références
          • TP01: Word (15%)
        • 05: PowerPoint
          • TP02: PowerPoint (10%)
        • 06: Examen Word (20%)
        • 07: Excel
        • 08: Excel
        • 09: Excel
          • TP03: Excel (15%)
        • 10: Excel
        • 11: Examen Excel (20%)
        • 12: Access
        • 13: Access
        • 14: Access
        • 15: Examen Access
      • Sondage H2023 (dept. info)
      • Vision H2023 (dept. info)
      • P1) exercices interactifs de lecture
      • P2) transition Excel vers Python
        • Atelier 2: un exemple
      • Index
      • Point de vue sur l'IA
    Atelier 1.2 exercice C: visibilité
    • Atelier 1.2 exercice C: visibilité
      • Objectifs
      • Réalisation
        • Étape 01: créer la classe MonAtelier1_2_C
        • Étape 02: hériter de Atelier1_2_C
        • Étape 03: créer la classe Vehicule
        • Étape 04: créer la classe Moto
        • Étape 05: créer la classe Mobilette
        • Étape 06: créer la classe Auto
        • Étape 07: créer la classe Camion
        • Étape 08: ajouter les attributs
        • Étape 09: ajouter les méthodes implantées
        • Étape 10: ajouter les méthodes redéfinies
        • Étape 11: ajouter la méthode main
        • Étape 12: exécuter pour valider

    Atelier 1.2 exercice C: visibilité #

    Objectifs #

    1. Je crée la classe MonAtelier1_2_C qui hérite de la classe Atelier1_2_C

    2. Je crée les classes de la hiérarchie suivante:

    3. 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
    4. 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
    5. Dans la bonne classe, j’implante ou redéfini ces méthodes, avec la bonne visibilité

      1. void rouler(double kilometres)
        • ajoute kilometres au totalKilometres
      2. 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éminin
          • VEHICULE est remplacé par le nom du véhicule
          • TOTAL est remplacé par le total des kilomètres parcourus
          • LITRES est remplacé par les litres d’essence consomés, au total
      3. 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)
      4. String nomVehicule()
        • retourne le nom du véhicule (en minuscule)
      5. boolean siNomFeminin()
        • retourne vrai si le nom du véhicule est féminin
        • retourne faux sinon
      6. double litresEssenceConsomes(double kilometres)
        • calcule la consommation en litres pour un certain kilométrage
    6. Dans Camion, je définis ces attributs, avec la bonne visibilité

      • double consommationDeBase
        • la consommation de base de 14, en litres par kilomètre
      • double chargementEnKilos
        • le poids du chargement du camion, 100 kilos pour commencer
    7. 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
    8. J’ajoute une méthode main à la classe MonAtelier1_2_C:

      public static void main(String[] args) {
      
              new MonAtelier1_2_C().valider();
          }
      
    9. J’implante les méthodes pour remplir le contrat du Atelier1_2_C, p.ex:

      @Override
          public Rouleur creerMoto() {
              return new Moto();
          }
      
    10. J’exécute mon projet et je valide mes classes et mes méthodes

    11. J’ajoute les fichiers du projet dans Git

    12. Je fais un commit et un push

    Réalisation #

    Étape 01: créer la classe MonAtelier1_2_C #

    1. Je crée une nouvelle classe nommée MonAtelier1_2_C
      • Clique-droit sur le projet => New => Class
        • Name: MonAtelier1_2_C

    Étape 02: hériter de Atelier1_2_C #

    1. J’ouvre MonAtelier1_2_C et j’ajoute extends Atelier1_2_C

    2. J’utilise Ctrl+.Eclipse: Ctrl+1 pour ajouter le import de Atelier1_2_C

    3. J’utilise Ctrl+.Eclipse: Ctrl+1 pour générer les méthodes manquantes

      • option add unimplemented methods

    Étape 03: créer la classe Vehicule #

    1. Je crée une nouvelle classe nommée Vehicule

      • Clique-droit sur le projet => New => Class
        • Name: Vehicule
    2. J’ouvre Vehicule et j’ajoute implements Rouleur, Formateur

    3. J’utilise Ctrl+.Eclipse: Ctrl+1 pour ajouter les import

    4. J’utilise Ctrl+.Eclipse: Ctrl+1 pour générer les méthodes manquantes

      • option add unimplemented methods

    Étape 04: créer la classe Moto #

    1. Je crée une nouvelle classe nommée Moto

      • Clique-droit sur le projet => New => Class
        • Name: Moto
    2. J’ouvre Moto et j’ajoute extends Vehicule

    public class Moto extends Vehicule {
    

    Étape 05: créer la classe Mobilette #

    1. Je crée une nouvelle classe nommée Mobilette

      • Clique-droit sur le projet => New => Class
        • Name: Mobilette
    2. J’ouvre Mobilette et j’ajoute extends Vehicule

    public class Mobilette extends Vehicule {
    

    Étape 06: créer la classe Auto #

    1. Je crée une nouvelle classe nommée Auto

      • Clique-droit sur le projet => New => Class
        • Name: Auto
    2. J’ouvre Auto et j’ajoute extends Vehicule

    public class Auto extends Vehicule {
    

    Étape 07: créer la classe Camion #

    1. Je crée une nouvelle classe nommée Camion

      • Clique-droit sur le projet => New => Class
        • Name: Camion
    2. J’ouvre Camion et j’ajoute extends Vehicule

    public class Camion extends Vehicule {
    

    Étape 08: ajouter les attributs #

    1. J’ouvre Vehicule et j’ajoute:

      private double totalKilometres = 0;
      
    2. J’ouvre Camion et j’ajoute:

      private double consommationDeBase = 14;
          private double chargementEnKilos = 100;
      

    Étape 09: ajouter les méthodes implantées #

    1. 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
    2. 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.

    Étape 10: ajouter les méthodes redéfinies #

    1. 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();
      	}
      
    2. 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";
      	}
      
    3. 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";
      	}
      
    4. 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";
      	}
      
    5. 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 #

    1. J’ouvre MonAtelier1_2_C et j’ajoute la méthode main
    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 #

    1. J’exécute mon programme

    2. Je vérifie que la validation est réussie:

    Creative Commons License Creative Commons Attribution Creative Commons ShareAlike
    • Atelier 1.2 exercice C: visibilité
      • Objectifs
      • Réalisation
        • Étape 01: créer la classe MonAtelier1_2_C
        • Étape 02: hériter de Atelier1_2_C
        • Étape 03: créer la classe Vehicule
        • Étape 04: créer la classe Moto
        • Étape 05: créer la classe Mobilette
        • Étape 06: créer la classe Auto
        • Étape 07: créer la classe Camion
        • Étape 08: ajouter les attributs
        • Étape 09: ajouter les méthodes implantées
        • Étape 10: ajouter les méthodes redéfinies
        • Étape 11: ajouter la méthode main
        • Étape 12: exécuter pour valider