OVH Cloud OVH Cloud

Objective-C

33 réponses
Avatar
lists
Bonjour,

Je commence à lire quelques doc sur l'Obj-C afin de commencer
(peut-être) à découvrir Cocoa. (Jusqu'à présent, je n'ai toujours
programmé qu'avec InterfaceLib puis Carbon)

Je n'ai pas trouvé de forum fr dédié à l'Obj-C. Je poste donc ici.

Question :
Peut-on définir pour un objet des opérateurs +, *, etc. comme en C++ ?
Si oui, comment ?
SI non, la solution usuelle est-elle Obj-C++ ?

--
R: Parce que ça renverse bêtement l'ordre naturel de lecture!
Q: Mais pourquoi citer en fin d'article est-il si effroyable?
R: Citer en fin d'article
Q: Quelle est la chose la plus désagréable sur les groupes de news?

10 réponses

1 2 3 4
Avatar
DINH Viêt Hoà

Question :
Peut-on définir pour un objet des opérateurs +, *, etc. comme en C++ ?


non.

SI non, la solution usuelle est-elle Obj-C++ ?


Connais-tu d'autres usages de cette redéfinition d'opération autre que
les opérations sur vecteurs ou matrice ?

Personnellement, je trouve que redéfinir ces opérateurs rendu un peu
difficile la compréhension du code.
La sémantique des opérateurs est du coup un petit peu trop "riche" à mon
goût.

la solution usuelle est de définir des méthodes "addition",
"multiplication", etc.

--
DINH V. Hoa,

"on dirait un gamin de 2 ans" -- coin-coin

Avatar
Gilles
Je n'ai pas trouvé de forum fr dédié à l'Obj-C. Je poste donc ici.
si tu tapes ObjC dans Google....

http://forum.macbidouille.com
http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/index.html
http://www.projectomega.org
http://cocoa.mac-fan.com
http://www.macfr.com

http://cocoa-x.com/ (plus java)
http://cappuccino.devue.be/tutoriels/tuto05b.htm
http://www.mosx.net/
http://developer.apple.com/fr/


Question :
Peut-on définir pour un objet des opérateurs +, *, etc. comme en C++ ?


je ne crois pas...

Si oui, comment ?
SI non, la solution usuelle est-elle Obj-C++ ?


je sais pas le faire mais on peu inclure du C++ dans du code ObjC

Pour info intialement ça parait imbuvable, et ça l'est, mais finalement
on s'y fait

en tout ca Cocoa c'est presque le rève...

Avatar
lists
Gilles wrote:

Pour info intialement ça parait imbuvable,


Je suis d'acccord.
J'ai lu la doc du « CurrencyConverter ».
Ils disent « it is amazingly easy ».
Franchement, je trouve que c'est quand même assez compliqué pour un
simple convertisseur de devises.
C'est peut-être parce que je suis encore très habitué à Carbon.

Je trouve assez déroutant de définir des tas de trucs dans
InterfaceBuilder que j'aurais eu tendance à vouloir déclarer dans le
code.

et ça l'est, mais finalement
on s'y fait

en tout ca Cocoa c'est presque le rève...


J'admets que je suis séduit par le design de Obj-C/Cocoa.
Ce qui m'ennuie, c'est que je suis obligé de tout réapprendre...
Avec Carbon, je savais (presque) tout faire.
Mais bon, c'est amusant d'apprendre un nouveau truc.

--
R: Parce que ça renverse bêtement l'ordre naturel de lecture!
Q: Mais pourquoi citer en fin d'article est-il si effroyable?
R: Citer en fin d'article
Q: Quelle est la chose la plus désagréable sur les groupes de news?

Avatar
lists
DINH Viêt Hoà wrote:

Connais-tu d'autres usages de cette redéfinition d'opération autre que
les opérations sur vecteurs ou matrice ?


Justement, je voulais définir les nombres complexes.
Mais j'avoue que j'aimais bien le côté algébriste du C++.

On peut, en outre, définir l'opérateur << pour les streams, ce qui est
assez pratique (et joli) quand même.

Il y a aussi les opérateur =, ==, != et < dont je me servais assez
souvent.
Ils sont très utiles dès que l'on veut utiliser les algos de la libc++
sur des objets.
Par exemple, je définis un objet quelconque Objet. Je peux faire un
tableau avec std::vector<Objet>.
Les algos de tri (par exemple) se basent sur la présence des opérateurs
Objet::operator< et Objet::operator=.
Ainsi les algos de la libc++ peuvent marcher avec *n'importe* quel objet
de façon totalement transparente.

Si on est obligé de définir une méthode. L'un pourra l'appeler
« compare » l'autre « cmpobject », un autre « compobj », etc. Comment
alors faire un algo qui marche avec tout le monde ?

--
R: Parce que ça renverse bêtement l'ordre naturel de lecture!
Q: Mais pourquoi citer en fin d'article est-il si effroyable?
R: Citer en fin d'article
Q: Quelle est la chose la plus désagréable sur les groupes de news?

Avatar
DINH Viêt Hoà

Justement, je voulais définir les nombres complexes.
Mais j'avoue que j'aimais bien le côté algébriste du C++.

On peut, en outre, définir l'opérateur << pour les streams, ce qui est
assez pratique (et joli) quand même.


en objective C, tu le fais en redéfinissant l'appel "description".

Il y a aussi les opérateur =, ==, != et < dont je me servais assez
souvent.
Ils sont très utiles dès que l'on veut utiliser les algos de la libc++
sur des objets.
Par exemple, je définis un objet quelconque Objet. Je peux faire un
tableau avec std::vector<Objet>.
Les algos de tri (par exemple) se basent sur la présence des opérateurs
Objet::operator< et Objet::operator=.
Ainsi les algos de la libc++ peuvent marcher avec *n'importe* quel objet
de façon totalement transparente.


(la libc++ est-elle définie par un standard ? ou parles-tu de la STL ?)

même chose en C, en bibliothèque standard C, il existe un appel
permettant de trier un tableau contenant des objets dont on peut choisir
le type. ( qsort() )

Si on est obligé de définir une méthode. L'un pourra l'appeler
« compare » l'autre « cmpobject », un autre « compobj », etc. Comment
alors faire un algo qui marche avec tout le monde ?


de même que le tri de "la libc++" oblige le programmeur à
redéfinir les opérateurs < > <= >= == !=, une fonction de tri peut
obliger le programmeur à définir une méthode de comparaison de deux
objets.

C'est d'ailleurs le cas de NSMutableArray dans Foundation avec les
différents usages possibles :

- (void)sortUsingDescriptors:(NSArray *)sortDescriptors

- (void)sortUsingFunction:(int (*)(id, id, void *))compare
context:(void *)context

- (void)sortUsingSelector:(SEL)comparator

--
DINH V. Hoa,

"on dirait un gamin de 2 ans" -- coin-coin

Avatar
lucsky
Gilles wrote:

http://forum.macbidouille.com


BwaahaahahaaaahahahaaAHHAHAhAhahahahHAHAhaaa !!!

--
Luc Heinrich -

Avatar
DINH Viêt Hoà

Ce qui m'ennuie, c'est que je suis obligé de tout réapprendre...
Avec Carbon, je savais (presque) tout faire.
Mais bon, c'est amusant d'apprendre un nouveau truc.


moui, enfin, en mettant de côté l'aspect langage, tu retrouves la même
chose que ce que tu as d'habitude, non ?

--
DINH V. Hoa,

"on dirait un gamin de 2 ans" -- coin-coin

Avatar
Éric Lévénez
Le 29/05/04 18:36, dans <1gek8l5.v3q09w10jq22oN%,
« Julien Salort » a écrit :

Justement, je voulais définir les nombres complexes.


Rappel : les nombres complexes sont intégrés dans la norme C depuis déjà
quelques années et par le fait ils sont intégrés dans Objective-C :

HAL3:~/tmp eric$ cat test.m
#import <stdio.h>
#import <math.h>
#import <complex.h>

int main(void)
{
double complex z;
double ph;

z = 1 + I * 1;
(void)printf("z = %f + I * %fn", creal(z), cimag(z));

ph = carg(z);
(void)printf("ph = PI / %fn", (4.0*atan(1.0)) / ph);

return 0;
}
HAL3:~/tmp eric$ cc test.m -o test -lmx
HAL3:~/tmp eric$ ./test
z = 1.000000 + I * 1.000000
ph = PI / 4.000000

--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.

Avatar
lists
DINH Viêt Hoà wrote:

moui, enfin, en mettant de côté l'aspect langage, tu retrouves la même
chose que ce que tu as d'habitude, non ?


Ce dont j'ai l'habitude, ce sont les API, les managers, etc. Bref, tout
ce qui fait Carbon.

Bien sûr, on retrouve des points communs.

Ce que je veux dire, c'est qu'avec Carbon, je n'ai pas besoin d'aller
chercher une documentation pour ouvrir un fichier, afficher une image,
ouvrir une fenêtre, désactiver un menu, imprimer un fichier, etc. alors
qu'avec Cocoa qui est nouveau pour moi, la moindre petite chose demande
de consulter la doc.

--
R: Parce que ça renverse bêtement l'ordre naturel de lecture!
Q: Mais pourquoi citer en fin d'article est-il si effroyable?
R: Citer en fin d'article
Q: Quelle est la chose la plus désagréable sur les groupes de news?

Avatar
lists
Éric Lévénez wrote:

Rappel : les nombres complexes sont intégrés dans la norme C depuis déjà
quelques années et par le fait ils sont intégrés dans Objective-C :


Je ne savais pas.
Merci pour l'info.
Ça m'évitera de devoir réinventer la roue.
(même si ce n'est pas une roue très compliquée)

--
R: Parce que ça renverse bêtement l'ordre naturel de lecture!
Q: Mais pourquoi citer en fin d'article est-il si effroyable?
R: Citer en fin d'article
Q: Quelle est la chose la plus désagréable sur les groupes de news?

1 2 3 4