• [^] # Re: Si j'ai bien tout compris

    Posté par . En réponse au journal Si j'ai bien tout compris. Évalué à 1.

    Ah non pas du tout, si le type mis entre !! n'est pas ramenable à STACK, ça ne fonctionne pas, et à l'exécution ça ne sera manipulable que comme une stack (un bourrin pourra tenter de forcer en arrayed_stack mais c'est Mal®). Les assertions seront vérifiées, etc. comme d'hab.
    Si s est de type STACK[OURS], je ne peux pas instancier s comme !ARRAYED_STACK[VACHE]! ou !ARRAYED_STACK[ANY]!, juste comme !ARRAYED_STACK[G -> OURS]! (si on peut dire).
    La vérification de type n'est pas supprimée du tout, au contraire. En déclarant s comme ARRAYED_STACK, par contre, on veut montrer que s sera accéder en tant que ARRAYED_STACK, pas comme STACK du coup il est nromal d'avoir accès à la structure tableau. Si on ne veut pas ça, on déclare s comme STACK et puis c'est tout, le type non abstrait utilisé n'entre pas en ligne de compte dans la vérif de type, l'interface est celle d'une STACK et rien de plus.

    Bref, l'exemple correspond aussi au style de porgrammation préconisé dans Eiffel, the language et autres de ses bouquins :

    s : ARRAYED_STACK[PLOP]
    do
    create s.make
    -- Mal®

    s : STACK[PLOP]
    do
    !ARRAYED_STACK[PLOP]!s.make
    -- Bien©

    Juste mes 2.10-2 EUR (et mon cours de poo de d.colnet).