Remi Forax:
Enfin, si je me souvient bien en Eiffel, on peut écrire
(syntaxe à la Java pour que tous le monde comprenne) :

class A {
  void m(A a);
}
class B {
  override void m(B b);
}

Qui veut dire que m(B) redéfinie m(A), on donc
on peut gaiement écrire le code ci-dessous :

A a=new A();
A b=new B();

b.m(a); // pas d'erreur de compile
        // mais erreur d'exécution
Tu en es sur ? Je me trompe peut-etre (ma connaissance d'Eiffel est plutot theorique) mais a mon avis tu dois confondre. Un truc assez interessant (et qui manque a Java) est la redefinition du type retourne:

class C extends Object {
public C clone() { ... }
}

Plus besoin de cast:
C c=new C().clone();

Pour moi, c'est un problème. Enfin, il était entrain d'essayer
un type like Current pour éviter ce genre de problème.
Il faut distinguer like de Current. Current est l'equivalent de this. Par contre le mot-clef like est tres interessant: il permet de specifier un type a l'execution:

a: like b;
-- La variable est declaree avec le meme type que b.

ya des trucs vraiement bien dans ce langage :
  - vrai prog par contrat
Oui

  - redéfinition des variables
Oui mais je ne suis pas sur que ce soit applicable a un langage dynamique comme Java. Ton avis ?

  - redif des opérateurs
Ca se discute. J'ai toujours trouve que c'est mal foutu dans des langages comme C++ et Eiffel parce que les operateurs et leurs priorites sont imposees par la syntaxe. Un des meilleurs compromis que je connaisse est POP-11 qui te laisse redefinir la priorite mais aussi definir tes propres operateurs.

Guillaume

Répondre à