Object Algebra как решение Expression Problem
Expression Problem представляет собой одну из ключевых трудностей в объектно-ориентированном программировании, касающуюся компромисса между расширяемостью структур данных и удобством модификации кода.
Кратко суть проблемы: есть иерархия классов, например:
Expr = Const(a) | Add(Expr a, Expr b) | Sub(Expr a, Expr b)
И некоторое количество методов, которые эту структуру обрабатывают
int eval(Expr e)
string print(Expr e)
Для решения Expression Problem нужно представить подход, который позволяет одновременно добавлять новые кейсы в структуру
Expr += Var(name) | Mult(Expr a, Expr b)
и новые методы-обработчики, напр. byte[] serialize(Expr a), так чтобы это не влияло на уже написанный код.
В статье рассмотрены подходы visitors, object algebra.