Lien vers la synthèse des notions : Héritage, polymorphisme, classe abstraite, association, agrégration…
Objectif :
Modifier la classe Chien en ajoutant un attribut poids et une méthode courir(), puis tester ces modifications dans la classe Main.
Chien
poids
courir()
Main
Modification de la classe Chien :
double
[nom du chien] court à toute vitesse !
Modification de la classe Main :
monChien3
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; } }
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 } }
class Chien { private String nom; public void aboyer() { ... } }
Chien monChien1 = new Chien("Rex", "Labrador", 3);
private
private String nom; public String getNom() { return nom; }
public Chien(String nom, String race, int age) { this.nom = nom; ... }
aboyer()
manger()
public class Voiture { private String marque; public void demarrer() { ... } }
Voiture maVoiture = new Voiture();
maVoiture
Voiture
public class VoitureElectrique extends Voiture { ... }
demarrer()
demarrer(boolean modeSilencieux)
@Override public void demarrer() { ... }
public abstract class Vehicule { public abstract void demarrer(); }
private double solde; public double getSolde() { return solde; } public void setSolde(double solde) { if (solde >= 0) this.solde = solde; }
public class Enseignant { private List<Etudiant> etudiants; }
public class Etudiant { private List<Enseignant> enseignants; }
public class Departement { private List<Enseignant> enseignants; }
public class Maison { private List<Piece> pieces; }
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 !
Objectifs :
Énoncé :
Création de la classe CompteBancaire :
Encapsulation :
N’ajoutez pas de setter pour le solde : il ne doit être modifié que via les méthodes deposer() et retirer().
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).
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.
Libre à vous de créer une Classe Personne qui pourrait servir pour d’autres cas.
Gestion des clients :
Map<String, Client>
Effectuez des tests et pensez à gérer la validation des données pour les Clients et les Comptes.
Gestion d’une bibliothèque avec des livres et utilisation des collections HashMap.
Créez une classe Livre avec les attributs privés suivants :
Ajoutez :
Une méthode toString() pour afficher les informations du livre sous la forme : “Livre [ISBN] [titre] [prix]” (exemple : Livre 1234 titre1 12.0).
Créez une classe GestionLivres avec un attribut privé :
Dans la méthode main :
Testez les méthodes suivantes dans l’ordre :
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) :
Création et gestion de comptes bancaires avec variables statiques et encapsulation
Créez une classe Compte avec les attributs suivants :
Variable statique :
Variables d’instance :
Implémenter 2 constructeurs :
Méthodes :
toString() : retourne une chaîne décrivant le compte.
Créez deux comptes :
Effectuez les opérations suivantes :
Affichez les informations du compte de Josselin.
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.
Classe Compte : Dans cette classe Compte (ou une nouvelle classe), implémentez une méthode retirer(double montant) qui lève SoldeInsuffisantException si le montant est supérieur au solde.
Affichage : Affichez les résultats des opérations ci-dessus.
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 :
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.
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
Ce projet permet de tout mettre en pratique (semaine 1 et semaine 2)
Lien vers le TP
Ce projet permet d’utiliser l’héritage, l’association et le polymorphisme ainsi que la gestion de dates.