Дополнительные команды отладки исходного кода 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Дополнительные команды отладки исходного кода



Компиляция практически всего коммерческого программного обеспечения на стадии отладки и на стадии подготовки окончательной версии продукта должна проводиться немного по-разному. Среда Visual Studio способна понимать это, поскольку сохраняет информацию обо всех параметрах, которые ей надлежит передавать компилятору. Для поддержки разных вариантов компоновки проекта Visual Studio потребуется сохранять подобную информацию в более чем одном экземпляре. Разные экземпляры такой информации называются конфигурациями. При создании проекта Visual Studio автоматически предлагает на выбор две таких конфигурации, которые называются, соответственно, Debug (Отладка) и Release (Выпуск):

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

Можно также определять собственные конфигурации. Это необходимо, например, для компоновки приложения с несколькими отличающимися версиями. Раньше из-за проблем, связанных с поддержкой кодировки Unicode в Windows NT, но не в Windows 95,для многих проектов на С++ было принято создавать две конфигурации — одну для Unicode,а вторую для MBCS (multibyte character set — набор многобайтных символов).

 

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

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

 

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

 

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

За счёт использования меню Refactor (Рефакторинг), которое становится доступным при открытом файле кода, а также соответствующих клавиатурных комбинаций быстрого вызова, смарт-тегов (smart tags) и/или вызывающих контекстные меню щелчков, можно существенно видоизменять код с минимальным объемом усилий. В следующей таблице перечислены некоторые наиболее распространенные приемы рефакторинга, которые распознаются в Visual Studio 2010:

 

Приём рефакторинга Описание
Extract Method (Извлечение метода) Позволяет определять новый метод на основе выбираемых операторов программного кода
Encapsulate Field (Инкапсуляция поля) Позволяет превращать общедоступное поле в приватное, инкапсулированное в форму свойство С#
Extract Interface (Извлечение интерфейса) Позволяет определять новый тип интерфейса на основе набора существующих членов типа
Reorder Parameters (Переупорядочивание параметров) Позволяет изменять порядок следования аргументов в члене
Remove Parameters (Удаление параметров) Позволяет удалять определенный аргумент из текущего списка параметров
Rename (Переимейование) Позволяет переименовывать используемый в коде метод, поле, локальную переменную и т.д. по всему проекту

 

Чтобы увидеть процесс рефакторинга в действии, давайте модифицируем метод Main, добавив в него следующий код:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace LC_Console

{

class Program

{

static void Main()

{

// Настраиваем консольный интерфейс (CUI)

Console.Title = "LC_Console";

Console.ForegroundColor = ConsoleColor.Yellow;

Console.BackgroundColor = ConsoleColor.Blue;

Console.WriteLine("Привет, мир!");

Console.BackgroundColor = ConsoleColor.Black;

Console.ReadLine();

}

}

}

 

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

Для этого выделите в окне редактора все содержащиеся внутри Main операторы, кроме последнего вызова Console.ReadLine(), и щёлкнем на выделенном коде правой кнопкой мыши. Выберем в контекстном меню пункт Refactor -> Extract Method (Рефакторинг -> Извлечь метод...).

В открывшемся далее окне назначим новому методу имя MyConfigCUI:

 

Рис. 1. 1. Извлечение метода: создание нового метода из кода

 

После этого метод Main станет вызывать новый только что сгенерированный MyConfigCUI(), внутри которого будет содержаться выделенный ранее код:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace LC_Console

{

class Program

{

static void Main()

{

MyConfigCUI();

Console.ReadLine();

}

 

private static void MyConfigCUI()

{

// Настраиваем консольный интерфейс (CUI)

Console.Title = "LC_Console";

Console.ForegroundColor = ConsoleColor.Yellow;

Console.BackgroundColor = ConsoleColor.Blue;

Console.WriteLine("Привет, мир!");

Console.BackgroundColor = ConsoleColor.Black;

}

}

}

 

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

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

 

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

 

Расширение кода проекта

 

В Visual Studio 2010 можно вставлять готовые блоки кода С# выбором соответствующих пунктов в меню, вызовом контекстных меню по щелчку правой кнопкой мыши и/или использованием соответствующих клавиатурных комбинаций быстрого вызова. Число доступных шаблонов для расширения кода впечатляет. В целом их можно поделить на две основных группы:

  • Шаблоны для вставки фрагментов кода (Code Snippet). Эти шаблоны позволяют вставлять общие блоки кода в месте расположения курсора мыши.
  • Шаблоны для окружения кода (Surround With). Эти шаблоны позволяют помещать блок избранных операторов в рамки соответствующего контекста.

 

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

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

