User Tools

Site Tools


2014_2015:s3:concprogobjet:td:td1

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
2014_2015:s3:concprogobjet:td:td1 [2014/08/27 15:34]
blay [Analyse : 15mn]
2014_2015:s3:concprogobjet:td:td1 [2014/09/15 11:45] (current)
blay [Un projet java (5mn)]
Line 42: Line 42:
 ==== Analyse : 15mn  ==== ==== Analyse : 15mn  ====
  
-  - Sous Visual Paradigme, commencer par créer un "​modèle"​ : //​bus-analyse//​. Pour cela, vous pouvez par exemple, ouvrir le volet "​Explorateur de modèles"​ //​(Apercu->​Volet)//​ qui est très utile. ​ Cette approche nous permettra de clairement identifier les éléments produits par l'​analyse et ceux produits par la conception. ​({{:​2014_2015:​s3:​concprogobjet:​td:​vueexplorateurmodeles.png?​linkonly|Voir ici pour une visualisation ​partielle de la vue "​Explorateur de modèles"​ à la fin de ce TD }})+  - Sous Visual Paradigme, commencer par créer un "​modèle"​ : //​bus-analyse//​. Pour cela, vous pouvez par exemple, ouvrir le volet "​Explorateur de modèles"​ //​(Apercu->​Volet)//​ qui est très utile. ​ Cette approche nous permettra de clairement identifier les éléments produits par l'​analyse et ceux produits par la conception. ​ 
 +    ​{{:​2014_2015:​s3:​concprogobjet:​td:​vueexplorateurmodeles.png?​direct&​200|Visualisation ​partielle de la vue "​Explorateur de modèles"​ à la fin de ce TD }}
   - Définissez un modèle à classes de niveau Analyse.   - Définissez un modèle à classes de niveau Analyse.
-  - Définissez,​ par cas d'​utilisation,​ un diagramme de séquence élémentaire mettant en jeu les objets de votre système **et compléter** votre diagramme de classes au fur et à mesure. Pour cela utilisez ​largement ​les messages "​Call"​ qui vous permettent d'​identifier les méthodes d'​appels et mettent automatiquement à jour vos diagrammes de classes {{:​2014_2015:​s3:​concprogobjet:​td:​creationoperation.png?​nolink&200|}}+  - Définissez,​ par cas d'​utilisation,​ un diagramme de séquence élémentaire mettant en jeu les objets de votre système **et compléter** votre diagramme de classes au fur et à mesure. Pour cela utilisez, évidemment des lignes de vie qui font référence à des classes et les messages "​Call"​ qui vous permettent d'​identifier les méthodes d'​appels et mettent automatiquement à jour vos diagrammes de classes {{:​2014_2015:​s3:​concprogobjet:​td:​creationoperation.png?​direct&200|}}
  
  
 <note tip> <note tip>
-  * Avez-vous vérifié que le scénario initial est bien couvert par votre modélisation?​ Même pour la destruction des messages postésil y a plus d'un temps donné?+  * Avez-vous vérifié que le scénario initial est bien couvert par votre modélisation?​ Même pour la destruction des messages postés il y a "​longtemps"​?
   * Un bus délivre un ou plusieurs messages? Quel est le problème avec l'​unique scénario qui est donné?   * Un bus délivre un ou plusieurs messages? Quel est le problème avec l'​unique scénario qui est donné?
   * Votre modélisation tient-elle compte de l'​absence de messages en attente?   * Votre modélisation tient-elle compte de l'​absence de messages en attente?
Line 54: Line 55:
 ==== Conception : 15mn  ==== ==== Conception : 15mn  ====
  
