Файл: Типы данных, пространство имен, классификация типов среды .NET.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 23.04.2023

Просмотров: 90

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Введение

Данная тема является актуальной для меня, так как подробное изучение ее будет являться одним из этапов обучения программированию. Рассмотрим работу с переменными на одном из популярных языков программирования – C#. Ввиду того, что во многих доступных русскоязычных книгах указан запрет на воспроизводство информации в любом виде – расширим зону поиска информации, прибегнув и к англоязычным изданиям в том числе.

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

Поставим перед собой ряд основных задач рассмотреть: понятие переменной; типы переменных; объявление переменных и синтаксис; область действия переменных; арифметические и логические операции с переменными; размерные и ссылочные типы переменных; понятие стека, кучи, сборщика мусора; приведение типов.

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

Понятие переменной

Понятие переменная является одним из ключевых в программировании. Что это такое и для чего нужно? Любая программа работает с данными (числами, строками), которые могут вводиться пользователем или жестко прописываться в коде программы. Эти данные надо где-то хранить. Где? Постоянные данные хранятся в том или ином виде на жестком диске, а временные данные - в оперативной памяти компьютера.

Под временными данными я понимаю все, что необходимо программе для расчетов. Дело в том, что процессор умеет выполнять математические операции только над регистрами процессора (это как бы переменные внутри процессора) или оперативной памятью. Поэтому, чтобы произвести расчеты над постоянными данными, их необходимо загрузить в оперативную память. Допустим, что мы загрузили данные в память, но как с ними теперь работать? В языке ассемблера для этого используются адреса памяти, где хранятся данные, а в высокоуровневых языках, к которым относится и С#, такие участки памяти имеют имена. Имя, которое служит для адресования памяти, и есть переменная. Имя проще запомнить и удобнее использовать, чем числовые адреса.[1]

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


eStatus, boxVolume, arraySize, intI.[2]

What is a variable? A typical program uses various values that change during its execution. For example, we create a program that performs some calculations on the values entered by the user.[3] The values entered by one user will obviously be different from those entered in by another user. This means that when creating the program, the programmer does not know what values will be introduced as input, and that makes it necessary to process all possible values a user may enter. When a user enters a new value that will be used in the process of calculation, we can preserve it (temporarily) in the random access memory of our computer. The values in this part of memory change (vary) throughout execution and this has led to their name - variables.[4]

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

Типы данных, пространство имен, классификация типов среды .NET

Прежде чем приступить к детальному изучению CTS среды .NET, рассмотрим общую классификацию типов, используемых в ней. Их иерархическая структура представлена на рис.1.

Рисунок №1 - Иерархия типов среды .NET

Корнем иерархии является класс System.Object, от которого прямо или косвенно унаследованы все типы .NET. Объявляя или используя любой тип, вы можете быть всегда уверены в том, что его самым дальним предком является System.Object.[5]

В .NET используется общая система типов (Common Туре System, CTS). Почему именно "общая"? Дело в том, что приложения для этой платформы можно разрабатывать на разных языках. Раньше было очень сложно разрабатывать приложения сразу на нескольких языках, потому что у каждого была своя система типов, и хранение строки, скажем, в Delphi и в С++ происходило по-разному. Благодаря общности типов в .NET, на каком бы языке вы ни писали программу, типы будут одинаковые, и они одинаково будут[6] храниться в памяти, а значит, станут одинаково интерпретироваться программой, и никаких проблем не возникнет.


В большинстве языков программирования выделяются два типа данных: простые (числа, строки, ... ) и сложные (структуры, объекты, ... ). В .NET и С# нет такого разделения. Эта технология полностью объектная, и даже простые типы данных являются объектами, хотя вы можете продолжать их использовать как простые типы в других языках. Это сделано для удобства программирования. [7]

Data types are sets (ranges) of values that have similar characteristics. For instance byte type specifies the set of integers in the range of [0 ... 255]. [8]

Каждая переменная имеет имя, тип, размер и значение. Имя переменной (идентификатор) в прямом смысле является ее названием. Тип определяет, какие числа или символы записаны в ячейку памяти под этим именем. Размер непосредственно связан с объявлением типа, определяет объем памяти и, следовательно, максимальную величину или точность задания числа. Значение определяет конкретное содержимое ячейки памяти. Идентификатор представляет собой комбинацию букв, цифр и знака подчеркивания, но не должен начинаться с цифры.

Например: Еr, rT_, yx, 6, u9t, _YU

Первым символом идентификатора может быть символ @, например:

@rt, @QQ, @D_eL

В этом случае за @ может следовать ключевое слово, например:

@new или @еlse

Венгерская нотация не привязана к конкретному языку программирования, но практически привязана к английскому языку. Если придерживаться принятых, хотя и не узаконенных правил, текст программы становится более понятным и удобным для работы. [9]

Наименование переменных - основа любой программы. От того, как будут выбираться имена, зависит читабельность кода приложения, а чем понятнее код, тем проще с ним работать/писать/сопровождать.

