Guillaume Desnoix wrote:
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.
En eiffel, j'en suis sur. En smart eiffel, je sais pas.

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();
Oui, la covariance sur le type de retour.
Ca fait parti des trucs qui ont de grande chance d'être
intégré dans le JDK1.5.


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.
Oui, mais je crois que l'on peut utiliser like AUSSI dans une
syntaxte de type "like Current" pour indiquer que l'on veut faire
de la covariance sur les types des paramètres.


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 ?
Nom, ca pose pas de problème. Au niveu typage, il faut juste s'assurer
que l'on redéfinie une variable avec un sous-type de la variable
déjà définie. De toutes façon, en mémoire, la variable n'est
stockée qu'une fois. Elle à juste un type différent.


  - 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.
Completement d'accord. Mais le compilo devient dure à écrire.

Guillaume
Remi

Répondre à