Форум сайта python.su
857
RodegastКогда у меня агрегация вместо наследования, мне вообще не надо с классами заморачиваться. Мне просто о них не надо даже думать. То есть иерархия классов остаётся чистой, но дела разные делаются свободно.
Если тебе приходится в рантайме менять базовый класс
RodegastА что ты называешь базовым классом?
базовый класс
Отредактировано py.user.next (Окт. 4, 2017 14:59:54)
Офлайн
568
py.user.nextЭто делают только отмороженные на всю голову граждане в промежутках между порциями галоперидола живущие в мире розовых пони. Конкретно с тобой спорить бессмысленно. Ужасно то, что тебя читают новички и по неволе впитывают флюиды твоего неадеквата.
Наследования избегают
Офлайн
857
FishHookИнкапсуляция нарушается. Производный тип начинает фиксировать базовый тип, связывая код. Код производного класса влияет на код базового класса. Ты понапишешь на производном классе кучу кода, а потом вдруг ты поймёшь, что базовый класс надо изменить немного. И ты не сможешь его изменить вообще. Будешь сидеть в своей программе с легаси.
Наследование используют тогда, когда нужен новый тип сущностей, расширяющий и/или уточняющий существующий тип.
FishHookДа ты почитай, как это делается. Когда тебе нужно создать новый тип и у тебя тянутся руки к наследованию, остановись. Сделай обёртку и пробрось методы просто. И у тебя будет новый функционал, но при этом никакого изменения иерархии классов не будет.
Агрегация применяется тогда, когда некий тип сущностей является составной частью другого типа сущностей.
FishHookА Django стал идеальным? А могут они его поменять сейчас? Нет, архитектура зафиксирована. То есть убрать метод какой-то они у же не могут, поменять его сигнатуру - тоже. Всё, кина не будет, теперь оно будет состариваться только.
Еще более того, целые фреймворки построены на широком применении наследования (Django
FishHookДа прям уж там. Полиморфизм обеспечивается через интерфейсы и их реализацию.
наследование обеспечивает такой всеми нами любимый полиморфизм
Отредактировано py.user.next (Окт. 4, 2017 15:41:29)
Офлайн
186
> Когда у меня агрегация вместо наследования, мне вообще не надо с классами заморачиваться.
Зато тебе надо заморачиваться с агрегацией 
> А что ты называешь базовым классом?
Ты не знаешь что такое базовый класс? Тогда почитай, может пригодится: Your text to link here…
Офлайн
857
RodegastБазовый класс - не тот, что в самом верху иерархии.
Ты не знаешь что такое базовый класс?
Офлайн
186
> Базовый класс - не тот, что в самом верху иерархии.
Ну это и так ясно, в самом верху object
Офлайн
857
RodegastА базовый класс тут ни при чём. Я имею в виду, что когда ты отнаследовался, то этот новый класс во время выполнения фиксируется так, как описан. А с агрегацией ты можешь в любой момент поменять у экземпляра его поведение прямо во время выполнения.
Если тебе приходится в рантайме менять базовый класс
Отредактировано py.user.next (Окт. 4, 2017 16:46:52)
Офлайн
186
> Просто представь, что класс пишет в какой-то файл, …. Вот ты хочешь заменить этот файл на сеть
Но мы же сейчас не эту проблему обсуждаем. Человек хотел узнать как ему избавится от повторяющегося кода. Наилучший вариант в его случае это наследование, агрегация здесь явно избыточна.
Офлайн
857
RodegastВозникновение копипаста уже говорит о том, что у него там что-то неправильно в целом. Думаю, наследование тут не поможет, а ещё больше всё это (несколько похожих друг на друга классов) усугубит. Поэтому и предложил ему сразу растащить это всё в разные стороны в соответствии с новым общепринятым подходом.
Человек хотел узнать как ему избавится от повторяющегося кода.
Офлайн
4
py.user.nextВот только ни нового, ни, извините, общепринятого в этом подходе не наблюдается.
в соответствии с новым общепринятым подходом
Отредактировано Slow (Окт. 4, 2017 18:29:42)
Офлайн