У меня проблема, связанная с дизайном составной структуры. У меня есть абстрактный класс Expression, который описывает общее математическое выражение. Идея состоит в том, что выражение может быть атомным выражением (например, «x» или «3») или какой-либо агрегацией атомных выражений (например, сборы, модели, экспоненции и т. Д.). Это, оказывается, хорошо описывается композитным шаблоном, поэтому, например, класс Summatory наследует от OperationTerm, который, в свою очередь, наследуется от Expression и содержит список «augends» терминов Expression.Наследование в составной структуре
Все в порядке, пока я не попытаюсь специализировать некоторые из этих выражений на основе некоторых свойств; например, если выражение вырабатывается суммированием мономиальных терминов, оно должно быть «помечено» как полином, чтобы оптимизировать определенные виды операций (например, интегралы или производные) таким образом, который прозрачен для кода клиента (который должен обрабатывать только объекты Expression).
У кого-нибудь есть идея, как я мог бы спроектировать такую структуру (возможно, расширяемой)?