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 :

différence entre Surcharge et redéfinition. [Débutant]


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 102
    Points : 66
    Points
    66
    Par défaut différence entre Surcharge et redéfinition.
    Bonjour,


    Je me mélange un peu ces deux concepts de la POO, la différente ne m'est pas evidente.


    Je veux bien que quelqu'un m'explique en deux mots la différence !


    J.C

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    Surcharge ==> Avoir une même méthode qui possède des paramètres de nature différentes...

    Genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    void Message(string a);
    void Message(int a);
    void Message(string a, string b);
    La redéfinition se passe dans le cas d'un héritage et plutôt que d'utiliser la méthode du parent on va redéfinir la méthode (en utilisant la même signature).
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  3. #3
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Bonjour,


    Dans ton exemple, s'agit-il de la même méthode, ou bien de méthodes différentes ayant le même nom mais avec des paramètres différents ?



    J.C

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur
    Inscrit en
    Octobre 2014
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Octobre 2014
    Messages : 322
    Points : 124
    Points
    124
    Par défaut
    c'est le meme nom de méthode avec des parametres différents mais la fonction fait la meme chose

  5. #5
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Donc c'est une seule et même méthode ??

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur
    Inscrit en
    Octobre 2014
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Octobre 2014
    Messages : 322
    Points : 124
    Points
    124
    Par défaut
    la surcharge c'est soit une méthode qui acceptes plusieurs paramètres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void Message(int a)
    void Message(int a, int b)
    soit une méthode qui acceptes plusieurs types de parametre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void Message(int a)
    void Message(string b)
    c'est juste que la méthode tu peux l'appeller de différentes facon !

    la redéfinition c'est une methode qui existe dans la classe Mère mais que tu veux modifier

  7. #7
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Ok, merci.

    Je commence à y voir plus clair

  8. #8
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Version courte :
    La surcharge c'est quand on veut "faire la même chose" peu importe les arguments donnés
    La redéfinition c'est quand on veut "faire la même chose" peu importe le type dans lequel on est dans la hiérarchie

    Version moins courte :
    La surcharge c'est avoir plusieurs méthodes d'une même classe avec des signatures différentes ; cela permet de définir le même comportement pour des entrées (arguments) différents.
    La redéfinition c'est d'avoir une méthode dans une classe "fille" qui "adapte" (pour pas utiliser redéfinir) un comportement hérité de sa classe "parent" à ses spécificités.

    Exemples
    -----------

    Pour la surcharge :
    J'ai une classe Point avec une méthode pour calculer la distance entre le point courant et un autre point, faire double Distance (Point p) fonctionne ; sauf qu'après réflexion je me dis, c'est embêtant de devoir à chaque créer un objet Point pour pouvoir le passer en argument ; donc j'écris une nouvelle version de la méthode Distance dans la même classe qui prend maintenant en argument ses coordonnées double Distance (int x, int y) et maintenant j'ai le choix; si j'ai déjà un objet Point de créé je peux utiliser la première surcharge, sinon je peux utiliser la seconde en donnant juste les coordonnées.

    Note : souvent dans ce type de cas de figure les différentes surcharges appellent une même méthode (potentiellement une des surcharges ou une méthode privée) qui elle s'occupe du boulot concret ce qui peut donner ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Point
    {
        public double Distance (Point other)
        {
            return Distance (other.X, other.Y);
        }
     
        public double Distance (int x, int y)
        {
            // un calcul
        }
    }
    Ça permet d'éviter de mettre le code de calcul en double


    Pour la redéfinition :
    Imaginons que l'on ait fait une classe Bouton qui représente un bouton sur une interface ; il a plein de méthodes dont une qui permet de dire comment le dessiner au "truc" qui gère le rendu. Maintenant on fait une classe BoutonPoussoir qui est un bouton particulier dans le sens où au premier clic il reste enfoncé au second il reprend son état initial etc. Donc sa manière de se dessiner est différente (il faut le représenter enfoncé où non selon l'état).
    Du coup il faut pouvoir redéfinir la manière de dessiner ; pour cela il faut que Dessiner dans Bouton soit redéfinissable (virtual en C#) et dans BoutonPoussoir on redéfinira (override en C#) la méthode mais on ne change pas la signature de la méthode (même nombre et types d'arguments).

    Ça sert par exemple lorsque l'on a une liste de bouton qui contient différents type de Bouton (donc ici des Bouton et des BoutonPoussoir) et qu'on veut que chacun se dessine on va boucler sur la liste et appeler la méthode Dessiner de chacun et ce sera la bonne méthode qui sera utilisée pour chaque type de bouton (Bouton.Dessiner pour les instances de Bouton et BoutonPoussoir.Dessiner pour les instances de BoutonPoussoir).
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciel .
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciel .
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Points : 9
    Points
    9
    Par défaut détail majeur : la SIGNATURE de la fonction
    Citation Envoyé par Math71 Voir le message
    la surcharge c'est soit une méthode qui acceptes plusieurs paramètres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void Message(int a)
    void Message(int a, int b)
    soit une méthode qui acceptes plusieurs types de paramètre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void Message(int a)
    void Message(string b)
    c'est juste que la méthode tu peux l’appeler de différentes facons !

    la redéfinition c'est une méthode qui existe dans la classe Mère mais que tu veux modifier
    -> comme c'est déjà précisé plus haut : penser à la signature:
    -> la surcharge est une fonction de même nom, qui fait (normalement) la même chose mais avec une signature différente (pas les même paramètres ou pas dans le même ordre).
    -> la redéfinition se passe dans une classe fille, la fonction redéfinie possède la même signature

    selon wiki :
    surcharge = polymorphisme ad hoc = overloading
    redéfinition = polymorphisme d'inclusion = overriding

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

Discussions similaires

  1. Différence entre un "bidouilleur" et un Pro ?
    Par christ_mallet dans le forum Débats sur le développement - Le Best Of
    Réponses: 290
    Dernier message: 28/11/2011, 10h53
  2. Réponses: 5
    Dernier message: 11/12/2002, 12h31
  3. Différence entre TCP, UDP, ICMP
    Par GliGli dans le forum Développement
    Réponses: 1
    Dernier message: 13/09/2002, 08h25
  4. Différences entre jmp, jz, jnz, etc
    Par christbilale dans le forum Assembleur
    Réponses: 3
    Dernier message: 05/07/2002, 15h09
  5. Réponses: 3
    Dernier message: 07/05/2002, 16h06

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