Предположим, мы имеем oneInstance
и secondInstance
, один из SomeClass
и один OtherClass
с примером класса иерархии ниже:Pharo Smalltalk - Можно ли присвоить супер другому экземпляру после того, как объект был создан?
oneInstance
Object
- SomeClass (some variables of it's own, nothing major)
secondInstance
Object
- SomethingClass
- OtherClass (just about any class in the tree here)
Можно, во время выполнения, чтобы изменить oneInstance так, что это сообщение «супер» посылает достичь secondInstance.
oneInstance и secondInstance слияние по существу делает oneInstance работу, как если бы они один объект и структура, как будто они были экземпляры с чем-то вроде и:
secondInstance wraps around oneInstance
Object
- SomethingClass
- OtherClass (just about any class in the tree here)
- SomeClass (some variables of it's own, nothing major)
Простейшим если бы я мог назначить super := secondInstance
на oneInstance для бит, а затем изменить его обратно :D
PS. По сути, мы переклассифицируем oneInstance, получив secondInstance, поскольку это «супер», теперь они представляют собой один объект с состоянием обоих предполагающих, что oneInstance подклассифицирован из Object без какого-либо другого состояния, но он является собственным. В основном взломать метод поиска по умолчанию наследования по умолчанию в моих интересах. Ближайший вещь, которую я смог найти объект Строгание https://en.wikipedia.org/wiki/Object_slicing
Другой способ смотреть на это было бы так:
secondInstance получает сообщения, это экземпляр OtherClass, все хорошо. Некоторые сообщения, которые он получает, не находятся в OtherClass, поэтому поиск метода переходит к цепочке наследования SomethingClass, а затем к Object, ProtoObject и т. Д., И, наконец, они должны быть перенаправлены в другой экземпляр. Этот процесс должен быть полностью прозрачным.
Кажется, что вы пытаетесь сделать mixins. Есть некоторые реализации этого для Squeak/Pharo. Может быть, вы должны выглядеть так. Лично я нахожу это плохой идеей и беру редизайн вместо того, чтобы пытаться вмешаться в одно наследование или поиск методов. –
Что вы пытаетесь достичь? –
Это похоже на шаблон стратегии или шаблон состояния: «Объект будет менять свой класс». Https://sourcemaking.com/design_patterns/state – quamrana