Oui, chaque objet reference (pouvant faire de l'heritage et du polymorphisme dynamique) derive de Object. Et l'implementation de Object garde un numero unique qui permet de savoir le type de l'objet au runtime (via instanceof ou cast). Cet id n'est pas accessible a l'utilisateur, c'est juste un detail d'implementation.
Pour la definition de polymorphisme, voila quelques exemples pour essayer d'eclairer un peu tout ca :
1 - Genericite aka polymorphisme statique aka template aka polymorphisme parametrique :
class Toto
{
T someData;
T getSomeData() { return someData; }
}
Toto t; // Toto est parametre par int
int i = t.getSomeData;
En OCaml, tu ne specifie pas le parametre T je crois, car implicitement toutes les methodes sont generique non ?
2 - Polymorphisme dynamique aka polymorphisme aka polymorphisme d'inclusion
interface A
{
}
class AImpl implements A
{
}
class Toto
{
public sub f(A a) {}
}
Toto toto = new Toto();
toto.f(new AImpl()); // accepte les sous types
3 - Polymorhisme dynamique aka polymorphisme veut aussi dire (en OCaml je sais pas)
class A
{
public sub f() {}
}
class B extends A
{
public sub f() {}
}
A a = new B();
a.f(); // appelle en fait B.f()
C'est aussi appele "late binding", car ce n'est qu'au runtime que tu sais effectivement quelle methode tu vas appeler en fonction du vrai type de a. En Nosica, le late binding est resolu pendant la compilation grace a l'analyse globale. En SmartEiffel aussi. En c++ et en Java, ce mecanisme n'est resolu qu'au runtime.
En C++ aussi tu peux separer heritage de sous typage.
Dans la pratique ca sert pas a grand chose (oui ca sert dans certains cas, mais je trouve que l'emploi de cette solution est assez discutable)
En Eiffel aussi tu peux le faire...
Le probleme quand tu utilise ce genre de chose, c'est que tu confond souvent interface et implementation... et ca c'est MAL :-)
En Nosica, les types references font a la fois de l'heritage et du sous typage. Les types primitifs font de l'heritage, mais pas de sous typage.
[^] # Re: Nosicalight version 0.2
Posté par Epsos . En réponse au journal Nosicalight version 0.2. Évalué à 1.