This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
2016_2017:s3:concprogobjet:td:td3 [2016/10/17 19:19] blay [Question 2 : Implémenter tout ce qui concerne le système avec les tests associés] |
2016_2017:s3:concprogobjet:td:td3 [2016/11/08 18:54] blay [RETOUR SUR LES RENDUS] |
||
---|---|---|---|
Line 2: | Line 2: | ||
Basé sur TP3 de l'Université Montpellier II — L3 Informatique 2008/09 Programmation par objets en Java | Basé sur TP3 de l'Université Montpellier II — L3 Informatique 2008/09 Programmation par objets en Java | ||
- | <note warning>Vous avez 2H</note> | + | <note warning> Vous avez <color blue/lightgrey>2 heures.</color>\\ |
+ | Vous rendrez ce que vous avez fait à la fin des 2 heures.</note>. | ||
Line 41: | Line 42: | ||
==== Question 5 : Extension un peu moins facile ==== | ==== Question 5 : Extension un peu moins facile ==== | ||
- | Les ingénieurs de l'entreprise ont mis au moins un calculateur (Class Utilitaire) qui permet de calculer la consommation moyenne en carburant d'un engin, il expose donc la méthode statique : public static double consommation (Engin e, int v)((Imaginez une fonction très simple)). | + | Les ingénieurs de l'entreprise ont mis au moins un calculateur (Class Utilitaire) qui permet de calculer la consommation moyenne en carburant d'un engin, il expose donc la méthode statique : public static double consommation (Engin e, int vitesse)((Imaginez une fonction très simple)). |
Un engin est défini par une interface comme suit : | Un engin est défini par une interface comme suit : | ||
- | Interface Engin { int getWeight(); in getHorsePower()} | + | Interface Engin { int getWeight(); int getHorsePower()} |
On considère que tous les véhicules dans notre entreprise ont la même puissance. | On considère que tous les véhicules dans notre entreprise ont la même puissance. | ||
Line 51: | Line 52: | ||
+ | ==== Questions facultatives à ne pas traiter dans le TD ==== | ||
+ | |||
+ | Que feriez-vous si l'on vous disait que l'on veut pouvoir créer das véhicules à partir de leur poids à vide, charge maximale, etc... ? | ||
+ | |||
+ | ==== RENDU ==== | ||
+ | |||
+ | A la fin du TD, en l'état, Diagrammes UML (essentiellement un diagramme de classes), les codes et tests associés. | ||
+ | |||
+ | Dépôt sur [[http://jalon.unice.fr/cours/blay/Cours-blay-20150930110548/BoiteDepot-blay-20151007231635810478?menu=depots|jalon]] avec comme nom : GroupeNumero - Noms des etudiants | ||
+ | |||
+ | |||
+ | |||
+ | ==== RETOUR SUR LES RENDUS ==== | ||
+ | |||
+ | ON évite ou on ne fait pas : | ||
+ | * la duplication de code par exemple des setCharge | ||
+ | * nom de variable d'instance, méthode en majuscule !!! | ||
+ | * Définir une classe abstraite et implementer toutes ses méthodes de manière absurde : on ne sait même pas ce qui doit être redéfini (eg. vitesseMax à 0)! | ||
+ | * Des tests sous forme de toString | ||
+ | * aVOIR UNE CHARGE MAX ET NE PAS EN TENIR COMPTE en chargeant le véhicule | ||
+ | * passer la charge à un vehicule qui a déjà une charge ! | ||
+ | * recopier les un sur les autres des codes pas très malins ou qui datent d'une vieille version de java | ||
+ | * prévoir une méthode d'accès à la vitesse max et accéder directement à une variable "constante"... dans convoi et ne même pas s'en rendre compte dans les tests!! | ||
+ | * Pas de S à la fin du nom d'une classe comme Vehicule. | ||
+ | * ne pas savoir calculer le min d'un ensemble et ne pas faire de tests! | ||
+ | * BANIR LES toString dans vos assert.. imaginez le coût d'une modification d'un toString !! et que testez-vous vraiment? | ||
+ | * Ne mettez pas un attribut quand vous pouvez mettre une association ! Mettez les cardinalités ! | ||
+ | * N'utilisez pas des toString dans vos codes pour gérer les cas d'erreur : mettez votre gestion des cas d'erreur en commentaire par exemple add-charge ne fait rien si... et METTEZ des tests pour vérifier que vous faites bien ce que vous dites. Si vraiment vous en avez besoin, mettez un logger ! | ||
+ | * aTTENTION AU CHOIX ARBITRAIRE D4UNE valeur max comme 150... si demain vous gérez des convois de ferrari, vous devrez aller modifier votre code de convoi !! Integer.MAX_VALUE résoud votre problème par exemple. | ||
+ | * cOMMENT FAIRE POur qu'un véhicule soit un engin???? Il faut répondre à cette question en TD. | ||
+ | * Mettez le toString en facteur surtout quand vous le recopiez partout! | ||
+ | * Prévoir en dure le calcul de la vitesse max et autoriser la modification de la charge !! | ||
+ | * Ne définissez pas toutes vos variables en public ou même protected, simplement parce que vous ne savez pas utiliser des cascades de constructeurs ou des accesseurs! Et réfléchissez à la cohérence de votre code même sur un exemple aussi simple ! | ||
+ | * Sur PAPIER, POUR NOTER QU'UNE CLASSE EST abstraite, vous pouvez simplement écrire <abstract>, idem pour une méthode. | ||
+ | * HORREUR!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (piste : Polymorphisme ce n'est pas une maladie contagieuse.) | ||
+ | <code java> | ||
+ | public double getVitesseMax(){ | ||
+ | double resultat =150; | ||
+ | double resultat2 =0; | ||
+ | for (Vehicule v : listeVehicule) { | ||
+ | if(v instanceof PetitBus){ | ||
+ | resultat2=((PetitBus) v).getVitesseMax(); | ||
+ | } | ||
+ | if(v instanceof CamionCiterne){ | ||
+ | resultat2=((CamionCiterne) v).getVitesseMax(); | ||
+ | } | ||
+ | if(v instanceof CamionBache){ | ||
+ | resultat2=((CamionBache) v).getVitesseMax(); | ||
+ | } | ||
+ | if(v instanceof VoitureSansPermis){ | ||
+ | resultat2=((VoitureSansPermis) v).getVitesseMax(); | ||
+ | } | ||
+ | if (resultat2<resultat){ | ||
+ | resultat = resultat2; | ||
+ | } | ||
+ | } | ||
+ | return resultat; | ||
+ | } | ||
+ | </code> |