[cite]
hibOu :
en fait, j'appelle plutot cela de la surcharge. Mais on peut aussi appeler ca du polymorphisme (ad-hoc).
En fait, je sais plus trop comment s'appelle la fonctionnalité suivante :
Object s = new String("blabla");
System.out.println(s); //appelera println(String) et non println(Object)
En fait, c'est du polymorphisme, mais cela suppose que le compilateur génère la signature en runtime (hé, c'est une String pas un Object !), car il n'a pas idée au moment de la compilation de la vrai nature de l'objet. C'est plus lent par contre.
hibOu :
Et ça je trouve que c'est l'essentiel d'un langage Objet.
Sans ça, je ne trouve que le langage ne devient qu'il simple surcouche syntaxique au C.
Tous les langages objets font certains compromis au paradigme, la majorité des langages typés entre autres ...
En java, ce que retourne la méthode ne fait pas partie de la signature, on ne peut pas avoir
int i = vec.get();
String = vec.get();
Également, dans un langage OO non typé (par exemple smalltalk ou encore objective c - qui supporte le typé ou non), un objet peut recevoir n'importe quel message et une exception n'est soulevée qu'à l'exécution s'il n'y a pas de méthode qui y correspond. En plus, un langage qui respecte totalement le paradigme OO ne devrait jamais permettre d'attributs publiques, et même empêcher les sous classes d'accéder aux attributs sans passer par des méthodes.
Moi, j'aimes les compromis des langages typés et, bien que je trouve dommage que Moka ne supporte pas le type de polymorphisme dont tu parlais, je crois que c'était essentiel pour avoir quelque chose de viable sur calculatrice.
hibOu :
Et pour créer un fichier ? Une fois j'avais utilisé fopen, fread.... pour faire de la compression de fichier et c'était vraiment lent... alors qu'il est très simple d'écrire directement dans la mémoire. Sans pointeur, je ne demande bien comment faire....
Besoin de pointeurs ? Moka ne retourne pas d'erreur de syntaxe lorsqu'on les utilises :
private static char[] returnToken (char[] str, char[] buf) {
//TAB, NL, FF, CR, SPACE
char[] delim = {9, 10, 12, 13, 32};
int len = native.strlen(str);
int end;
int i;
int n;
char* pos = str;
while (*pos != '\0') {
for (i = 0; i < 5; i++) {
if (*pos == delim[i]) {
break;
}
}
if (i == 5) {
break;
}
pos ++;
}
str = pos;
while (*pos != '\0') {
for (i = 0; i < 5; i++) {
if (*pos == delim[i]) {
break;
}
}
if (i < 5) {
break;
}
pos ++;
}
end = (int)(pos - str) ;
native.memcpy(buf, str, end);
buf[end] = '\0';
return pos;
}
Pour le reste (les fonctions de vat.h) tu mets tout dans un bloc ou une méthode native et tu fais comme en C...
hibOu :
Pour le lien tardif, il faut ajouter le code de l'appel de cette "virtual function table"
C'est dynamic binding en anglais

Je n'en savais pas la traduction, j'avais traduit ça 'résolution dynamique des méthodes'. Moka fait du dynamic binding, sans ça l'exemple avec les objets qui interfacent Captioned ne fonctionnerais pas ...
Pour :
Object s = new String("blabla");
System.out.println(s); //appelera println(String) et non println(Object)
Tu peux toujours faire :
Object s = new String("blabla");
s.print(); //Pour cela, il faut que la superclasse ait une méthode print
(Dans ce cas println(String) et non println(Object) ont le même effet anyway)
Je sais que c'est moins plaisant que du polymorphisme pur pour les méthodes ... Mais le gain en vitesse est incroyable. J'ai imaginé quelques algos pour en faire du pur et dur, et ça ne me paraissait pas gagnant ...
Pour le lien tardif, il faut ajouter le code de l'appel de cette "virtual function table"
Là, j'en connais certains qui me critiquerais si j'implémentais ce truc ...