Base/Knowledges/IT/Рефакторинг/Запахи кода/Отказ от наследственности.md
2026-02-23 19:52:05 +03:00

31 lines
2.6 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#рефакторинг #запахи_кода
![[Pasted image 20241114071602.png]]
> Подклассам полагается наследовать методы и данные своих родителей. Но что делать, если это наследство им не нравится или не требуется? И получив все эти дары, они пользуются только малой их частью.
> Обычно это означает неправильно продуманную иерархию.
> В родительском классе должна содержаться только та функциональность, которая используется. Часто вы можете встретить совет делать все суперклассы абстрактными.
### **Признаки**
- Если подкласс использует лишь малую часть унаследованных методов и свойств суперкласса, это является признаком неправильной иерархии. При этом ненужные методы могут просто не использоваться либо быть переопределёнными и выбрасывать исключения
### **Причины появления**
- Кто-то создал наследование между классами только из побуждений повторного использования кода, находящегося в суперклассе. При этом суперкласс и подкласс могут являться совершенно различными сущностями.
![[Pasted image 20241114071816.png]]
### **Рефакторинги**
- [[Опускание метода (Push Down Method)]]
- [[Опускание поля (Push Down Field)]]
- [[Замена подкласса делегатом (Replace Subclass with Delegate)]]
- [[Замена суперкласса делегатом (Replace Superclass with Delegate)]]
![[Pasted image 20241114071837.png]]
### **Результат**
- Улучшает понимание и организацию кода. Теперь вы не будете тратить время на догадки о том, почему класс `Стул` унаследован от класса `Животное` (несмотря на то, что оба имеют четыре ноги).
### **Ссылки**
- https://refactoring.guru/ru/smells/refused-bequest
- [[Мартин Фаулер - Рефакторинг кода на JavaScript]]