Сущность рефакторинга

Реорганизация кода, причины её применения. Признаки плохого кода. Методы рефакторинга, изменение сигнатуры метода, инкапсуляция поля, замена условного оператора полиморфизмом. Проблемы, возникающие при проведении рефакторинга, средства автоматизации.

Рубрика Программирование, компьютеры и кибернетика
Вид реферат
Язык русский
Дата добавления 23.10.2016
Размер файла 14,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Рефакторинг рефакторинг код сигнатура инкапсуляция

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

Цели рефакторинга

Цель рефакторинга -- сделать код программы более легким для понимания; без этого рефакторинг нельзя считать успешным.

Рефакторинг следует отличать от оптимизации производительности. Как и рефакторинг, оптимизация обычно не изменяет поведение программы, а только ускоряет её работу. Но оптимизация часто затрудняет понимание кода, что противоположно рефакторингу.

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

Причины применения рефакторинга

Рефакторинг нужно применять постоянно при разработке кода. Основными стимулами его проведения являются следующие задачи:

1. необходимо добавить новую функцию, которая недостаточно укладывается в принятое архитектурное решение;

2. необходимо исправить ошибку, причины возникновения которой сразу не ясны;

3. преодоление трудностей в командной разработке, которые обусловлены сложной логикой программы.

Признаки плохого кода

Во многом при рефакторинге лучше полагаться на интуицию, основанную на опыте. Тем не менее имеются некоторые видимые проблемы в коде (англ. code smells), требующие рефакторинга:

1. дублирование кода;

2. длинный метод;

3. большой класс;

4. длинный список параметров;

5. «жадные» функции -- это метод, который чрезмерно обращается к данным другого объекта;

6. избыточные временные переменные;

7. классы данных;

8. несгруппированные данные.

Рефакторинг кода

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

Иногда под рефакторингом неправильно подразумевают коррекцию кода с заранее оговоренными правилами отступа, перевода строк, внесения комментариев и прочими визуально значимыми изменениями, которые никак не отражаются на процессе компиляции, с целью обеспечения лучшей читаемости кода (см. code formatting).

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

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

Методы рефакторинга

Изменение сигнатуры метода (Change Method Signature)

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

Инкапсуляция поля (Encapsulate field)

В случае, если у класса имеется открытое поле, необходимо сделать его закрытым и обеспечить методы доступа. После «Инкапсуляции поля» часто применяется «Перемещение метода».

Выделение метода (Extract Method)

Выделение метода заключается в выделении из длинного и/или требующего комментариев кода отдельных фрагментов и преобразовании их в отдельные методы, с подстановкой подходящих вызовов в местах использования. В этом случае действует правило: если фрагмент кода требует комментария о том, что он делает, то он должен быть выделен в отдельный метод. Также правило: один метод не должен занимать более чем один экран (25-50 строк, в зависимости от условий редактирования), в противном случае некоторые его фрагменты имеют самостоятельную ценность и подлежат выделению. Из анализа связей выделяемого фрагмента с окружающим контекстом делается вывод о перечне параметров нового метода и его локальных переменных.

Перемещение метода (Move Method)

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

Замена условного оператора полиморфизмом (Replace Conditional with Polymorphism)

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

Основные принципы:

· вначале следует создать базовый класс и нужное число подклассов;

· в некоторых случаях следует провести оптимизацию условного оператора путём «Выделения метода»;

· возможно использование «Перемещения метода», чтобы поместить условный оператор в вершину иерархии наследования;

· выбрав один из подклассов, нужно конкретизировать в нём полиморфный метод базового класса и переместить в него тело соответствующей ветви условного оператора;

· повторить предыдущее действие для каждой ветви условного оператора;

· заменить весь условный оператор вызовом полиморфного метода базового класса.

Проблемы, возникающие при проведении рефакторинга

· проблемы, связанные с базами данных;

· проблемы изменения интерфейсов;

· трудности при изменении дизайна.

Средства автоматизации рефакторинга

Технические критерии для инструментов рефакторинга:

· базы данных программы;

· деревья синтаксического разбора;

· точность.

Практические критерии для инструментов рефакторинга:

· скорость;

· отмена модификаций;

· интеграция с другими инструментами.

Размещено на Allbest.ru

...