-   - **Dérivation du diagramme** : Pour bien différencier votre modèle d'​analyse du modèle de conception, **dériver** votre diagramme. Pour cela vous vous placez dans le diagramme de classes, par un clique droit, vous sélectionnez "//​utilities//"​ tout en bas -> //Transitez vers un nouveau diagramme// {{ :​2014_2015:​s3:​concprogobjet:​td:​transiterdiagrammeanalyseconception.png?​nolink&200 |}} puis créez un modèle //​Bus-Conception// ​ pour bien distinguer vos éléments. Attention à présent de bien travailler dans le modèle en conception {{:​2014_2015:​s3:​concprogobjet:​td:​deuxmodeles.png?​nolink&200|}}+   - **Dérivation du diagramme** : Pour bien différencier votre modèle d'​analyse du modèle de conception, **dériver** votre diagramme. Pour cela vous vous placez dans le diagramme de classes, par un clique droit, vous sélectionnez "//​utilities//"​ tout en bas -> //Transitez vers un nouveau diagramme// {{ :​2014_2015:​s3:​concprogobjet:​td:​transiterdiagrammeanalyseconception.png?​direct&200 |}} puis créez un modèle //​Bus-Conception// ​ pour bien distinguer vos éléments. Attention à présent de bien travailler dans le modèle en conception {{:​2014_2015:​s3:​concprogobjet:​td:​deuxmodeles.png?​direct&200|}}
   - Compléter votre modèle à classes pour préparer l'​implémentation :    - Compléter votre modèle à classes pour préparer l'​implémentation : 
         * Réfléchir au sens des relations         * Réfléchir au sens des relations
