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

C# Discussion :

static et héritage


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut static et héritage
    Bonjour.

    Je sais que le sujet a déjà été abordé, mais j'aimerai revenir sous un angle different, sur comment gérer des champs static dans une hierarchie.

    A garder en tete lors de la discution :
    Un des avantage d'un champ static, est que l'on n'a pas besoin d'instancier la classe pour s'en servir. Notion tres importante, c'est là d'où vient en grande partie mon probleme.

    L'autre avantage, est que toutes les instance de la classe partage la meme "case mémoire" => economie de place, mais (dans mon cas) surtout une garantie d'un contenu unique entre toutes les instances.

    Enfin, cela permet de ne pas recopier du code entre les classes enfants. Et je dis bien classes et non objet ! (oui je sais c'est faux, on en arrive donc à mon probleme).

    Voici donc mon probleme : Je crée une classe abstraite AFruit. Et je veux m'assurer que les developpeurs qui implémenteront des classe Pomme Poire Banane, exposent une Methode Construct qui s'assure que le fruit ai le droit d'etre construit.

    Voici un exemple, notez que seul le type de s_entrepot change. Domage de devoir dupliquer ce tout ce code, quelque chose ne va pas, c'est clair !

    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
    classe Pomme: IFruit
    {
       static EntrepotPomme s_entreport
       public static void SetEntrepot (IEntrepot entrepot)
       {
          s_entrepot = entrepot;
       }
     
       public public static IFruit Construct()
       {
          if(!s_entrepot.IsFull())
             return new Pomme();
          else return null;
       }
    }
     
    classe Poire: IFruit
    {
       static EntrepotPoire s_entreport
       public static void SetEntrepot (IEntrepot entrepot)
       {
          s_entrepot = entrepot;
       }
     
       public public static IFruit Construct()
       {
          if(!s_entrepot.IsFull())
             return new Pomme();
          else return null;
       }
     
     
    }
    L'idée serait donc, de déporter la methode static Construct dans une classe abstraite AFuit parent de Pomme et Poire.

    Comment faire?

    N.B : le scenario que j'expose n'est pas exactement celui que je vis, mais s'en rapproche juste assez pour ne pas rendre mes explications plus complexes qu'elles ne sont deja.

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 99
    Par défaut
    Une précision : ton entrepot ne stocke qu'un seul type de fruit ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut
    exactement, chaque type de fruit doit avoir son propre entrepot adapté, et sans entrepot, on ne peut construire le fruit, c'est une des raisons du static.

    Pourtant chaque entrepot fait la meme chose, mais en utilisant des propriétés statiques differentes selon si on parle de pomme ou de poire.
    En d'autre terme, le code excutif est le meme, ce sont les valeurs differentes (bien que totalement homogénes) d'une classe à l'autre.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 97
    Par défaut
    Je ne sais pas si c'est applicable à ton cas, mais perso je pense que j'aurais essayé de déporter le problème en transformant la classe Entrepot en factory :

    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
    class Entrepot<T> : IEntrepot
        where T : IFruit, new()
            {
                public T Construct()
                {
                    if (this.IsFull())
                    {
                        return null;
                    }
     
                    var fruit = new T();
     
                    fruit.SetEntrepot(this);
     
                    return T;
                }
            }

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut
    Amusant car justement, j'utilise (à mon plus grand regret) des classes génériques.

    On tombe alors sur mon deuxieme probleme :
    voir ici



    Je suis bloqué depuis lundi, je deviens fou ! seul dev DotNet de la boite. dur dur

Discussions similaires

  1. Classe static et héritage
    Par koyot3 dans le forum C#
    Réponses: 14
    Dernier message: 29/05/2014, 01h27
  2. comportement de static en cas d'héritage
    Par taliesyn427 dans le forum Langage
    Réponses: 2
    Dernier message: 16/02/2010, 17h23
  3. [POO] Méthode static et héritage
    Par Mogwaï dans le forum Langage
    Réponses: 3
    Dernier message: 06/10/2008, 12h31
  4. [POO] Héritage et variable static
    Par Al3x dans le forum Langage
    Réponses: 3
    Dernier message: 23/12/2007, 17h27
  5. [héritage] héritage d'une variable static
    Par yaya44 dans le forum Langage
    Réponses: 14
    Dernier message: 29/09/2004, 13h36

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