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 :

Variable et Attribut, Fonction et méthode


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

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

    Informations forums :
    Inscription : Mai 2014
    Messages : 36
    Par défaut Variable et Attribut, Fonction et méthode
    Bonjour,

    J'aimerais savoir pourquoi certaines personnes disent qu'un attribut est différent d'une variable ou qu'une méthode est différente d'une fonction.

    Quand on défini ou déclare une fonction en dehors d'une classe, on appel bien ça une FONCTION et non une METHODE, pourtant les 2 peuvent faire la même chose il y'aura quand même des gens qui diront qu'une méthode c'est pas une fonction et qu'une variable n'est pas un attribut.

    Si quelqu'un peut affirmer ce que je dis ou au contraire m'éclairer sur ce sujet parce que pour moi déclarer une variable dans une classe ou pas ça reste une variable.

    Merci

  2. #2
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    "Attribut" est synonyme de "variable membre". Ce n'est pas un terme propre au C++, mais du monde objet. Il ne porte pas à ambiguïté, même si depuis le C++11 nous avons officiellement des attributs qui désignent tout autre chose.

    "Méthode" est un terme impropre en C++. Pour la plupart des gens cela signifie "fonction membre". Dans le TC++PL, Stroustrup définit "méthode" comme "fonction membre virtuelle". Si on se rapproche de la définition UML où "méthode" est une "spécialisation d'opération", la définition de Stroustrup me parait plus juste. De fait, je me force à ne jamais utiliser "méthode" dans le contexte C++ pour désigner des fonctions. C'est donc "fonction" au sens large, "fonction libre" pour les hors classe, "fonction membre" pour les définies dans des classes. (Plus tous les autres machins appelables: foncteurs, lambdas...)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

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

    Informations forums :
    Inscription : Mai 2014
    Messages : 36
    Par défaut
    Merci pour ta réponse, dans ce cas nous sommes bien d'accord, un attribut est une variable membre d'une classe et une méthode est une fonction membre d'une classe mais ça reste strictement la même chose non ? Une fonction qu'elle soit membre d'une classe ou pas reste pour moi une fonction, de même pour une variable.

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Il y a des subtilités, les "attributs" au sens POO sont liés à un objet de la classe dont on parle.
    De même les méthodes ont un paramètre caché, this, qui est l'objet sur laquelle on l'appelle.

    Et Luc Hermitte te dit justement que ce ne sont pas des termes adaptés au C++.
    En C++, tu trouveras des attributs tels que [[noreturn]] et le terme méthode n'est pas utilisé dans la norme. (on parle de fonction membre non-statique)

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

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

    Informations forums :
    Inscription : Mai 2014
    Messages : 36
    Par défaut
    Citation Envoyé par ternel Voir le message
    Il y a des subtilités, les "attributs" au sens POO sont liés à un objet de la classe dont on parle.
    De même les méthodes ont un paramètre caché, this, qui est l'objet sur laquelle on l'appelle.

    Et Luc Hermitte te dit justement que ce ne sont pas des termes adaptés au C++.
    En C++, tu trouveras des attributs tels que [[noreturn]] et le terme méthode n'est pas utilisé dans la norme. (on parle de fonction membre non-statique)
    J'avais bien compris que le mot attribut n'était pas propre au C++ mais à la notion de POO peut importe le langage. Mais on est au final d'accord pour dire qu'une variable qu'elle soit membre d'une classe ou pas reste une variable, elle n'a rien de différent, on l'appelle attribut ça permet d'ailleurs de savoir qu'elle fait partie d'une classe mais au final son utilité est la même et c'est la même chose pour les fonctions. C'était juste pour affirmer certaines points parce que lorsque tu rencontres des devs qui te sortent "une méthode c'est pas une fonction, c'est pas pareil" mais qui sont incapables de t'expliquer pourquoi c'est assez énervant.

    Merci pour vos réponses

  6. #6
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    AMA, beaucoup font un blocage sur la syntaxe sans avoir le moindre recul.

    D'abord pourquoi la "méthode" ne devrait être liée qu'à un seul objet? Quid du multi-dispatch ? Quid de CLOS, un des tous premiers langages OO (d'ailleurs Alan Kay, le premier à avoir dit "object oriented", et donc l'inventeur de la définition d'une certaine façon valide que CLOS est OO, à contrario de C++, Java et bien d'autres). Le truc intéressant dans CLOS, c'est que la syntaxe d'appel est "(f x y)". Autre détail, il est fonctionnel et non impératif...
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  7. #7
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Citation Envoyé par LuNaTiC93 Voir le message
    Merci pour ta réponse, dans ce cas nous sommes bien d'accord, une attribut est une variable membre d'une classe et une méthode est une fonction membre d'une classe mais ça reste strictement la même chose non ? Une fonction qu'elle soit membre d'une classe ou pas reste pour moi une fonction, de même pour une variable.
    Presque, une "méthode" est une "fonction membre virtuelle" si on suit le vocabulaire du créateur du langage. En ce qui me concerne, il a créé le langage, donc son vocabulaire est le vocabulaire officiel dans le contexte de ce langage.

    Et sinon, une fonction qu'elle soit membre ou non, cela reste en effet une fonction. La subtilité est qu'une fonction membre non-statique dispose d'un paramètre implicite: celui de l'objet sur laquelle la fonction s'appelle.

    Pour les curieux, renseignez-vous sur l'UCS (Uniform Call Syntax). Comme quoi, tout cela, ce n'est jamais que du sucre syntaxique.

    PS: Enfin un attribut au sens objet est tout autant une variable qu'un champ de structure l'est.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

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

Discussions similaires

  1. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  2. Réponses: 3
    Dernier message: 08/12/2005, 14h41
  3. retour de variable d'une fonction
    Par thunderblade dans le forum ASP
    Réponses: 4
    Dernier message: 28/04/2005, 13h27
  4. petit souci avec des variables avec des fonctions psql
    Par dust62 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 02/04/2005, 13h45
  5. Réponses: 5
    Dernier message: 09/02/2005, 18h50

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