2.6 KiB
2.6 KiB
#рефакторинг #запахи_кода
Подклассам полагается наследовать методы и данные своих родителей. Но что делать, если это наследство им не нравится или не требуется? И получив все эти дары, они пользуются только малой их частью. Обычно это означает неправильно продуманную иерархию. В родительском классе должна содержаться только та функциональность, которая используется. Часто вы можете встретить совет делать все суперклассы абстрактными.
Признаки
- Если подкласс использует лишь малую часть унаследованных методов и свойств суперкласса, это является признаком неправильной иерархии. При этом ненужные методы могут просто не использоваться либо быть переопределёнными и выбрасывать исключения
Причины появления
- Кто-то создал наследование между классами только из побуждений повторного использования кода, находящегося в суперклассе. При этом суперкласс и подкласс могут являться совершенно различными сущностями.
Рефакторинги
- Опускание метода (Push Down Method)
- Опускание поля (Push Down Field)
- Замена подкласса делегатом (Replace Subclass with Delegate)
- Замена суперкласса делегатом (Replace Superclass with Delegate)
Результат
- Улучшает понимание и организацию кода. Теперь вы не будете тратить время на догадки о том, почему класс
Стулунаследован от классаЖивотное(несмотря на то, что оба имеют четыре ноги).


