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 :

Objet C# avec 2 méthodes distinctes [Débutant]


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 67
    Points : 48
    Points
    48
    Par défaut Objet C# avec 2 méthodes distinctes
    Bonjour,

    Je cherche à avoir 3 méthodes distinctes pour une même class.

    Par exemple :
    J'ai une class Voiture et je souhaite faire appel à une méthode comme Rouler() dont la méthode Rouler() est redéfinit si c'est une voiture à essence, hybride ou électrique.

    J'aimerai savoir s'il y a un autre moyen que faire une class Voiture avec 3 méthodes RoulerEssence(), RoulerHybride(), RoulerElectrique() ?

    Je vous en remercie

    Edition : j'ai oublié de préciser que je ne souhaite pas faire de l'héritage (c'est peut-être tordu...)

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 027
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 027
    Points : 5 468
    Points
    5 468
    Par défaut
    C'est un cas école d'héritage non?

    La mère est une Voiture, les filles sont VoitureEssence, VoitureHybride et VoitureElectrique


    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
    public class Voiture
    { 
        public virtual void Rouler(){ Console.WriteLine("Je roule pas sans moteur"); }
    }
     
    public class VoitureEssence : Voiture
    { 
        public override void Rouler(){ Console.WriteLine("Je roule à l'essence"); }
    }
     
    public class VoitureHybride : Voiture
    { 
        public override void Rouler(){ Console.WriteLine("Je roule parfois"); }
    }
     
    public class VoitureElectrique : Voiture
    { 
        public override void Rouler(){ Console.WriteLine("Je coute un bras"); }
    }
     
    public class VoitureDiesel : Voiture
    { 
        public override void Rouler(){ Console.WriteLine("Je suis toujours là!"); }
    }

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 67
    Points : 48
    Points
    48
    Par défaut
    Je voulais éviter de passer par de l'héritage, j'ai oublié de le préciser

    Je ne sais pas si par exemple le design pattern Decorator peut faire l'affaire? ou bien des interfaces?

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 027
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 027
    Points : 5 468
    Points
    5 468
    Par défaut
    Citation Envoyé par Unreal Time Voir le message
    Je voulais éviter de passer par de l'héritage, j'ai oublié de le préciser
    Ah...
    C'est le but de la POO, qu'est ce qui te gène dedans?

    Tu peux toujours gérer un enum dans ta classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    enum EMotorisation
    {
    Essence,
    Hybride,
    Electrique
    }
    et dans rouler tu fais un switch sur ton mode, puis tu appelles des méthodes privées.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public void Rouler()
    {
    switch(modeMotorisation)
    case Essence:
    RoulerEssence();
    break;
     
    .....
     
    }
     
    private void RoulerEssence(){ ... }
    Ca reste masqué de l'exterieur, tu ne vois que Rouler, mais va bien falloir les ecrires quelque par les méthodes !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 67
    Points : 48
    Points
    48
    Par défaut
    Dur de voir ce regard () mais tu as bien raison

    J'aimerai éviter de faire ce genre d'héritage car derrière j'aimerai par exemple faire le même type de méthode pour les voitures et rajouter par exemple pour ouvrir des vitres, OuvertureManuelles() et OuvertureAutomatique.

    Dans ce cas là, si j'utilise de l'héritage je risque de faire
    VoitureElectrique : Voiture ;
    VoitureElectriqueManuelle : VoitureElectrique ;
    VoitureElectriqueAutomatique : VoitureElectrique ;
    etc etc

    et ça n'en finira plus

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    Citation Envoyé par Unreal Time Voir le message
    Dans ce cas là, si j'utilise de l'héritage je risque de faire
    VoitureElectrique : Voiture
    VoitureElectriqueManuelle : VoitureElectrique
    VoitureElectriqueAutomatique : VoitureElectrique
    etc etc

    et ça n'en finira plus
    Et alors ? quel serait le problème ? dans tous les cas il faudra créer les classes et c'est justement très explicite, maintenable et évolutif.
    De base dit toi plutôt que t'éloigner de la poo dans un langage full poo, c'est prendre des risques...

    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 027
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 027
    Points : 5 468
    Points
    5 468
    Par défaut
    Dans ce cas là c'est plutôt dans la composition qu'il faut voir.

    A priori toute tes voitures ont un Moteur et un SystemeFenetre (pas trouvé mieux comme nom).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class Voiture
    { 
        public Moteur Motorisation{get;set;}
     
        public SystemeFenetre Fenetres {get;set;}
    }
    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
     
    public class Moteur
    { 
        public virtual void Rouler(){ Console.WriteLine("Je roule pas sans moteur"); }
    }
     
    public class MoteurEssence : Moteur
    { 
        public override void Rouler(){ Console.WriteLine("Je roule à l'essence"); }
    }
     
    public class MoteurHybride : Moteur
    { 
        public override void Rouler(){ Console.WriteLine("Je roule parfois"); }
    }
     
    public class MoteurElectrique : Moteur
    { 
        public override void Rouler(){ Console.WriteLine("Je coute un bras"); }
    }
     
    public class MoteurDiesel : Moteur
    { 
        public override void Rouler(){ Console.WriteLine("Je suis toujours là!"); }
    }
    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
     
    public class SystemeFenetre
    { 
        public virtual void Ouvrir(){ Console.WriteLine("J'aimerai bien mais je sais pas comment faire"); }
    }
     
    public class FenetreManuelle : SystemeFenetre
    { 
        public override void Ouvrir(){ Console.WriteLine("Pfff c'est dur"); }
    }
     
    public class FenetreAuto : SystemeFenetre
    { 
        public override void Ouvrir(){ Console.WriteLine("Sans les mains!"); }
    }
    Après pour chacun de tes véhicules il faudra lors de l'instance définir chacun des composants.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Voiture unVoitureDuFutur=new Voiture { Moteur = new MoteurElectrique(), Fenetres= new FenetreAuto()};

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 67
    Points : 48
    Points
    48
    Par défaut
    j'ai bien rigolé avec tes exemples micka

    Merci à vous 2, je pensais que je passais à côté d'un design pattern mais apparemment non

    Codons codons !!

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 027
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 027
    Points : 5 468
    Points
    5 468
    Par défaut
    Ca m'a fait penser à un article sur l'AOP d'Olivier Dahan

    http://www.e-naxos.com/Blog/post/Pro...RealProxy.aspx

    Sans chichi et très orienté pratique.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 67
    Points : 48
    Points
    48
    Par défaut
    C'est très intéressant, merci

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/09/2017, 08h13
  2. [XL-MAC 2011] Problème avec la méthode LoadPicture de l'objet Image dans un Userform
    Par marc-du-fenua dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/01/2017, 06h51
  3. [XL-2010] Problème avec la méthode find d'un objet Range dans une zone filtrée
    Par stargates01 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 28/02/2014, 23h27
  4. Réponses: 27
    Dernier message: 03/02/2003, 12h27
  5. Probleme d'impression avec la méthode TForm->Print()
    Par Kid Icarus dans le forum C++Builder
    Réponses: 13
    Dernier message: 31/07/2002, 14h26

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