Author(s): Фаулер М.
Year: 2003
Language: Russian
Commentary: +OCR
Pages: 430
Предисловие ......Page 13
1.Рефакторинг, первый пример ......Page 21
Исходная программа ......Page 22
Первый шаг рефакторинга ......Page 26
Декомпозиция и перераспределение метода statement ......Page 27
Замена условной логики на полиморфизм ......Page 49
Заключительные размышления ......Page 59
Определение рефакторинга ......Page 61
Зачем нужно проводить рефакторинг? ......Page 63
Когда следует проводить рефакторинг? ......Page 66
Как объяснить это своему руководителю? ......Page 69
Проблемы, возникающие при проведении рефакторинга ......Page 71
Рефакторинг и проектирование ......Page 76
Рефакторинг и производительность ......Page 79
Каковы истоки рефакторинга? ......Page 81
3.Код с душком ......Page 85
Дублирование кода ......Page 86
Длинный метод ......Page 87
Большой класс ......Page 88
Длинный список параметров ......Page 89
«Стрельба дробью» ......Page 90
Завистливые функции ......Page 91
Одержимость элементарными типами ......Page 92
Операторы типа switch ......Page 93
Теоретическая общность ......Page 94
Цепочки сообщений ......Page 95
Неуместная близость ......Page 96
Неполнота библиотечного класса ......Page 97
Отказ от наследства ......Page 98
Комментарии ......Page 99
Ценность самотестирующегося кода ......Page 101
Среда тестирования JUnit ......Page 104
Добавление новых тестов ......Page 110
Формат методов рефакторинга ......Page 117
Поиск ссылок ......Page 119
Насколько зрелыми являются предлагаемые методы рефакторинга? ......Page 120
6.Составление методов ......Page 123
Выделение метода (Extract Method) ......Page 124
Встраивание метода (Inline Method) ......Page 131
Встраивание временной переменной (Inline Temp) ......Page 132
Замена временной переменной вызовом метода (Replace Temp with Query) ......Page 133
Введение поясняющей переменной (Introduce Explaining Variable) ......Page 137
Расщепление временной переменной (Split Temporary Variable) ......Page 141
Удаление присваиваний параметрам (Remove Assignments to Parameters) ......Page 144
Замена метода объектом методов (Replace Method with Method Object) ......Page 148
Замещение алгоритма (Substitute Algorithm) ......Page 151
7.Перемещение функций между объектами ......Page 153
Перемещение метода (Move Method) ......Page 154
Перемещение поля (Move Field) ......Page 158
Выделение класса (Extract Class) ......Page 161
Встраивание класса (Inline Class) ......Page 165
Сокрытие делегирования (Hide Delegate) ......Page 168
Удаление посредника (Remove Middle Man) ......Page 170
Введение внешнего метода (Introduce Foreign Method) ......Page 172
Введение локального расширения (Introduce Local Extension) ......Page 174
8.Организация данных ......Page 179
Самоинкапсуляция поля (Self Encapsulate Field) ......Page 181
Замена значения данных объектом (Replace Data Value with Object) ......Page 184
Замена значения ссылкой (Change Value to Reference) ......Page 187
Замена ссылки значением (Change Reference to Value) ......Page 191
Замена массива объектом (Replace Array with Object) ......Page 194
Дублирование видимых данных (Duplicate Observed Data) ......Page 197
Замена однонаправленной связи двунаправленной (Change UnidirectionalAssociation to Bidirectional) ......Page 204
Замена двунаправленной связи однонаправленной (Change Bidirectional Association to Unidirectional) ......Page 207
Замена магического числа символической константой (Replace Magic Number with Symbolic Constant) ......Page 211
Инкапсуляция поля (Encapsulate Field) ......Page 212
Инкапсуляция коллекции (Encapsulate Collection) ......Page 214
Замена записи классом данных (Replace Record with Data Class) ......Page 222
Замена кода типа классом (Replace Type Code with Class) ......Page 223
Замена кода типа подклассами (Replace Type Code with Subclasses) ......Page 228
Замена кода типа состоянием/стратегией (Replace Type Code with State/Strategy) ......Page 231
Замена подкласса полями (Replace Subclass with Fields) ......Page 236
9.Упрощение условных выражений ......Page 241
Декомпозиция условного оператора (Decompose Conditional) ......Page 242
Консолидация условного выражения (Consolidate Conditional Expression) ......Page 244
Консолидация дублирующихся условных фрагментов (Consolidate Duplicate Conditional Fragments) ......Page 246
Удаление управляющего флага (Remove Control Flag) ......Page 248
Замена вложенных условных операторов граничным оператором (Replace Nested Conditional with Guard Clauses) ......Page 253
Замена условного оператора полиморфизмом (Replace Conditional with Polymorphism) ......Page 258
Введение объекта Null (Introduce Null Object) ......Page 262
Введение утверждения (Introduce Assertion) ......Page 270
10.Упрощение вызовов методов ......Page 275
Переименование метода (Rename Method) ......Page 277
Добавление параметра (Add Parameter) ......Page 279
Удаление параметра (Remove Parameter) ......Page 280
Разделение запроса и модификатора (Separate Query from Modifier) ......Page 282
Параметризация метода (Parameterize Method) ......Page 286
Замена параметра явными методами (Replace Parameter with Explicit Methods) ......Page 288
Сохранение всего объекта (Preserve Whole Object) ......Page 291
Замена параметра вызовом метода (Replace Parameter with Method) ......Page 294
Введение граничного объекта (Introduce Parameter Object) ......Page 297
Удаление метода установки значения (Remove Setting Method) ......Page 302
Сокрытие метода (Hide Method) ......Page 305
Замена конструктора фабричным методом (Replace Constructor with Factory Method) ......Page 306
Инкапсуляция нисходящего преобразования типа (Encapsulate Downcast) ......Page 310
Замена кода ошибки исключительной ситуацией (Replace Error Code with Exception) ......Page 312
Замена исключительной ситуации проверкой (Replace Exception with Test) ......Page 317
11.Решение задач обобщения ......Page 321
Подъем поля (Pull Up Field) ......Page 322
Подъем метода (Pull Up Method) ......Page 323
Подъем тела конструктора (Pull Up Constructor Body) ......Page 326
Спуск метода (Push Down Method) ......Page 328
Спуск поля (Push Down Field) ......Page 329
Выделение подкласса (Extract Subclass) ......Page 330
Выделение родительского класса (Extract Superclass) ......Page 336
Выделение интерфейса (Extract Interface) ......Page 341
Свертывание иерархии (Collapse Hierarchy) ......Page 343
Формирование шаблона метода (Form Template Method) ......Page 344
Замена наследования делегированием (Replace Inheritance with Delegation) ......Page 352
Замена делегирования наследованием (Replace Delegation with Inheritance) ......Page 354
12.Крупные рефакторинги ......Page 357
Разделение наследования (Tease Apart Inheritance) ......Page 360
Преобразование процедурного проекта в объекты (Convert Procedural Design to Objects) ......Page 366
Отделение предметной области от представления (Separate Domain from Presentation) ......Page 367
Выделение иерархии (Extract Hierarchy) ......Page 372
13.Рефакторинг, повторное использование и реальность ......Page 377
Проверка в реальных условиях ......Page 378
Почему разработчики не хотят применять рефакторинг к своим программам? ......Page 380
Возвращаясь к проверке в реальных условиях ......Page 394
Последствия повторного использования программного обеспечения и передачи технологий ......Page 395
Библиография ......Page 397
Рефакторинг с использованием инструментальных средств ......Page 401
Технические критерии для инструментов проведения рефакторинга ......Page 403
Практические критерии для инструментов рефакторинга ......Page 406
Краткое заключение ......Page 407
15.Складывая все вместе ......Page 409
Библиография ......Page 413
Список примечаний ......Page 416
Алфавитный указатель ......Page 418
Источники неприятных запахов ......Page 429