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 à