Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Совершенный код. Мастер-класс - Макконнелл С.

Макконнелл С. Совершенный код. Мастер-класс — М.: Русская редакция, 2005. — 896 c.
ISBN: 5-469-00822-3
Скачать (прямая ссылка): soversheniykodmasterklass2005.djvu
Предыдущая << 1 .. 272 273 274 275 276 277 < 278 > 279 280 281 282 283 284 .. 426 >> Следующая

не изменять впоследствии, инициализируйте поле в конструкторе
объекта и не создавайте вводящий в заблуждение метод SetQ.
Сокрытие методов, которые не следует вызывать извне класса
Если без метода интерфейс класса будет более согласованным,
скройте метод.
Инкапсуляция неиспользуемых методов Если обычно вы используете
только часть интерфейса класса, создайте новый интерфейс,
предоставляющий доступ только к необходимым методам. Убедитесь
в том, что новый интерфейс формирует согласованную абстракцию.
Объединение суперкласса и подкласса, имеющих очень похожую
реализацию Если степень специализации подкласса невысока,
объедините его с суперклассом.
Рефакторинг на уровне системы
Создание эталонного источника данных, которые вы не можете
контролировать Иногда какие-то данные трудно согласованно
использовать из других объектов, которым нужны эти данные. В
качестве примера можно привести данные элемента управления с
GUI-интерфейсом. В этом случае вы можете создать
564
ЧАСТЬ V Усовершенствование кода
класс, воспроизводящий данные элемента управления, и
рассматривать этот класс как эталонный источник данных и для
элемента управления, и для другого кода.
Изменение однонаправленной связи между классами на
двунаправленную
Если два класса должны использовать возможности друг друга, но
только один класс знает о другом классе, измените классы так,
чтобы они оба знали друг о друге.
Изменение двунаправленной связи между классами на
однонаправленную
Если два класса известны друг другу, но на самом деле только
один класс должен знать о другом, измените характер связи
между классами.
Предоставление фабричного метода вместо простого конструктора
Используйте фабричный метод, если вам нужно создавать объекты
на основе кода типа или если вы хотите работать с объектами-
ссылками, а не объектами-значениями.
Замена кодов ошибок на исключения или наоборот Убедитесь, что
вы используете стандартный подход к обработке ошибок,
основанный на той или иной стратегии.
I
Контрольный список: виды рефакторинга
http://cc2e.com/2450 _ .
Рефакторинг на уровне данных
? Замена магического числа на именованную
константу.
? Присвоение переменной более ясного или информативного
имени.
? Встраивание выражения в код.
? Замена выражения на вызов метода.
? Введение промежуточной переменной.
? Преобразование многоцелевой переменной в несколько
одноцелевых переменных.
? Использование локальной переменной вместо параметра.
? Преобразование элементарного типа данных в класс.
? Преобразование набора кодов в класс или перечисление.
? Преобразование набора кодов в класс, имеющий производные
классы.
? Преобразование массива в класс.
? Инкапсуляция набора.
? Замена традиционной записи на класс данных.
Рефакторинг на уровне отдельных операторов
? Декомпозиция логического выражения.
? Вынесение сложного логического выражения в грамотно
названную булеву функцию.
? Консолидация фрагментов, повторяющихся в разных частях
условного оператора.
? Использование оператора break / return вместо управляющей
переменной цикла.
? Возврат из метода сразу после получения ответа вместо
установки возвращаемого значения внутри вложенных операторов
if-then-else.
? Замена условных операторов (особенно многочисленных блоков
case) на вызов полиморфного метода.
? Создание и использование "пустых" объектов вместо проверки
того, равно ли значение null.
ГЛАВА 24 Рефакторинг 565
Рефакторинг на уровне отдельных методов
? Извлечение метода из другого метода.
? Встраивание кода метода.
? Преобразование объемного метода в класс.
? Замена сложного алгоритма на простой.
? Добавление параметра.
? Удаление параметра.
? Отделение операций запроса данных от операций изменения
данных.
? Объединение похожих методов при помощи их параметризации.
? Разделение метода, поведение которого зависит от полученных
параметров.
? Передача в метод целого объекта вместо отдельных полей.
? Передача в метод отдельных полей вместо целого объекта.
? Инкапсуляция нисходящего приведения типов.
Рефакторинг реализации классов
? Замена объектов-значений на объекты-ссылки.
? Замена объектов-ссылок на объекты-значения.
? Замена виртуальных методов на инициализацию данных.
? Изменение положения методов-членов или данных-членов в
иерархии наследования.
? Перемещение специализированного кода в подкласс.
? Объединение похожего кода и его перемещение в суперкласс.
Рефакторинг интерфейсов классов
? Перемещение метода в другой класс.
? Разделение одного класса на несколько.
? Удаление класса.
? Сокрытие делегата.
? Удаление посредника.
? Замена наследования на делегирование.
? Замена делегирования на наследование.
? Создание внешнего метода.
? Создание класса-расширения.
? Инкапсуляция открытой переменной-члена.
? Удаление методов установки значений неизменяемых полей.
? Сокрытие методов, которые не следует вызывать извне класса.
? Инкапсуляция неиспользуемых методов.
? Объединение суперкласса и подкласса, имеющих очень похожую
Предыдущая << 1 .. 272 273 274 275 276 277 < 278 > 279 280 281 282 283 284 .. 426 >> Следующая