En Java (et en C++), un " Protocole " est une classe (virtuelle). ... On peut simuler une classe virtuelle en Objective-C ; il suffit d'implémenter les méthodes " virtuelles " en balançant une exception.
J'utiliserais le terme abstrait plutôt que virtuel.
en ObjC toutes les méthodes sont virtuelles par défaut, mais il n'existe pas de méthodes abstraites, alors faut ruser...
<br />-(void) maMethodeAbstraite<br />{<br /> NSLog(@"[%@: %s] must be implemented !",[self class],_cmd)<br />}<br />
ça et les variables statiques, ObjC c'est un peu bricolo par moment
ça et les variables statiques, ObjC c'est un peu bricolo par moment
Je crois surtout qu'il faut faire avec ce qu'il y a dans Objective C, et il y a beaucoup, sans essayer de simuler des ressources qu'il y a dans d'autres langages. Donc, comme le disait Schlum dans le post sur les variables statiques, faut se débrouiller autrement, et si on se rendait compte alors que c'est plus clair ... ?
ça et les variables statiques, ObjC c'est un peu bricolo par moment
Donc, comme le disait Schlum dans le post sur les variables statiques, faut se débrouiller autrement, et si on se rendait compte alors que c'est plus clair ... ?
En C, C++, Java, ObjectiveC, j'utilise des variables statiques tout le temps, désolé :P
Tiens j'avais même pas fait gaffe qu'il n'y avais pas de variable statique. Ca doit être bien chiant du coup. Et c'est pareil tout à l'heure je me demandais: "tiens mais c'est étrange il n'y a pas de public,private... pour les méthodes." Je sais bien que les attributs sont forcément private et c'est nickel comme ça, mais les méthodes du coup, comment on fait si on en veux une privé?
Tiens j'avais même pas fait gaffe qu'il n'y avais pas de variable statique. Ca doit être bien chiant du coup.
Le mot statique est utilisé dans des sens très divers selon les langages. Les variables statiques du C sont parfaitement utilisables en Objective-C, tout ce qui est C est utilisable en Objective-C.
dans 1235141812:
Et c'est pareil tout à l'heure je me demandais: "tiens mais c'est étrange il n'y a pas de public,private... pour les méthodes." Je sais bien que les attributs sont forcément private et c'est nickel comme ça, mais les méthodes du coup, comment on fait si on en veux une privé?
% gcc pgm.m -o pgm -framework Foundation % pgm Variable statique dans une méthode : Avec a1 truc=1 truc=2 truc=3 Variable statique dans une méthode : Avec a2 truc=4 truc=5 Variable statique de classe : Avec a1 ou a2 machin=1 machin=2 machin=3 machin=4 %
Tiens, moi non plus. Mes méthodes "protégées" commencent par un _ . On fait ainsi en Python, et je trouve cette autodiscipline moins contraignante que revenir dans le .h. Quant aux méthodes privées... je dois dire que je n'en saisis pas l'intérêt (sans doute parce que je n'ai jamais travaillé sur de très gros projets).
Je crois que les mots-clé @public@private@protected ne s'appliquent qu'aux variables, pas aux méthodes de toute manière. Et ça n'a pas vraiment la même définition qu'en Java / C++ vu qu'une classe ne peut pas dériver avec un de ces types d'une autre classe.
@public -> accessible partout (comme pour une structure) @protected -> accessible que dans self et dans les objets de même classe, ou de classe dérivée... (mais il faut dans ce cas les caster) @private -> accessible que dans self et dans les objets de même classe
Ah ouais? Bas je croyais qu'un protocol n'étais qu'un "protocole" justement, une règle qu'il fallait respecter et rien d'autre. Du coup je me demande comment ça marche et si c'est une bonne idée finallement d'utiliser ça.
Ah ouais? Bas je croyais qu'un protocol n'étais qu'un "protocole" justement, une règle qu'il fallait respecter et rien d'autre. Du coup je me demande comment ça marche et si c'est une bonne idée finallement d'utiliser ça.
C'est une directive du compilateur... Je suppose que c'est transformé en quelque chose d'équivalent au niveau proc à "id<NomProtocole>"
Réponses
J'utiliserais le terme abstrait plutôt que virtuel.
en ObjC toutes les méthodes sont virtuelles par défaut, mais il n'existe pas de méthodes abstraites, alors faut ruser...
ça et les variables statiques, ObjC c'est un peu bricolo par moment
Je crois surtout qu'il faut faire avec ce qu'il y a dans Objective C, et il y a beaucoup, sans essayer de simuler des ressources qu'il y a dans d'autres langages. Donc, comme le disait Schlum dans le post sur les variables statiques, faut se débrouiller autrement, et si on se rendait compte alors que c'est plus clair ... ?
suis non violent :fouf):
En C, C++, Java, ObjectiveC, j'utilise des variables statiques tout le temps, désolé :P
Et c'est pareil tout à l'heure je me demandais:
"tiens mais c'est étrange il n'y a pas de public,private... pour les méthodes."
Je sais bien que les attributs sont forcément private et c'est nickel comme ça, mais les méthodes du coup, comment on fait si on en veux une privé?
Le mot statique est utilisé dans des sens très divers selon les langages.
Les variables statiques du C sont parfaitement utilisables en Objective-C, tout ce qui est C est utilisable en Objective-C.
Voir les mots-clés @public , @private, @protected
Franchement, je ne m'en suis jamais servi.
Ce qui donne sur la console :
% gcc pgm.m -o pgm -framework Foundation
% pgm
Variable statique dans une méthode : Avec a1
truc=1
truc=2
truc=3
Variable statique dans une méthode : Avec a2
truc=4
truc=5
Variable statique de classe : Avec a1 ou a2
machin=1
machin=2
machin=3
machin=4
%
Tiens, moi non plus.
Mes méthodes "protégées" commencent par un _ . On fait ainsi en Python, et je trouve cette autodiscipline moins contraignante que revenir dans le .h. Quant aux méthodes privées... je dois dire que je n'en saisis pas l'intérêt (sans doute parce que je n'ai jamais travaillé sur de très gros projets).
Et ça n'a pas vraiment la même définition qu'en Java / C++ vu qu'une classe ne peut pas dériver avec un de ces types d'une autre classe.
@public -> accessible partout (comme pour une structure)
@protected -> accessible que dans self et dans les objets de même classe, ou de classe dérivée... (mais il faut dans ce cas les caster)
@private -> accessible que dans self et dans les objets de même classe
@protocol(<NomProtocole>) permet de déclarer un pointeur sur une instance de " classe " NomProtocole.
Du coup je me demande comment ça marche et si c'est une bonne idée finallement d'utiliser ça.
C'est une directive du compilateur... Je suppose que c'est transformé en quelque chose d'équivalent au niveau proc à "id<NomProtocole>"