Наследовать от двух абстрактных классов, где одному из них также нужны части другого базового класса - PullRequest
0 голосов
/ 18 марта 2020

Это скорее теоретический вопрос без реального примера кода, и я не уверен, что просто обдумал это.

Все это является частью реализации GUI, над которой я работаю, где GUI представляется в виде древовидной структуры, состоящей из специализаций Leafs и Nodes, которые затем имеют некоторое особое поведение, например текстовое содержимое, изображение или что-то еще, что обрабатывается в его реализации c * 1005.
Однако, моя проблема здесь в том, что я хотел бы иметь функциональность Hover в некоторых графических интерфейсах, но это Hover функциональность нужна! некоторые! функций элемента basi c GUI, показанных на диаграмме, и теперь я не могу обернуться, как соединить эти две части в окончательный класс Button. Он должен унаследовать все функциональные возможности Leaf плюс абстрактный материал Hover.

UML Diagram

Есть ли способ сделать эту работу такой, какой я ее себе представляю? Или я должен предоставить эту Hover функциональность для всех графических интерфейсов и просто реализовать пустые onMouseEnter() и onMouseExit() для тех, кто его не использует?
Причина, по которой я хотел бы не давать ее всем Графический интерфейс вызван тем, что проверка, находится ли мышь над элементом, не бесплатна. И не все элементы должны быть интерактивными.

Несколько замечаний:
- Hover также могут быть унаследованы специализацией узла
- Список функций в Hover завершено
- Leaf и Node оба реализуют некоторые абстрактные функции из Element по-разному

Если вы можете придумать лучший заголовок для этого, не стесняйтесь предложить редактировать

1 Ответ

1 голос
/ 18 марта 2020

Я бы извлек общие функции Element и Hover в общий базовый класс:

           MouseBase
               |
 ------------------------------
 |                            |
 |                          Element
 |                            |
Hover                         |
 |             -------------------------------
 |             |                             |
 |            Leaf                          Node
 ---------------
        |
      Button

В этом случае, если MouseBase является виртуальным базовым классом, Button получит одну его версию, иначе у него будет одно через наследование элемента, а второе - через наследование Hover.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...