30.07.2014 Эмилия

У нас вы можете скачать книгу Рефакторинг. Улучшение существующего кода Мартин Фаулер в fb2, txt, PDF, EPUB, doc, rtf, jar, djvu, lrf!

Практика, практика и только практика 1 фото. Задачи современного бухгалтера и их решение в "1С: Самоучитель новейших компьютерных программ 1 фото. Простой и понятный самоучитель 1 рец. Новейший самоучитель работы на компьютере 1 фото. Мобильник и смартфон для ржавых чайников 1 рец. Язык декларативного программирования XAML 22 фото.

Учебник для вузов 9 рец. Поисковики, Big Data и Интернет знают о вас все 6 рец. Книги автора Бек Кент и др. Разработка через тестирование 2 рец. Новая методология разработки нереляционных баз данных 1 фото. Предметно-ориентированные языки программирования 1 фото. Шаблоны корпоративных приложений 1 фото. Если вы обнаружили ошибку в описании книги " Рефакторинг. Улучшение проекта существующего кода " авторы Кент Бек , Мартин Фаулер , Джон Брант , пишите об этом в сообщении об ошибке.

У вас пока нет сообщений! Рукоделие Домоводство Естественные науки Информационные технологии История. Исторические науки Книги для родителей Коллекционирование Красота. Искусство Медицина и здоровье Охота. Собирательство Педагогика Психология Публицистика Развлечения.

Камасутра Технические науки Туризм. Транспорт Универсальные энциклопедии Уход за животными Филологические науки Философские науки. Экология География Все предметы. Классы 1 2 3 4 5 6 7 8 9 10 11 Для дошкольников. Каталог журналов Новое в мире толстых литературных журналов.

Скидки и подарки Акции Бонус за рецензию. Лабиринт — всем Партнерство Благотворительность. Не обязательно разбираться во всем сразу. Когда вам действительно понадобится какой-либо метод рефакторинга, прочтите о нем подробно и используйте в своей работе.

Перечень служит справочным разделом, поэтому нет необходимости читать его подряд. Следует также прочесть главы, написанные приглашенными авторами, в особенности главу Основы, которые заложили другие Хочу в самом начале заявить, что эта книга обязана своим появлением тем, чья деятельность в последние десять лет служила развитию рефакторинга. В идеале эту книгу должен был написать кто-то из них, но время и силы для этого нашлись у меня.

Рефакторинг для них давно стал центральной частью процесса разработки и был адаптирован с целью использования его преимуществ. В частности, именно сотрудничество с Кентом раскрыло для меня важность рефакторинга и вдохновило на написание этой книги. Ральф Джонсон Ralph Johnson возглавляет группу в Университете штата Иллинойс в Урбана-Шампань, известную практическим вкладом в объектную технологию. Ральф давно является приверженцем рефакторинга, и над этой темой работал ряд его учеников.

Билл Апдайк Bill Opdyke был автором первого подробного печатного труда по рефакторингу, содержавшегося в его докторской диссертации. Благодарности Даже при использовании результатов всех этих исследований мне потребовалась большая помощь, чтобы написать эту книгу. В первую очередь, огромную помощь оказал Кент Бек.

Первые семена были брошены в землю во время беседы с Кентом в баре Детройта, когда он рассказал мне о статье, которую писал для Smalltalk Report [Beck, hanoi]. Я не только позаимствовал из нее многие идеи для главы 1, но она побудила меня начать сбор материала по рефакторингу. Кент помог мне и в другом.

Думаю, что он сам написал бы эту книгу значительно лучше, но, как я уже сказал, время нашлось у меня, и остается только надеяться, что я не навредил предмету.

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

Как всегда, Картер Шанклин Carter Shanklin со своей командой в Addison-Wesley собрали отличную бригаду дотошных рецензентов. Хочу отметить пару наиболее заметных предложений, оказавших влияние на внешний вид книги. Джошуа Кериевски принадлежит идея дать в каталоге наброски кода. Помимо официальной группы рецензентов было много неофициальных.

Это люди, читавшие рукопись или следившие за работой над ней через Интернет и сделавшие ценные замечания. Наверное, есть и другие, которых я не упомянул; приношу им свои извинения и благодарность. Особенно интересными рецензентами были члены печально известной группы читателей из Университета штата Иллинойс в Урбана-Шампань. Любые хорошие идеи должны проверяться в серьезной производственной системе.

