#рефакторинг #методы_рефакторинга ![[Pasted image 20250219083328.png]] ### **Проблема** Два класса имеют одно и то же поле ```javascript class Employee {...} // Java class Salesman extends Employee { private String name; } class Engineer extends Employee { private String name; } ``` ### **Решение** Переместите поле в суперкласс, убрав его из подклассов. ```javascript class Employee { protected String name; } class Salesman extends Employee {...} class Engineer extends Employee {...} ``` ### **Причины рефакторинга** Подклассы развивались независимо друг от друга. Это привело к созданию одинаковых (или очень похожих) полей и методов. ### **Достоинства** - Убивает дублирование полей в подклассах - Облегчает дальнейший перенос дублирующих методов из подклассов в суперкласс, если они есть ### **Порядок рефакторинга** 1. Проверьте, что оба поля используются для одинаковых нужд в подклассах. 2. Если поля имеют разные названия, дайте им общее имя и замените все обращения к полям в существующем коде. 3. Создайте поле с таким же именем в суперклассе. Обратите внимание на то, что если поля были приватные (private), поле в суперклассе должно быть защищённым (protected). 4. Удалите поля из подклассов ### **Обратный рефакторинг** - [[Опускание поля (Push Down Field)]] ### **Борется с запахом** - [[Дублируемый код]] ### **Ссылки** - https://refactoring.guru/ru/pull-up-field - [[Мартин Фаулер - Рефакторинг кода на JavaScript]]