По объектно-ориентированному программированию
Учебное пособие
Казань 2008
Министерство образования и науки Российской Федерации
КАЗАНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
им.А.Н.Туполева
Р.Р.Вафин, В.И.Медведев
Методические указания к лабораторным работам
По объектно-ориентированному программированию
Учебное пособие
Рекомендовано к изданию Учебно-методическим центром
КГТУ им.А.Н.Туполева
Казань 2008
УДК 681.3
Р. Р.Вафин, В.И.Медведев.: Лабораторный практикум по объектно-ориентированному программированию: Учебное пособие. Казань: Изд-во Казан. Гос. техн. Ун-та, 2008. 100 с.
ISBN
Рассматриваются вопросы основ теории объектно-ориентированного программирования с использованием языка программирования Visual C#.NET. Приводятся примеры объектно-ориентированного программирования на языке Visual C#.NET.
Табл. 1. ил. 5. Библиогр.: 3 назв.
Рецензенты:
ISBN © Изд-во Казан. гос. техн. ун-та, 2008
© Р. Р.Вафин, В.И.Медведев 2008
Лабораторная работа №1
Структура консольного приложения.
Консольный ввод - вывод
Язык программирования C# является прямым наследником языка С++. Он унаследовал многие синтаксические конструкции языка С и объектно-ориентированную модель С++. В отличие от С++ С# является чисто объектно-ориентированным языком. В объектно-ориентированном программировании ход выполнения программы определяется объектами. Объекты это экземпляры класса. Класс это абстрактный тип данных, определяемый пользователем (программистом). Класс включает в себя данные и функции для обработки этих данных. В С# запрещены глобальные функции. Все функции должны быть обязательно определены внутри класса. Не является исключением и главная функция языка С# Main( ) (в отличии от языка С пишется с прописной буквы).
Объявление класса синтаксически имеет следующий вид:
сlass имя_класса
{
// члены класса
}
Члены класса это данные и функции для работы с этими данными. Не затрагивая пока определения членов класса, рассмотрим общую структуру приложения для консоли. Для этого создадим пустой проект в интегрированной рабочей среде Microsoft Visual Studio.NET и проанализируем, что подготовит нам мастер приложения. Запустим на выполнение среду Microsoft Visual Studio.NET через кнопку «Пуск» панели задач. В открывшемся окне выберем пункт File|New|Project. В диалоговом окне New Project необходимо выбрать тип проекта Visual C# Projects и шаблон приложения - Console Application. В поле наименование (Name) ввести новое имя проекта, либо согласиться с именем, которое предлагает мастер. В поле местоположение (Location) выбрать или ввести полный путь к рабочей папке проекта, например:
C:\work\4255
и затем щелкнуть мышкой на кнопке ОК.
При этом появится шаблон приложения, подготовленный для нас мастером:
using System;
namespace ConsoleApplication10
{
/// <summary>
/// Summary description for Class1.
/// </summary>
class Class1
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: Add code to start application here
//
}
}
}
Первая строчка проекта using System;, включает в себя директиву using, которая сообщает компилятору, где он должен искать классы (типы), не определенные в данном пространстве имен. Мастер, по умолчанию, указывает стандартное пространство имен System, где определена большая часть типов среды .NET.
Следующей строчкой namespace ConsoleApplication10 мастер предложения определяет пространство имен для нашего приложения. По умолчанию в качестве имени выбирается имя проекта. Область действия пространства имен определяется блоком кода, заключенного между открывающей и закрывающей фигурными скобками. Пространство имен обеспечивает способ хранения одного набора имен отдельно от другого.
Имена, объявленные в одном пространстве имен не конфликтуют, при совпадении, с именами, объявленными в другом пространстве имен.
В шаблоне приложения имеется множество строк, которые являются комментариями.
В C# определены три вида комментариев:
- многострочный (/*…*/)
- однострочный (//…)
- XML (///) – комментарий для поддержки возможности создания самодокументированного кода.
Строчка [STAThread] является атрибутом. Атрибуты задаются в квадратных скобках. С помощью атрибута в программу добавляется дополнительная описательная информация, связанная с элементом кода, непосредственно перед которым задается атрибут. В нашем случае указывается однопоточная модель выполнения функции Main.
Заголовок функции:
static void Main(string[] args)
Функция Main определена как статическая (static) с типом возвращаемого значения void. Функция Main( ) C# как и функция main( ) языка С может принимать аргументы. Аргумент - это строковый массив, содержащий элементы командной строки. Тело функции пустое и в нем содержится, в виде комментария, предложение добавить туда код для запуска приложения:
// TODO: Add code to start application here
Воспользуемся этим предложением и добавим в тело функции одну строчку:
static void Main(string[] args)
{
//
// TODO: Add code to start application here
Console.WriteLine("Привет!");
//
}
затем, скомпилируем и запустим приложение на выполнение. Для этого необходимо выбрать пункт меню Debug | Start Without Debugging или нажать комбинацию клавиш Ctrl+F5. В результате выполнения программы появится окно со строкой приветствия.
Как вы, наверное, догадались, строка:
Console.WriteLine("Привет!");,
выводит сообщение на консоль.
Функции консольного ввода-вывода являются методами класса Console библиотеки классов среды .NET.
Для ввода строки с клавиатуры используется метод Console.ReadLine(), а для ввода одного символа метод Console.Read().
Для консольного вывода также имеются два метода:
- метод Console.Write(), который выводит параметр, указанный в качестве аргумента этой функции,
- метод Console.WriteLine(),который работает так же, как и Console.Write(), но добавляет символ новой строки в конец выходного текста.
Для анализа работы этих методов модифицируйте функцию Main( ) так, как показано ниже :
static void Main(string[] args)
{
// TODO: Add code to start application here
Console.WriteLine("Введите ваше имя");
string str=Console.ReadLine();
Console.WriteLine("Привет "+str+"!!!");
Console.WriteLine("Введите один символ с клавитуры");
int kod=Console.Read();
char sim=(char)kod;
Console.WriteLine("Код символа "+sim+" = "+kod);
}
Скомпилируйте и выполните приложение.
Проанализируйте код функции Main( ) и результат ее работы.
Здесь хорошо видно, что строку вывода метода Console.WriteLine можно формировать из переменных разного типа, просто объединяя их в одну строку с помощью знака +.
Можно сформировать точно такую же выходную строку, используя другую модификацию метода Console.WriteLine , которая принимает несколько параметров (список параметров), наподобие функции printf() языка программирования Си. Первым параметром списка является строка, содержащая маркеры в фигурных скобках. Маркер это номер параметра в списке. При выводе текста вместо маркеров будут подставлены соответствующие параметры из остального списка.
Для демонстрации работы этого метода вставьте в конец кода программы, строчку, как показано на листинге ниже.
static void Main(string[] args)
{
// TODO: Add code to start application here
Console.WriteLine("Введите ваше имя");
string str=Console.ReadLine();
Console.WriteLine("Привет "+str+"!!!");
Console.WriteLine("Введите один символ с клавитуры");
int kod=Console.Read();
char sim=(char)kod;
Console.WriteLine("Код символа "+sim+" = "+kod);
Console.WriteLine("Код символа {0} = {1}",sim,kod);
}
Скомпилируйте и выполните это приложение. Проанализируйте, полученный результат.
После маркера через запятую можно указать, сколько позиций отводится для вывода значений. Например, запись {1,3} означает, что для печати первого элемента списка отводится поле шириной в три символа. Причем, если значение ширины положительно, то производится выравнивание по правому краю поля, если отрицательно то по левому.
Добавив 4 новые строчки в конец кода функции Main(), убедимся в этом:
static void Main(string[] args)
{
Console.WriteLine("Введите ваше имя");
string str=Console.ReadLine();
Console.WriteLine("Привет "+str+"!!!");
Console.WriteLine("Введите один символ с клавитуры");
int kod=Console.Read();
char sim=(char)kod;
Console.WriteLine("Код символа "+sim+" = "+kod);
Console.WriteLine("Код символа {0} = {1}",sim,kod);
int s1=255;
int s2=32;
Console.WriteLine(" \n{0,5}\n+{1,4}\n-----\n{2,5}",s1,s2,s1+s2);
Console.WriteLine(" \n{1,5}\n+{0,4}\n-----\n{2,5}",s1,s2,s1+s2);
}
Кроме того, после поля ширины через двоеточие можно указать форматную строку, состоящую из одного символа и необязательного значения точности.
Существует 8 различных форматов вывода:
С – формат национальной валюты,
D – десятичный формат,
E – научный (экспоненциальный) формат,
F – формат с фиксированной точкой,
G – общий формат,
N – числовой формат,
P – процентный формат,
X – шестнадцатеричный формат
Например, запись {2,9:C2} – означает, что для вывода второго элемента из списка, отводится поле шириной в 9 символов. Элемент выводится в формате денежной единицы с количеством знаков после запятой равной двум. При выводе результата происходит округление до заданной точности.
Для иллюстрации вышесказанного модифицируем функцию Main(), как показано ниже:
static void Main(string[] args)
{
// TODO: Add code to start application here
Console.WriteLine("Введите ваше имя");
string str=Console.ReadLine();
Console.WriteLine("Привет "+str+"!!!");
Console.WriteLine("Введите один символ с клавитуры");
int kod=Console.Read();
char sim=(char)kod;
Console.WriteLine("Код символа "+sim+" = "+kod);
Console.WriteLine("Код символа {0} = {1}",sim,kod);
int s1=255;
int s2=32;
Console.WriteLine(" \n{0,5}\n+{1,4}\n-----\n{2,5}",s1,s2,s1+s2);
Console.WriteLine(" \n{1,5}\n+{0,4}\n-----\n{2,5}",s1,s2,s1+s2);
double sum1=500.3467;
double sum2=43.5;
Console.WriteLine(" \n{0,10:C2}\n+{1,9:C2}\n-----\n{2,10:C2}",
sum1,sum2,sum1+sum2);
}
Скомпилируйте и запустите код на выполнение.
Проанализируйте изменения, происходящие с выходным текстом, при применении различных форматов.
Вопросы:
1. Какие статические методы классаConsole, используются для ввода с клавиатуры?
2. Какой тип данных возвращает метод Read()?
3. Какой тип данных возвращает метод ReadLine()?
4. Какие статические методы классаConsole, используются для вывода на консоль?
5. Как можно сформировать строку консольного вывода, используя знак сложения “+”?
6. Что означают числа, заключенные в {…} , форматной строки метода Console.WriteLine("Код символа {0} = {1}",sim,kod);?
7. Можно ли с помощью маркеров в {…} изменить порядок вывода параметров из списка метода Console.WriteLine, не изменяя порядка перечисления параметров в списке?
8. Как можно задать ширину поля вывода в символах?
9. Как можно организовать консольный вывод, выровненный по левому или по правому краю поля?
10. Как организовать вывод в шестнадцатеричном формате? Какие другие форматы вы знаете?
11. Как организовать вывод в формате с фиксированной точкой с точностью до трех знаков после запятой с округлением?
Задания:
Вывести на консоль значения функции в диапазоне углов от 0 до 180 градусов с шагом в 10 градусов. Для расчета использовать статические функции библиотечного класса Math. Вывод организовать в виде таблицы, состоящей из столбцов, выровненных по правому краю:
Первый столбец – значение аргумента функции в градусах, ширина поля вывода 4 символа.
Второй столбец – значение аргумента в радианах в формате с фиксированной точкой с точностью два знака после запятой с округлением, ширина поля вывода пять знаков.
Третий столбец – значение функции в формате с фиксированной точкой с точностью до четырех знаков после запятой, ширина поля вывода двенадцать знаков.
1. F(x)=sin(x);
2. F(x)=cos(x);
3. F(x)= sin(x)+cos(x);
4. F(x)= tg(x);
5. F(x)=ctg(x);
6. F(x)=sinh(x);
7. F(x)=cosh(x);
8. F(x)= sinh(x)+cosh(x);
9. F(x)= tgh(x);
10. F(x)=ctgh(x);
Лабораторная работа №2