Я был свидетелем огромного эффекта, оказанного рефакторингом на систему Chrysler Comprehensive Compensation C3 , рассчитывающую заработную плату для примерно 90 тыс. Хочу поблагодарить всех участников этой команды: Работа с ними, в первую очередь, укрепила во мне понимание принципов и выгод рефакторинга.

Наблюдая за прогрессом, достигнутым ими, я вижу, что позволяет сделать рефакторинг, осуществляемый в большом проекте на протяжении ряда лет. Мне помогали также Дж. Carter Shanklin из Addison-Wesley и его команда: Работать с хорошим издателем - удовольствие. Они предоставили мне большую поддержку и помощь. Если говорить о поддержке, то больше всего неприятностей приносит книга тому, кто находится ближе всего к ее автору.

В данном случае это моя жена Синди. Спасибо за любовь ко мне, сохранявшуюся даже тогда, когда я скрывался в своем кабинете. На протяжении всего времени работы над этой книгой меня не покидали мысли о тебе. Martin Fowler Melrose, Massachusetts Обычно разговор о чем-то новом заключается в том, чтобы обрисовать историю, основные принципы и т.

Когда на какой-нибудь конференции я слышу такое, меня начинает клонить ко сну. Моя голова переходит в работу в фоновом режиме с низким приоритетом, периодически производящем опрос докладчика, пока тот не начнет приводить примеры.

На примерах я просыпаюсь, т. Исходя из принципов очень легко делать обобщения и очень тяжело разобраться, как их применять на практике. С помощью примера все проясняется. Поэтому я намерен начать книгу с примера рефакторинга. С его помощью вы много узнаете о том, как рефакторинг действует, и получите представление о том, как происходит его процесс. После этого можно дать обычное введение, знакомящее с основными идеями и принципами. Однако с вводным примером у меня возникли большие сложности. Если выбрать большую программу, то читателю будет трудно разобраться с тем, как был проведен рефакторинг примера.

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

Но если код, который я вам покажу, будет составной частью большой системы, то в этом случае рефакторинг сразу становится важным. Поэтому, изучая этот пример, представьте его себе в контексте значительно более крупной системы. Исходная программа Пример программы очень прост. Она рассчитывает и выводит отчет об оплате клиентом услуг в магазине видеопроката.

Программе сообщается, какие фильмы брал в прокате клиент и на какой срок. После этого она рассчитывает сумму платежа исходя из продолжительности проката и типа фильма. Фильмы бывают трех типов: Помимо расчета суммы оплаты начисляются бонусы в зависимости от того, является ли фильм новым. Элементы системы представляются несколькими классами, показанными на диаграмме рис. Рисунок Диаграмма классов для исходной программы. Нотация соответствует унифицированному языку моделирования [Fowler, UML] Я поочередно приведу код каждого из этих классов.

Movie Movie - класс, который представляет данные о фильме. Как и предыдущие классы, он содержит данные и методы для доступа к ним: На рис показано, с чем взаимодействует этот метод. Тело метода приведено ниже. Я бы охарактеризовал ее как слабо спроектированную и, разумеется, не объектно-ориентированную.

Для такой простой программы это может оказаться не очень существенным. Нет ничего страшного, если простая программа написана на скорую руку. Но если этот фрагмент показателен для более сложной системы, то с этой программой возникают реальные проблемы.

Слишком громоздкий метод statement класса Customer берет на себя слишком многое. Многое из того, что делает этот метод, в действительности должно выполняться методами других классов. Но даже в таком виде программа работает. Может быть, это чисто эстетическая оценка, вызванная некрасивым кодом? Так оно и будет до попытки внести изменения в систему.

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

Во-первых, им нужен отчет, выведенный в HTML, который был бы готов для публикации в Интернете и полностью соответствовал модным веяниям. Посмотрим, какое влияние окажет такое изменение. Если взглянуть на код, можно увидеть, что невозможно повторно использовать текущий метод statement для создания отчета в HTML.

Остается только написать метод целиком заново, в основном дублируя поведение прежнего. Для такого примера это, конечно, не очень обременительно. Можно просто скопировать метод statement и произвести необходимые изменения. Но что произойдет, если изменятся правила оплаты? Придется изменить как statement, так и htmlstatement, проследив за тем, чтобы изменения были согласованы.

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

