2026-02-23 19:52:05 +03:00

2.2 KiB
Raw Permalink Blame History

#рефакторинг #методы_рефакторинга

!Pasted image 20250219083328.png

Проблема

Два класса имеют одно и то же поле

class Employee {...} // Java

class Salesman extends Employee {
  private String name;
}

class Engineer extends Employee {
  private String name;
}

Решение

Переместите поле в суперкласс, убрав его из подклассов.

class Employee {
  protected String name;
}

class Salesman extends Employee {...}
class Engineer extends Employee {...}

Причины рефакторинга

Подклассы развивались независимо друг от друга. Это привело к созданию одинаковых (или очень похожих) полей и методов.

Достоинства

  • Убивает дублирование полей в подклассах
  • Облегчает дальнейший перенос дублирующих методов из подклассов в суперкласс, если они есть

Порядок рефакторинга

  1. Проверьте, что оба поля используются для одинаковых нужд в подклассах.
  2. Если поля имеют разные названия, дайте им общее имя и замените все обращения к полям в существующем коде.
  3. Создайте поле с таким же именем в суперклассе. Обратите внимание на то, что если поля были приватные (private), поле в суперклассе должно быть защищённым (protected).
  4. Удалите поля из подклассов

Обратный рефакторинг

Борется с запахом

Ссылки