User Tools

Site Tools


2014_2015:s3:concprogobjet:td:corrections:td1

This is an old revision of the document!


Eléments de Correction du TD 1 de COO

Attention, les seules “vraies” corrections sont faîtes avec votre encadreur sur votre travail. Il s'agit ici seulement d'éléments pouvant aider à mieux comprendre le TD surtout si vous n'avez pas réussi à les faire.

Voici les fichiers XML correspondant aux diagrammes Visual Paradigm : archivevp.zip

Voici les codes java correspondant : codes.zip

Comprendre le contexte de l'application : 5mn

  1. Quels sont les grands cas d'utilisation? Vous pouvez les faire simplement sur Papier.

De l'analyse à la conception du bus logiciel

Analyse : 15mn

Conception : 15mn

Mise en oeuvre

Un projet java (5mn)

La classe MonScenario à la fin du projet :

package busPk;
 
import java.util.ArrayList;
 
public class MonScenario {
 
	/**
	 * @param args
	 */
	public static void main(String[] args) {
 
		//créer un bus de nom "Nice-Circulation"
		Bus monBus = new Bus("Nice-Circulation");
		//créer un message annonçant "une attente de 5mn"
		Message m1 = new Message("Attente de 5mn");
		//publier le message sur le bus,
		monBus.send(m1);
		//créer un message annonçant "un accident"
		Message m2 = new Message("Accident");
		//publier le message sur le bus,
		monBus.send(m2);
		//lire les messages,
		ArrayList<Message> messages = monBus.getMessages();
		// afficher le contenu des message.
		for (Message m : messages )
			System.out.println("Message : " + m.getContent() ) ;
 
	}
 
}

Un projet sous le gestionnaire de version (10mn)

Pas de corrections

Génération des codes (10 mn)

Nous allons à présent travailler sur les codes. Pour cela nous allons les générer à partir des modèles. Pour cette tâche, vous retournez sous Visual Paradigm. 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.

  1. Générer les codes
  2. 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
  3. 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.)
  4. 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.
  5. Quand il n'y a plus d'erreurs, mémoriser les codes dans SVN (pour s'entraîner ;-) ) . Donc cette fois-ci simplement, clique droit sur le package (car évidemment, vous travaillez bien dans un package), puis Team puis commit. Il vous propose directement les fichiers à ajouter au commit. N'oublier de mettre un message.

Mise en place du programme principal préliminaire (10mn)

Voici ce que doit faire a minima votre programme principal, pour cela retourner sur “MonScenario.java” et modifier le main pour :

  1. créer un bus de nom “Nice-Circulation”,
  2. créer un message annonçant “une attente de 5mn”
  3. publier le message sur le bus,
  4. créer un message annonçant “un accident”
  5. publier le message sur le bus,
  6. lire les messages,
  7. afficher le contenu des message.

Ce programme ne peut pas tourner puisque quasi rien n'est implémenté, par contre vous pouvez vous aider d'Eclipse pour que au moins il soit “syntaxiquement” juste et créer les bonnes méthodes si elles n'existent pas déjà, ou les appeler!

Vous pouvez à présent l'exécuter et il vous signale les méthodes non encore implémentées. A la fin de ce TD, évidemment, il fonctionnera.

Un projet sous "tests" (15mn)

Notre objectif est à présent de préparer les tests qui accompagneront notre développement. Pour cela, nous utiliserons l'environnement JUNIT. Bien sûr vous pouvez utiliser un autre environnement de tests si vous le désirez mais la structuration du projet en une partie principale et une partie test est, elle, exigée pour toute la suite de ce module.

  1. 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
  2. Dans le menu contextuel de, par exemple la classe Message, cliquez sur New – JUnit Test Case1). Dans le panneau qui s'affiche
    • Sélectionnez le bouton radio New JUnit 4 test.
    • Changez le dossier Source folder pour tests.
    • Nommez la classe MessageTest.
    • Cochez les cases setUp() et tearDown().
    • Enfin cliquez sur Finish.
    • Eclipse va remarquer que la bibliothèque de JUnit est absente du projet et vous propose d’ajouter automatiquement cette dernière au projet.
    • Dans le panneau qui apparaît, cliquez sur OK.
  3. Eclipse a maintenant créé automatiquement le squelette de la classe de test. Il ne reste plus alors qu’à remplir cette dernière.
  4. Dans le menu contextuel, cliquez sur Run As – JUnit test.

Enfin, le premier rapport de tests s’affiche !

Développement (20mn)

  1. Terminez la mise en oeuvre du bus en complétant les tests au fur et à mesure et en n'oubliant pas de commiter.

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.

  • 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

Un “bus à messages” s'appuie sur plusieurs design patterns 'Observeur/Observable“ et plus précisément “Publish/Subscribe”. Il existe aujourd'hui de nombreuses implémentations de ces systèmes permettant des communications asynchrones, où les consommateurs sont automatiquement notifiés de l'arrivée de message, où les consommateurs peuvent faire des demandes spécifiques, avec des systèmes de filtres complexes, etc.

EVALUATION de CE TD

  1. Tous les étudiants ont donné accès à leur professeur sur un de leur espace.
  2. Tous les étudiants ont bien sauvegardé dans leur espace SVN.
  3. Tous les étudiants ont au moins une fois fait un commit dans cet espace de travail.
  4. Le programme est fonctionnel et le scénario de base est bien réalisé.

Je sais

Je sais :

  • Créer un projet sous Eclipse, et le structurer correctement.
  • Générer le code à partir d'un modèle de classes en UML.
  • Connecter mon code à un répertoire SVN.
  • Structurer mon projet pour intégrer les tests unitaires.
  • Utiliser Eclipse pour améliorer mon développement en utilisant les outils d'aide au développement.
1)
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/corrections/td1.1408218241.txt.gz · Last modified: 2014/08/16 21:44 by blay