Також відомий як Collapse Hierarchy

Рефакторинг Згортання ієрархії

Проблема

У вас є деяка ієрархія класів, в якій підклас мало чим відрізняється від суперкласу.

Рішення

Злийте підклас і суперклас воєдино.
До
Collapse Hierarchy - Before
Після
Collapse Hierarchy - After

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

Розвиток програми привів до того, що підклас і суперклас стали дуже мало відрізнятися один від одного. Якась фіча була прибрана з підкласу, якийсь метод «переїхав» в суперклас, і ось ви вже маєте два практично однакових класи.

Переваги

  • Зменшується складність програми. Менше класів, менше різних речей, які треба тримати в голові, менше «рухомих частин», менше вірогідність зламати щось при подальших змінах в коді.

  • Навігація за кодом стає простіша, коли методи визначені тільки в одному класі. Потрібний метод не доводиться шукати за усією ієрархією.

Коли не слід застосовувати

  • Якщо в ієрархії класів знаходиться більше одного підкласу, то після проведення рефакторингу, решта підкласів повинні стати спадкоємцями класу, в якому була об'єднана ієрархія.

  • Проте майте на увазі, що це може привести до порушення принципу підстановки Барбари Лісков. Наприклад, якщо в програмі емуляторі міського транспорту невірно згорнути суперклас Транспорт в підклас Автомобіль, клас Літак може виявитися спадкоємцем Автомобіля, а це вже неправильно.

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

  1. Виберіть, який клас прибрати зручніше: суперклас або підклас.

  2. Використайте «підйом поля» (Pull up field) і «підйом методу» (Pull up method), якщо ви вирішили позбавитися від підкласу. Використайте «спуск поля» (Push down field) і «спуск методу» (Push down method), якщо прибраний буде суперклас.

  3. Замініть усі використання класу, який буде видалений, класом, в який переїжджають поля і методи. Найчастіше це буде код створення класів, вказівки типів параметрів і змінних, а також документації в коментарях.

  4. Видаліть порожній клас.

Замучились читати?

Збігайте за подушкою, в нас тут контенту приблизно на 7 годин читання.

Або спробуйте наш новий інтерактивний курс з рефакторингу. Він більш інформативний та набагато цікавіший за банальний тест.

Дізнатися більше...