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

UML Discussion :

choix cornelien de design de classe


Sujet :

UML

  1. #1
    Membre actif
    Inscrit en
    Juillet 2003
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 51
    Par défaut choix cornelien de design de classe
    Bonjour,
    Il y a une question qui me revient souvent quand je m'essaye a concevoir des classes. j'aurais du mal a l'exprimer avec des mots donc je préfère faire une démonstration par l'exemple :

    Imaginons que je veuille développer une application qui permette de faire un MCD façon Power-Designer ou autre, peu importe car le probleme porte sur la modélisation des éléments graphiques.
    Dans ce genre de logiciel, je sais que mon programme devra savoir afficher a l'écran des petites boites de couleurs ( les entités / associations etc )
    Je déduis donc que je vais avoir besoin de classes qui seront toutes déssinables et qui de ce fait possèderont ce genre de propriétés ( entre autres ) : x, y, largeur, hauteur, couleur. Mettons que je nomme cette classe : TPaintable ( en delphi-like ).
    Je pourrais dériver a loisir cette classe pour obtenir des rectangles des cercles des traits etc....

    A l'étape suivante, je voudrais créer une classe TEntité qui hérite de TPaintable ET qui seront pour porteuses d'informations propres au MCD (identifiant, propriétés, cardinalités etc).
    C'est ce dernier aspect qui me pose probleme.

    En effet jusque ici ma classe ne contenait que des champs qui ont trait a sa représentation graphique. Maintenant je devrais y ajouter des champs qui sont du domaine du MCD. Du coup ça me gène beaucoup de mélanger ces deux niveaux dans une même classe : qui ressemblerais a ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    type TEntité = class
    {
    x, y, width, height : integer;
    nomEntite: string;
    propriétés: array of TPropriétés.
    }
    Questions :
    1 - Ai-je raison d'être géné ?
    2 - Comment appréhender cette distinction et sous quelle forme l'implémenter ?
    jusque là on m'a toujours dit "va voir dans les design pattern, il y a tout ce qu'il faut". j'y ai été, mais n'étant pas familier de la chose, je dois dire que je ne comprends pas comment l'appliquer. Pouvez-vous me dire comment vous le feriez dans le cas de ce projet de modelisation MCD ?

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Tu parles de classes qui sont plutôt du domaine de la programmation objet et donc de la modélisation à l'aide du langage UML.

    Dans un diagramme de classes UML, tu pourrais faire ceci :
    point 2-----------* segment 3..*---------------* polygone

    Traduit en MCD, ça donnerait ceci :
    point -0,n----delimiter----2,2- segment -0,n----constituer----3,n- polygone

    Et les tables pourraient être celles-ci :
    point (pt_id, pt_x, pt_y...)
    segment (seg_id, seg_id_extremite_1, seg_id_extremite_2...)
    polygone (plg_id, plg_nom...)
    plg_constituer_seg (pcs_id_polygone, pcs_id_segment)
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre actif
    Inscrit en
    Juillet 2003
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 51
    Par défaut
    Salut Cinephil

    Je me suis mal exprimé : je ne cherche pas a modéliser mon programme en MCD, mais plutôt a définir des classes en vue de la création d'un logiciel qui dessine des MCD ( un PowerAMC like si tu veux ).

    en plus je ne sais pas lire UML.

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    C'est pour le fun que tu veux faire ça ?
    Parce qu'il existe déjà pas mal de logiciels de modélisation dont certains sont gratuits, entre autre le canadien Open Modelsphere et le petit dernier d'un contributeur du forum : jMerise.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre actif
    Inscrit en
    Juillet 2003
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 51
    Par défaut helas non
    Non ce n'est pas pour le fun, là ou je travail, on a pas java et pas le droit de l'installer. On fait beaucoup de MCD et on a pas d'outil (mais le ridicule ne tue pas). Donc j'ai un vrai besoin de ce genre d'outil (marre de le faire sous word)

    En plus ma question est plus large : elle repose sur un problème de design que je rencontre souvent (séparation graphisme/métier) et que je re-rencontre lorsque je commence a regarder la faisabilité de ce logiciel.

    J'ai testé OPenmodelSphere, JMerise, AnalyseSI, toujours le même souci c'est du java.

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Le lien que j'ai donné vers la discussion concernant jMerise contient un message de fsmrel qui donne un méta-modèle des contraintes d'un MCD et quelques liens qui vous seront sans doute utiles.

    Pour commencer plus simplement, dans un MCD, il y a :
    - des entités ;
    - des attributs dans ces entités ;
    - des associations entre les entités munies de cardinalités.

    Il faudra donc des classes pour tout ça et sans modéliser ces classes, que ce soit à l'aide d'un MCD Merise ou d'un diagramme de classes UML, tu va dans le mur à mon avis. On ne se lance pas dans la programmation sans conception !

    Pour répondre, peut-être, à une partie de ta problématique posée ici, remarque qu'une entité constituée de ses attributs reste la même, qu'elle soit située en haut à gauche ou au centre de la fenêtre, qu'elle soit rouge, violette ou jaune !

    Allez, je tente un début de MCD schématisant ce qu'est un MCD...

    entite -1,n----composer----(1,1)- attribut -1,1----typer----0,n- type

    entite -0,n----associer----0,n- entite
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre actif
    Inscrit en
    Juillet 2003
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 51
    Par défaut
    Est ce utile de préciser que je suis analyste ? (donc non, je ne vais pas coder sans analyse, c'est d'ailleurs ce que je fais : j'essaye d'abord d'écrire sur papier mes futures classes pour lever les inconnues fonctionnelles et technique)

    Par contre je ne compte pas stocker ça dans une bdd donc je vais éviter de faire un MCD. Je suis plutot au niveau diagramme de classe.

    En ce qui concerne ta troisieme remarque, je suis tout a fait d'accord avec toi, l'entité ne change pas intrinsequement si elle change de couleur de position etc... et quel que soit le nombre de propriété qu'elle porte.

    ce qui est géré par un class de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    type TEntité = class
    {
    x, y, width, height : integer;
    nomEntite: string;
    propriétés: array of TPropriétés.
    }
    mais je n'aime pas le design de cette classe je pense qu'il existe un meilleur moyen de la designer.

  8. #8
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Il y a quelques messages...
    Citation Envoyé par niocco
    en plus je ne sais pas lire UML.
    Et dans le dernier :
    Je suis plutot au niveau diagramme de classe.
    Le diagramme de classe se dessine à l'aide du langage UML !

    Bon je crois surtout que tu n'es pas dans le bon forum puisque celui-ci est consacré aux schéma relationnels MCD, MLD... mais pas UML et encore moins la définition de classes pour de la programmation objet.

    Bref, je ne peux pas t'aider davantage.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #9
    Membre actif
    Inscrit en
    Juillet 2003
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 51
    Par défaut
    oui c'est vrai dsl

  10. #10
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 15
    Par défaut
    Bonjour,

    Tu peux essayer de découpler la partie affichage de ta classe, de la partie modèle. Ainsi la partie qui sait dessiner un rectangle à une certaine position, n'a pas besoin de savoir que le rectangle possède x liaisons avec d'autres rectangles.
    Tu as alors deux arbres d'héritage, l'un qui représente les "déssinables" et l'autre les composants de ton modèle. Ton modèle devient alors indépendant de sa représentation et chaque élément du modèle dispose d'une référence vers l'élément affichable qui le représente.
    Il me semble que ce n'est pas très loin de MVC et du design pattern Bridge.

  11. #11
    Membre actif
    Inscrit en
    Juillet 2003
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 51
    Par défaut
    Salut niehu, et merci pour ta réponse

    C'est en effet dans ce sens que je voudrais aller. Dans ce que tu propose, on sépare bien la partie gestion de l'affichage de la partie gestion des données ( propriété, associations etc... )

    Par contre, tu parle d'un "double héritage". Est ce a dire que la classe de plus haut niveau devra hériter de plusieurs classes ? Si c'est le cas, je ne pourrais donc pas le faire en delphi.

    Par ailleurs, j'ai toujours du mal a opérer correctement une telle séparation : en effet, il y a toujours un moment ou le graphisme a besoin de connaître le fonctionnel. Par exemple, les dimensions d'un carré qui représente une entité se calculent en fonction du nombre de propriétés qu'elles contient ! donc certaines données doivent être partagées quand même, et c'est la ou je n'arrive jamais a faire quelque chose de propre. Si j'avais un exemple se serait top^^

  12. #12
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut
    Ce que tu cherches à faire est le modèle de classe...du modèle entité-association. Cela s'appelle un méta-modèle.

    Voici un exemple de ce que tu cherches :


    A ceci près que tu dois rajouter à tes différents classes des attributs qui te permettront de gérer leur affichage à l'écran, du type abscisse/ordonnée,largeur/hauteur/couleur de fond/etc...
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/03/2016, 14h02
  2. Réponses: 6
    Dernier message: 07/03/2011, 15h11
  3. Choix stratégique entre main et classes personnelles
    Par Caxton dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 04/08/2009, 13h29
  4. [VS 2005 Pro]Mais où est le designer de classes?
    Par khazna dans le forum Visual Studio
    Réponses: 2
    Dernier message: 26/02/2008, 08h38

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