# EXO-JAVA-Interfaces ## Description Le programme doit implémenter un système de formes géométriques avec deux aspects distincts : 1. Le calcul des propriétés géométriques (aire, périmètre) 2. La représentation visuelle des formes (dessin dans la console) 3. ### Interfaces à créer 1. Interface `Calculable` : - Permet le calcul des propriétés géométriques d'une forme - Méthodes requises : - `calculerAire()` : retourne l'aire de la forme en double - `calculerPerimetre()` : retourne le périmètre de la forme en double - Les implémentations doivent assurer des valeurs positives - Les calculs nécessitent une précision de 0.001 1. Interface `Dessinable` : - Permet la représentation visuelle d'une forme - Méthodes requises : - `dessiner()` : affiche une représentation ASCII de la forme dans la console - `obtenirDescription()` : retourne une description textuelle de la forme - Les implémentations doivent : - Créer un rendu ASCII adapté aux dimensions - Fournir une description claire et concise - Gérer les cas limites (formes très grandes ou très petites) ### Classes à implémenter 1. Créer les classes suivantes qui implémentent les deux interfaces : - `Cercle` (rayon) - `Rectangle` (longueur, largeur) - `Triangle` (base, hauteur) 1. Chaque classe doit : - Implémenter les méthodes de calcul géométrique - Implémenter les méthodes de dessin (représentation ASCII dans la console) - Gérer la validation des données ### Démonstration du polymorphisme multiple 1. Créer une classe `GestionnaireFormes` qui peut : - Manipuler une liste de formes en tant que `Calculable` - Manipuler une liste de formes en tant que `Dessinable` - Démontrer l'utilisation séparée des deux aspects ## Contraintes techniques - Utiliser le package `com.humanbooster.exercices` - Documenter le code avec des commentaires JavaDoc - Implémenter une gestion propre des erreurs ## Fonctionnalités attendues - Création de différentes formes géométriques - Calcul des propriétés géométriques - Affichage des formes dans la console (bonus) ## Bonus - Implémenter l'interface `Comparable` pour trier les formes - Ajouter une interface `Transformable` pour redimensionner les formes - Sauvegarder et charger des formes depuis un fichier