Здравствуйте, zelenprog, Вы писали:
S>>Если это скриптовый язык с динамической типизацией, который позволяет в массив складывать объекты разных типов
Z>Да, в массив можно сложить объекты любых типов.
Этот язык позволяет пройтись по такому массиву и вызвать для каждого элемента одноимённые методы?
Z>У меня задача — из метода базового класса сделать вызов другого метода, который может быть переопределен у потомка.
Z>Я прочитал в интернете, что чисто с архитектурной точки зрения, наследование — это не очень хорошо, так как наследование является сильным связыванием.
Z>Мой скриптовый язык позволяет наследовать классы.
Z>Но как заменить обычные виртуальные функции, другими архитектурными решениями?
Есть такая идиома pimpl
Вы можете сделать внешний класс (обёртка), который хранит в своём свойстве экземпляр другого класса (реализация).
Делаете разные классы реализаций, которые друг с другом не связаны. Но чтобы они все имели схожие наборы методов.
Из метода обёртки можно будет вызывать методы реализаций.
class base_1
{
connect() {}
close() {}
}
class base_2
{
connect() {}
close() {}
}
class wrap
{
var impl
do_something()
{
impl.connect()
impl.close()
}
}
var items = array( new wrap(new base_1), new wrap(new base_2) )
items each it { it.do_something() }
По сути это обычная инкапсуляция. Зато не требует наследования.
Но если у вас уже чётко прописана иерархия классов, на которую вы повлиять не можете — то думаю это вам не поможет)
Кстати если из метода класса реализации нужен метод внешней обёртки, то можно попробовать передать обёртку (this) в метод реализации в качестве параметра.