Метод statement - то место, где нужно произвести изменения, соответствующие новым правилам классификации и оплаты. Однако при копировании отчета в формат HTML необходимо гарантировать полное соответствие всех изменений. Кроме того, по мере роста сложности правил становится все труднее определить, где должны быть произведены изменения, и осуществить их, не сделав ошибки.

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

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

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

Выполнение тестов занимает лишь несколько секунд, а запускаю я их, как вы увидите, весьма часто. Важную часть тестов составляет способ, которым они сообщают свои результаты. Тесты, таким образом, являются самопроверяющимися.

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

Это настолько важный элемент рефакторинга, что я подробнее остановлюсь на нем в главе 4. Примечание Перед началом рефакторинга убедитесь, что располагаете надежным комплектом тестов. Эти тесты должны быть самопроверяющимися. Декомпозиция и перераспределение метода statement Очевидно, что мое внимание было привлечено в первую очередь к непомерно длинному методу statement.

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

Моя цель состоит в том, чтобы облегчить написание метода вывода отчета в HTML с минимальным дублированием кода. Очевидный фрагмент для выделения в новый метод составляет здесь команда switch. При выделении метода, как и при любом другом рефакторинге, я должен знать, какие неприятности могут случиться.

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

В этом сегменте кода таких переменных две: При этом each не изменяется в коде, a thisamount - изменяется. С модифицируемыми переменными сложнее.

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

Код, извлеченный мной из оригинала, и изменения в новом коде выделены полужирным шрифтом. Данного соглашения по левой и правой страницам я буду придерживаться в этой главе и далее. Пара цифр в тестах оказалась неверной. После нескольких секунд размышлений я понял, что произошло. По глупости я задал тип возвращаемого значения amountfor как int вместо double. В данном случае Java преобразует double в int без всяких сообщений путем простого округления [Java Spec]. К счастью, обнаружить это было легко, потому что модификация была незначительной, а набор тестов - хорошим.

Этот случай иллюстрирует сущность процесса рефакторинга. Поскольку все изменения достаточно небольшие, ошибки отыскиваются легко. Неслуховский Иван, 25 лет. Хотите писать качественно код -- эту книгу вам покупать и читать.

Миллер Денис, 28 лет, Москва. Martin Fowler — автор ряда книг и статей об архитектуре ПО, объектно-ориентированному анализу и разработке, языку рефакторингу, экстремальному программированию. Родился в Англии , жил в Лондоне до переезда в Америку в г. В настоящее время живёт в Бостоне , штат Массачусетс.

Мартин Фаулер Другие книги схожей тематики: Улучшение проекта существующего кода По мере распространения объектных технологий - в особенности с использованием языка программирования Java - для сообщества разработчиков программного обеспечения становилась все более и более… — Диалектика, Подробнее Улучшение проекта существующего кода По мере распространения объектных технологий - в особенности с использованием языка программирования Java - для сообщества разработчиков программного обеспечения становилась все более и более… — Альфа-книга, формат: Улучшение проекта существующего кода По мере распространения объектных технологий - в особенности с использованием языка программирования Java - для сообщества разработчиков программного обеспечения становилась все более и более… — Альфа-книга, - Подробнее Улучшение проекта существующего кода По мере распространения объектных технологий - в особенности с использованием языка программирования Java - для сообщества разработчиков программного обеспечения становилась все более и более… — Альфа - книга, формат: Твердая глянцевая, стр.

Улучшение проекта существующего кода По мере распространения объектных технологий - в особенности с использованием языка программирования Java - для сообщества разработчиков программного обеспечения становилась все более и более… — формат: Новая методология разработки нереляционных баз данных Необходимость обрабатывать все более крупные объемы данных является одним из факторов, влияющих на внедрение нового класса нереляционных баз данных NoSQL.

Switch-технология — технология разработки систем логического управления на базе конечных автоматов, охватывающая процесс спецификации, проектирования, реализации, отладки, верификации, документирования и сопровождения. Шалыто в году [1]. Фаулер, Мартин — Мартин Фаулер англ. Martin Fowler автор ряда книг и статей по архитектуре ПО, объектно ориентированному анализу и разработке, языку UML, рефакторингу, экстремальному программированию, предметно ориентированным языкам программирования.

Мартин Фаулер — англ. Martin Fowler автор ряда книг и статей об архитектуре ПО, объектно ориентированному анализу и разработке, языку рефакторингу, экстремальному программированию.