2019_2020:s3:concprogobjet:td:tdreutilisation
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
2019_2020:s3:concprogobjet:td:tdreutilisation [2019/11/04 20:36] – [Réutilisation par composition et héritage] blay | 2019_2020:s3:concprogobjet:td:tdreutilisation [2019/11/13 10:08] (current) – [Réutilisation par composition et héritage] blay | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | /* | + | ====== TD Introduction |
- | ====== | + | |
- | + | ||
- | Nous voulons gérer un réseau routier. | + | |
- | Un '' | + | |
- | On veut savoir pour un réseau routier les chemins possibles entre deux points routes. | + | |
- | + | ||
- | La modélisation initiale imaginée est celle du diagramme ci-dessous. | + | |
- | + | ||
- | {{ : | + | |
- | + | ||
- | + | ||
- | Voici le jeu de données à utiliser : | + | |
- | < | + | |
- | AR[A8-23:[ Villeneuve: | + | |
- | AR[N7-14:[ Villeneuve: | + | |
- | AR[A8-7:[ Villeneuve: | + | |
- | AR[N7-14:[ Sophia: | + | |
- | AR[A8-23:[ Sophia: | + | |
- | AR[A8-7:[ Cagnes: | + | |
- | AR[A8-13:[ Cagnes: | + | |
- | AR[A8-13:[ Nice: | + | |
- | </ | + | |
- | + | ||
- | Voici des exemples de chemins : | + | |
- | + | ||
- | **de Nice a Sophia :** | + | |
- | - [dist.=34, paths=[AR[A8-13: | + | |
- | - [dist.=43, paths=[AR[A8-13: | + | |
- | + | ||
- | **de Sophia a Nice :** | + | |
- | - [dist.=34, paths=[AR[N7-14: | + | |
- | - [dist.=43, paths=[AR[A8-23: | + | |
- | + | ||
- | **de Sophia a villeneuve :** | + | |
- | - [dist.=14, paths=[AR[N7-14: | + | |
- | - [dist.=23, paths=[AR[A8-23: | + | |
- | + | ||
- | **de Sophia a Cagnes :** | + | |
- | - [dist.=21, paths=[AR[N7-14: | + | |
- | - [dist.=30, paths=[AR[A8-23: | + | |
- | + | ||
- | + | ||
- | + | ||
- | Pour cela on vous donne les classes suivantes : | + | |
- | - Le package {{ : | + | |
- | - Le package {{: | + | |
- | + | ||
- | Les 2 diagrammes suivants ont été obtenus par reverse Engineering: | + | |
- | {{ : | + | |
- | {{ : | + | |
- | + | ||
- | */ | + | |
- | /* | + | |
- | ===== Questions ===== | + | |
- | - Imaginer comment vous pourriez définir un réseau routier comme un graphe : quels sont les sommets? quels sont les arcs? etc. Compléter/ | + | |
- | - Dessiner le diagramme de séquence qui, à partir d'un réseau, vous permet d' | + | |
- | - Ecrivez les tests et les codes correspondants. Vous avez comme hypothèse qu'il n' | + | |
- | - Nous voulons prendre en compte dans notre modélisation, | + | |
- | - un point route est en ville ou à la campagne, | + | |
- | - un point route est déterminé par une coordonnée GPS | + | |
- | - Nous voulons calculer les distances entre deux points routes à partir des coordonnées GPS pour associer une distance à un arcRoutier, que devez-vous faire? | + | |
- | - Nous voulons à présent utiliser cette modélisation pour obtenir les chemins les plus courts, les chemins qui ne passent pas par l' | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | <box round rgb(150, | + | |
- | * Mettez un mail à votre encadreur avec soit l' | + | |
- | * Dans votre répertoire de projet, sous TD6, 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' | + | |
- | * 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. | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | */ | + | |
- | < | + | |
- | <!-- | + | |
- | + | ||
- | ====== Polymorphisme ====== | + | |
- | + | ||
- | Le bus supporte à présent différents types de messages : Rémanent, Ephemere, Fondamental, | + | |
- | + | ||
- | Chacun de ces types de messages répond | + | |
- | + | ||
- | ^ ^ Création ^ Lecture ^ MiseAJour ^ Destruction^ | + | |
- | ^ Rémanent| Il connait son créateur | --- | Peut être mis à jour par son créateur| Ne peut être détruit que pas son créateur| | + | |
- | ^ Ephemere| --- | Est automatiquement retiré de sa boîte dès qu'il est lu| Ne peut pas être mis à jour| Ne peut être détruit que s'il n'est plus dans une boite| | + | |
- | ^Temporel|Il connait la date où il a été créé et sa durée |Il ne peut être lu que s'il n'est pas périmé. S'il est périmé, il est détruit lorsque l'on demande à le lire|Peut être mis à jour| Est automatiquement détruit quand il est périmé| | + | |
- | ^ Intelligent|Il connait son créateur|N' | + | |
- | ^ Re-armable | --- | --- | Il peut être réactivé | Il disparait en lecture au bout d'un temps donné, il doit alors être réactivé et s'il n'est pas re-armé, au bout d'un certain temps il est détruit| | + | |
- | + | ||
- | **A FAIRE** | + | |
- | - Proposer un modèle de classes en conception | + | |
- | - Vérifier que tous les scénarios sont "faisables"... | + | |
- | - Vérifier les propriétés vues en cours | + | |
- | - Implémenter | + | |
- | - Vérifier que tous vos scénarios précédents sont toujours fonctionnels, | + | |
- | - Quel impact sur le calcul du nombre de messages dans une boîte ? | + | |
- | + | ||
- | Proposer un modele d'IHM de reception des messages pour les aider à comprendre... ou les laisser faire? | + | |
- | ou la leur donner et les laisser la connecter? | + | |
- | + | ||
- | + | ||
- | + | ||
- | ===== Responsabilités ===== | + | |
- | + | ||
- | En fonction des mots clefs qui constituent le contenu des messages, ils sont automatiquement associés à une boîte de message. Si aucune correspondance n'est détectée une boîte " | + | |
- | + | ||
- | Exemples : | + | |
- | - " | + | |
- | - " | + | |
- | - "photo " conduit à poster le message dans la boite " | + | |
- | + | ||
- | **A FAIRE** | + | |
- | - Qui crée les messages? | + | |
- | - Qui est responsable de filtrer les mots clefs? | + | |
- | - Quel est la complexité du filtrage? | + | |
- | - Déterminer le couplage de vos classes | + | |
- | + | ||
- | + | ||
- | ===== Abstraction ===== | + | |
- | + | ||
- | Si maintenant, on veut créer une nouvelle boîte qui reçoit les messages contenant contenant " | + | |
- | + | ||
- | Si maintenant on veut que tout message dans la boite SNAPCHAT soit ephemere ? | + | |
- | + | ||
- | + | ||
- | ===== Estimation de performance ===== | + | |
- | + | ||
- | + | ||
- | Une route est définie par des Tronçons. Un tronçon est défini par deux Positions et une longueur. Une Position est définie par un nom. | + | |
- | + | ||
- | Calculer le plus cours chemin entre deux positions. | + | |
- | Déterminer la complexité de votre algorithme. | + | |
- | + | ||
- | + | ||
- | => Outils de recherche de code dupliqué? | + | |
- | + | ||
- | + | ||
- | ===== Suites prévues pour ce projet ===== | + | |
- | + | ||
- | * // | + | |
- | Le bus gère des " | + | |
- | Dans le scénario de base, la voiture A a choisi d' | + | |
- | * //Objectifs : Apprentissage d'une famille courante de patterns (fabrique, builder) mais uniquement par l' | + | |
- | * //Objectifs : Prise en compte des IHMs et mise en place du pattern MVC à tous les niveaux// : Définir les interfaces graphiques qui nous permettraient d' | + | |
- | * //Objectifs : Prise en considération des responsabilités uniques// : Routage en fonction des messages : La voiture A emet un message et le bus décide de la ou des boîtes à messages concernées. | + | |
- | * //Objectifs : mise en oeuvre du pattern DAO + différents modèles de persistance + intégration par les interfaces + travail en équipe// : Les messages seront rendus persistants. Pour certaines boîtes les messages sont persistants, | + | |
- | * Il est assez surprenant d' | + | |
- | - Il sera possible de définir différentes formes de souscription. | + | |
- | + | ||
- | Nous n' | + | |
- | + | ||
- | !--> | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | + | ||
- | ====== TD Réutilisation ====== | + | |
Objectifs : | Objectifs : | ||
Line 179: | Line 18: | ||
- | <box round rgb(135,206,250) rgb(0, | + | <box round rgb(224,255,255) rgb(0, |
Faire passer les tests sans les modifier si ce n'est la référence à la classe "// | Faire passer les tests sans les modifier si ce n'est la référence à la classe "// | ||
Voici les archives : //((Tips : Prenez chaque archive, déposer la sous Eclipse, dezipper, refresh))// | Voici les archives : //((Tips : Prenez chaque archive, déposer la sous Eclipse, dezipper, refresh))// | ||
- | - les {{: | + | - les classes de manipulation des graphes: |
- | - les classes du package grapheX, vous en avez besoin pour l' | + | - les classes du package |
- | - les classes du package grapheSimple vous allez en avoir besoin. Regardez bien **ces classes** et construisez rapidement le modèle de classes correspondant, | + | - les classes du package |
- | - les {{:2018_2019: | + | - les classes définissant le réseau |
- | - {{:2018_2019: | + | - les {{:2019_2020: |
- | - {{:2018_2019: | + | |
+ | - celle sur les graphes pour vérifier dans l' | ||
+ | - {{:2019_2020: | ||
+ | - Fixez le setup en ajoutant JUnit 5; exécutez les tests | ||
- | ===> Pour ceux qui ont déjà chargé des codes, voici les codes de {{: | ||
- | |||
- | |||
LOL**Vous n'avez que deux interfaces à implémenter : '' | LOL**Vous n'avez que deux interfaces à implémenter : '' | ||
Ce qui suit est là pour vous aider.** }} | Ce qui suit est là pour vous aider.** }} | ||
</ | </ | ||
- | La figure suivante visualise les interfaces et classes fournies pour les tests. | ||
- | {{ : | + | ===== Réutilisation par composition et héritage ===== |
- | {{ :2016_2017:s3: | + | <note tip>Un réseau social peut être vu comme un graphe. |
+ | * // | ||
+ | * Utilisez la classe '' | ||
+ | </ | ||
- | ===== Réutilisation par composition et héritage ===== | + | <note warning> |
+ | |||
+ | |||
- Vous devez construire un réseau social dont les spécifications sont les suivantes (cf. Interfaces // | - Vous devez construire un réseau social dont les spécifications sont les suivantes (cf. Interfaces // | ||
- | * un membre | + | * un réseau social est un ensemble de membres qui sont en relation; |
- | * Un membre //a// est en relation avec membre //b// avec une force entre Faible (LOW) et Très forte (STRONG). | + | * un membre a un nom, une localisation (String) <del>et une introduction (String)</ |
- | * //a// peut se considérer en relation avec //b// à la force 1 et //b// ne pas se considérer en relation avec //a//! | + | * Un membre //a// est en relation avec membre //b// avec une force entre Faible (LOW) et Très forte (STRONG). Plus la relation est forte plus on considère que la distance est courte. La classe // |
+ | * //a// peut se considérer en relation avec //b// à la force STRONG | ||
* On veut pouvoir savoir quels sont les membres en relation avec un membre au rang X : | * On veut pouvoir savoir quels sont les membres en relation avec un membre au rang X : | ||
* exemple : a -> b -> c -> a : | * exemple : a -> b -> c -> a : | ||
Line 217: | Line 61: | ||
* Méthode : '' | * Méthode : '' | ||
* On veut pouvoir calculer la distance entre 2 personnes, en choisissant la plus courte distance : | * On veut pouvoir calculer la distance entre 2 personnes, en choisissant la plus courte distance : | ||
- | * exemple : a --1--> b --5--> c et a --2--> d --5-> c : | + | * exemple : a --STRONG(1)--> b --LOW(4)--> c et a --HIGH(2)--> d --LOW(4)-> c : |
- | * la distance est de 1 entre a et b ; | + | * la distance est : |
- | * elle est de 2 entre a et d; | + | * la distance est de 5 entre a et c (1 + 4 qui est plus court que 2+4 ) |
- | * la distance est de 6 entre a et c (1 + 5 qui est plus court que 2+5 ) | + | |
* Méthode : '' | * Méthode : '' | ||
+ | * D' | ||
- | D' | ||
- | <note tip>Un réseau social peut être vu comme un graphe. | + | <note warning> |
- | // | + | |
- | + | ||
- | Pour vous aider (et c'est aussi obligatoire ;-) ) vous utiliserez **la classe '' | + | |
- | + | ||
- | La figure suivante visualise une part de ces codes. | + | |
- | {{ : | + | |
- | + | ||
- | Celle-ci les interfaces à implémenter | + | |
- | {{ : | + | |
- | + | ||
- | </ | + | |
- | + | ||
- | <note warning> | + | |
===== Réutilisation par adaptation ===== | ===== Réutilisation par adaptation ===== | ||
- On veut intégrer dans notre réseau social, des membres du réseau '' | - On veut intégrer dans notre réseau social, des membres du réseau '' | ||
- | * Les classes du package // | + | * Les classes du package // |
- | * On veut ajouter dans notre réseau des membres qui correspondent à des " | + | * On veut ajouter dans notre réseau des membres qui correspondent à des " |
- | - le **nom** du " | + | - le **nom** du " |
- | | + | |
- on " | - on " | ||
- les users ciblés sont connus de notre réseau, c'est à dire que nous avons déjà un membre de même nom; | - les users ciblés sont connus de notre réseau, c'est à dire que nous avons déjà un membre de même nom; | ||
- | - elles correspondent à des relations familiales ou des relations d' | + | - elles correspondent à des relations familiales ou des relations d' |
- | - Nous considérons que les relations inverses existent également dans notre réseau. | + | - Nous considérons que les relations inverses existent également dans notre réseau. //Donc si Peter est ami avec John dans FG, dans notre réseau Peter est en relation avec John par un lien Medium et John est en relation avec Peter avec un lien Medium//. |
- | * Quand on ajoute dans notre réseau un membre correspondant au réseau FG, on recherche parmi ses relations directes dans FG s'il existe des users connus de notre propre réseau et on lui ajoute les relations si elles n' | + | * Quand on ajoute dans notre réseau un membre correspondant au réseau FG, on recherche parmi ses relations directes dans FG s'il existe des "users" |
- | * Exemple : Hercule est connu du réseau FG et se déclare comme membre de notre réseau ('' | + | * Exemple : Hercule est connu du réseau FG et se déclare comme membre de notre réseau ('' |
- | - On récupère du réseau FG son nom. | + | |
- On récupère sa famille (Zeus, Alcmène) et ses amis (Admète) | - On récupère sa famille (Zeus, Alcmène) et ses amis (Admète) | ||
- | - Seuls Zeus et Admete sont connus de notre réseau; la relation de Hercule vers Zeus est ajoutée avec une force de 2 (lien de famille), celle entre Hercule et Admete est ajoutée avec une force de 3 (lien d' | + | - Seuls Zeus et Admete sont connus de notre réseau; la relation de Hercule vers Zeus est ajoutée avec une force HIGH (lien de famille), celle entre Hercule et Admete est ajoutée avec une force MEDIUM |
===== Réutilisation par observation ===== | ===== Réutilisation par observation ===== | ||
Line 305: | Line 134: | ||
Ce n'est pas grave. Si vous avez compris les principes du Patron, vous pourrez les retrouver dans d' | Ce n'est pas grave. Si vous avez compris les principes du Patron, vous pourrez les retrouver dans d' | ||
- | ===== Rendu ===== | ||
- | - un diagramme UML qui visualise uniquement les classes/ | ||
- | * le diagramme vise à visualiser l' | ||
- | * **les différents patterns apparaissent sous forme d' | ||
- | * le diagramme peut être obtenu par reverse-engineering, | ||
- | - les codes sources des classes que vous avez créées ou modifiées exclusivement. | ||
- | |||
- | La date du rendu au plus tard : mardi 4 décembre à 8h (S3T) | ||
- | |||
- | La date du rendu au plus tard : vendredi 14 décembre à 19h (S3A) | ||
- | |||
- | |||
- | Sur [[http:// | ||
2019_2020/s3/concprogobjet/td/tdreutilisation.1572899783.txt.gz · Last modified: 2019/11/04 20:36 by blay