Есть ли разумные примеры создания наследства без создания отношений подтипов? - PullRequest
3 голосов
/ 01 ноября 2008

Я преподавал ООП и пытался донести до своих студентов важное различие между наследованием и созданием отношения подтипа между двумя типами. Например, в C ++ я мог бы использовать частное наследование, чтобы гарантировать, что никто снаружи не увидит отношения подтипов.

Однако, хотя я могу придумать множество ситуаций, в которых я не хотел бы создавать отношение подтипа (например, реализовать стек через класс двусвязного списка), я не могу придумать хороших примеров проектирования. где я на самом деле выбрал бы следовать наследованию без создания общедоступного отношения подтипов (а не, скажем, использовать агрегацию).

Есть идеи хороших примеров?

Ответы [ 3 ]

3 голосов
/ 01 ноября 2008

Как программист на Python, позвольте мне сказать, что это слишком тонкие вопросы. Они кажутся чисто C ++ - измами.

В Python у нас есть наследование, которое создает правильные подтипы.

И у нас есть композиция с использованием простых атрибутов или доступных коллекций.

Этот вид частного наследования, являющийся своего рода композицией, кажется просто запутанным. И в основном бесполезно.

Примеры C ++ показывают частное наследование для создания композиции с общим интерфейсом. В Java у нас был бы общий интерфейс. В Python у нас есть утка, и нам не нужны формализмы.

Не думаю, что есть хорошие примеры - я думаю, что концепция слишком тонкая, чтобы иметь какую-либо реальную ценность.

0 голосов
/ 01 ноября 2008

В javascript у вас есть наследование посредством прототипа. Который я бы не назвал подтипом. Поскольку в javascript нет классов, наследуемых от своего прототипа, но в то же время объекты с одним и тем же прототипом не зависят друг от друга и могут эволюционировать в совершенно разные типы объектов.

0 голосов
/ 01 ноября 2008

Повторное использование кода без подтипов выполняется с использованием делегирования .

Делегирование - это наследство .

...