Лекция №2 Общая структура программы. Данные. Типы данных. Оператор присваивания. Арифметические операции. Пространства имен.
Понятие класса
Для представления объектов в C# используется понятие класс, аналогичное обыденному смыслу этого слова в контексте "класс членистоногих", "класс млекопитающих", "класс задач" и т.п. Класс является обобщенным понятием, определяющим характеристики и поведение некоторого множества конкретных объектов этого класса, называемых экземплярами класса.
"Классический" класс содержит данные, задающие свойства объектов класса, и функции, определяющие их поведение.
Все классы библиотеки .NET, а также все классы, которые создает программист в среде .NET, имеют одного общего предка — класс object, и организованы в единую иерархическую структуру. Внутри нее классы логически сгруппированы в так называемые пространства имен, которые служат для упорядочивания имен классов и предотвращения конфликтов имен: в разных пространствах имена могут совпадать. Пространства имен могут быть вложенными, их идея аналогична знакомой вам иерархической структуре каталогов на компьютере.
Любая программа, создаваемая в .NET, использует пространство имен System. В нем определены классы, которые обеспечивают базовую функциональность, например, поддерживают выполнение математических операций, управление памятью и ввод-вывод.
Общая структура программы на С# выглядит следующим образом:
using System;
namespace MyProgram
{
class Program
{
static void Main()
{
}
}
}
Директива using System разрешает использовать имена стандартных классов из пространства имен Systemнепосредственно (без указания имени пространства).
Ключевое слово namespace создает для проекта собственное пространство имен, названное по умолчанию ConsoleApplication1. В нашем случае MyProgram. Это сделано для того, чтобы можно было давать программным объектам имена, не заботясь о том, что они могут совпасть с именами в других пространствах имен.
C# — объектно-ориентированный язык, поэтому написанная на нем программа представляет собой совокупность взаимодействующих между собой классов. В нашей заготовке программы всего один класс, которому по умолчанию задано имя Program. Описание классаначинается с ключевого слова class, за которым следуют его имя и далее в фигурных скобках — список элементов класса (его данных и функций, называемых также методами).
Фигурные скобки являются важным элементом синтаксиса. Каждой открывающей скобке соответствует своя закрывающая, которая обычно располагается ниже по тексту с тем же отступом. Эти скобки ограничивают блок, внутри которого могут располагаться другие блоки, вложенные в него, как матрешки. Блок может применяться в любом месте, где допускается отдельный оператор.
В данном случае внутри класса только один элемент — метод Main. Каждое приложение должно содержать метод Main — с него начинается выполнение программы.
Все языки программирования состоят из алфавита, синтаксиса и семантики.
Алфавит - это набор различимых символов: букв, цифр, специальных знаков и т.п. Например, алфавит машинного языка состоит из двух символов: 0 и 1
Синтаксис – правила построения конструкций языка
Семантика – совокупность правил истолкования конструкций языка, образованных в соответствии с синтаксисом.
Алфавит C# включает:
- Буквы (латинские и национальных алфавитов) и символ подчеркивания ( _ ), который употребляется наряду с буквами;
- цифры;
- специальные символы, например +, *, { и &;
- пробельные символы (пробел и символы табуляции);
- символы перевода строки.
Из символов составляются более крупные строительные блоки: лексемы, директивы препроцессора и комментарии.
Имена, или идентификаторы, служат для того чтобы обращаться к программным объектам и различать их, то есть идентифицировать. В идентификаторе могут использоваться буквы, цифры и символ подчеркивания. Прописные и строчные буквы различаются, например, hacker, Hacker и hAcKeR — три разных имени.
Первым символом идентификатора может быть буква или знак подчеркивания, но не цифра. Длина идентификатора не ограничена. Пробелы внутри имен не допускаются.
Ключевые слова — это зарезервированные идентификаторы, которые имеют специальное значение для компилятора. Их можно использовать только в том смысле, в котором они определены. В редакторе кода они выделены голубым цветом.
Любая программа обрабатывает данные. Данные могут быть постоянными (константы) и переменными. Константы записываются следующим образом:
Целое число 123 или -12
Вещественное число должно содержать точку в качестве разделителя и суффикс, например 0.3f или 0.25d – позже подробнее.
Одиночный символ заключается в одинарную кавычку ''
'А' или '3'
Строка заключается в двойную кавычку ""
"HELLO" или "WORLD"
Существуют также зарезервированные константы, например
Логические: TRUE, FALSE
Неопределенно: NULL.
Комментарии предназначены для записи пояснений к программе и формирования документации. Компилятор комментарии игнорирует. Внутри комментария можно использовать любые символы. В C# есть два вида комментариев: однострочные и многострочные.
Однострочный комментарий начинается с двух символов прямой косой черты (//) и заканчивается символом перехода на новую строку, многострочный заключается между символами-скобками /* и */ и может занимать часть строки, целую строку или несколько строк. Комментарии не вкладываются друг в друга.
Типы данных в С#
Тип данных – это множество значений, которое может принимать переменная.
Данные, с которыми работает программа, хранятся в оперативной памяти. Естественно, что компилятору необходимо точно знать, сколько места они занимают, как именно закодированы и какие действия с ними можно выполнять. Все это задается при описании данных с помощью типа.
Тип данных однозначно определяет:
- внутреннее представление данных, а, следовательно, и множество их возможных значений;
- допустимые действия над данными (операции и функции).
Например, целые и вещественные числа, даже если они занимают одинаковый объем памяти, имеют совершенно разные диапазоны возможных значений.
Каждое выражение в программе имеет определенный тип. Компилятор использует информацию о типе при проверке допустимости описанных в программе действий.
Память, в которой хранятся данные во время выполнения программы, делится на две области: стек (stack) и динамическая область, или хип (heap), чаще называемый кучей. Стек используется для хранения величин, память под которые выделяет компилятор, а в динамической области память резервируется и освобождается во время выполнения программы с помощью специальных команд. Основным местом для хранения данных в C# является хип.
Все типы можно разделить на простые (не имеют внутренней структуры) и структурированные (состоят из элементов других типов).
Встроенные типы не требуют предварительного определения. Для каждого типа существует ключевое слово, которое используется при описании переменных, констант и т.д. Встроенные типы C# приведены в таблице Они однозначно соответствуют стандартным классам библиотеки .NET, определенным в пространстве имен System. Как видно из таблицы, существуют несколько вариантов представления целых и вещественных величин. Программист выбирает тип каждой величины, используемой в программе, с учетом необходимого ему диапазона и точности представления данных.
Переменная — это именованная область памяти, предназначенная для хранения данных определенного типа. Во время выполнения программы значение переменной можно изменять. Все переменные, используемые в программе, должны быть описаны явным образом. При описании для каждой переменной задаются ее имя и тип.
Пример описания целой переменной с именем a и вещественной переменной x:
int a; float x;
Имя переменной служит для обращения к области памяти, в которой хранится значение переменной. Имя дает программист. Тип переменной выбирается, исходя из диапазона и требуемой точности представления данных. При объявлении можно присвоить переменной некоторое начальное значение, то есть инициализировать ее, например:
int a, b = 1;
float x = 0.1f, y = 0.1f;
Здесь описаны:
Переменная a типа int, начальное значение которой не присваивается;
Переменная b типа int, ее начальное значение равно 1;
Переменные х и y типа float, которым присвоены одинаковые начальные значения 0.1. Рекомендуется всегда инициализировать переменные при описании. При инициализации можно использовать не только константу, но и выражение — главное, чтобы на момент описания оно было вычисляемым, например:
int b = 1, a = 100;
int x = b * a + 25;
Операции и выражения
Выражение — это правило вычисления значения. В выражении участвуют операнды, объединенные знаками операций. Операндами простейшего выражения могут быть константы, переменные и вызовы функций.
Например, a + 2— это выражение, в котором + является знаком операции, а a и 2 — операндами. Пробелы внутри знака операции, состоящей из нескольких символов, не допускаются.
Операции:
Операции в выражении выполняются в определенном порядке в соответствии с приоритетами, как и в математике. Результат вычисления выражения характеризуется значением и типом. Например, пусть a и b— переменные целого типа и описаны так:
int a = 2, b = 5;
Тогда выражение a + b имеет значение 7 и тип int
Пример Типы, преобразование типов.
using System;
namespace MyProgram
{ class Program
{ static void Main(string[] args)
{ decimal A=0.3m;
float x = 0.1f, y=0.2f;
int b = 0;
double Z = 0.3;
b = A + 1; //недопустимо
x = b + 2; // Допускается
x = A + 2; //недопустимо
b = Z * 2;//недопустимо
Z = A * 2;//недопустимо
Z = x * 2; // Допускается
} }}
Пример Операция присваивания. Работа в отладчике.
Для запуска отладчика, достаточно поставить точку остановы (F9) в требуемом месте. Для того чтобы перейти к следующей строке кода в отладчике используется клавиша F10, чтобы продолжить отладку целиком F5.
В отладчике рассмотрим операции присваивания.