[Obj-C] Variables de classes & Méthodes privées

molgow

Membre expert
Club iGen
4 Janvier 2002
5 496
613
42
Suisse
Il est impossible de créer des variables de classes et des méthodes privées à une classe. Est-ce bien vrai ?

J'ai cherché un peu partout, mais il me semble que c'est impossible, ou alors ce sont des possibilités d'Objective-C qui ne sont jamais documentées!

Pour les méthodes privées, je peux comprendre que ça ne soit pas possible, car si je me souviens bien, ça ne l'est pas non plus en Smalltalk! Mais par contre les variables de classes existent en Smalltalk (en Java aussi d'ailleurs), et c'est quelque chose de bien utile!
 
Variables de classes privées :
Dans le fichier.h :

@interface MaClasse : SuperClasse
{
@private
Ici tu peux mettre tes variables de classes privées
}
@end

Méthodes privées :
Dans le fichier.m tout de suite après les #import :

@interface Methodes (PrivateMethods)
Ici tu déclares les méthodes privées de ta classe
@end
 
Merci pour ta réponse, mais la première partie est, il me semble, incorrect. Ce que tu me dis là, c'est pour créer des variables d'instances privées (et non de classes!). Pour être plus clair, je voudrais un équivalent du "static ..." de Java.
 
oui tu as raison, je voulais dire "variables d'instance de classe privée", mais bon je m'avais compris.
smile.gif


 
Tu peux effectivement créer l'équivalent (parce que dans la terminologie Obj-c, cela n'exsite pas) d'une variable de classe.
Il suffit de déclarer une variable static dans le header (fichier .h) de la classe EN DEHORS DE LA DEFINITION DE LA CLASSE !
Exemple:

static VarDeClasse type float;

@interface LaClasse : SuperClasse
{
........
}
@end

Tu pourras alors utiliser ta variable VarDeClasse dans toutes les instances de ta classe et en partager ainsi le contenu.

CQFD.
 
Merci beaucoup pour ta réponse.

Je reste tout de même un peu deçu par l'Objective-C sur ce coup-là. Le Java est bien plus structuré et surtout plus cohérent.
 
Oui oui c'est sûr. Mais jusqu'à maintenant je trouvais le langage Objective-C vraiment génial, et plus le temps passe, plus je me dis qu'en fait, ce sont les frameworks d'Apple qui rendent la programmation en Objective-C si génial, mais absolument pas le langage lui-même !
Il faudrait que j'essaie de me mettre au Cocoa/Java d'ailleurs... :-)
 
molgow,
Il faut savoir que dans la programmation et surtout l'orienté objet, c'est la qualité des frameworks qui est fondamentale. Le langage donne la syntaxe de base.
D'autre part le fait qu'il n'y ait pas de variable de classe dans objective_c,, c'est pas une lacune mais une volonté de ne pas l'implémenter. Il ne faut pas oublier qu'une des qualités voulues pour Objective_c c'est la possibilité de faire du traitement distribué nativement. Ce qui veut dire ton objet peut être envoyé sur une autre machine dans un autre runtime. il peut même y générer de nouvelles instances. Alors dans ce cas ta variable de classe elle sert strictement à rien.
Pour un développeur le langage c'est bien mais les apis c'est ce qui est plus important.
Comme dit Eddy58, tu disposes dans Cocoa de plusieurs mécanismes qui te permettent de le faire de façon parfois plus élégante qu'une variable de classe parfois mal maitrisée.
En parlant de Java n'oublie pas que ceux qui l'on conçu se sont beaucoup inspirés de cocoa (OpenStep à l'époque), et ont impléménté quelques trucs juste pour attirer les développeurs du C++.