В документе JSF C++ Coding Standards, AV Правило 87 показывает диаграмму абстрактного базового класса и реализацию как множественного наследования.C++ Многократное наследование для осуществления полиморфизма
Что это за диаграмма пытается показать?
В этом примере, Какова цель наследования Private/Protect?
Каким образом создается реализация в качестве базового класса?
Схема из правила AV 87 показывает, что D1 наследуется от имплантата; Является ли это другой реализацией, которая не имеет никакого отношения к интерфейсу?
А.В. Правило 87
Иерархии должна быть основана на абстрактных классов. См. Stroustrup 2, 12.5.
Обоснование: иерархий на основе абстрактных классов, как правило, сосредоточены конструкции в сторону производства чистых интерфейсов, сохранить детали реализации выхода из интерфейсов, а также свести к минимуму зависимости компиляции, позволяя альтернативные реализации сосуществовать. См. Правило AV 87 в Приложении A . Предпочтительны AV Правило 87
иерархий на основе абстрактных классов -
...
Приложение A. Поэтому иерархии в верхней части диаграммы предпочтительнее иерархии в нижней части диаграммы.
Используя классический пример полиморфизма форм:
5. бы быть моя реализация следующих? Мне это не кажется правильным. Боюсь, мне не хватает цели дизайна. Традиционно я ожидал бы, что Right_Triangle наследуется от Triangle.
class Shape{}; // Interface
class Right_Triangle{}; // Impl
class Triangle : public Shape,
private Right_Triangle {}; // D1
Я не уверен, что понимаю «дух» AV 87. Я до сих пор не понимаю преимуществ (или минусов) наследования от вашей реализации. Не могли бы вы подробнее остановиться? – Jerunh
@ Jerunh Класс реализации вынужден, по своему усмотрению, выполнять только одну вещь или один аспект работы, аспект должен быть самодостаточным по дизайну. Класс 'Triangle' содержал бы, вероятно, некоторые тривиальные адаптеры между' IShape' и 'TriangleImpl'. Это упрощает замену реализаций. –
@KubaOber: хотя в ответе я использовал оператор «Правый треугольник - треугольник», я согласен с вашим ответом. Возможно, это крушение ОО в том, что объекты, представляющие реальность, действительно сложны. Контекст (проблемный домен) здесь ключевой: если объекты представляют собой рисунки, то утверждение «Правый треугольник - это треугольник» может быть истинным (хотя и бесполезным, правый треугольник должен быть экземпляром), но для геометрических объектов вы правы. Кстати: иерархии животных еще хуже. – stefaanv