Line 67: Line 68:
  
 ==== Un projet java (5mn)  ==== ==== Un projet java (5mn)  ====
 +
 +<note important>​On travaille avec Eclipse Luna qui se trouve sur le disque local.</​note>​
 +
    - Créer un projet java "//​busV1//" ​    - Créer un projet java "//​busV1//" ​
    - Placez vous dans la perspective "​Java"​ (//Window -> Open Perspective//​)    - Placez vous dans la perspective "​Java"​ (//Window -> Open Perspective//​)
    - Créer la classe "//​MonScenario//"​    - Créer la classe "//​MonScenario//"​
          * En sélectionnant le projet, //clique droit, new class//          * En sélectionnant le projet, //clique droit, new class//
-         * Bien sélectionner le  //main// et les commentaires sur la classe {{:​2014_2015:​s3:​concprogobjet:​td:​monscenario.png?​nolink&​200|MonScenario}}+         * Bien sélectionner le  //main// et les commentaires sur la classe {{:​2014_2015:​s3:​concprogobjet:​td:​monscenario.png?​direct&​200|MonScenario}}
  
 ==== Un projet sous le gestionnaire de version (10mn) ==== ==== Un projet sous le gestionnaire de version (10mn) ====
 +
 +<note important>​Pour cette séance, vous travaillez dans le répertoire personnel de l'un de vous, c-à-dire
 +  * Vous allez sur la forge,
 +  * Vous vous connectez
 +  * Vous allez dans configuration et là vous voyez le nom du dépôt
 +  * C'est ce nom que vous donnez
 +Pour la suite, nous verrons pour travailler dans un répertoire accessible à plusieurs étudiants et aux professeurs.</​note>​
 +
 A partir de maintenant vous devez prendre l'​habitude de travailler avec un gestionnaire de version, nous allons en particulier le faire depuis Eclipse. A partir de maintenant vous devez prendre l'​habitude de travailler avec un gestionnaire de version, nous allons en particulier le faire depuis Eclipse.
  
-  - Pour "​partager"​ votre travail dans SVN, sélectionner le projet (clique droit) et choisir //Team > Share Project//​((Basé sur http://​www.ibm.com/​developerworks/​opensource/​library/​os-ecl-subversion/​));​ sélectionnez //SVN// puis //Next//. Créer une nouvelle localisation puis saisir l'​adresse du dépôt SVN par exemple ''​https://​svn-iutinfo.unice.fr/​svn/​users-XXX''​ {{:​2014_2015:​s3:​concprogobjet:​td:​shareproject.png?​noLink&200|}}  +  - Pour "​partager"​ votre travail dans SVN, sélectionner le projet (clique droit) et choisir //Team > Share Project//​((Basé sur http://​www.ibm.com/​developerworks/​opensource/​library/​os-ecl-subversion/​));​ sélectionnez //SVN// puis //Next//. Créer une nouvelle localisation puis saisir l'​adresse du dépôt SVN par exemple ''​https://​svn-iutinfo.unice.fr/​svn/​users-XXX'' ​où il faut remplacer users-XXX ​ par l'​identifiant du dépôt ​{{ :​2014_2015:​s3:​concprogobjet:​td:​shareproject.png?​direct&200 |}}  
-  - Dans la nouvelle perspective,​ sélectionner "​MonScenario.java",​ clique droit puis commiter {{ :​2014_2015:​s3:​concprogobjet:​td:​commitinitial.png?​nolink&200 |}}+  - Dans la nouvelle perspective,​ sélectionner "​MonScenario.java",​ clique droit puis commiter {{ :​2014_2015:​s3:​concprogobjet:​td:​commitinitial.png?​direct&200 |}}
   - Vérifier que votre fichier est bien, à présent, accessible depuis la forge, pour cela connectez vous sur la forge si ce n'est pas encore fait.   - Vérifier que votre fichier est bien, à présent, accessible depuis la forge, pour cela connectez vous sur la forge si ce n'est pas encore fait.
   - Evidemment, l'​autre étudiant du binôme peut se connecter au même répertoire et faire un "​checkout"​ de cet espace.   - Evidemment, l'​autre étudiant du binôme peut se connecter au même répertoire et faire un "​checkout"​ de cet espace.
Line 87: Line 99:
 Aujourd'​hui nous faisons le choix de générer les codes puis de travailler ces derniers dans chercher, au moins pour l'​instant,​ à maintenir les modèles en cohérence. Aujourd'​hui nous faisons le choix de générer les codes puis de travailler ces derniers dans chercher, au moins pour l'​instant,​ à maintenir les modèles en cohérence.
  
-  - Générer les codes {{ :​2014_2015:​s3:​concprogobjet:​td:​generateurimmediat.png?​nolink&200 |}} +  - Générer les codes {{ :​2014_2015:​s3:​concprogobjet:​td:​generateurimmediat.png?​direct&200 |}}  
-  - Sélectionner votre diagramme de classe en conception, vérifier ​que vous avez bien toutes les classes prévues, préciser ​si vous voulez travailler avec des vecteurs ou autres (Réfléchissez!!),​ et **préciser bien comme répertoire pour la génération votre répertoire src sous Eclipse** {{ :​2014_2015:​s3:​concprogobjet:​td:​generationcodejava.png?​nolink&200 |}}+      - Sélectionner votre diagramme de classe en conception
 +      - Vérifier ​que vous avez bien toutes les classes prévues;  
 +      - Préciser ​si vous voulez travailler avec des vecteurs ou autres (Réfléchissez!!), ​**et** **préciser bien comme répertoire pour la génération votre répertoire src sous Eclipse** {{ :​2014_2015:​s3:​concprogobjet:​td:​generationcodejava.png?​direct&200 |}}
   - Retourner sous Eclipse, sous la perspective Java, et faîtes un //refresh// (clique droit sur le projet). Si votre répertoire est mal organisé (nouveau package par exemple, déplacer simplement les codes comme vous le voulez, par glisser/​coller.)   - Retourner sous Eclipse, sous la perspective Java, et faîtes un //refresh// (clique droit sur le projet). Si votre répertoire est mal organisé (nouveau package par exemple, déplacer simplement les codes comme vous le voulez, par glisser/​coller.)
   - Corriger vos codes pour qu'ils soient "​compilables"​ en utilisant simplement les petites boules jaunes sur le côté, mais **ne passez pas à l'​implémentation**,​ nous ferons cela un peu plus tard.   - Corriger vos codes pour qu'ils soient "​compilables"​ en utilisant simplement les petites boules jaunes sur le côté, mais **ne passez pas à l'​implémentation**,​ nous ferons cela un peu plus tard.
Line 116: Line 130:
  
     - Ajoutez un nouveau dossier de sources nommé //tests// au même niveau d’arborescence que src     - Ajoutez un nouveau dossier de sources nommé //tests// au même niveau d’arborescence que src
-         * sur le projet, faire un //new source-folder//,​ et l'​appeler //tests// {{ :​2014_2015:​s3:​concprogobjet:​td:​newsourcefolder.png?​nolink&200 |}}  +         * sur le projet, faire un //new source-folder//,​ et l'​appeler //tests// {{ :​2014_2015:​s3:​concprogobjet:​td:​newsourcefolder.png?​direct&200 |}}  
-    - Dans le menu contextuel de, par exemple la classe //​Message//,​ cliquez sur //New – JUnit Test Case//​((Cette partie du TD reprend en partie le tutoriel JUNIT : http://​www.junit.fr/​2011/​11/​20/​tutoriel-eclipse-junit-mon-premier-test-automatique/​)). {{ :​2014_2015:​s3:​concprogobjet:​td:​junittestcase.png?​nolink&200 |}} Dans le panneau qui s'​affiche {{ :​2014_2015:​s3:​concprogobjet:​td:​messagetest.png?​nolink&200 |}}+    - Dans le menu contextuel de, par exemple la classe //​Message//,​ cliquez sur //New – JUnit Test Case//​((Cette partie du TD reprend en partie le tutoriel JUNIT : http://​www.junit.fr/​2011/​11/​20/​tutoriel-eclipse-junit-mon-premier-test-automatique/​)). {{ :​2014_2015:​s3:​concprogobjet:​td:​junittestcase.png?​direct&200 |}} Dans le panneau qui s'​affiche {{ :​2014_2015:​s3:​concprogobjet:​td:​messagetest.png?​direct&200 |}}
           * Sélectionnez le bouton radio //New JUnit 4 test//.           * Sélectionnez le bouton radio //New JUnit 4 test//.
           * Changez le dossier Source folder pour //tests//.           * Changez le dossier Source folder pour //tests//.
Line 128: Line 142:
     - Dans le menu contextuel, cliquez sur //Run As – JUnit test//.     - Dans le menu contextuel, cliquez sur //Run As – JUnit test//.
 Enfin, le premier rapport de tests s’affiche !  Enfin, le premier rapport de tests s’affiche ! 
-{{ :​2014_2015:​s3:​concprogobjet:​td:​testok.png?​nolink&200 |}}+{{ :​2014_2015:​s3:​concprogobjet:​td:​testok.png?​direct&200 |}}
 ====  Développement (20mn) ​ ==== ====  Développement (20mn) ​ ====
   - Terminez la mise en oeuvre du bus en complétant les tests au fur et à mesure et en n'​oubliant pas de commiter.   - Terminez la mise en oeuvre du bus en complétant les tests au fur et à mesure et en n'​oubliant pas de commiter.
Line 136: Line 150:
  
  
-===== Suites prévues pour ce projet =====  
- 
-  * //​Objectifs ​ : refactoring,​ incrémentalité et agilité// : Le bus est maintenant composée de boîtes à messages :  
-Le bus gère des "​boîtes à message"​. Plusieurs producteurs peuvent émettre des messages vers une même boîte, plusieurs consommateurs peuvent lire les messages dans une boite. ​ 
-Dans le scénario de base, la voiture A a choisi d'​émettre son message vers la queue "Etat Des Routes"​. Les consommateurs déclarent les boîtes qui les intéressent. Ils peuvent lire les messages qui les intéressent sur une boîte donnée ou obtenir tous les messages qui les intéressent indépendamment des boîtes. ​ Plusieurs types de messages? Qui est responsable de créer les messages? Qui connait les boîtes de messages ?  
-  * //Objectifs : Apprentissage d'une famille courante de patterns (fabrique, builder) mais uniquement par l'​usage,​ la formalisation se fera en S4//: Les messages pouvant être de différentes natures, un bus devient "​porteur"​ d'une fabrique à messages. 
-  * //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'​accéder "​simplement"​ à un bus pour émettre, lire et effacer des messages uniquement. 
-  * //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,​ pour d'​autres non :  ​ 
-  * Il est assez surprenant d'​effacer les messages au bout d'un certain temps alors que certains consommateurs ne les ont pas lu et de redonner le même message au même consommateur qui l'a déjà lu. Que feriez-vous pour : a) ne pas redonner le même message au même consommateur;​ b) donner les messages aux consommateurs qui ne les ont pas encore lu? quel écueil( le bus ne connait pas ses consommateurs!) ? quelle solution envisageriez-vous (un consommateur se déclare, une file d'​attente par consommateur,​ et le message est détuit lorsque plus aucune file n'y fait référence)? ​ 
-- Il sera possible de définir différentes formes de souscription. 
- 
-Nous n'​aborderons,​ hélas, pas les aspects distribués. 
  
 ==== Pour aller plus loin ==== ==== Pour aller plus loin ====
2014_2015/s3/concprogobjet/td/td1.1409146463.txt.gz · Last modified: 2014/08/27 15:34 by blay