:: Enseignements :: ESIPE :: E4INFO :: 2013-2014 :: Programmation Orientée Objet - Design Pattern ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | L'assurance ça rassure |
classe, interface, refactoring de base
Vous venez d'être embauché comme auxilliaire occasionel pour écrire
deux fonctionnalités du nouveau site d'une assurance en ligne.
Votre boss sachant que vous n'avez pas beaucoup d'expérience décide
de limiter les risques et vous demande de coder des fonctionnalités
du module de statistique (car si c'est faux, c'est pas grâve).
Exercice 1 - French Connection
On sintéresse dans un premier temps à l'historique de connection
du site Web. Malheureusement, l'ingéneurs système est en vacances,
il n'est donc pas possible d'obtenir un accès au fichier de log
contenant un historique de connections.
Comme vous devez quand même travailler, vous apprenez par
un collègue que le fichier de log contient heureusement
une date de début et une date de fin de connection
(en milliseconde depuis Epoch).
-
Ecrire une classe Connection qui représente les informations
de connection (début, fin) en miliseconde correspondant aux valeurs
disponibles dans le fichier de log.
-
Ecrire l'interface d'un service ConnectionService qui
permet d'obtenir une liste des dernières connections.
Comme vous n'avez pas de vrai donnée, il va falloir en générer
des fausses en attendant d'obtenir ce fameux fichier de log.
Créer une classe MockConnectionService implantant
l'interface ConnectionService qui renvoie
1 000 000 de connections générer à partir d'un générateur pseudo-aléatoire
(la classe java.util.Random en Java) dont la graine (seed)
est fixé à 0 (cela permettra de reproduire toujours les mêmes données).
-
Enfin, après réunion avec votre patron, vous apprenez que les statistiques
intéressantes pour les connections sont le nombre totale de connections
ainsi que la moyenne du temps de connection.
Ecrire le code permettant de faire plaisir à votre patron.
Exercice 2 - Contrats
On vous demande maintenant de calculer des statistiques sur
le prix de contrat d'assurances dont les données
on été extraite de la base de données par un export.
Malheureursement le DBA est lui aussi en vacances, il est
donc impossible d'effectuer un export sans sa présence.
Le collègue vous ayant aidé précédemment semble se souvenir
qu'un contrat d'assurance à bien un prix ainsi que l'age
de la personne ayant souscrit le contrat.
-
Ecrire la classe Contract,
une interface ContractService et sa classe
MockContractService ainsi que du code
permettant de calculer le prix moyen d'un contrat d'assurance
-
Après avoir croisé votre boss dans un couloir, vous apprenez
que dans le cas du prix des contrats d'assurance, calculer
l'écart type est aussi une bonne idée.
Faites les changements qui s'impose.
-
Après avoir croisé votre collègue à la machine à café,
vous apprenez que le script JavaScript utilisé pour
calculer la fin d'une connection ne marche pas dans 1%
des cas et renvoie la valeur -1 en tant que valeur
de fin de connection dans ce cas.
Modifier votre implantation de MockConnectionService
pour simuler ce cas et faites en sorte de ne pas prendre
en compte les connections dont la valeur de fin de connection
est invalide.
-
Votre boss vient vous voir pour vous dire qu'il veux aussi
des statistiques sur l'age moyen (et l'écart-type) des personnes
ayant souscrit un contrat d'assurance.
Modéliser les changements que vous voulez effectuer.
-
Effectuer les changements que vous avez prévu de faire sur votre code.
Exercice 3 - Refactor, refactor, refactor
-
Après avoir présenté votre travail au CTO, qui lui revient
de vacances, celui-ci vous indique que la moyenne et l'ecart type
peuvent être calculé en un seul passage sur la liste
et que refactoriser votre code serait une bonne idée
pour partager le même code entre le calcul des statistiques
sur les connections et sur les contrats
car il semble qu'il y est beaucoup de code quasiment identique.
Modéliser les changements que vous allez devoir effectuer.
-
Effectuer les changements que vous avez prévu de faire sur votre code.
© Université de Marne-la-Vallée