Поместим курсор мыши после первой открывающей фигурной скобки в методе Main. Одним из способов активизации фрагмента кода является выполнение щелчка правой кнопкой мыши и выбора в контекстном меню пункта Insert Snippet (Вставить фрагмент...) или Surround With (Разместить во фрагменте...). Это приводит к отображению списка всех относящихся к данной категории фрагментов кода (для закрытия контекстного меню достаточно нажать клавишу Esc). В качестве клавиатурной комбинации быстрого вызова можно просто ввести имя интересующего фрагмента кода, которым в данном случае является foreach:

 

Рис. 2. 1. Вставка фрагмента кода

 

Отыскав фрагмент кода, который требуется активизировать, нажмём два раза клавишу Таb. Это приведет к автоматическому завершению всего фрагмента кода и оставлению ряда меток-заполнителей, в которых останется только ввести необходимые значения, чтобы фрагмент был готов. Нажимая клавишу Tab, можно переходить от одной метки-заполнителя к другой и заполнять пробелы (по завершении нажмите клавишу Esc для выхода из режима редактирования фрагмента кода).

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

Конструктор классов

Конструктор классов

 

В среде разработки Visual Studio 2010 имеется возможность конструировать классы визуальным образом. Для этого в составе Visual Studio 2010 поставляется утилита под названием Class Designer (Конструктор классов), которая позволяет просматривать и изменять отношения между типами (классами, интерфейсами, структурами, перечислениями и делегатами) в проекте. С помощью этой утилиты можно визуально добавлять или удалять члены из типа с отражением этих изменений в соответствующем файле кода на С#, а также в диаграмме классов.

Для работы с этой утилитой сначала необходимо вставить новый файл диаграммы классов. Делать это можно несколькими способами, одним из которых является щелчок на кнопке View Class Diagram (Перейти к диаграмме классов) в правой части окна Solution Explorer (Обозреватель классов), как показано на рисунке ниже (при этом важно, чтобы в окне был выбран проект, а не решение):

 

Рис. 1. 1. Создание диаграммы классов для проекта LC_Console

 

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

Рис. 1. 2. Диаграмма классов проекта LC_Console

 

Эта утилита работает вместе с двумя другими средствами Visual Studio 2010 — окном Class Details (Сведения о классах), которое можно открыть путём выбора в меню View (Вид) пункта Other Windows (Другие окна), и панелью Class Designer Toolbox (Конструктор классов), которую можно отобразить выбором в меню View (Вид) пункта Toolbox (Панель элементов).

 

В окне Class Details не только отображаются детали выбранного в текущий момент элемента в диаграмме, но также можно изменять его существующие члены и вставлять новые на лету:

 

Рис. 1. 3. Окно «Сведения о классах» проекта LC_Console

 

Что касается панели Class Designer Toolbox, которую, как уже было сказано, можно активизировать через меню Вид, то она позволяет вставлять в проект новые типы (и создавать между ними желаемые отношения) визуальным образом. Следует иметь в виду, что для просмотра этой панели требуется, чтобы окно диаграммы классов было активным. По мере выполнения этих действий IDE-среда автоматически создаёт незаметным образом соответствующие новые определения типов на С#:

Рис. 1. 4.Окно Конструктор классов»

 

Для примера давайте перетащим из панели Class Designer Toolbox в окно Class Designer новый элемент Class (Класс), в отрывшемся окне назначим ему имя MyСаr, а затем с помощью окна Class Details добавим в него общедоступное поле типа string по имени AutoName:

 

Рис. 1. 5. Добавление нового класса и поля для проекта LC_Console

 

Теперь давайте активизируем утилиту Class Designer еще раз и перетащим на поверхность конструктора новый элемент типа Class, присвоив ему имя MySportCar. Затем выберем в Class Designer Toolbox пиктограмму Inheritance (Наследование) и щёлкнем в верхней части пиктограммы MySportCar. Далее, не отпуская левую кнопку мыши, перетащим курсор мыши на поверхность пиктограммы класса MyСаr и отпустим её. Правильное выполнение всех перечисленных выше действий приведёт к тому, что класс MySportCar станет наследоваться от класса MyСаr:

 

Рис. 1. 6. Итоговая диаграмма классов проекта LC_Console

 

Чтобы завершить данный пример, осталось обновить сгенерированный MySportCar, добавив в него общедоступный метод с именем GetAutoName:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace LC_Console

{

public class MySportCar: MyCar

{

public string GetAutoName()

{

AutoName = "Volga Siber";

return AutoName;

}

}

}



Поделиться:


Последнее изменение этой страницы: 2016-08-15; просмотров: 434; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.118.200.197 (0.037 с.)