User Tools

Site Tools


2019_2020:s3:concprogobjet:td:tdreutilisation

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
2019_2020:s3:concprogobjet:td:tdreutilisation [2019/11/04 22:43]
blay [Réutilisation par composition et héritage]
2019_2020:s3:concprogobjet:td:tdreutilisation [2019/11/08 17:20]
blay [Réutilisation par composition et héritage]
Line 1: Line 1:
  
-====== TD Réutilisation ======+====== TD Introduction aux "​Design Patterns"​ et Réutilisation ======
  
 Objectifs :  Objectifs : 
Line 45: Line 45:
 ===== Réutilisation par composition et héritage ===== ===== Réutilisation par composition et héritage =====
  
 +<note tip>Un réseau social peut être vu comme un graphe.
 +  * //​Rechercher des relations entre ses membres// revient à parcourir le graphe.
 +  *  Utilisez la classe ''​GrapheSimple''​((Ces codes sont basés sur le package GrapheX fournis par l'"​X"​ dans ses cours, pour en savoir plus (page évolutive):​ https://​www.enseignement.polytechnique.fr/​informatique/​INF431/​X06-2007-2008/​TD/​INF431-td_6-1.php )).
 +</​note>​
 +
 +<note warning>​Personne n'​écrit la moindre ligne de code sans avoir réfléchi sur papier au modèle UML correspondant à l'​implémentation qu'il s'​apprête à réaliser. Aucune aide ne sera apportée si ce modèle ne peut pas être montré. </​note>​
 +
 +
 + 
   - Vous devez construire un réseau social dont les spécifications sont les suivantes (cf. Interfaces //​SocialNetworkInterface//​ et //​MemberInterface//​): ​   - Vous devez construire un réseau social dont les spécifications sont les suivantes (cf. Interfaces //​SocialNetworkInterface//​ et //​MemberInterface//​): ​
-       * un membre ​//a// un nom, une localisation (String) et une introduction (String);  +       * 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). Plus la relation est forte plus on considère que la distance est courte.+       * un membre a un nom, une localisation (String) et une introduction (String);  
 +       * 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 //​Strength//​ qui représente cette force vous est donnée
        * //a// peut se considérer en relation avec //b// à la force STRONG et //b// ne pas se considérer en relation avec //a//!        * //a// peut se considérer en relation avec //b// à la force STRONG et //b// ne pas se considérer en relation avec //a//!
        * 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 : 
Line 56: Line 66:
                * Méthode : ''​relateToRank(MemberInterface member, int rank)''​                * Méthode : ''​relateToRank(MemberInterface member, int rank)''​
        * 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 :  ​de 1 entre a et b ; de 2 entre a et d; 
-                 * elle est de 2 entre a et d; +                 * la distance est de entre a et c (1 + qui est plus court que 2+)
-                 * la distance est de entre a et c (1 + qui est plus court que 2+)+
              * Méthode : ''​distance(MemberInterface de, MemberInterface a)''​) ​              * Méthode : ''​distance(MemberInterface de, MemberInterface a)''​) ​
 +       * D'​autres méthodes doivent être définies, il suffit de lire l'​interface "​SocialNetworkInterface"​.
  
-D'​autres méthodes doivent être définies, il suffit de lire l'​interface "​SocialNetworkInterface"​. 
  
  
-<note tip>Un réseau social peut être vu comme un graphe. +<note warning>​Cette partie du TD doit être terminée lors de la 1e séance. Si ce n'est pas le cas, vous devez travailler en dehors des heures du TD.Elle correspond aux 2 premières séries de tests.</​note>​
-//​Rechercher des relations entre ses membres// revient à parcourir le graphe. +
- +
-Pour vous aider (et c'est aussi obligatoire ;-) ) vous utiliserez **la classe ''​GrapheSimple''​ et la classe ''​ParcoursSimple''​** pour calculer des chemins ((Ces codes sont basés sur le package GrapheX fournis par l'"​X"​ dans ses cours, pour en savoir plus (page évolutive):​ https://​www.enseignement.polytechnique.fr/​informatique/​INF431/​X06-2007-2008/​TD/​INF431-td_6-1.php )).  +
- +
-La figure suivante visualise une part de ces codes.  +
-{{ :​2018_2019:​s3:​concprogobjet:​td:​existant.gif?​direct&​300 |}} +
- +
-Celle-ci les interfaces à implémenter +
-{{ :​2018_2019:​s3:​concprogobjet:​td:​reseau.gif?​direct&​300 |}} +
- +
-</​note>​ +
- +
-<note warning>​Cette partie du TD doit être terminée lors de la 1e séance. Si ce n'est pas le cas, vous devez travailler en dehors des heures du TD.</​note>​+
 ===== Réutilisation par adaptation ===== ===== Réutilisation par adaptation =====
  
   - On veut intégrer dans notre réseau social, des membres du réseau ''​facebookGhost''​. Lisez bien toute la suite avant de commencer.   - On veut intégrer dans notre réseau social, des membres du réseau ''​facebookGhost''​. Lisez bien toute la suite avant de commencer.
-        * Les classes du package //​facebookGhost//​ s'​inspirent très fortement de l'​interface fournie par Facebook. En cela, elles se comportent comme un "​Mock"​ simplifié qui pourrait être remplacé par le véritable ​reseau ​Facebook à terme((Pour cela, il faudrait quand même mettre à jour ce code avec les dernières évolutions de l'​interface et le compléter... donc il reste "un peu" de travail)). ). +        * Les classes du package //​facebookGhost//​ s'​inspirent très fortement de l'​interface fournie par Facebook. En cela, elles se comportent comme un "​Mock"​ simplifié qui pourrait être remplacé par le véritable ​réseau ​Facebook à terme((Pour cela, il faudrait quand même mettre à jour ce code avec les dernières évolutions de l'​interface et le compléter... donc il reste "un peu" de travail)). ). 
-        * On veut ajouter dans notre réseau des membres qui correspondent à des "​Users"​ du reseau ​ ​facebookGhost (FG). Pour cela, il suffit de créer le membre en déclarant qu'il existe dans un autre réseau((Comme vous le feriez en vous demandant à vous connecter par votre compte facebook par exemple));  +        * On veut ajouter dans notre réseau des membres qui correspondent à des "​Users"​ du réseau ​ ​facebookGhost (FG). Pour cela, il suffit de créer le membre en déclarant qu'il existe dans un autre réseau((Comme vous le feriez en vous demandant à vous connecter par votre compte facebook par exemple));  
-             - le **nom** du "​User"​ dans le reseau facebookGhost (//name//) devient le nom du membre dans notre réseau (//nom//)  +             - le **nom** du "​User"​ dans le reseau facebookGhost (//name//) devient le nom du membre dans notre réseau (//nom//) 
-             - on garde la référence sur le "​User"​ pour avoir toujours une **description** à jour qui correspond au //profil//. Ainsi les membres de notre réseau qui sont associés à un User de FG ne contiennent pas de //description//. La demande de description ​d'un tel membre dans notre réseau correspond à retourner son profil défini dans le réseau FG ((En résumé, si vous modifiez votre profil dans facebook, vous n'avez pas besoin de le mettre à jour notre réseau)) ​ ;+             - l'​accès à son introduction ou à sa localisation correspondent respectivement à son profil et à sa Home dans FG. Ces dernières informations peuvent évoluer dans FG. Nous voulons donc qu'​elle soit toujours à jour dans notre réseau. Que faire? En tous cas, IL NE FAUT PAS simplement recopier ces valeurs dans le membre de notre réseau. ​ 
 +             - on garde la référence sur le "​User"​ pour avoir toujours une **introduction** à jour qui correspond au //profil//. Ainsi les membres de notre réseau qui sont associés à un User de FG ne contiennent pas de //introduction//. La demande de introduction ​d'un tel membre dans notre réseau correspond à retourner son profil défini dans le réseau FG ((En résumé, si vous modifiez votre profil dans facebook, vous n'avez pas besoin de le mettre à jour notre réseau)) ​ ;
              - on "​récupère"​ dans notre réseau, les **relations** définies dans le réseau FG lorsque              - on "​récupère"​ dans notre réseau, les **relations** définies dans le réseau FG lorsque
                        - 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;
2019_2020/s3/concprogobjet/td/tdreutilisation.txt · Last modified: 2019/11/13 11:08 by blay