Любые разумные примеры создания наследования без создания отношений подтипирования?
Я преподавал ООП и пытался передать своим ученикам важное различие между наследованием и созданием отношения подтипа между двумя типами. Например, в С++ я мог бы использовать частное наследование, чтобы гарантировать, что никто из сторон не видит отношения подтипирования.
Однако, хотя я могу представить себе множество ситуаций, когда я не хотел бы создавать отношение подтипирования (например, реализовать Stack через двусвязный класс списка), я не могу действительно думать о хороших примерах дизайна где я на самом деле решил бы следовать наследованию, не создавая публичное отношение субтирования (а не, скажем, использовать агрегацию).
Любые идеи хороших примеров?
Ответы
Ответ 1
Как программист на Python, позвольте мне сказать, что это вопросы, которые являются способом, слишком тонким. Они кажутся чисто С++-измами.
В Python у нас есть наследование, которое создает правильные подтипы.
И у нас есть композиция с использованием простых атрибутов или доступных коллекций.
Этот бизнес частного наследования, являющийся своего рода композицией, кажется, просто запутан. И в значительной степени бесполезно.
Примеры С++ показывают частное наследование для создания композиции с общим интерфейсом. В Java у нас будет общий интерфейс. В Python у нас есть утиная типизация и не нужны формализмы.
Я не думаю, что есть хорошие примеры - я думаю, что концепция слишком тонкая, чтобы иметь какую-то реальную ценность.
Ответ 2
Повторное использование кода без подтипирования выполняется с помощью делегирования.
Делегирование - наследование.
Ответ 3
В javascript у вас есть наследование с помощью прототипа. Который я бы не назвал подтипом. Поскольку в javascript-объектах не наследуются объекты, наследуемые от их прототипа, но в то же время объекты с одним и тем же прототипом независимы друг от друга и могут развиваться до очень разных типов объектов.