This is an old revision of the document!
Responsabilités et Couplages
On distingue deux formes de consommation pour un même modèle de voiture :
- la consommation moyenne sur route, urbaine ou mixte exemples
- la consommation en fonction de la vitesse qui suit la règle suivante 1), elle ne prétend pas être vraie
C(v) = 2(d/v) + K v^2 avec t en heures, d en km et k un coefficient variable en fonction des voitures.
Si une voiture roule à 150 km/h
sa consommation est donc en litre au 100km
de :
C(150) = 2(100/150) + K * 150^2 pour la Cl
Avec un coefficient de 3,85*10^-4
, C(150) = 9.99583333333; C(64) = 4,7 litres au 100km
- Quelle modélisation proposez-vous pour supporter les opérations suivantes :
- Je veux pouvoir déclarer que le modèle Clio a une consommation moyenne sur Route de 6,3, urbaine de 8,1, ….
- Je veux pouvoir déclarer que le modèle Clio a un coefficient “k” de 3,85*10^-4
- Je veux pouvoir demander la consommation moyenne du modèle Clio sur Route (rep. 6,3)? urbaine(rep. 8,1)?
- Je veux pouvoir demander la consommation moyenne d'une Clio à 150km/h? (mettons que le coefficient est de 3,85*10^-4 et donc obtenir une réponse de quasi 10, … ce qui n'est pas du tout la réalité!!! ).
- Réfléchissez à l'implémentation sur papier au moins et proposer un modèle de classe qui répond à ces fonctionnalités.
- On intègre à présent la consommation “Mixte”, qu'est-ce qui change dans votre modèle? dans votre code?
- On vient d'établir une formule 2) qui, pour certains modèles de voitures, à partir des données connues en circulation urbaine ou sur route permet de déterminer le coefficient K, selon la formule suivante : On calcule le coefficient en multipliant par 10^-4, la consommation sur route au dessus de 100 km/h, la consommation mixte entre 100 et 50, et en dessous urbaine. Quelle modélisation proposez-vous ? Quel est le couplage entre vos classes? Avez-vous bien supporté l'extension? Il existe plusieurs solutions possibles, c'est à vous de décider!
- Par exemple, pour la FerrariF430,
- consommations :
- consoSurRoute= 13.3 litre par CENT_KM,
- consoUrbaine=26.9 litre par CENT_KM,
- consoMixte = 18.3 litre par CENT_KM
- et le calcul de la consommation en fonction de la vitesse doit utiliser cette règle fictive qui donnerait des résultats comme :
- A 150km/hConso : [31.258333333333336 litre par CENT_KM]]
- A 90/hConso : [17.045222222222222 litre par CENT_KM]]
- A 30km/hConso : [9.087666666666667 litre par CENT_KM]]
- On veut définir un calculateur qui en fonction d'un modèle de voiture et d'une distance peut calculer :
- la consommation à prévoir en fonction du type de route
- Pour ma ferrari F430 si je roule pendant 100km sur route, combien vais-je dépenser d'essence?
- la consommation à prévoir en fonction de la vitesse
- Pour ma clio si je roule pendant 100km à 90km/h, combien vais-je dépenser d'essence?
- Quel est le couplage entre la classe calculateur et la classe modèle de voiture?
- En fait, pour certains modèles de voiture (par exemple, les Renaults), les consommations moyennes sont obtenues par des requêtes à un service externe qui, en fonction des informations sur le modèle (on se limite au nom et à l'année, par exemple Clio 2 et 2000), nous renvoie une chaine de caractères au format JSON, par exemple
{“consommation”: {“route” : “6.3”, “urbaine” : “8.1” } }
, Intégrez ce type de “calcul” de la consommation dans votre modélisation, quel est l'impact? 3) - Pour certains véhicules on veut pouvoir enregistrer une consommation en Galon pour 100 Miles, que devez-vous modifier?
- Que retenez-vous?
A la fin de cette séance (au plus tard en fin de semaine)
- Dans votre répertoire de projet, sous TD4, se trouvent (s'il y a des doutes sur le répertoire de livraison, mettez un mail à votre encadreur) :
- Un document contenant
- votre modèle final (Tout le monde n'aboutit pas au même modèle, c'est certain) (merci de l'intégrer dans un document pour que nous n'ayons pas à ouvrir différents modèles dans différentes versions de l'outil).
- des explications sur les raisons de ce modèle (dont vous êtes très fiers) et les leçons apprises.
- Les codes et les tests. Pensez bien que le service externe ne doit pas être vraiment implémenté. Une fonction qui pour l'instant retourne à chaque fois la même chaine de caractère convient très bien, et vous pouvez considérer aussi la transformation d'une chaine de caractère JSON en “autre chose” comme donnée (par exemple : return new Consommation(…)).
Tuyaux
Vous pouvez utiliser la bibliothèque “Jackson” pour gérer le format JSON.
Les . jar dont vous avez besoin :jackson-databind-2.3.1.jar jackson-core-2.4.3.jar jackson-annotations-2.4.0.jar
Pour pouvoir les utiliser dans le projet Eclipse : Sur le projet > Properties > Java Build Path > Add external Jars et sélectionnez les.
Pour transformer un objet Java en string Json :
ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); Object json = objectMapper.readValue( objectMapper.writeValueAsString(cm), Object.class); String jsonString = objectMapper.writerWithDefaultPrettyPrinter() .writeValueAsString(json); return jsonString;
Pour transformer une string Json en objet Java :
//Appel fonction de votre code// String json = serviceExterne.consommationJSON(modele); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.enableDefaultTyping(); //Nom de la classe cible dépendant de votre modèle, chez moi, c'est ConsommationMoyenne ConsommationMoyenne cm = objectMapper.readValue(json, ConsommationMoyenne.class);