Я обнаружил проблему множественного наследования при разработке архитектуры моей программы.
У меня есть несколько различных объектов, которые должны отображаться в форме графического интерфейса. Я предпочел наследование от класса Widget , чтобы избежать реализации методов, подобных показанным ниже (методы show, hide, setEnabled, move и т. Д., Которые можно использовать в анимации):
void Device::show()
{
this->widget->show();
}
void Device::hide()
{
this->widget->hide();
}
// etc...
Ну, я разделил все объекты на две группы:
- Контейнеры (просто для хранения чего-то, у него есть номер и информация о его содержимом)
- Устройства (реальное устройство с напряжением, кодами состояния, предупреждениями, ошибками и т. д.)
Итак, возникает вопрос, когда у меня есть объект, который является одновременно контейнером и устройством (например, весы, потому что он должен иметь информацию оего собственный номер и его содержание, а также о предупреждениях, проблемах с напряжением и т. д.)
Я думал о:
- с использованием интерфейсов , но каждый класс, реализующийИнтерфейс должен реализовывать методы интерфейса.И это не очень хороший способ до
ctrl+c
, ctrl+v
всего кода обработки ошибок (поскольку он одинаков для всех объектов) во всех классах, реализующих интерфейс ErrorAble
или WarningAble
.Завтра кто-нибудь скажет мне: «Добавьте новый код ошибки» ... И я должен сказать ему ... внести изменения во все классы. - сделать один базовый класс, но это поражает логикой, когда объект "бутылка" (контейнер) будет иметь напряжение, коды ошибок, предупреждения (как устройство).
И я должен сделать что-то с архитектурой.Но я понятия не имею, что делать.Может ли кто-нибудь предложить мне что-нибудь?
![enter image description here](https://i.stack.imgur.com/lUuma.png)