НТП_МУ_ЛР. Томский государственный университет систем управления и радиоэлектроники кафедра компьютерных систем в управлении
Скачать 1.31 Mb.
|
Министерство образования и науки Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ Кафедра компьютерных систем в управлении и проектировании (КСУП) Д. В. Гарайс, А. Е. Горяинов, А. А. Калентьев Новые технологии в программировании Методические указания по лабораторным работам 2015 Корректор: Осипова Е. А. Гарайс Д. В., Горяинов А. Е., Калентьев А. А. Новые технологии в программировании: методические указания по лабораторным работам. — Томск: Факультет дистанционного обучения, ТУСУР, 2015. — 79 с. © Гарайс Д. В., Горяинов А. Е., Калентьев А. А., 2015 © Факультет дистанционного обучения, ТУСУР, 2015 3 Содержание Введение............................................................................................................5 1 Лабораторная работа № 1. Бизнес-логика ...................................................6 1.1 Integrated development environment ........................................................6 1.2 Знакомство с Microsoft Visual Studio .....................................................7 1.3 Первое приложение на C# ....................................................................10 1.4 Ввод/вывод на языке С# .......................................................................12 1.5 Задание на лабораторную работу ........................................................15 1.6 Выбор варианта лабораторной работы................................................16 1.7 Варианты заданий.................................................................................17 1.8 Рекомендуемая литература ..................................................................18 2 Лабораторная работа № 2. Пользовательский интерфейс........................19 2.1 Создание оконного приложения ..........................................................19 2.2 Дизайнер форм......................................................................................20 2.3 Валидация данных ................................................................................21 2.4 Условная компиляция...........................................................................24 2.5 Сериализация ........................................................................................25 2.6 Задание на лабораторную работу ........................................................28 2.7 Список используемых источников ......................................................31 3 Лабораторная работа № 3. Система контроля версий ..............................32 3.1 Об управлением версиями....................................................................32 3.1.1 Локальные системы управления версиями....................................33 3.1.2 Централизованные системы управления версиями ......................34 3.1.3 Распределённые системы контроля версий...................................35 3.1.4 Краткий экскурс в историю появления Git....................................36 3.1.5 Особенности Git ..............................................................................37 3.1.6 Слепки вместо патчей.....................................................................37 3.1.7 Почти все операции — локальные.................................................38 4 3.1.8 Git следит за целостностью данных...............................................39 3.1.9 Чаще всего данные в Git только добавляются ..............................40 3.1.10 Три состояния ...............................................................................40 3.2 Сервис Github........................................................................................41 3.3 Инструменты работы с Git ...................................................................43 3.3.1 Работа с помощью командной строки ...........................................43 3.3.2 Работа с помощью SourceTree (GUI) .............................................47 3.4 Удачная модель ветвления для Git ......................................................56 3.5 Задание на лабораторную работу ........................................................56 3.6 Список использованных источников...................................................57 4 Лабораторная работа № 4. Юнит-тестирование .......................................58 4.1 Задание на лабораторную работу ........................................................59 5 Лабораторная работа № 5. Рефакторинг и сборка установщика..............68 5.1 Задание на лабораторную работу ........................................................69 5.2 Список использованных источников...................................................73 6 Лабораторная работа № 6. Проектная документация...............................74 6.1 Задание на лабораторную работу ........................................................74 6.2 Список использованных источников...................................................79 5 Введение Ввиду ограниченности времени, отведенного на выполнение лабора- торных работ, студентам предлагается следующая модель работы: часть лабораторных работ выполняется обязательно, часть лабораторных работ остаётся необязательной для выполнения. Обязательные для выполнения лабораторные работы: • Лабораторная работа № 1. Бизнес-логика. • Лабораторная работа № 2. Пользовательский интерфейс. • Лабораторная работа № 4. Юнит-тестирование. • Лабораторная работа № 5. Рефакторинг и сборка установщика. Необязательные для выполнения лабораторные работы: • Лабораторная работа № 3. Система контроля версий. • Лабораторная работа № 6. Проектная документация. Выполнение необязательных лабораторных работ не оценивается, оно позволит студенту получить некоторые практические навыки, которые помогут в повседневной работе в области разработки программных систем. 6 1 Лабораторная работа № 1. Бизнес - логика Целью данной работы является реализация простого проекта в IDE Visual Studio 2013 на языке C#. 1.1 Integrated development environment Когда программирование только зарождалось и им еще занималась не программисты, а научные работники, не было никаких средств для эф- фективного написания кода, программы писались в примитивных тексто- вых редакторах и компилировались из командной строки. Такой подход не вызывает сложностей при написании небольших программ. При разработ- ке крупных программных проектов он становится затруднительным. По- этому со временем стали появляться специализированные среды разработ- ки, позволяющие по возможности автоматизировать часть задач и упро- стить написание кода, такие среды называются IDE. IDE (Integrated development environment, интегрированная среда раз- работки) — система программных средств, используемая программистами для разработки программного обеспечения. В базовом виде IDE включают в себя текстовый редактор, компилятор, средства автоматизации сборки, отладчик. Однако современные IDE включают в себя большое количество дополнительных инструментов, позволяющих значительно облегчить про- цесс написания кода, например: 1. Подсветка синтаксиса. 2. Статические анализаторы, которые проверяют ошибки в про- грамме прямо во время написания (а не на этапе компиляции). 3. Инструменты для эффективного рефакторинга. 4. Фреймворки для генерации и написания модульных тестов и др. Существует множество различных IDE, которые поддерживают как несколько языков (Microsoft Visual Studio, IntelliJ IDEA, NetBeans), так и 7 всего один (PyCharm, Delphi). Одной из лучших IDE для разработки при- ложений для Windows является Microsoft Visual Studio. Кроме того, что Microsoft Visual Studio позволяет эффективно разрабатывать на популяр- ных языках (С++, С#, VB.NET), значительным преимуществом является возможность ее расширения различными плагинами, начиная от продвину- той подсветки синтаксиса и интеграции систем контроля версий до под- ключения дополнительных языков программирования. На сайте Microsoft можно скачать бесплатную версию Visual Studio Express 2013, которая по- надобится для выполнения лабораторных работ. 1.2 Знакомство с Microsoft Visual Studio После установки и запуска Microsoft Visual Studio Express 2013 (да- лее MSVS) запустится стартовое окно программы. Для того чтобы создать проект, необходимо нажать Create Project на стартовой странице либо вы- брать FILE->Create->Project,после чего появится окно создания проекта. В лабораторных работах будут использоваться 3 вида проектов: 1. Class library — библиотека классов — проект такого типа компи- лируется в файл формата *.dll. Используется для описания бизнес- логики приложения. 2. Console application — консольное приложение — компилируется в *.exe. Позволяет создать приложение с которым можно взаимо- действовать через консоль. 3. Windows forms application — оконное приложение — компилиру- ется в *.exe. Позволяет создавать оконные приложения для Win- dows, используя технологию WinForms. После создания проекта MSVS создает Solution (Решение), в котором находится созданный проект. Решение содержит элементы, необходимые для создания приложения. Решение может включать один или несколько проектов, а также файлы и метаданные, необходимые для определения ре- 8 шения в целом. Решение необходимо для того, чтобы хранить все проекты, которые относятся к одному приложению, а также для отслеживания их взаимодействий. MSVS хранит определение решения в двух файлах: *.sln и *.suo. Файл решения (*.sln) содержит метаданные, которые определяют решение, в том числе: 1. Проекты, связанные с решением. 2. Элементы, которые не связаны с определенным проектом (тексто- вые файлы, картинки и т. д.). 3. Конфигурации сборки, определяющие, какие конфигурации про- екта применяются в каждом типе сборки. Для добавления файлов в проект необходимо вызвать контекстное меню решения (нажать правой кнопкой на корневом узле в Обозревателе решения (Solution Explorer)), после чего выбрать пункт Добавить (Add). Таким образом, в решение можно добавить новые проекты или различные файлы (Create element…). Project (Проект) MSVS служит контейнером для файлов с исходным кодом, подключенным библиотекам и файлам. Управление проектом так- же осуществляется через контекстное меню, которое можно вызвать через Обозреватель решения. Через контекстное меню можно добавлять файлы с исходным кодом в проект (Add->Create element…). Важно!!! После установки MSVS файлы с расширением *.cs ассо- циируются с ней. То есть такие файлы будут открываться в MSVS. Следу- ет понимать, что открытые таким образом файлы не добавляются в проект или решение и они не могут быть скомпилированы. Чтобы добавить суще- ствующий файл в проект, необходимо вызвать контекстное меню проекта и в пункте Добавить выбрать существующий проект (Add->Exiting element…). 9 Часто один проект должен использовать некоторые типы данных, определенные в другом проекте. Для этого необходимо в основной проект добавить ссылку на зависимый проект. Для этого необходимо вызвать кон- текстное меню элемента References основного проекта и выбрать пункт Добавить ссылку (Add Reference…). После этого появится окно, изобра- женное на рис. 1.1. Зависимость можно добавить как на проекты, находя- щиеся в том же решении (для этого надо выбрать пункт Решение), так и на существующие сборки, входящие в .NET Framework, или дополнительно установленные библиотеки (пункт Сборки). После выбора необходимой библиотеки необходимо установить флаг слева от названия в положение «используется» и нажать ОК. После этого можно использовать типы дан- ных, определенные в выбранной библиотеке в вашем проекте. Рисунок 1.1 — Окно добавления зависимостей проекта 10 1.3 Первое приложение на C# Во всех учебниках по программированию в качестве первой про- граммы всегда используется «Hello, World». Единственная функция этой программы — выводить в консоль строку «Hello, World!». В первую очередь необходимо создать новое консольное приложе- ние. Назовем его «HelloWorld». После создания MSVS сгенерирует Реше- ние HelloWorld и проект HelloWorld. Будет сгенерирован единственный файл с кодом Program.cs. Ниже следует его содержимое. namespace HelloWorld { class Program { static void Main(string[] args) { } } } Рассмотрим листинг подробнее. На первой строке находится объяв- ление пространства имен, название которого по умолчанию совпадает с именем проекта. Затем идет объявление класса Program. Ввиду того, что С# — полно- стью объектно-ориентированный язык, в нем не может быть функций, ко- торые не принадлежат какому-либо классу, в данном случае класс Program необходим для определения метода Main. Класс Program является обыч- ным классам, и с ним можно делать все то же, что и с другими, созданны- ми пользователем, классами. Например, его можно переименовать. Далее идет объявление функции Main. Любое консольное приложе- ние должно содержать метод Main. Метод Main — точка входа в програм- му, начало ее выполнения. В случае отсутствия этого метода будет ошибка при компиляции, потому что компилятор не будет знать, где начинается ваша программа. Соответственно, этот метод нельзя переименовывать и перегружать. 11 Вообще существует несколько вариантов сигнатуры этого метода: static void Main(string[] args) static int Main(string[] args) static void Main() static int Main() Эти функции будут отличаться типом возвращаемого значения и на- личием входных параметров. Рассмотрим подробнее: в первом случае из программы не возвращается никаких значений (void) и программа прини- мает на вход параметры. Строка string[] args содержит в себе список пара- метров, которые пользователь может передать в программу при вызове из командной строки. Во втором случае программа возвращает в консоль це- лое число, обычно это делается, чтобы после окончания выполнения про- граммы пользователь мог узнать, корректно она завершилась или нет, если корректно, то возвращается 0, в противном случае 1 либо код произошед- шей ошибки. В третьем и четвёртом случаях отсутствуют входные аргу- менты программы. Читатель, знающий С++, может провести прямую ана- логию с функцией Main. Теперь необходимо добавить в функцию Main код, который будет выводить необходимую строку. Сделать это можно следующим образом: System.Console.Write("Hello, World!"); или System.Console.WriteLine("Hello, World!"); Отличия этих двух способов в том, что в первом случае каретка ос- танется на той же строке, а во втором передвинется на следующую строч- ку. То есть если у нас будет несколько вызовов System.Console.Write под- ряд, то аргументы функции будут выводиться на одной строке, а если бу- дет несколько вызовов System.Console.WriteLine, каждый аргумент будет выводиться на новой строчке. 12 Для того чтобы запустить приложение, необходимо либо на верхней панели нажать кнопку Запуск (Start), либо через главное меню — Отладка (Debug)-> Начать отладку (Start debugging), также можно нажать клавишу F5. При первом запуске скорее всего вы увидите, как мелькнет окно кон- соли и тут же пропадет. Это не ошибка, просто программа очень быстро выполнилась и закрылась. Чтобы посмотреть результаты выполнения, не- обходимо остановить выполнение программы. Для этого, например, можно заставить программу ждать, пока не будет нажата какая-нибудь клавиша клавиатуры. Для этого необходимо в конец программы добавить строку: System.Console.Read(); Если запустить программу теперь, то на экране появится окно консо- ли с текстом “Hello, World!”. Чтобы окно пропало, надо нажать произволь- ную клавишу. В итоге ваша программа должна выглядеть следующим образом: namespace HelloWorld { class Program { static void Main() { System.Console.WriteLine("Hello, World!"); System.Console.Read(); } } } 1.4 Ввод / вывод на языке С # В общем случае, когда говорят о программах, будь то консольное приложение или оконное, подразумевается, что пользователю необходимо с ней взаимодействовать. Программа должна сообщить пользователю о процессе или результатах выполнения, а также работать с данными, кото- 13 рые пользователь ей подает. Поэтому в данной части речь пойдет о опера- торах ввода и вывода на C#. Для получения данных с клавиатуры можно использовать следую- щий метод: string str = Console.ReadLine(); Как видно, этот метод возвращает строку и не существует его пере- грузок или других методов, чтобы считывать целочисленные, символьные и другие типы переменных. Соответственно, для того чтобы ввести с кла- виатуры, необходимо получить строковое значение, а затем сконвертиро- вать его в необходимый нам тип данных. Для этого можно использовать класс Convert. В нем определено множество статических методов конвер- тирования строк в иные типы данных. Далее следуют примеры использо- вания класса Convert. int intValue = Convert.ToInt32(Console.ReadLine()); double doubleValue = Convert. ToDouble (Console.ReadLine()); bool boolValue = Convert. ToBoolean (Console.ReadLine()); long longValue = Convert. ToInt64 (Console.ReadLine()); При этом надо следить, чтобы типы вводимых значений совпадали с типами указанных переменных, потому что в противном случае возникнет исключение. Например, если ввести строку 123.456 и попытаться сконвер- тировать в целочисленное значение, то сгенерируется исключение. Для более корректной работы программы, если программа ожидает от пользователя какое-то определенное значение, то лучше ему об этом сказать. Необходимо придерживаться правила: перед тем как считывать что-либо с консоли, необходимо сообщить пользователю, что именно он должен ввести: смысл вводимой информации, тип данных, максимальное и минимальное до- пустимые значения и т. п. Примером таких запросов могут служить: «Введите имя пользователя (не больше 20 знаков)» «Введите возраст, целочисленное значение, от 1 до 100» 14 «Введите пол, 0 — мужской, 1 — женский» Для вывода текста на экран можно использовать команды, про кото- рые говорилось в предыдущей главе: Console.Write или Console.WriteLine. Далее идут примеры использования этих команд. Console.WriteLine(s);// переменная Console.WriteLine(55.3);// константа Console.WriteLine(y*3+7);// выражение Console.Write(z);// переменная Console.Write(-5.3);// константа Console.Write(i*3+7/j);// выражение Очень часто в процессе работы необходимо выводить осмысленные предложения с результатами выполнения программы. Например, «Через насос X было перекачано Y литров воды, температура насоса Z градусов», где в различные моменты выполнения программы X, Y, Z могут быть раз- личными значениями. Конечно, можно использовать следующий подход: Console.WriteLine(«Через насос » + X + «, было перекачано » + Y + « литров воды, температура насоса » + Z + « градусов»); Однако такой подход слишком громоздкий, и с ним возникает масса трудностей, например при необходимости добавить дополнительные дан- ные, даже читать такую запись достаточно затруднительно. Поэтому при- нято использовать подход с использованием форматной строки. Сама строка формата содержит большую часть отображаемого текста, но всякий раз, когда в нее должно быть вставлено значение переменной, в фигурных скобках указывается индекс. В фигурные скобки может быть включена и другая информация, относящаяся к формату данного элемента, например та, что описана ниже: • Количество символов, которое займет представление элемента, снабженное префиксом-запятой. Отрицательное число указывает, что элемент должен быть выровнен по левой границе, а положи- тельное — по правой. Если элемент на самом деле занимает 15 больше символов, чем ему отведено форматом, он отображается полностью. • Спецификатор формата предваряется двоеточием. Это указывает, каким образом необходимо отформатировать элемент. Например, можно указать, должно ли число быть форматировано как денеж- ное значение либо его следует отобразить в научной нотации, в степенном виде, либо шестнадцатиричном. Console.WriteLine(«Через насос {0} было перекачано {1} литров воды, температура насоса {2} градусов», X, Y, Z); |