Первый раз — в том месте, где думаете, что сочинять мелодию — это более творческий процесс, чем «соединять аккорды». И то и другое — может быть как творчеством, так и банальной техникой.
Второй раз — в том месте, где думаете, что творческому процессу нельзя научить. Можно. Кафедра композиции для этого придумана.
Понимаете ли, принимаемые вами решения (и стратегии, и отбрасывание наследования) как раз противоречат ООП (в особенности — отбрасывание наследования). А чем они обоснованы? Синтаксическими ограничениями, которые вы сам же себе и поставили.
Понимаете, ООП-решение этой задачи — нормальное дерево наследования. А то, что делаете вы — это отказ от этого наследования ради использования смарт-пойнтеров или чего там еще. В то время, как в любом другом языке с нормальным динамическим выделением памяти, или у любого другого программиста, которому удобно писать выделение памяти по-другому, решение будет иным, нежели у вас.
Ну вот понимаете, чтобы сделать систему критериев, достаточно нескольких классов, описывающих выражения в этой системе. А у вас зачем-то — шаблоны, стратегии, мучения с кучей конструкторов…
Если, что вас обманули. Интервал — это расстояние между двумя звуками. Интервалы бывают мелодические (последовательные) и гармонические (одновременные).
Не зря сверху написано «изобразить гармонический интервал».
Я, в принципе, могу еще потыкать в дырки в вашей реализации, но самую главную указали выше — expression trees придумали не просто так. И на них это все прекрасно реализуется.
А вся ваша борьба — это не ООП, это борьба с синтаксисом языка, который чего-то не умеет.
Вот и я считаю, что существующее деление оправдано. Есть две топовых камеры — одна с матрицей побольше, другая — с матрицей поменьше. Каждая — на пределе технологических возможностей фирмы.
Другое дело, что не надо путать «творческую деятельность» и произведение искусства.
Вам захотелось сделать — вы сделали шаблонами. Захотелось — сделали наследованием. Захотелось — чем-то еще. Нет целостности подхода.
Первый раз — в том месте, где думаете, что сочинять мелодию — это более творческий процесс, чем «соединять аккорды». И то и другое — может быть как творчеством, так и банальной техникой.
Второй раз — в том месте, где думаете, что творческому процессу нельзя научить. Можно. Кафедра композиции для этого придумана.
Понимаете, ООП-решение этой задачи — нормальное дерево наследования. А то, что делаете вы — это отказ от этого наследования ради использования смарт-пойнтеров или чего там еще. В то время, как в любом другом языке с нормальным динамическим выделением памяти, или у любого другого программиста, которому удобно писать выделение памяти по-другому, решение будет иным, нежели у вас.
ООП-решение — это просто построить систему объектов и их отношений. Ваше решение к этому имеет очень опосредованное отношение.
Не зря сверху написано «изобразить гармонический интервал».
А вся ваша борьба — это не ООП, это борьба с синтаксисом языка, который чего-то не умеет.
Вот и все.