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

 Delphi Discussion :

Qu'est ce que overload & override ?


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 169
    Par défaut Qu'est ce que overload & override ?
    bonjour à toutes et à tous,

    J'ai une petite question et je n'arrive vraiment pas à connaître sa réponse

    Pouvez-vous m'expliquer ce qu'est l'overlod et l'overrid ???


    Je vous remerci beaucoup ?

  2. #2
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    L'overload est la surcharge, qui permet d'écrire plusieurs fonctions ayant le même nom, mais acceptant des types de paramètres différents.
    Un exemple est la fonction IIF

    L'override est la ré-implémentation. Elle va de paire avec virtual ou dynamic.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  3. #3
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    overload permet d'ajouter de la confusion dans un programme

    c'est à dire qu'avec overload, le seul nom d'une fonction ne permettra plus de l'identifier, il faut en plus regarder la nature de ses paramètres. ça peut être séduisant, mais personnellement je n'aime pas du tout

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // sans overload
    function IntToStr(i:integer):string;
    function FloatToStr(f:single):string;
    // avec overload 
    function ToStr(i:integer):string; overload;
    function ToStr(f:single):string; overload;
    Delphi déterminera quelle fonction ToStr() il faut utiliser en fonction du type du paramètre qu'on lui soumet.

    Override c'est tout autre chose, c'est dans le contexte des classes, une classe qui dérive d'une autre, peut surcharger une méthode de la classe parente, c'est à dire redéfinir son comportement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    type
     TForme=class
      function Surface:single; virtual; abstract;
     end;
     TCarre=class(TForme)
      function Surface:single; override;
     end;
     TCercle=class(TForme)
      function Surface:single; override;
     end;
    dans l'exemple ci-dessus, TCarre et TCercle sont des formes (TForme), toutes les formes ont une surface, on déclare donc une fonction Surface au niveau de l'ancêtre TForme, mais comme le calcule de celle-ci dépend de chaque forme particulière, la méthode sera virtuelle, et même abstraite dans la mesure ou on ne peut pas définir une valeur par défaut valide.

    et donc TCarre et TCercle surcharge la fonction Surface pour donner leur version du calcul.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 169
    Par défaut
    Je vous remercie beaucoup,

    je comprend mieux maintenant avec vos explications qui sont très clair.

    Merci beaucoup

  5. #5
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Citation Envoyé par Paul TOTH
    overload permet d'ajouter de la confusion dans un programme

    c'est à dire qu'avec overload, le seul nom d'une fonction ne permettra plus de l'identifier, il faut en plus regarder la nature de ses paramètres. ça peut être séduisant, mais personnellement je n'aime pas du tout
    Question de point de vue Certes, je reste très prudent lorsque j'utilise des overload, mais je peux les utiliser lorsque :

    Toutes les méthodes surchargées ont exactement la même fonctionnalité, et que leur seule différence réside dans les paramètres transmis. Souvent, il s'agit alors de paramètres par défaut, ou lorsque plusieurs types de données permettent d'identifier un même élément (par exemple, un ID d'objet ou l'objet lui-même).

    Dans ces cas-là, il n'y a pas de confusion, et c'est même plus facile à lire.

    Mais bon, je crois que je sors un peu du cadre du forum Débutant
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  6. #6
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par sjrd
    Mais bon, je crois que je sors un peu du cadre du forum Débutant
    pas forcément, un débutant à le droit de se forger une idée sur le langage

    en fait je trouve un intéret dans overload et les paramètres par défaut (qui ne sont pas la même chose), quand il est question de garder une compatibilité avec un code précédent.

    inventons un exemple...

    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
     
    // j'ai un objet qui a une méthode Connect()
    procedure TMonObjet.Connect(const Host:string);
     
    // mince, j'aimerai bien pouvoir ajouter un numéro de port,
    // mais ça va mettre le bazar dans les autres projets
    // pas grave, je vais mettre une valeur par défaut
    procedure TMonObjet.Connect(const Host:string; port:integer=1234);
     
    // tient c'est dommage, des fois, j'ai déjà l'adresse IP, il est dommage
    // de forcer une nouvelle résolution d'adresse
     
    procedure TMonObjet.Connect(const Host:string; port:integer=1234); overload;
    procedure TMonObjet.Connect(Addr:integer; port:integer=1234); overload;
     
    // encore que personnellement je préfère
    procedure TMonObjet.Connect(const Host:string; port:integer=1234);
    procedure TMonObjet.ConnectByAddr(Addr:integer; port:integer=1234);
    un autre exemple que j'aime bien, c'est l'API OpenGL, pas mal de fonctions sont déclinées en fonction des paramètres...mais ils ont simplement ajouté un suffixe qui précise ce qu'on fait, je trouve ça très bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // définir un point x,y
    procedure glVertex2i(x,y:integer);
    // idem (f=float, soit un single en Pascal)
    procedure glVertex2f(x,y:single);
    // définir un point x,y,z
    procedure glVertex3i(x,y,z:integer);
    procedure glvertex3f(x,y,z:single);
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/05/2010, 10h42
  2. Qu'est ce que le cache ?
    Par irrou dans le forum Assembleur
    Réponses: 4
    Dernier message: 24/11/2002, 23h28
  3. Qu'est-ce que c'est que Nessus, ça fait quoi exactement ?
    Par PeterT dans le forum Développement
    Réponses: 3
    Dernier message: 24/07/2002, 11h23
  4. Réponses: 3
    Dernier message: 19/07/2002, 15h01

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