Et merci d'éviter ce genre d'énormités :roll:
Version imprimable
Citation:
je veux dire avec de vrai arguments technique pas ce que les personne pense
Ca me parait etre une vision bien etroite et personnelle d'interprete ce sujet.Citation:
Et je confirme faire du statique ce n'est pas de l'objet.(conseil : merci de bien réviser les concept objet)
d'accord avec Tober, un méthode statique peut être considérée comme une facilité d'écriture qui évite de faire précéder l'appel à la méthode par un Create d'un objet temporaire (et éventuellement de la faire suivre par un Dispose).Citation:
xxx : Et je confirme faire du statique ce n'est pas de l'objet.(conseil : merci de bien réviser les concept objet)
Tober :Ca me parait etre une vision bien etroite et personnelle d'interprete ce sujet.
si t'avais bien lu le thread, tu aurais compris que la seule chose qui pourrait amener une différence de perf entre deux appels méthodes (statique ou pas), c'est l'utilisation de call ou callvirt.
Rien n'incite à penser que le garbage collector considère différemment les variables selon qu'elles sont déclarées dans une méthode d'instance ou dans une méthode statique.
Tant de sollicitude me touche. Je m'en vais de ce pas expliquer aux concepteurs de C++, C# et java d'enlever ce mot clé impie. :aie:
Quand le code est long et que les objets intègrent des relations d'héritage.Citation:
Est-ce que tu peux développer un peu plus?
Je conçois que c'est pratique, as-tu des exemples du cas contraire?
Bref, dès que ça devient plus compliqué de faire comme ça, je le fais pas.:lol:
Désolé je trouve pas mieux comme définition, c'est vraiment au feeling.
a+
:koi:
Je ne connais pas un seul langage objet qui ne propose pas la possibilité de faire des méthodes statiques... ce n'est pas parce que ces méthodes ne sont pas liées à une instance en particulier que ce n'est "pas de l'objet". Je serais curieux de connaître les sources qui te permettent d'affirmer ça... :roll:
La staticité d'une methode ne change rien à ce qu'il se passe ailleurs. Si l'objet est une classe, il est alloué dans le tas managé, si c'est une structure, il est stocké "in place".
Donc, je veux bien croire que sur certains langages, la difference static/instance puisse avoir une repercussion notable (et encore) en terme de perfs, mais, en toute honneteté, en milieu managé, cette difference, si elle existe (je n'ai pas reussi à ecrire un test correct pour le mettre en evidence), est tout à fait negligeable. Et encore, c'est sans compter toutes les optimisations que pourrait etre amené à faire soit le compilateur soit le runtime (et ca, à part jouer du desassembler).
Et les membres statiques peuvent tout à fait entrer dans une pratique objet, je ne vois pas tellement le probleme.
Je pense qu'il pose cette affirmation par rapport au fait qu'on définit en procédural une variable statique en tant que variable globale.
Je suis d'avis de croire que les membres statiques font partie de la POO vu que le but c'est d'éviter de créer une instance rien que pour appeler une méthode par exemple. Faire une corrélation entre variable globale et membre statique peut je pense permettre d'appréhender plus facilement la POO quand on switch du procédural à la POO.
Delphi, jusquà la version 6 incluse;)Citation:
tomlev: Je ne connais pas un seul langage objet qui ne propose pas la possibilité de faire des méthodes statiques...
Pourtant c'est la même personne qui a créé Delphi et C#...
J'aurais plutot la remarque inverse...Citation:
Envoyé par bartoumi
le mot clef "static" n'existe pas seulement en POO ?
Bonjour
Ce n'est pas un comparatifs de langages que je cherche, c'est vraiment une vrai étude et/ou une réflexion (AVEC ARGUMENTS ET RÉFÉRENCES) sur le sujet
1- Performance d'exécution.
2- Gestion de mémoire
3- Règles de choix entre Statique ou non.
Merci de s'en tenir au sujet.
La discussion comme vous le remarquez n'est pas si innocente que ça, je l'ai lancer suite a une discussion entre collègues et j'ai remarqué qu'on maitrise pas bien le sujet donc je voulais partager avec vous cette réflexion afin d'élever le niveau.;)
D'avance merci
On s'acharne à te démontrer, et SirJulio est descendu jusqu'au code MSIL pour ça, qu'il n'y a pas de lien sensible entre performance et staticité. Qu'il n'y a pas de lien entre staticité et gestion de la mémoire. Que veux-tu de plus ?
Je répète : la staticité est un concept de POO, pas de compilation ; il se justifie parce que toute méthode n'est pas liée à une instance. Si ta méthode fait partie d'un objet en tant qu'entité autonome, fais en une fonction membre. Si elle n'est qu'une fonction "pure" (style Math.sin au hasard) ou si elle n'est pas liée à un objet précis, fais en une fonction statique.
Autant que je sache, ces deux dernières lignes sont équivalentes fonctionnellement et en termes de perf. Sauf que la deuxième est lourde.Code:
1
2
3
4
5
6
7
8
9
10 class A { int i; public void f() { i = 3; } public static void g(A a) { a.i = 3; } } A a = new A(); a.f(); A.g(a);
Les fonctions membres (et j'ignore la virtualité) ne sont qu'une notation.
Merci de nous recadrer sur le sujet alors que c'est toi qui nous pousse à dévier avec des énormités du genre "statique = procédural" !
On te l'a dit, l'appel à une méthode statique est potentiellement plus rapide mais la différence est négligeable (voir inexistante) dans 99% des cas.
Personnellement, pour pouvoir noter une différence, j'ai dû tester avec une hiérarchie de profondeur 6.
Les membres et méthodes statiques sont alloués dans une zone spéciale du tas : le HFH (High Frequency Heap). Il s'agit d'une zone distincte qui n'est pas sous la gestion du GC et qui est unique par domaine.
La nature même de la staticité répond déjà à la question...et des compléments ont déjà été apportés dans cette discussion.
Ouais mais en C, "static" veut dire constante non ?Citation:
Envoyé par tomlev
Je ne parlais pas du mot statique, mais de la "fonctionnalite" :P