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 :

[C#] Pourquoi redéfinir les opérateurs en static ? [Débat]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Par défaut [C#] Pourquoi redéfinir les opérateurs en static ?
    Développeur Java pure souche à la base, je suis en train de découvrir C# à travers le document de Serge Tahé et j'en suis à la section sur la redéfinition des opérateurs. Le problème c'est que j'ai beaucoup de mal à comprendre la logique qui veut que les redéfinitions d'opérateurs soient déclarés statiques, avec comme premier paramètre une instance de la classe ou est redéfini l'opérateur. Est-ce que quelqu'un pourrait m'expliquer pourquoi les concepteurs du langage n'ont pas préféré une approche plus orientée objet qui aurait consisté à déclarer les redéfinitions d'opérateurs comme de simples méthodes d'instances ?

  2. #2
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    En quoi aurait-ce été une approche davantage orientée objet ?

  3. #3
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : SharePoint developpeur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Par défaut
    Une methode static sur une classe, ce n'est jamais qu'une fonction. Il n'y a rien d'objet la dedans.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Je trouve au contraire que les méthodes static sont justement les fonctions classiques dans le concept objet. Si techniquement ce n'est rien de plus qu'une fonction, ça a une signification bien précise, en tout cas pour moi, et je les utilise bien sûr différement des fonctions.

    Une fonction est membre d'une classe, ce n'est pas rien, il y a une notion de portée (la méthode static peut accéder aux membres privés, mais vous allez sans doute me sortir le mot-clef friend).

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Par défaut
    Citation Envoyé par remram44
    JUne fonction est membre d'une classe, ce n'est pas rien, il y a une notion de portée (la méthode static peut accéder aux membres privés, mais vous allez sans doute me sortir le mot-clef friend).
    Accéder aux membre privés static uniquement.
    Sinon, il faut bien une instance de cette classe.
    ...

    Citation Envoyé par Maniak
    Une méthode *globale* en revanche, là oui, ça n'a rien d'OO. Mais la seule façon de reproduire ça en .NET c'est avec un singleton (à consommer avec très grande modération donc), et les méthodes statiques ne sont pas limitées aux singletons (heureusement).
    Je ne vois pas le rapport entre méthode globale et singleton.
    Un singleton permet d'avoir une instance unique. Ce n'est pas utile pour accéder à une méthode static.

  6. #6
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : SharePoint developpeur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Par défaut
    Je ne voulai pas dire que ce n'est pas OO et que ce n'est pas pratique, j'en utilise aussi souvent. C'est très utilisé par exemple en orienté service mais le concept OO de base c'est j'ai un objet et j'applique une action dessus. Avec une méthode static c'est un peu différent. Les propriétés que l'on accède doivent aussi être Static.
    Mais on ne va pas en débattre toute la nuit surtout par forum se serait trop fastidieux.

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Par défaut
    Citation Envoyé par jab
    mais le concept OO de base c'est j'ai un objet et j'applique une action dessus. Avec une méthode static c'est un peu différent. Les propriétés que l'on accède doivent aussi être Static.
    En jetant un coup d'oeil du côté de SmallTalk, la différence est assez vite gommée :
    Les membres non-statiques appartiennent à une instance d'une classe.
    Les membres statiques appartiennent à une instance d'une metaclasse.

    Les instances des classes sont les objets qu'on utilise habituellement.
    Les instances des metaclasses sont les classes elles-mêmes.

    C'est le niveau supérieur, mais le fonctionnement reste le même :)


    Citation Envoyé par NicolasG
    Je ne vois pas le rapport entre méthode globale et singleton.
    Les singletons sont utilisés pour reproduire (grosso modo) une variable globale. Variable globale qui peut donc avoir des méthodes, qui se trouvent donc être des méthodes globales :)

    Pour rejoindre ce qui est dit plus haut :
    Les méthodes d'un singleton sont les méthodes d'une instance (de classe) unique.
    Les méthodes statiques sont les méthodes d'une instance (de metaclasse) unique.

    La manière d'obtenir l'instance unique varie (de peu, un singleton utilise fatalement du statique quelque part :), mais le résultat est le même.

  8. #8
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    Pas d'accord avec jab. C'est une fonction dans un espace de nom.
    D'un point de vue sémantique, la fonction statique a un lien fort avec la classe.
    D'un point de vue technique, pour y accéder, il faut préciser la classe. Il y a donc une partition en espace de nom, qui est importante en objet.

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Par défaut
    Citation Envoyé par jab
    Une methode static sur une classe, ce n'est jamais qu'une fonction. Il n'y a rien d'objet la dedans.
    Une méthode statique appartient à une classe. Une classe est un objet comme un autre. Il n'y a rien de non-OO là-dedans.

    Une méthode *globale* en revanche, là oui, ça n'a rien d'OO. Mais la seule façon de reproduire ça en .NET c'est avec un singleton (à consommer avec très grande modération donc), et les méthodes statiques ne sont pas limitées aux singletons (heureusement).

    Les opérateurs sont très bien au niveau des classes. Ils n'appartiennent pas à une instance donnée.

Discussions similaires

  1. Réponses: 8
    Dernier message: 03/11/2007, 18h01
  2. Redéfinir les marges d'une liste à puces
    Par om.rava dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 01/12/2005, 14h54
  3. question sur les opérateurs
    Par isidore dans le forum C++
    Réponses: 10
    Dernier message: 25/02/2005, 18h46
  4. [.NET] Pourquoi redéfinir la méthode dispose() d'une forme?
    Par Polyptyx dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 07/09/2004, 12h10
  5. les variables globales static
    Par gRRosminet dans le forum C
    Réponses: 8
    Dernier message: 27/04/2002, 08h34

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