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

Design Patterns Discussion :

Demande d'avis sur un Design Pattern Decorateur sur une liste avec une Stratégie [GOF]


Sujet :

Design Patterns

  1. #1
    Membre éclairé
    Avatar de N_I_C_S
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 450
    Points : 681
    Points
    681
    Par défaut Demande d'avis sur un Design Pattern Decorateur sur une liste avec une Stratégie
    Salut,

    Dans le cadre d'un projet J2EE, j'ai pensé à ce qui pourrait être un DP intéressant, quoiqu'assez spécialisé. Je l'ai nommé "Ordonner" et sa vocation serait de modéliser les processus de tri de manière trés modulaire. Voici à quoi ressemblerait le diagramme de classes :




    Les avantages sont :
    1. Le processus de tri est totalement séparé des objets à trier.
    2. Le critère de comparaison des objets est indépendant de l'algorithme de tri. Il peut donc être modifié, remplacé, manipulé dynamiquement.
    3. L'algorithme de tri étant lui aussi indépendant, il peut être choisi dynamiquement selon une stratégie d'optimisation des performances.


    Par exemple (c'est un exemple très bête...), on voudrait ordonner certaines villes de France selon la proximité de leur température journalière avec la moyenne nationale.

    La Target serait la liste de ces villes (à priori pas du tout faîtes pour être ordonnées ainsi), l'Ordonner contiendrait plusieurs algos de tri choisi en fonction de la taille de la liste (nationale, régionale, ...), et le Comparer irait chercher la moyenne du jour pour trouver, entre deux villes, laquelle est la plus proche.

    J'aimerais avoir :

    1 - Votre avis sur la modélisation du diagramme.

    2 - Votre avis sur la pertinence du concept.

    3 - Savoir s'il existe des organisations d'homologation et de diffusion des design patterns. Je pourrais tenter ma chance...


    Merci !

  2. #2
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Si j'ai bien compris, ton "Ordonner" est en fait un Decorateur sur une liste avec une Stratégie pour savoir sur quels critères trier la liste, c'est ça? Dans ce cas, c'est l'association des patterns Decorateur et Strategy. Intéressant, mais de là à en faire un nouveau pattern...

    Par ailleurs, ce design reprend un concept connu depuis fort longtemps en Java (et pas uniquement) : le Comparator (ici, renommé "Comparer"). Bref, c'est pas très nouveau.

    Citation Envoyé par N_I_C_S
    1 - Votre avis sur la modélisation du diagramme.
    C'est correct, à part la flèche entre Invoquer et Target dont on a du mal à comprendre l'intérêt (dans le cas où "ConcreteOrdonner" est un décorateur, on n'accède pas directement à la liste "Target").

    Citation Envoyé par N_I_C_S
    2 - Votre avis sur la pertinence du concept.
    Exprimé en début de message.

    Citation Envoyé par N_I_C_S
    3 - Savoir s'il existe des organisations d'homologation et de diffusion des design patterns. Je pourrais tenter ma chance...
    Merci !
    Pas à ma conaissance.


    A part ça, c'est un excellent premier message, avec une idée intéressante. J'espère qu'on te reverra bientôt sur les forums de DVP pour nous exposer tes idées.

    @+
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  3. #3
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970

  4. #4
    Membre éclairé
    Avatar de N_I_C_S
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 450
    Points : 681
    Points
    681
    Par défaut
    Ok, merci pour vos éclairages.
    En fait, je ne connais que peu de design patterns, je me doutais un peu que d'autres structures existaient déjà...

    Citation Envoyé par pcaboche
    C'est correct, à part la flèche entre Invoquer et Target dont on a du mal à comprendre l'intérêt (dans le cas où "ConcreteOrdonner" est un décorateur, on n'accède pas directement à la liste "Target").
    Effectivement, maintenant que tu le dis, cette flèche est assez maladroite. En fait, je voulais représenter le fait que l'Invoker avait pour rôle d'envoyer la Target à l'Ordonner.Ca ne mérite peut-être pas une relation...

    Merci à tous et a++

  5. #5
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    Juste un point, tout ce que tu présente est du standard dans l'API Java. Je ne vois pas pourquoi le ré-inventer !?

  6. #6
    Membre éclairé
    Avatar de N_I_C_S
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 450
    Points : 681
    Points
    681
    Par défaut
    Salut eqo,

    je suppose que tu parles de l'interface Comparable et de la méthode Collections.sort(). Le problème est que ce système a 2 limitations qui ne me convenaient pas : d'une part il oblige à implémenter l'interface d'avance à l'intérieur de chaque classe susceptible un peu, beaucoup, peut-être, peut-être pas d'être triée un jour, et d'autre part on n'a aucun contrôle sur l'algo de tri (je crois que l'algo de java est le tri à bulle, pas forcément le plus performant en toutes circonstances).

    De plus, pour des raisons de performance, je voulais éviter les liaisons dynamiques. En fait, mon projet est une plate-forme 3D 100% software, ma recherche est donc portée prioritairement sur la rapidité. Le p'tit dessin du premier message est une généralisation, dans mon projet je n'ai pas utilisé d'interface ou de classe abstraite.

    Voilà, mon but était de rajouter un système de tri rapide et modulaire sans toucher à des objets déjà existants, ce que la lib java ne propose pas vraiment.

  7. #7
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Citation Envoyé par N_I_C_S
    je suppose que tu parles de l'interface Comparable et de la méthode Collections.sort().
    Il ne voulait pas parler de l'interface Comparable mais Comparator.


    Citation Envoyé par N_I_C_S
    (je crois que l'algo de java est le tri à bulle, pas forcément le plus performant en toutes circonstances).
    Faux !

    C'est un tri fusion (merge sort, qui a la propriété d'être stable, contrairement au quick sort, par exemple) sauf pour des Collections de 7 éléments ou moins où effectivement il s'agit d'un tri à bulles (des tests ont montré que pour des Collections contenant au plus 7 éléments, le tri à bulle était plus rapide car ne nécessitant pas d'appels récursifs).
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  8. #8
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    Pour l'histoire de "mes objets doivent hériter de l'iterface Comparable", je ne suis pas d'accord.
    Plusieurs points sur tout cela :
    - Il y a l'interface Comparator qui permet de ne pas demander aux objets d'implémenter une interface particulière
    - L'interface Comparable est à implémenter s'il y a une relation d'ordre "standard", "intrinsèque" à tes objets
    - Si la relation d'ordre est contextuelle, tu peux utiliser Comparator ou créer des proxies sur tes objets. Ces proxies implémentent eux, l'interface Comparable. Dans un contexte donné, tu va donc créer autant de proxy que d'objet à trier et c'est ton proxy que tu donnes à ton algo de tri.

    Mais bon, si tu as d'autres bonnes raison pour tout refaire.

    Juste un dernier point, as-tu testé l'API Java standard avant de dire qu'elle n'était pas assez performante pour tes besoins ?

  9. #9
    Membre éclairé
    Avatar de N_I_C_S
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 450
    Points : 681
    Points
    681
    Par défaut
    Salut, I'm back !

    Je vous remercie pour vos fructueux commentaires, le coup du proxy, j'y avais pas pensé !

    Ca m'a fait prendre conscience d'une mauvaise modélisation de l'idée, trop proche de java. Afin d'éviter les confusions, je repropose ceci :


    Y a pas grand changement mais ça permet peut-être de généraliser le "pattern", celui-ci devant être théoriquement indépendant du langage et de ses facilités.

    Quant au fait que je n'utilise pas les classes java dans mon appli, c'est précisément pour éviter les héritages avec ces classes. En fait, l'appli utilise cette structure :


    Ce système de tri se situe à bas niveau (si tant est qu'on puisse utiliser ce terme en java !) et le nombre d'objets à trier est pour l'intant petit. J'ai donc choisi de me passer des liaisons dynamiques et de gérer l'algo de tri plutot que l'inverse. Maintenant, il serait intéressant d'étudier le ratio de temps (performance algo de l'API / [nombre*performance]liaisons), certainement linéaire en moyenne par rapport au nombre d'objets. Sur un petit nombre, je pense que les liaisons handicappent l'algo (fusion, oops ).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Meilleur livre sur les design patterns en Java?
    Par JFortranDoc dans le forum Logging
    Réponses: 5
    Dernier message: 15/06/2006, 01h19
  2. Recherche de doc sur les Design pattern
    Par MicroPuce dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 09/05/2005, 15h58
  3. [Observateur] Précisions sur le design pattern Observer [UML]
    Par joquetino dans le forum Design Patterns
    Réponses: 2
    Dernier message: 07/10/2004, 22h35

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