Глянь мой новый курс по Git! Привет! Глянь мой новый курс по Git! Привет! Глянь мой новый курс по Git на GitByBit.com! Привет! Хочешь круто подтянуть Git? Глянь мой новый курс на GitByBit.com!

Извлечение суперкласса

Также известен как: Extract Superclass

Проблема

У вас есть два класса с общими полями и методами.

Решение

Создайте для них общий суперкласс и перенесите туда одинаковые поля и методы.

До
Extract Superclass - Before
После
Extract Superclass - After

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

Одним из видов дублирования кода является наличие двух классов, выполняющих сходные задачи одинаковым способом или сходные задачи разными способами. Объекты предоставляют встроенный механизм для упрощения такой ситуации с помощью наследования. Однако часто общность оказывается незамеченной до тех пор, пока не будут созданы какие-то классы, и тогда появляется необходимость создавать структуру наследования позднее.

Достоинства

  • Убирает дублирование кода. Общие поля и методы теперь «живут» только в одном месте.

Когда нельзя применить

  • Вы не можете применить этот рефакторинг к классам, которые уже имеют суперкласс.

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

  1. Создайте абстрактный суперкласс.

  2. Используйте подъём поля, подъём метода и подъём тела конструктора для перемещения общей функциональности в суперкласс. Лучше начинать с полей, так как помимо общих полей, вам нужно будет перенести те из них, которые используются в общих методах.

  3. Стоит поискать места в клиентском коде, в которых можно заменить использование подклассов вашим общим классом (например, в объявлениях типов).