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

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

    Oui une pile avec comme conteneur un tableau, aucun problème.
    Donc si tu t'en fous d'accéder à la partie "tableau" tu déclares la variable comme une pile et tu y met une instance de ARRAYED_STACK. Et voilou.
    Le fait que si la variable a comme type statique ARRAYED_STACK on puisse violer la sémantique de STACK avec array_put, etc. est normal, c'est le contrat. Une ARRAYED_STACK n'est pas une STACK ni un ARRAY, c'est une ARRAYED_STACK. Pour avoir une vraie STACK dont le contenu est géré en tableau, il faut soit un type statique STACK soit en faire rouler une avec un ARRAY comme conteneur privé si tu veux être sûr.
    En tous cas, ce type de construction (ARRAYED_STACK) ne me choque pas du tout, la plupart de mes cours cours de POO étaient autour de structures comme celle-ci (bon, en autres profs j'avais D. Colnet, un des auteurs de SmallEiffel, donc forcément ayant appris comme ça ne me choque pas).

    La logique du truc c'est que si tu veux une ARRAYED_STACK ayant un comportement uniquement de STACK vis à vis d'autres (notamment du cas dont tu parles) il faut lui foutre comme type statique STACK et comme type dynamique ARRAYED_STACK en instanciant avec !ARRAYED_STACK[G]!. C'est la méthode classique utilisée très souvent dans des libs Eiffel.