User Tools

Site Tools


2015_2016:s3:concprogobjet:td:td4

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
2015_2016:s3:concprogobjet:td:td4 [2015/10/26 08:59]
blay [TD Réutilisation]
2015_2016:s3:concprogobjet:td:td4 [2015/10/27 10:00] (current)
blay [Ressources]
Line 8: Line 8:
 A la fin du TD, se trouvent des ressources (codes entre autre) indispensables à la réalisation de ce TD. A la fin du TD, se trouvent des ressources (codes entre autre) indispensables à la réalisation de ce TD.
  
-**Une classe de Tests vous ai donnée avec les interfaces associées que vous devez implémenter pour passer le test.**+
  
 <note important>​Ce TD est un peu moins guidé que les précédents. Peu à peu vous devez pouvoir lire un énoncé et construire seul votre solution. <note important>​Ce TD est un peu moins guidé que les précédents. Peu à peu vous devez pouvoir lire un énoncé et construire seul votre solution.
Line 14: Line 14:
  
  
 +<box round rgb(135,​206,​250) rgb(0,​191,​255) 75%|**Votre défi** > 
  
-===== Réutilisation par composition ​et héritage =====+Faire passer le test avec un code propre ​et sans le modifier si ce n'est la référence à la classe "//​ReseauSocial//"​ qui implémente //​ReseauSocialInterface//​.
  
-<note tip>Un réseau social peut être vu comme un graphe. +{{:​2015_2016:​s3:​concprogobjet:​td:​pourlestests.zip|Archive contenant la classe de test et les interfaces ​à implémenter pour faire passer les tests.
-Rechercher des relations entre ses membres, revient ​à parcourir le graphe.</​note>​+
  
 +Vous n'avez que deux interfaces à implémenter : ''​ReseauSocialInterface''​ et ''​MembreInterface''​. ​
 +Ce qui suit est là pour vous aider. }}
 +</​box>​
  
-  - Construire un réseau social :  +La figure suivante visualise les interfaces ​et classes fournies pour les tests.
-       * un membre a un nom et un age 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! +
-       * 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. +
-       * une relation est soit familiale soit professionnelle soit amicale +
-       * On veut savoir toutes les personnes qui font partie de notre cercle familial, professionnel ou amical : b est dans le cercle familiale de a s'il existe un chemin de relations familiales entre a et b. +
-       * On veut pouvoir calculer la distance entre 2 personnes, en choisissant la plus courte distance :  +
-             * a --1-> b --5-> c et a --2-> d --5-> c : la distance est de 6 entre a et c;+
  
-===== Réutilisation par adaptation =====+{{ :​2015_2016:​s3:​concprogobjet:​td:​reseausocialcore.jpg?​direct&​300 |}}
  
-  - On veut intégrer dans notre réseau social, des membres du reseau facebookGhost. On nous donne les classes suivantes que nous ne pouvons pas modifier. +===== Réutilisation par composition ​et héritage =====
-        * on veut ajouter dans notre reseau des membres qui correspondent à des "​users"​ du reseau ​ facebookGhost;​ 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; +
-        * on veut ajouter des relations qui correspondent soit à des relations familiales, soit à des relations d'​amitiés dans le réseau facebook. Par défaut, une relation de famille correspond à une relation de force 2 et d'​amitié 3.  +
-        * quand on ajoute un membre correspondant au reseau facebookGhost,​ on recherche parmi ses relations directes dans facebookGhost s'il existe des users connus de notre propre réseau et on lui ajoute les relations si elles n'​existaient pas :  +
-             * 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) +
-                  * 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.+
  
-Prevoir de leur donner un programme principal avec ce réseau... 
  
  
-Au début du reseau FG 
-new user ("​Zeus","​le dieu ...",​Integer.max) 
-new user ("​Alcmène",​ .., ) 
-new user ("​Hercule",​ .., ) 
-new user ("​Admète",​ .., ) 
-new user ("​Hera",​ .., ) 
-new friend("​Hercule","​Admète"​) 
-new Family("​Hercule","​Zeus"​) 
-new Family("​Hercule","​Alcmène"​) 
-new Family("​Zeus","​Hera"​) 
-===== Réutilisation par observation ===== 
  
