This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
2017_2018:s3:concprogobjet:td:td6 [2017/11/12 09:02] blay [TD Réutilisation] |
2017_2018:s3:concprogobjet:td:td6 [2017/11/12 13:25] blay [Réutilisation par adaptation] |
||
---|---|---|---|
Line 22: | Line 22: | ||
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 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//. | ||
- | Voici les archives : | + | Voici les archives : //((Tips : Prenez chaque archive, déposer la sous Eclipse, dezipper, refresh))// |
- | - {{:2016_2017:s3:concprogobjet:td:reseausocialtests.zip|contenant la classe de test}} | + | - les {{:2016_2017:s3:concprogobjet:td:graphex.zip|classes de base de gestion des graphes}} |
- | - {{:2016_2017:s3:concprogobjet:td:reseausocial.zip|les interfaces à implémenter pour faire passer les tests, }} | + | - {{: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), |
+ | - 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: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,}} | ||
- | - {{:2016_2017:s3:concprogobjet:td:graphesimple.zip| les classes de gestion des graphes simples }}, les {{:2016_2017:s3:concprogobjet:td:graphex.zip|classes de base de gestion des graphes}} | + | - {{:2016_2017:s3:concprogobjet:td:reseausocial.zip|les interfaces à implémenter pour faire passer les tests, }} |
- | - et une {{:2016_2017:s3:concprogobjet:td:graphesimpletest.zip|classe de tests sur les graphes.}} | + | - {{: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 41: | 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 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! | * 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! | ||
Line 63: | 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 ===== |