IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

[Diagramme de classe] Modélisation d'un jeu de trains

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 54
    Par défaut [Diagramme de classe] Modélisation d'un jeu de trains
    Bonjour,

    Je débute avec UML, et j'aurais souhaité vos avis / critiques d'un diagramme de classes que j'ai réalisé dans le cadre d'un TP (image de mon travail plus bas).

    L'objectif est de construire un diagramme de classe modélisant un de ces jeu pour enfants, où l'on construit un circuit avec des rails que l'on clipse ensemble, et que l'on fait avancer un petit train dessus.

    Il y a 4 fonctionnalités principales à modéliser :
    1 - construction d'un circuit à partir de rails de bases (droit, virage à droite, virage à gauche, aiguillage, pont, passage à niveau)
    2 - Construction d'un train à partir de voitures de base (locomotive, wagon, voiture de voyageurs, …)
    3 - Positionnement du train sur le circuit,
    4 - Déplacement du train sur le circuit en ayant la possibilité de modifier les aiguillages et de choisir la direction du train.

    Le passage à niveau doit simuler le fonctionnement d'un vrai passage à niveau. Lorsque le train en approche, une sonnerie devra retentir, des lumières clignoter pour signaler l'arrivée du train et les barrières devront se fermer et rester fermées jusqu'à ce que le train soit passé.


    => Mon diagramme est encore incomplet, mais n'étant pas sûr de la modélisation de base, je viens demander vos avis avant de partir sur une fausse piste

    => Ma 1ère version : http://www.noelshack.com/up/aac/trai...ec2657ef12.png

    S'il y a des choses choquantes / fausses / à améliorer / incompréhensibles, n'hésitez pas

    Merci d'avance !

  2. #2
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Pourquoi est-ce qu'il y a 4 fonctionnalités et qu'un seul diagramme de classe ?

    Les méthodes des classes tu les as trouver comment ? A partir d'un diagramme de séquence ?


    Pour voiture c'est pas très clair pourquoi tu utilises une réflexivité ?

    La classe autre ne devrait pas apparaître si c'est pour indiquer qu'il y a encore une analyse de ce qui pourrait bien hériter de rail..

    cela ne me plait pas trop l'héritage comme design ( passage à niveau d'un rail), je verrais plus une composition avec le circuit comme tu l'as fais entre circuit et rail (donc composition entre circuit et passage à niveau plutôt que l'héritage)

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 54
    Par défaut
    Bonjour, et merci de vous être penché sur mon problème

    Il n'y a qu'un seul diagramme pusqu'au final, cela représente un logiciel, et toutes les fonctionnalités sont liées... Il faut faire un diagramme par fonctionnalité ??

    Les méthodes, je les ai "inventées", c'est-à-dire que je me suis posé la question "si je devais programmer le logiciel basé sur ce diagramme, de quelles méthodes aurais-je besoin pour le faire fonctionner ?"

    Pour voiture, j'utilise une reflexivité car un train est composé d'une locomotive et de n voitures. Cela permet de répondre un point 2, à savoir créer un train dont les voitures sont liées entre elles...

    La classe "autre", je l'avais créée justement parce que je ne vois pas trop quoi différencier entre un rail "droit", un rail "virage à gauche", "virage à droite" etc... Je veux dire par là qu'ils n'ont aucune propriété différente si ce n'est leur nom. Devrais-je approfondir + ce point ? Et si oui, que mettre dans les différentes classes ainsi créées ?

    Enfin, quel est le problème soulevé par l'héritage ? Pourquoi la composition serait-elle plus appropriée ici ?

    En attendant une réponse, je vais une V2 en tenant compte des remarques

  4. #4
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par Ikki_2504 Voir le message

    Il n'y a qu'un seul diagramme pusqu'au final, cela représente un logiciel, et toutes les fonctionnalités sont liées... Il faut faire un diagramme par fonctionnalité ??

    La logique 1 logiciel = 1 diagramme est erronée. Imagine un logiciel de plusieurs milliers ou millions de ligne de code est-ce qu'il serait possible de tout faire rentrer dans 1 diagramme ? Il est préférable d'avoir une vue par fonctionnalité + 1 vue qui les réunis


    Les méthodes, je les ai "inventées", c'est-à-dire que je me suis posé la question "si je devais programmer le logiciel basé sur ce diagramme, de quelles méthodes aurais-je besoin pour le faire fonctionner ?"
    Il est préférable de faire un diagramme de séquence pour la fonctionnalité x et d'en déduire ainsi les méthodes. Est-ce que tu as fais un diagramme de séquence pour voir si tes méthodes collent bien à la dynamique du logiciel ?


    Enfin, quel est le problème soulevé par l'héritage ? Pourquoi la composition serait-elle plus appropriée ici ?
    Car je peux écrire ceci qui n'a pas de sens pour des rails mais plutot pour le passage à niveau (je reconnais que c'est un choix conceptuel au final mais cela ne me semble pas un bon design ton choix)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Rail rail = new PassageANiveau();
    
    rail.AllumerFeux();
    rail.LeverBarrieres();
    rail.DeclencheSonnerie();

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 54
    Par défaut
    Ok, c'est certain que pour un "vrai" logiciel, un seul diagramme n'est pas possible. Mais dans mon cas, il y a assez peu de fonctionnalités, et donc il faut voir ce diagramme comme "la vue qui les réunit toutes".
    Et puis malheureusement, je ne coderais pas le logiciel qui découle de ce diagramme, car je fais ce TP dans le cadre d'un cours de Conception, et en Conception... on conçoit, mais on ne programme pas (oui c'est dommage )
    Mais je garde le conseil en mémoire pour le jour où je plancherai sur un logiciel plus gros

    Pour le diagramme de séquence ... C'est pas bête du tout, je vais en faire un, ça devrait effectivement m'aider

    Enfin pour l'histoire du passage à niveaux ... J'y avais pas pensé, bonne idée
    Par contre j'ai refait le diagramme, mais j'avoue que ça ne me plaît qu'à moitié... La classe "Autre" devient la classe "Rail" ; et la classe "Circuit" se compose des classes "Rail", "Aiguillage" et "PassageANiveaux" ... Ça le fait ?
    => http://www.noelshack.com/up/aac/trainsv2-b320033a29.png

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 291
    Par défaut
    Bonjour,

    Quelques remarques.

    Vous utilisez une agrégation au lieu d'une composition. (par exemple entre circuit et rails) une composition présente un couplage plus fort, et est représentée avec un losange rempli (en noir en général). Le circuit n'existe pas sans les rails, donc il est composé de rails.

    Un circuit est composé d'un ou de n trains. Qui sont composés de une locomotive et composés de un à n voitures (pas de réflexivité).

    J'aurais pour ma part introduit une classe "élément rails" avec passage à niveaux, aiguillage, rails qui hérite de cette classe. La première propriété (ou méthode) de cette classe étant de constater l'état de fermeture de l'ensemble des composants.

    Un passage à niveaux est composé d'objets "feux", "sonneries", barrieres"
    chacun ayant des états "clignotants", "active", "levée/baissée", ces différents états étant dépendant ils doivent être modélisés à travers un diagrammes d'états transition. (si le feux clignote et la barrière se baisse pas il va y avoir un soucis!).

    Le seul fonctionnement du passage à niveau est un exercice de modélisation à lui tout seul amha.


    "si je devais programmer le logiciel basé sur ce diagramme, de quelles méthodes aurais-je besoin pour le faire fonctionner ?"
    Comme le soulignent certains auteurs célèbres, il ne faut pas s'occuper du comment faire mais du quoi faire. Vous devez vous posez des questions en terme de cas d'utilisation pour démarrer votre modèle. Mettez vous dans la peau d'un gamin qui va jouer au train, que veut-il faire ?

    Il n'y a qu'un seul diagramme pusqu'au final, cela représente un logiciel, et toutes les fonctionnalités sont liées... Il faut faire un diagramme par fonctionnalité ??
    L'intérêt majeur de la modélisation UML est, au travers des cinq diagrammes de base, de fournir une vue du modèle sous un angle différend. Il ne faut pas faire un diagramme par "fonctionnalité", mais utiliser différends types de diagrammes pour les différentes approches du problème.

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/10/2013, 13h24
  2. Modélisation UML/ Code procédurale Diagramme de classe
    Par mohasade dans le forum Diagrammes de Classes
    Réponses: 3
    Dernier message: 21/06/2013, 18h44
  3. Aide pour une modélisation (diagramme de classes)
    Par Ricoco dans le forum Diagrammes de Classes
    Réponses: 3
    Dernier message: 19/02/2013, 07h38
  4. Problème de modélisation : diagramme de classe
    Par Mirelle dans le forum Diagrammes de Classes
    Réponses: 2
    Dernier message: 04/06/2011, 15h53
  5. Avis sur Modélisation (diagramme de classe)
    Par wafiwafi dans le forum Diagrammes de Classes
    Réponses: 14
    Dernier message: 30/12/2010, 14h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo