Meyer étant loin d'être un con, j'ai l'impression d'avoir raté quelquechose, quelqu'un voit où est mon erreur ?
Tu ne dois pas être non plus un con. Je viens de tester ton exemple sous linux avec ISE EiffelStudio 5.2.
En effet, en faisant l'affectation s := a que tu décris, on peut placer des éléments dans la pile en utilisant la routine de la classe ARRAY [G], put (item: G, i: INTEGER) appliquée sur l'objet s. La même chose est impossible en passant par l'objet a,qui est en mémoire la même référence pointant donc sur le même objet.
Donc on manipule s comme un ARRAY [G] et a comme un ARRAYED_STACK [G], de la sorte un a.remove est valide et un s.remove provoque une erreur de compilation. Plus : s est un ARRAY et a est un ARRAYED_STACK dont les données sont malencontreusement accessibles par d'autres moyens que ceux prévus par sa classe.
La méthode suggérée par Jean-Yves Burlett de déclarer STACK comme le type statique de a élimine le problème, mais il faut s'en être aperçu.
# Re: Si j'ai bien tout compris
Posté par Philip Marlowe . En réponse au journal Si j'ai bien tout compris. Évalué à 1.
Meyer étant loin d'être un con, j'ai l'impression d'avoir raté quelquechose, quelqu'un voit où est mon erreur ?
Tu ne dois pas être non plus un con. Je viens de tester ton exemple sous linux avec ISE EiffelStudio 5.2.
En effet, en faisant l'affectation s := a que tu décris, on peut placer des éléments dans la pile en utilisant la routine de la classe ARRAY [G], put (item: G, i: INTEGER) appliquée sur l'objet s. La même chose est impossible en passant par l'objet a,qui est en mémoire la même référence pointant donc sur le même objet.
Donc on manipule s comme un ARRAY [G] et a comme un ARRAYED_STACK [G], de la sorte un a.remove est valide et un s.remove provoque une erreur de compilation. Plus : s est un ARRAY et a est un ARRAYED_STACK dont les données sont malencontreusement accessibles par d'autres moyens que ceux prévus par sa classe.
La méthode suggérée par Jean-Yves Burlett de déclarer STACK comme le type statique de a élimine le problème, mais il faut s'en être aperçu.