User Tools

Site Tools


2017_2018:s3:concprogobjet:td:td6

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
2017_2018:s3:concprogobjet:td:td6 [2017/11/12 09:08]
blay [Présentation générale]
2017_2018:s3:concprogobjet:td:td6 [2017/11/13 08:30] (current)
blay [Présentation générale]
Line 20: Line 20:
 <box round rgb(135,​206,​250) rgb(0,​191,​255) 75%|**Votre défi** >  <box round rgb(135,​206,​250) rgb(0,​191,​255) 75%|**Votre défi** > 
  
-Faire passer ​le test avec un code propre et sans le modifier si ce n'est la référence à la classe "//​SocialNetwork//"​ qui implémente //​SocialNetworkInterface//​.+Faire passer ​les tests sans les modifier si ce n'est la référence à la classe "//​SocialNetwork//"​ qui implémente //​SocialNetworkInterface// ​et en développant un code propre.
  
-Voici les archives : //(Tips : Prenez chaque archive, déposer la sous Eclipse, ​dezippé, refresh)//+Voici les archives : //((Tips : Prenez chaque archive, déposer la sous Eclipse, ​dezipper, refresh))//
     - les {{:​2016_2017:​s3:​concprogobjet:​td:​graphex.zip|classes de base de gestion des graphes}} ​     - les {{:​2016_2017:​s3:​concprogobjet:​td:​graphex.zip|classes de base de gestion des graphes}} ​
-    - {{:​2016_2017:​s3:​concprogobjet:​td:​graphesimple.zip| les classes de gestion des graphes simples }},  +    - {{:​2016_2017:​s3:​concprogobjet:​td:​graphesimple.zip| les classes de gestion des graphes simples }}(Regardez bien **ces classes** et construisez rapidement à la main le modèle de classe correspondant),  
-    - {{:​2016_2017:​s3:​concprogobjet:​td:​reseausocialtests.zip|contenant la classe de test}} +    - une {{:​2016_2017:​s3:​concprogobjet:​td:​graphesimpletest.zip|classe de tests sur les graphes.}} (pensez ​à la mettre dans un source folder dédié aux tests; Fixer le setup en ajoutant JUnit; exécutez ​les tests)
-    - {{:​2016_2017:​s3:​concprogobjet:​td:​reseausocial.zip|les interfaces ​à implémenter pour faire passer ​les tests, }}+
     - {{:​2016_2017:​s3:​concprogobjet:​td:​facebookghost.zip|les classes définissant le réseau Facebookghost,​}}     - {{:​2016_2017:​s3:​concprogobjet:​td:​facebookghost.zip|les classes définissant le réseau Facebookghost,​}}
-    - et une {{:​2016_2017:​s3:​concprogobjet:​td:​graphesimpletest.zip|classe de tests sur les graphes.}}+    - {{:​2016_2017:​s3:​concprogobjet:​td:​reseausocial.zip|les interfaces à implémenter pour faire passer les tests, }} 
 +    - {{:​2016_2017:​s3:​concprogobjet:​td:​reseausocialtests.zip|la ​classe de test}} (A bien mettre sous tests; elle ne compile pas puisque VOUS devez implémenter ​les classes manquantes). 
 + 
    
 **Vous n'avez que deux interfaces à implémenter : ''​SocialNetworkInterface''​ et ''​MemberInterface''​. ​ **Vous n'avez que deux interfaces à implémenter : ''​SocialNetworkInterface''​ et ''​MemberInterface''​. ​
Line 42: Line 44:
 ===== Réutilisation par composition et héritage ===== ===== Réutilisation par composition et héritage =====
  
