# Document de design Ceci est le document de template pour décrire l'architecture de votre programme. Vous pouvez le modifier à votre guise, mais assurez-vous de répondre à toutes les questions posées. ***Suivant certaines architectures, certaines des questions peuvent ne pas être pertinentes. Dans ce cas, vous pouvez les ignorer.*** Vous pouvez utiliser autant de diagrammes que vous le souhaitez pour expliquer votre architecture. Nous vous conseillons d'utiliser le logiciel PlantUML pour générer vos diagrammes. ## Schéma général Décrivez ici le schéma général de votre programme. Quels sont les composants principaux et comment interagissent-ils ? On a 2 principaux composants : * WeatherDataAPI * WeatherDisplay WeatherDisplay contient un ensemble d'instances de WeatherDisplay. Chacune de ces instances retournent des données ayant l'interface WeatherData, ce qui permet au WeatherDisplay de les afficher. ## Utilisation du polymorphisme Comment utilisez-vous le polymorphisme dans votre programme ? Nous utilisons les interfaces suivantes servant à définir les parties publiques de nos Classes : * WeatherDataAPI * WeatherDisplay ## Utilisation de la délégation Comment utilisez-vous la délégation dans votre programme ? Nous avons essayé de mettre en oeuvre un maximum de forme de délégation dans le projet. Voici les principales formes de délégations qui se trouvent dans le projet : ### JSONFetcher Les requêtes HTTP(S) et la transformation de la réponse en JSONObject est abstraite grâce à la classe JSONFetcher ### City Nous utilisons une classe City afin de stocker le nom d'une ville, et de faire le lien avec ses coordonnées. Cela permet d'abstraire un appel à l'API api-adresse.data.gouv.fr pour obtenir les coordonnées depuis le nom de la ville. ## Utilisation de l'héritage Comment utilisez-vous l'héritage dans votre programme ? Nous avons limité au maximum l'héritage dans le projet et nous sommes concentrés sur des relations de composition. Au final, pour permettre un système de cache, les trois classes WeatherAPI, OpenMeteo et OpenWeatherMap héritent d'une classe WeatherDataCachedAPI. ## Utilisation de la généricité Comment utilisez-vous la généricité dans votre programme ? Nous n'avons pas eu besoin de généricité dans notre programme. ## Utilisation des exceptions Comment utilisez-vous les exceptions dans votre programme ? Nous utilisons WeatherFetchingException qui est une Exception qui est envoyée lorsqu'