Пространство имен - это определенная область, внутри которой все имена должны быть уникальными. И именно благодаря использованию пространства имен уникальность переменных должна обеспечиваться только внутри определенного модуля - т.е. в разных модулях могут иметься переменные с одинаковыми именами. Так, например, в Delphi есть функция FindFirst. Такая же функция есть среди АРI-функций Windows, и описана она в модуле windows . Если нужно использовать вариант FindFirst из состава библиотеки визуальных компонентов (Visual Component Library, VCL), то можно просто вызвать эту функцию, а если нужен вариант из состава Windows API, то следует написать:

Windows.FindFirst

В .NET всё: классы, переменные, структуры и т. д. - разбито по пространствам имен, что позволяет избавиться от возможных конфликтов в именовании и, в то же время, использовать одинаковые имена в разных пространствах.[10]


Basic data types in C# are distributed into the following types:

Integer types - sbyte, byte, short, ushort, int, uint, long, ulong;

Real floating-point types - float, double;

Real type with decimal precision - decimal;

Boolean type - bool;

Character type - char;

String - string;

Object type - object.

These data types are called primitive (built-in types), because they are embedded in C# language at the lowest level. The table below represents the above[11] mentioned data types, their range and their default values: [12]

Таблица №1 - Основные типы данных CTS

Объект

Псевдоним

Описание

Object

object

Базовый класс для всех типов CTS.

String

string

Строка.

SByte

sbyte

8 - разрядное число со знаком. Возможные значения от -128 до 127.

Byte

byte

8 - разрядное число без знака. Значения от 0 до 255.

Int16

int

16 - разрядное число со знаком. Возможные значения от -32 768 до 32 767.

Uint16

uint

16 - разрядное число без знака. Возможные значения от 0 до 65 535.

Int32

int

32 - разрядное число со знаком. Возможные значения от -2 147 483 648 до 2 147 483 647.

Uint32

uint

32 - разрядное число без знака. Возможные значения от 0 до 4 294 967 295.

Int64

long

64 - разрядное число со знаком. Возможные значения от -9 223 372 036 854 775 808

до 9 223 372 036 854 775 807.

Uint64

ulong

64 - разрядное число без знака. Значения от 0 до 18 446 744 073 709 551 615.

Decimal

decimal

128 - разрядное число.

Char

char

16 - разрядный символ.

Single

float

32 - разрядное число с плавающей точкой стандарта IEEE. [13]

Double

double

64 - разрядное число с плавающей точкой

Boolean

bool

Булево значение[14]

Вот небольшая программа, показывающая минимальное и максимальное значение каждого из типов данных:

Листинг 1. Минимальные и максимальные значения типов данных

using System;

namespace ConsoleApp6

{

class MinAndMax

{

static void Main(string[] args)

{

Console.WriteLine("sbyte: {0} to {1}", sbyte.MinValue, sbyte.MaxValue);

Console.WriteLine("byte: {0} to {1}", byte.MinValue, byte.MaxValue);

Console.WriteLine("short: {0} to {1}", short.MinValue, short.MaxValue);

Console.WriteLine("ushort: {0} to {1}", ushort.MinValue, ushort.MaxValue);

Console.WriteLine("int: {0} to {1}", int.MinValue, int.MaxValue);


Console.WriteLine("uint: {0} to {1}", uint.MinValue, uint.MaxValue);

Console.WriteLine("long: {0} to {1}", long.MinValue, long.MaxValue);

Console.WriteLine("float: {0} to {1}", float.MinValue, float.MaxValue);

Console.WriteLine("double: {0} to {1}", double.MinValue, double.MaxValue);

Console.WriteLine("decimal: {0} to {1}", decimal.MinValue, decimal.MaxValue); [15]

}

}

}[16]

Рисунок 2 - Результат исполнения программы из листинга 1

Наибольшее понимание любого вопроса дает конечно же практика, для этого заводим аккаунт и устанавливаем на ПК программу Visual Studio 2017 c официального сайта https://www.microsoft.com. Далее, перейдя «File - New – Projekt – ConsoleApp(.Net Core) – ОК», создаем новый проект консольной программы, вводим необходимые команды и переходим по «Debug – Start Without Debugging». Как результат – перед нами исполнение написанной программы в виде консольного окна. Стоит также заметить, что нам часто придется использовать встроенный метод Console.WriteLine.

Объявление переменных, синтаксис элементарных типов, безопасность типов

С# является жестко типизированным языком. При его использовании вы должны объявлять тип каждого объекта, который создаете (например, целые числа, числа с плавающей точкой, строки, окна, кнопки, и т. д.), и компилятор поможет вам избежать ошибок, связанных с присвоением переменным значений только того типа, который им соответствует. Тип объекта указывает компилятору размер объекта (например, объект типа int занимает в памяти 4 байта) и его свойства (например, форма может быть видима и невидима, и т.д.).[17]

Объявление переменных осуществляем следующим образом: первым делом указываем тип, следом - ее имя:

int z;

Вторым шагом нужно провести инициализацию, то есть присвоить значение до первого использования:

z=0;

Если использовать переменную до присваивания начального значения компилятор выдаст сообщение об ошибке.

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

int z=0; w=1;

Некоторые системные типы данных требуют особого пояснения. Первый из этих типов - System.Boo1ean. В отличие от С и C++ теперь присваивать переменным этого типа действительно можно только два значения - t r u e (истинно) и false (ложно). Если в С и C++ мы вполне могли присваивать