Le type id est non restrictif il ne donne aucune information sur l'objet à part que c'est un objet.
Mais les objets ne sont pas tous identiques! A un moment donné le programme doit trouver plus d'informations sur l'objet qu'il utilise: quelle sont ses variables d'instances, quelles sont les méthodes qu'il peut exécuter et ainsi de suite. Comme le type id ne donne pas d'informations au compilateur, c'est l'objet qui devra les fournir à l'exécution. Ceci est possible car tout objet a une variable d'instance isa (est-un) qui identifie la classe de l'objet (le type de l'objet). Toute Vanne est capable de dire qu'elle est une Vanne, une matrice qu'elle est une matrice, etc.
Les objets sont donc dynamiquement typés à l'exécution, plutôt que typés statiquement à la compilation. Ce qui a de très grandes conséquence sur la conception orienté objets, et est aussi l'élément fondamentale des liaisons dynamiques, voir plus bas.
Pour les classes d'objets voir plus bas la section "Classes".
Note: Il est aussi possible de typer statiquement à la compilation un objet en spécifiant sa classe dans le source. Les classes sont des objets particuliers qui peuvent aussi servir de nom de types. Voir "types & classes" et "Options Statiques"
Mais les objets ne sont pas tous identiques! A un moment donné le programme doit trouver plus d'informations sur l'objet qu'il utilise: quelle sont ses variables d'instances, quelles sont les méthodes qu'il peut exécuter et ainsi de suite. Comme le type id ne donne pas d'informations au compilateur, c'est l'objet qui devra les fournir à l'exécution. Ceci est possible car tout objet a une variable d'instance isa (est-un) qui identifie la classe de l'objet (le type de l'objet). Toute Vanne est capable de dire qu'elle est une Vanne, une matrice qu'elle est une matrice, etc.
Les objets sont donc dynamiquement typés à l'exécution, plutôt que typés statiquement à la compilation. Ce qui a de très grandes conséquence sur la conception orienté objets, et est aussi l'élément fondamentale des liaisons dynamiques, voir plus bas.
Pour les classes d'objets voir plus bas la section "Classes".
Note: Il est aussi possible de typer statiquement à la compilation un objet en spécifiant sa classe dans le source. Les classes sont des objets particuliers qui peuvent aussi servir de nom de types. Voir "types & classes" et "Options Statiques"