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

Згортання ієрархії

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

Проблема

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

Рішення

Злийте підклас і суперклас воєдино.

До
Collapse Hierarchy - Before
Після
Collapse Hierarchy - After

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

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

Переваги

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

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

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

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

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

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

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

  2. Використайте підйом поля і підйом методу, якщо ви вирішили позбутися від підкласу. Використайте спуск поля і спуск методу, якщо прибраний буде суперклас.

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

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