-  - Construire ​un réseau social :  +  - Vous devez construire ​un réseau social ​dont les spécifications sont les suivantes (cf. Interface //​SocialNetworkInterface//​):  
-       * un membre a un nom, un age et une description;​+       * un membre a un nom, un âge et une description;​
        * Un membre a est en relation avec membre b avec une force entre 1 et 5 : 5 faible, 1 très forte. 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 1 et 5 : 5 faible, 1 très forte. a peut se considérer en relation avec b à la force 1 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 : exemple : a -> b -> c -> a : a est en relation avec b au rang 1; a est en relation avec c au rang 2; c est relation avec a au rang 1; etc. (Méthode : ''​relateToRank(MemberInterface member, int rank)''​) ​        * On veut pouvoir savoir quels sont les membres en relation avec un membre au rang X : exemple : a -> b -> c -> a : a est en relation avec b au rang 1; a est en relation avec c au rang 2; c est relation avec a au rang 1; etc. (Méthode : ''​relateToRank(MemberInterface member, int rank)''​) ​
Line 64: Line 66:
  
 {{ :​2015_2016:​s3:​concprogobjet:​td:​graphex.jpg?​link&​300 |}} {{ :​2015_2016:​s3:​concprogobjet:​td:​graphex.jpg?​link&​300 |}}
 +<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'' ​dont vous avez déjà récupéré un "​bouchon/​proxy" ​en récupérant ​les tests+  - 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 ajouter dans notre réseau des membres qui correspondent à des "​users"​ du reseau ​ facebookGhost (FG); le nom du "​user"​ dans le reseau facebookGhost (name) devient le nom du membre dans notre réseau (nom) et on garde la référence sur le "​User"​ pour avoir toujours une description à jour qui correspond au profil; +        * Vous avez déjà récupéré un "​bouchon/​proxy"​. En effet, ​les classes du package //​facebookGhost//​ s'​inspirent très fortement de l'​interface fournie par Facebook. En cela, elles se comportent comme un "​proxy"​ 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)). )
-        * on veut "récupérer" dans notre réseau, les relations qui correspondent soit à des relations familiales, soit à des relations d'​amitiés 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. Par défaut, une relation de famille correspond à une relation de force 2 dans notre réseau et celle d'​amitié ont une force 3.  +        * 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));  
-        quand on ajoute dans notre réseau un membre correspondant au reseau ​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'​existaient pas, exemples :  +             ​* ​le nom du "​user"​ dans le reseau facebookGhost (name) devient le nom du membre dans notre réseau (nom)  
-             ​* Hercule est connu du réseau FG et se déclare comme membre de notre réseau (''​addMember("​Hercule",​ true)''​) +             ​* ​on garde la référence sur le "​User"​ pour avoir toujours une description à jour qui correspond au profil, ainsi notre réseau ne contient pas la description du membre mais à la demande de description,​ on va la chercher dans le réseau FG ((En résumé, si vous modifiez votre profil dans facebook, vous n'avez pas besoin de de mettre à jour celle-ci dans l'​autre réseau))  ​
-                  * On récupère du réseau FG son nom. +             ​* on "récupère" dans notre réseau, les relations qui correspondent soit à des relations familiales, soit à des relations d'​amitiés 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. Par défaut, une relation de famille correspond à une relation de force 2 dans notre réseau et celle d'​amitié ont une force 3.  
-                  * On récupère sa famille (Zeus, Alcmène) et ses amis (Admète) +                 ​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'​existaient pas, exemples :  
-                  * Seuls Zeus et Admete sont connus de notre réseau; la relation de Hercule vers Zeus est ajoutée avec une force de 2, celle entre Hercule et Admete est ajoutée avec une force de 3; nous mettons également à jour les relations inverses.+       ​Exemple :  ​Hercule est connu du réseau FG et se déclare comme membre de notre réseau (''​addMember("​Hercule",​ true)''​) 
 +                    * On récupère du réseau FG son nom. 
 +                    * 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'​amitié); nous mettons également à jour les relations inverses ​avec la même force.
  
 ===== Réutilisation par observation ===== ===== Réutilisation par observation =====
  
-Chaque fois qu'une nouvelle relation est ajoutée dans FGon vérifie ​si les "​users"​ mis en relation existent dans notre réseau et si c'est le cas on crée les relations correspondantes dans notre réseau. ​+Le réseau FG évolue. De nouvelles relations sont régulièrement créées et notre propre réseau peut alors devenir obsolète si les membres impliqués font partie de notre réseau et que nous n'​enregistrons pas ces changements de relations. ​ Mais bien sûr, il est impossible de modifier les codes du réseau FG.... 
 +  
 +Heureusement,​ le réseau FG est observable. On peut donc demander à être notifiés des modifications du réseau FG!  
 +Chaque fois qu'une nouvelle relation est ajoutée dans FG on veut vérifier ​si les "​users"​ mis en relation existent dans notre réseau et si c'est le cas on crée les relations correspondantes dans notre réseau. ​
  
-Pour cela nous utilisons le fait qu'un réseau FG est observable. ​Il suffit donc de déclarer notre réseau comme Observer du réseau FG et à chaque notification d'​ajout d'une relation, de mettre à jour notre propre réseau.+Il suffit donc de déclarer notre réseau comme Observer du réseau FG et à chaque notification d'​ajout d'une relation, de mettre à jour notre propre réseau ​si c'est nécessaire.
  
 <​html>​ <​html>​
2017_2018/s3/concprogobjet/td/td6.1510474111.txt.gz · Last modified: 2017/11/12 09:08 by blay