Логотип ConstructiCat
CodeBust.
Навигация по разделу ▾

Решение задач обобщения.

Маскот запахов кода
Свёртывание иерархии

Проблема: У вас есть некая иерархия классов, в которой подкласс мало чем отличается от суперкласса. Решение: Слейте подкласс и суперкласс воедино.

001
Маскот запахов кода
Извлечение интерфейса

Проблема: Несколько клиентов пользуются одной и той же частью интерфейса класса. Либо в двух классах часть интерфейса оказалась общей. Решение: Выделите эту общую часть в свой собственный интерфейс.

002
Маскот антипаттернов
Извлечение подкласса

Проблема: Класс имеет фичи, которые используются только в определённых случаях. Решение: Создайте подкласс и используйте его в этих случаях.

003
Маскот запахов кода
Извлечение суперкласса

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

004
Маскот рефакторинга
Создание шаблонного метода

Проблема: В подклассах реализованы алгоритмы, содержащие похожие шаги и одинаковый порядок выполнения этих шагов. Решение: Вынесите структуру алгоритма и одинаковые шаги в суперкласс, а в подклассах оставьте реализацию отличающихся шагов.

005
Маскот запахов кода
Подъём тела конструктора

Проблема: Подклассы имеют конструкторы с преимущественно одинаковым кодом. Решение: Создайте конструктор в суперклассе и вынесите в него общий для подклассов код. Вызывайте конструктор суперкласса в конструкторах подкласса.

006
Маскот паттернов проектирования
Подъём поля

Проблема: Два класса имеют одно и то же поле. Решение: Переместите поле в суперкласс, убрав его из подклассов.

007
Маскот архитектурных паттернов
Подъём метода

Проблема: Подклассы имеют методы, которые делают схожую работу. Решение: В этом случае нужно сделать методы идентичными, а затем переместить их в суперкласс.

008
Маскот антипаттернов
Спуск поля

Проблема: Поле используется только в некоторых подклассах. Решение: Переместите поле в эти подклассы.

009
Маскот архитектурных паттернов
Спуск метода

Проблема: Поведение, реализованное в суперклассе, используется только одним или несколькими подклассами. Решение: Переместите это поведение в подклассы.

010
Маскот рефакторинга
Замена делегирования наследованием

Проблема: Класс содержит множество простых делегирующих методов ко всем методам другого класса. Решение: Сделайте класс наследником делегата, после чего делегирующие методы потеряют смысл.

011
Маскот запахов кода
Замена наследования делегированием

Проблема: У вас есть подкласс, который использует только часть методов суперкласса или не хочет наследовать его данные. Решение: Создайте поле и поместите в него объект суперкласса, делегируйте выполнение методов объекту-суперклассу, уберите наследование.

012