Подобные документы

  • Характеристика рефакторинга как процесса изменения структуры программы. Предпосылки его проведения, основополагающие принципы. Признаки "плохого" кода. Применение кодирования и управления исходным кодом в качестве приема "Экстремального программирования".

    контрольная работа [26,2 K], добавлен 29.05.2014

  • Создание электрической схемы проектируемого устройства с помощью графического интерфейса. Улучшение кодовой базы с помощью рефакторинга. Разработка алгоритма работы программы. Использование методики Test driven development, написание тестового покрытия.

    курсовая работа [1,3 M], добавлен 15.02.2016

  • Объявление объекта, присвоение ему числового значения. Инкапсуляция и спецификаторы доступа. Функции для работы с методами и классами. Вызов конструктора из внешнего кода. Спецификаторы доступа при наследовании. Объявление закрытого деструктора в классе.

    презентация [112,3 K], добавлен 21.06.2014

  • Алгоритм обнаружения и расшифровки QR кода. Методы 3D реконструкции, стереозрение. Определение ориентации плоскости кода относительно камеры. Программное обеспечение для распознавания QR кода и определения его ориентации. Описание и тестирование продукта.

    дипломная работа [1,5 M], добавлен 15.05.2014

  • Проектирование преобразователя кода (ПК), рассчет его энергопотребления и быстродействия. Составление таблицы истинности ПК. Написание булевых функций, минимизация и преобразование к выбранному базису. Составление структурной схемы преобразователя кода.

    курсовая работа [775,3 K], добавлен 09.02.2009

  • Понятие и назначение штрихового кода, его разновидности и сферы применения. Параметры символики и структура символа в кодах. Алгоритм преобразования числовых данных в знаки Interleaved 2 of 5. Распознавание штрих-кода и вычисление контрольной цифры.

    контрольная работа [424,1 K], добавлен 23.08.2009

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

    курсовая работа [26,4 K], добавлен 01.12.2009

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

    курсовая работа [937,5 K], добавлен 24.03.2013

  • Использование принципа формирования кода Хэмминга в процессе отладки ошибки. Сложение двоичного числа по модулю в программе и получение кода ошибки для определения разряда, в котором она содержится. Соответствие ошибки определенному разряду операнда.

    лабораторная работа [8,0 K], добавлен 29.06.2011

  • Определение понятий кода, кодирования и декодирования, виды, правила и задачи кодирования. Применение теорем Шеннона в теории связи. Классификация, параметры и построение помехоустойчивых кодов. Методы передачи кодов. Пример построения кода Шеннона.

    курсовая работа [212,6 K], добавлен 25.02.2009

  • Реализация выбора в языках высокого уровня, использование сложных типов. Формат оператора выбора в языке Pascal. Изображение оператора варианта на блок-схеме. Понятие массива и способы их вводов. Описание компонентов приложения и программного кода.

    курсовая работа [585,6 K], добавлен 17.08.2013

  • Особенности разработки кода программного модуля на современных языках программирования. Отладка и тестирование программы, оформление документации на программные средства. Применение инструментальных средств для автоматизации оформления документации.

    отчет по практике [203,8 K], добавлен 12.04.2015

  • Практическое решение технических задач и логического проектирования узлов ЭВМ: операция деления целых чисел в формате "Упакованное десятичное" на сумматоре прямого кода: блок-схемы алгоритма программы и её код. Понятие об инвертировании числа и кода.

    курсовая работа [479,0 K], добавлен 24.06.2012

  • Общее описание и особенности использования программы, предназначенной для определения нечетных чисел, находящихся в массиве чисел. Листинг и методы оптимизации данной компьютерной программы. Источники оптимизации кода, описание выполненных команд.

    лабораторная работа [17,4 K], добавлен 25.03.2011

  • Сущность метода перестановочного декодирования. Особенности использования метода вылавливания ошибок. Декодирование циклического кода путем вылавливания ошибок. Распознавание пакетов ошибок как особенность циклических кодов. Вычисление вектора ошибок.

    доклад [20,3 K], добавлен 24.05.2012

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

    задача [428,4 K], добавлен 28.04.2009

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

    доклад [12,6 K], добавлен 11.11.2010

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

    курсовая работа [98,9 K], добавлен 28.11.2014

  • Размещение кода скрипта JavaScript непосредственно на HTML-странице. Сценарий JavaScript и список основных событий. Полезные конструкции на PHP. Некоторые функции для работы с массивами. Фрагмент кода JavaScript из "Эконометрической модели России".

    презентация [331,2 K], добавлен 25.09.2013

  • Исследование методов оптимизации программного кода на языке Си с помощью компилятора. Тестирование результатов утилитой optbench.c. Определение особенностей оптимизации компилятора на собственной программе. Удачные примеры быстроты и компактности кода.

    лабораторная работа [26,5 K], добавлен 17.12.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.