Aller au contenu

Enoncés des TP - Semaine 2 - POO & Traitement des données

Lien vers la synthèse des notions : Héritage, polymorphisme, classe abstraite, association, agrégration…

Classes et objets, polymorphisme, héritage, agrégation

TP 6 : ChienChien POO - Polymorphisme et héritage

Objectif :

Modifier la classe Chien en ajoutant un attribut poids et une méthode courir(), puis tester ces modifications dans la classe Main.


Consignes

  1. Modification de la classe Chien :

    • Ajoutez un attribut poids de type double.
    • Ajoutez un getter et un setter pour l’attribut poids.
    • Modifiez le constructeur pour initialiser le poids.
    • Ajoutez une méthode courir() qui affiche : [nom du chien] court à toute vitesse !.
  2. Modification de la classe Main :

    • Créez un 3ème chien (monChien3) avec un poids de 25.5 kg.
    • Appelez la méthode courir() sur monChien3.

Modèle de base

Classe Chien

public class Chien {
    // privés (encapsulation)
    private String nom;
    private String race;
    private int age;

    // constructeur par défaut
    public Chien() {}

    // constructeur paramétré
    public Chien(String nom, String race, int age) {
        this.nom = nom;
        this.race = race;
        this.age = age;
    }

    // méthodes (comportements)
    public void aboyer() {
        System.out.println(nom + " dit: Woof! Woof!");
    }

    public void manger() {
        System.out.println(nom + " mange des croquettes.");
    }

    // getters et setters (encapsulation)
    public String getNom() {
        return nom;
    }

    public void setNom(String nom) {
        this.nom = nom;
    }

    public String getRace() {
        return race;
    }

