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 :

Problème de conception


Sujet :

Design Patterns

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut Problème de conception
    Hello,

    J'ai une classe "Parent", et une multitude de classe dérivées, sur plusieurs niveaux. Par simplification, on va se limiter à un seul niveau de descendance.

    Chacune des classes dérivées est susceptibles de devoir accéder à une fonction d'un classe dérivée particulière.
    Si j'ai des classes numérotée de 1 à 10, chacune est susceptible d'utiliser une fonction déterminée de la classe 5.

    Cet accès se ferait idéalement dans la classe parente. Pour des raisons sémantiques, il est fortement souhaitable que la fonction soit définie dans la classe 5.

    Comment faire ça proprement (dépendances, etc.) ?

    Merci.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 217
    Par défaut
    Je ne suis pas sur que nous ayons tous les elements du probleme ; si vous pouvez preciser/confirmer (ou infirmer) ceci :

    a) par "dérivée" vous parlez bien de la relation d'heritage de classe ?

    b) par "devoir accéder" je suppose que (et si c'est oui pour le point a.) si on a Parent <- A <- B <- C <- ... <- G <- H avec une methode "M" introduite par Parent mais redefinie plusieurs fois par B, D, et F p.ex, vous voulez depuis disons G ou H pouvoir invoquer l'implementation definie par E (la classe 5) ?

    c) ou bien, si le point (a) tient toujours mais que "M" est introduite par E au lieu de Parent, vous voulez quand meme, depuis Parent, pouvoir invoquer E::M (qui n'est donc pas membre de Parent) ?

    Citation Envoyé par oodini Voir le message
    Hello,

    J'ai une classe "Parent", et une multitude de classe dérivées, sur plusieurs niveaux. Par simplification, on va se limiter à un seul niveau de descendance.

    Chacune des classes dérivées est susceptibles de devoir accéder à une fonction d'un classe dérivée particulière.
    Si j'ai des classes numérotée de 1 à 10, chacune est susceptible d'utiliser une fonction déterminée de la classe 5.

    Cet accès se ferait idéalement dans la classe parente. Pour des raisons sémantiques, il est fortement souhaitable que la fonction soit définie dans la classe 5.

    Comment faire ça proprement (dépendances, etc.) ?

    Merci.

  3. #3
    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 : 44
    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
    la solution la plus simple et rapide serait d'utiliser la composition sans contexte rien qu'avec des méthodes et nom de classes qui ne veulent rien dire pour nous cela va être dur de répondre

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Citation Envoyé par lysiandad Voir le message
    a) par "dérivée" vous parlez bien de la relation d'heritage de classe ?
    Oui.

    Citation Envoyé par lysiandad Voir le message
    b) par "devoir accéder" je suppose que (et si c'est oui pour le point a.) si on a Parent <- A <- B <- C <- ... <- G <- H avec une methode "M" introduite par Parent mais redefinie plusieurs fois par B, D, et F p.ex, vous voulez depuis disons G ou H pouvoir invoquer l'implementation definie par E (la classe 5) ?
    Non. Je ne parlais pour simplifier que d'un seul niveau hiérarchique.
    Si les classes A...H dérivent toutes directement de Parent (et sont donc "soeurs"), chacune de ces classes devraient pouvoir accéder à une classe de E (statique). Et cela à partir d'une méthode commune, et qui devrait donc se retrouver dans la classe parent.

    Citation Envoyé par lysiandad Voir le message
    c) ou bien, si le point (a) tient toujours mais que "M" est introduite par E au lieu de Parent, vous voulez quand meme, depuis Parent, pouvoir invoquer E::M (qui n'est donc pas membre de Parent) ?
    C'est cela.

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 217
    Par défaut
    Citation Envoyé par oodini Voir le message
    [...]
    C'est cela.
    Merci pour l'eclaircissement. Je proposerais ceci, entre autres possibilités :

    (et profitons-en au passage pour faire mieux qu'avec "des noms de classes qui ne veulent rien dire"... )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    
    class Algorithm
    {
      protected Algorithm completion = null;
      public /*virtual, eventuellement*/ bool IsFinished()
      {
        return (completion as Fixedpoint).IsReached();
      }
      //... semantique generique utilisant IsFinished()
    }
    
    class RecursiveDescent : Algorithm
    {
      public RecursiveDescent(Algorithm completion)
      { this.completion = completion; }
      //... semantique derivee utilisant Algorithm::IsFinished();
    }
    
    class Fixedpoint : Algorithm
    {
      public /*virtual, eventuellement*/ bool IsReached()
      {
        bool result = false;
        /*... */
        return result;
      }
    }
    
    class Backtracking : Algorithm
    {
      public Backtracking(Algorithm completion)
      { this.completion = completion; }
      //... semantique derivee utilisant Algorithm::IsFinished();
    }
    Vous reconnaitrez bien sur les roles :

    Algorithm === Parent
    RecursiveDescent === A
    Backtracking === B
    Fixedpoint === E (la classe 5)

    Maintenant, cela me laisse un peu perplexe, car fondamentalement, on a "déporté" la methode IsReached dans une classe enfant (Fixedpoint) alors qu'on peut faire plus simple en l'introduisant dans Algorithm dès le départ... Aucun doute que nous verrons peut etre mieux l'interet de mon pattern, du moins s'il vous convient, quand nous connaitrons mieux votre domaine ; vous devez avoir vos propres bonnes raisons liées à ce domaine ou a d'autres choix de conception ou d'implémentation (?)

    NB : je ne garantis PAS que cet exemple soit pertinent/credible dans le domaine de l'algorithmique modelisée en objets ; c'est plus pour donner un pattern "statique" mais assez concret pour votre langage d'implementation favori

    [ EDIT ]

    et effectivement, c'est bien le pattern de composition, comme suggéré par hegros

    'HTH

Discussions similaires

  1. Méthode Finalize et problème de conception
    Par phryos dans le forum Langage
    Réponses: 4
    Dernier message: 19/04/2006, 11h04
  2. [VB6][UserControl et OCX]Problème de conception
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 19/01/2006, 22h37
  3. Petit problème de conception sur access
    Par coooookinette dans le forum Modélisation
    Réponses: 3
    Dernier message: 18/12/2005, 18h24
  4. Gestion des départements problème de conception
    Par snoopy69 dans le forum Modélisation
    Réponses: 7
    Dernier message: 11/10/2005, 13h08
  5. Problème de conceptions de tables
    Par dtavan dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/05/2004, 23h13

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