-Chaque fois qu'une nouvelle relation ​est ajoutée dans FGon veut vérifier si les "​users"​ mis en relation ​existent dans notre réseau et si c'est le cas créer les relations correspondantes dans notre réseau+  - Construire un réseau social :  
 +       * un membre a un nom et un age et une description;​ 
 +       * Un membre a est en relation avec membre b avec une force entre 1 et 5 : 5 faible1 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 -> -> 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 : ''​membresEnRelationAuRang(MembreInterface de, int rang)''​)  
 +       * On veut pouvoir calculer la distance entre 2 personnes, en choisissant la plus courte distance :  
 +             * a --1-> b --5-> c et a --2-> d --5-> c : la distance est de 6 entre a et c;(Méthode : ''​distance(MembreInterface de, MembreInterface a)''​) ​
  
-Plus complexe : Chaque fois qu'un nouveau user est ajouter dans FGon veut vérifier s'il existe déjà dans notre réseau et si c'est le cas le "connecter" ​à notre réseau..+D'autres méthodes doivent être définies, il suffit de lire l'interface ​"Reseau Social".
  
  
 +<note tip>Un réseau social peut être vu comme un graphe.
 +Rechercher des relations entre ses membres, revient à parcourir le graphe.
  
 +Pour vous aider (et c'est aussi obligatoire ;-) ) vous utiliserez les classes suivantes,​{{:​2015_2016:​s3:​concprogobjet:​td:​pourlesgraphes.zip| classes pour traiter des graphes.}}, en particulier 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. ​
 +{{ :​2015_2016:​s3:​concprogobjet:​td:​graphessimple.jpg?​direct&​300 |}}
  
-===== Ressources ===== 
  
 +</​note>​
  
-Pour cela on vous donne les classes suivantes : +{{ :2015_2016:​s3:​concprogobjet:​td:​graphex.jpg?link&300 |}} 
-     - Le package ​{{ :2014_2015:​s3:​concprogobjet:​td:​graphex.zip?direct&300 |grapheX}} duquel ont été extraits les classes utiles à notre problème; ce package a été récupéré sur le web à l'"​X"​ +===== Réutilisation ​par adaptation =====
-     - Le package {{:​2014_2015:​s3:​concprogobjet:​td:​parcours.zip|parcours}} a été créé pour vous simplifier la tâche et vous permettre de gérer des graphes comportant des sommets reliés ​par plusieurs arcs. +
- +
-Les 2 diagrammes suivants ont été obtenus par reverse Engineering:​ +
  
 +  - 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 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;
 +        * 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. 
 +        * 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 : 
 +             * Hercule est connu du réseau FG et se déclare comme membre de notre réseau (''​addMembre("​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, celle entre Hercule et Admete est ajoutée avec une force de 3; nous mettons également à jour les relations inverses.
  
 +===== Réutilisation par observation =====
  
 +Chaque fois qu'une nouvelle relation est ajoutée dans FG, on 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. ​
  
 +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.
  
-Reprendre le TD de 'lan dernier, il est bon mais l'appliquer sur des reseaux sociaux... a priori je l'​avais posé en controle donc je dois l'​avoir en version très simple.+<​html>​ 
 +<!-- Plus complexe : Chaque fois qu'un nouveau user est ajouter dans FGon veut vérifier s'il existe déjà dans notre réseau et si c'est le cas le "​connecter"​ à notre réseau...  ​--!>​ 
 +</​html>​
  
  
-demande pour des graphes valués... 
  
-peut etre voir à refaire l'​évaluation des couts vue en cours pour avoir différentes manières de calculer un cout ou mieux garder cette idée pour un DP visiteur.... 
  
  
  
-https://​mbf-iut.i3s.unice.fr/​doku.php?​id=2014_2015:​s3:​concprogobjet:​td:​td5 
2015_2016/s3/concprogobjet/td/td4.1445846394.txt.gz · Last modified: 2015/10/26 08:59 by blay