    public void setRace(String race) {
        this.race = race;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

Classe Main pour tester

public class Main {
    public static void main(String[] args) {
        // Création d'objets Chien (instances de la classe Chien)
        Chien monChien1 = new Chien("Rex", "Labrador", 3);
        Chien monChien2 = new Chien("Bella", "Berger Australien", 5);

        // Utilisation des méthodes
        monChien1.aboyer();  // Affiche: Rex dit: Woof! Woof!
        monChien2.manger();  // Affiche: Bella mange des croquettes.

        // Accès aux attributs via les getters
        System.out.println(monChien1.getNom() + " est un " + monChien1.getRace());
        // Affiche: Rex est un Labrador
    }
}

Rappels et explications

Concept Explication Exemple dans le Code
Classe Modèle définissant les attributs (données) et méthodes (comportements) d’un ensemble d’objets. class Chien { private String nom; public void aboyer() { ... } }
Objet Instance concrète d’une classe. Possède un état (valeurs des attributs) et un comportement. Chien monChien1 = new Chien("Rex", "Labrador", 3);
Encapsulation Protection des attributs via des modificateurs d’accès (private) et des getters/setters. private String nom; public String getNom() { return nom; }
Constructeur Méthode spéciale pour initialiser un objet lors de sa création. public Chien(String nom, String race, int age) { this.nom = nom; ... }
Méthodes Comportements (actions) associés à un objet. aboyer(), manger()
Concept Définition Exemple
Classe Modèle (ou “plan”) qui définit les attributs (données) et les méthodes (comportements) communs à un ensemble d’objets. Une classe est un concept logique, pas physique. public class Voiture { private String marque; public void demarrer() { ... } }
Objet Instance concrète d’une classe. Un objet possède un état (valeurs des attributs) et un comportement (méthodes). Voiture maVoiture = new Voiture(); (ici, maVoiture est un objet de la classe Voiture).
Héritage Mécanisme permettant à une classe (classe enfant) d’hériter des attributs et méthodes d’une autre classe (classe parent). Cela crée une relation “est un” (ex. : une VoitureElectrique est une Voiture). public class VoitureElectrique extends Voiture { ... }
Polymorphisme Capacité d’une méthode ou d’un objet à prendre plusieurs formes. Deux types :
1. Surcharge (overloading) : Plusieurs méthodes avec le même nom mais des paramètres différents.
2. Redéfinition (overriding) : Une sous-classe redéfinit une méthode de sa super-classe.
Surcharge : demarrer() et demarrer(boolean modeSilencieux).
Redéfinition : @Override public void demarrer() { ... }
Abstraction Technique consistant à masquer les détails complexes et à ne montrer que les fonctionnalités essentielles à l’utilisateur. Permet de créer des modèles simplifiés et adaptés à un contexte spécifique. public abstract class Vehicule { public abstract void demarrer(); } (la méthode demarrer() n’a pas d’implémentation, elle doit être redéfinie par les sous-classes).
Encapsulation Principe consistant à cacher les données (attributs) d’une classe et à n’autoriser l’accès qu’à travers des méthodes publiques (getters/setters). Protège l’intégrité des données et permet de contrôler les modifications. private double solde; public double getSolde() { return solde; } public void setSolde(double solde) { if (solde >= 0) this.solde = solde; }
Association Relation bidirectionnelle ou unidirectionnelle entre deux objets, où chaque objet a son propre cycle de vie. Aucun objet ne “possède” l’autre. public class Enseignant { private List<Etudiant> etudiants; } et public class Etudiant { private List<Enseignant> enseignants; } (un enseignant peut avoir plusieurs étudiants, et vice versa).
Agrégation Forme d’association où un objet (le “tout”) contient d’autres objets (les “parties”), mais les parties peuvent exister indépendamment du tout. Relation “a un” (ex. : un département a des enseignants). public class Departement { private List<Enseignant> enseignants; } (un enseignant peut exister même si le département est supprimé).
Composition Forme forte d’aggrégation où les objets enfants n’existent pas sans le tout. Si le tout est détruit, les enfants le sont aussi. Relation “est composé de” (ex. : une maison est composée de pièces). public class Maison { private List<Piece> pieces; } (une pièce n’a pas de sens sans la maison ; si la maison est détruite, les pièces le sont aussi).

Extensions Possibles

Héritage : Créer une Sous-Classe ChienDeGarde

Redéfinissez la méthode aboyer() dans ChienDeGarde pour afficher : nom du chien dit : GRRR! Woof! (mode garde).

Pour tester le polymorphisme, assurez-vous que la sortie de la méthode courir() pour monChien3 affiche bien : Max court à toute vitesse !

TP 7 Création et manipulation d’un compte bancaire en Java

Objectifs :

Énoncé :

Création de la classe CompteBancaire :

Encapsulation :

Test : Dans une classe Main, créez un objet CompteBancaire ou Compte, effectuez des dépôts et des retraits, puis affichez le solde.

Bonus : Ajoutez une méthode simulerEpargne(double capitalInitial, double tauxAnnuel, int dureeAnnees) pour simuler l’évolution d’un capital avec des versements mensuels (voir exemple dans le code fourni).

Héritage et polymorphisme

TP 7 (suite) Gestion de comptes bancaires avec héritage et polymorphisme

Objectifs :

Énoncé :

Classes dérivées :

Créez une classe CompteEpargne qui hérite de Compte : - Ajoutez un attribut tauxInteret (double, initialisé à 0.03). - Implémentez calculerInterets() pour ajouter les intérêts au solde.

Créez une classe CompteCourant qui hérite de Compte : - Ajoutez un attribut decouvertAutorise (double, initialisé à 500.0). - Redéfinissez calculerInterets() pour afficher un message indiquant qu’il n’y a pas d’intérêts. - Redéfinissez deposer(double montant) pour afficher un message si le compte repasse en positif.

Test du polymorphisme :

Dans une classe TestHeritage, créez un tableau de Compte contenant un CompteEpargne et un CompteCourant. Déposez 1000 € sur chaque compte, puis appelez calculerInterets() pour chaque compte.

TP7 (suite) Gestion de clients

Énoncé :

Libre à vous de créer une Classe Personne qui pourrait servir pour d’autres cas.

Gestion des clients :

Effectuez des tests et pensez à gérer la validation des données pour les Clients et les Comptes.

TP 8 : Gestion d’une bibliothèque (Biblio)

Gestion d’une bibliothèque avec des livres et utilisation des collections HashMap.

Objectifs :

Énoncé :

Créez une classe Livre avec les attributs privés suivants :

Ajoutez :

Créez une classe GestionLivres avec un attribut privé :

Résultats attendus : Votre programme doit produire la sortie suivante dans la console (voir exemple fourni) :

Recherche du livre 2 avec l'ISBN 5678
Livre 5678 titre2 13.0

Montant total des livres en biblio = 39.0 euros
Nombre de livres en biblio = 3

Bonus (optionnel) :

TP 9 : Gestion de comptes bancaires (manipuler les variables STATIC)

Création et gestion de comptes bancaires avec variables statiques et encapsulation

Objectifs :

Énoncé :

Créez une classe Compte avec les attributs suivants :

Variable statique :

Variables d’instance :

Implémenter 2 constructeurs :

Méthodes :

Dans la méthode main :

Créez deux comptes :

Effectuez les opérations suivantes :

Création du compte numéro : 42212 05666-00000-1
Solde du compte numéro : 42212 05666-00000-1 = 0.0 Euros.
Dépot de 1234.0 Euros sur le compte numéro : 1
Solde du compte numéro : 42212 05666-00000-1 = 1234.0 Euros.

La Meilleure Banque
Compte numéro : 42212 05666-00000-1
Titulaire du compte : Jonathan
Solde = 1234.0 Euros.

Bonus (optionnel) :

Exceptions

TP 10 Gestion des erreurs avec les exceptions personnalisées

Objectifs :

Énoncé :

Streams

TP 11 Analyse de ventes avec les Streams Java

Objectifs :

Énoncé :

Affichage : Affichez les résultats des opérations ci-dessus.

Autres TP avec quelques différences

TP Gestion de contact : Héritage, classe abstraite, polymorphisme et TreeSet et Exceptions

Vous devrez gérer des Exceptions personnalisées pour la saisie des informations.

Avec utilisation de Scanner et TreeSet

Ces classes doivent hériter de la classe Contact.

Utilisez la console en affichant le menu ci-dessous et en créant les fonctionnalistés correspondantes :

======= M E N U ======
1. Ajouter un contact professionnel
2. Ajouter un contact personnel
3. Rechercher un contact par nom
4. Afficher tous les contacts
5. Quitter l'application

Choisissez une option :

TP : Animaux, aborder les notions d’héritage, de classes abstraites et de polymorphisme, exceptions,…

Vous ajouterez des méthodes abstraites pour obtenir le petitNom, le poids, la nourriturePreferee et le son émit par l’animal.

Ces classes doivent hériter de la classe Animal.

Ajoutez des méthodes pour initialiser le petitNom, le poids et le son que peut émettre chaque animal, par exemple, vous pouvez écrire une méthode miauler() pour les chats, aboyer() pour les chiens et chanter() pour les oiseaux,…. Ces méthodes peuvent éventuellement êtres privées et appelées par une méthode commune communiquer()

Vous pouvez ajouter 2 exceptionS personnalisées pour afficher un message si l’animal est déjà dans la Ferme et on tente de l’ajouter et aussi si on essaye de supprimer un animal qui n’est pas de la Ferme, à vous de trouver d’autres idées. ça permet d’illustrer l’utilisation des Exceptions.

TP Gestion de Documents

Dans ce projet, vous développez la partie métier et l’interface graphique est fournie. Du coup, vous allez traiter les notions d’interface et de classes abstraites en Java. C’est un peu difficile à ce stade mais ça permet d’aborder des concepts que vous comprendrez mieux par la suite.

Lien vers le projet de Gesion de document avec une IHM Swing

TP Gestion et réservations de Véhicules

Ce projet permet de tout mettre en pratique (semaine 1 et semaine 2)

Lien vers le TP

TP Gestion de RDV d’une Cabinet Medical (semaine 1 et 2)

Ce projet permet d’utiliser l’héritage, l’association et le polymorphisme ainsi que la gestion de dates.

Lien vers le TP