Санкт-Петербургский государственный университет
Опубликован: 25.07.2014 | Доступ: свободный | Студентов: 1041 / 80 | Длительность: 17:26:00
Лекция 7:

Жизненный цикл разработки приложения в Visual Studio 2013

< Лекция 6 || Лекция 7: 12345 || Лекция 8 >

8.3. Разработка и реорганизация кода: рефакторинг

Основы разработки кода и соответствующей поддержки среды рассмотрены в "Управление решениями и проектами в Visual Studio 2013" . Код разрабатывается по выбранному виду проекта и соответствующему шаблону кода, поставляемому средой. При этом обеспечивается проверка правильности синтаксиса вводимого кода, автоматическое завершение кода, а также навигация по коду (например, переход к определению некоторой сущности от ее использования пунктом контекстного меню Go to definition). Все это существенно увеличивает производительность работы программистов.

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

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

Рассмотрим рефакторинг в среде на примере простого консольного приложения ( рис. 8.15):

Простое консольное приложение

увеличить изображение
Рис. 8.15. Простое консольное приложение

В программе определен класс Program, статический метод Main и метод экземпляра K с аргументом X.

Пусть необходимо изменить имя метода K на M (естественно, не только в определении, но и во всех его использованиях).

Текущую позицию в редакторе текста устанавливаем на первую строчку определения метода K (заголовок) и выбираем в контекстном меню пункт Refactor ( рис. 8.16):

Выбор действия по рефакторингу для метода K

увеличить изображение
Рис. 8.16. Выбор действия по рефакторингу для метода K

Далее выделяем имя метода - K и затем выбираем в контекстном меню пункт Refactor / Rename (если мы забыли выделить имя метода, среда подскажет нам, что это необходимо сделать) - см. рис. 8.17:

Выбор действия замены имени метода K

увеличить изображение
Рис. 8.17. Выбор действия замены имени метода K

В окне рис. 8.17 задаем новое имя метода - M и выбираем действие Preview Changes (оно выбрано по умолчанию) - см. рис. 8.18.

Предварительный просмотр планируемых изменений в коде

увеличить изображение
Рис. 8.18. Предварительный просмотр планируемых изменений в коде

Поскольку все предлагаемые изменения нас устраивают, нажимаем Apply.

На рис. 8.19 показан результат рефакторинга.

Результат рефакторинга - имя метода изменено

увеличить изображение
Рис. 8.19. Результат рефакторинга - имя метода изменено

Чтобы убедиться в правильности выполненных средой преобразований, рекомендуем сделать сборку проекта. В окне Refactor (внизу) дана информация о том, какие преобразования произведены.

Среда VS 2013 предоставляет следующие виды рефакторинга:

  • Rename - замена имени сущности;
  • Extract Method - извлечь метод: преобразовать выделенный фрагмент кода в метод с заданным именем;
  • Encapsulate Field - инкапсулировать поле, сделав его приватным, но добавить public-свойство для доступа к нему;
  • Extract Interface - извлечь интерфейс: выделить текст класса и автоматически сформировать для него соответствующий интерфейс (если это возможно);
  • Remove parameters - удалить часть параметров метода;
  • Reorder parameters - изменить порядок параметров метода.

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

Заметим, что большие возможности преобразований типа рефакторинга предоставляет аспектно-ориентированное программирование [9], так как оно направлено именно на систематические трансформации программ.

< Лекция 6 || Лекция 7: 12345 || Лекция 8 >
Александр Калинин
Александр Калинин

Осенью прошёл курс и получил ключ. Но т.к. уже имел действующую подписку, то ключом не воспользовался. Сейчас захожу сюда, а про DreamSpark вообще ни слова. Где же мой ключ?