Файл: пОНЯТИЕ ПЕРЕМЕННОЙ В ПРОГРАММИРОВАНИИ.виды и типы переменных.pdf

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

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

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

Добавлен: 18.05.2023

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

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

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

Введение

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

Объектом исследования является виды и типы переменных в программировании.

Предметом исследования является переменная.

При написании данной курсовой работы я использовал труды таких писателей и ученных как: нашего соотечественник, переводчика учебников по программированию Александр Пирамидин, Брайана Кернигана и Денниса Ритчи, причём последний — один из непосредственных авторов и разработчиков языка Си, а также Линды Дейли Полсон, книга которой «Разработчики переходят на динамические языки» очень помогла мне детально разобраться в динамических языках программирования.

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

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

Для достижения поставленных целей необходимо выполнить следующие задачи:

- понять роль переменной в программировании;

- изучить статические и динамические переменные;

- изучить локальные и глобальные переменные;

-изучить типы переменных;

- понять значение систем проведения проверки соответствия типов переменных;

- сделать вывод какой же способ типизации лучше статический или динамический;

1.ПОНЯТИЕ ПЕРЕМЕННОЙ В ПРОГРАММИРОВАНИИ

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

Переменная характеризуется:

  • Именем («обозначением ячейки памяти»)
  • Значением (данными, содержащимися в переменной в конкретный момент времени)
  • Типом (определяющим: а) какие значения может принимать переменная; б) какие операции можно производить с этими значениями; в) как данные представлены в памяти компьютера)

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


Хорошим стилем является осмысленное именование переменных. Разрешается использовать строчные и прописные буквы, цифры и символ подчёркивания, который в Си считается буквой. Первым символом обязательно должна быть буква, в имени переменной не должно быть пробелов. В современных версиях компиляторов длина имени практически не ограничена. Имя переменной не может совпадать с зарезервированными ключевыми словами. Заглавные и строчные буквы в именах переменных различаются, переменные a и A — разные переменные.
В языке Си все переменные должны быть объявлены. Это означает, что, во-первых, в начале каждой программы или функции Вы должны привести список всех используемых переменных, а во-вторых, указать тип каждой из них.


2. СТАТИЧЕСКИЕ И ДИНАМИЧЕСКИЕ ПЕРЕМЕННЫЕ

Адрес поименованной ячейки памяти может определятся как на этапе компиляции, так и в то время, когда программа уже выполняется. По времени создания различают статические и динамические переменные. Статические создаются в момент запуска программы или подпрограммы, а динамические создаются в процессе выполнения программы.

Статическая переменная (или еще как её называют «переменная со статической продолжительностью») сохраняет свое значение даже после выхода из блока, в котором она определена. То есть она создается (и инициализируется) только один раз, а затем сохраняется на протяжении всей программы. Соответственно время жизни статических переменных определяется: от загрузки до выгрузки mql4-программы.

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

Пример статистической переменной через свойство функции в языке JavaScript:

function incr(){

return incr.count++;

}

incr.count = 0; // начальное значение

incr();

incr();

incr();

incr(); // 3

Динамическая переменная — такая переменная в программе, под которую выделяется место в оперативной памяти в то время, когда программа выполняется. Во время работы программы она является участком памяти, выделенным системой программе для конкретных целей. Это и есть её главная отличительная черта по сравнению с глобальной статической переменной - участка памяти, выделенного системой программе для конкретных целей перед началом работы программы.

Динамическая адресация понадобиться только тогда, когда заранее точно не известно количество поступающих на хранение данных. Такие данные размещают в специальных динамических структурах, тип которой выбирается с учёт возможностями выбранной системы программирования в соответствии со спецификой задачи. Это может быть, например, куча, стек, очередь и т. п. Даже понятие файл, в смысле, который заложил почтенный Н.Вирт в Паскаль, является динамической структурой.

Во многих языках программировании у динамической переменной нет собственного идентификатора, так как она создаётся во время выполнения программы. Работа с динамической переменной ведётся косвенно, через указатель. Создание такой переменной заключается в выделении определённого участка памяти с помощью специальной функции. Такая функция возвращает адрес в памяти, который назначается указателю. Сам процесс доступа к памяти через указатель называется разыменованием. По окончанию работы с динамической переменной выделенную под неё память обязательно нужно освободить — для этого применяют специальную функцию.


Пример создания динамической переменной с помощью указателя в языке Pascal:

type tMyArray = array [1..3] of real;

var pMyArray = ^tMyArray;

begin

new (pMyArray); {выделение памяти под массив из трех чисел}

pMyArray^[1] := 1.23456;

pMyArray^[2] := 2.71828;

pMyArray^[3] := 3.14159;

......

Указатели используются явно в языках программирования относительно низкого уровня, что в большинстве случаев оборачивается серьёзными ошибками. В языках более высокого уровня динамические типы данных могут быть оформлены как динамические массивы — это массивы такого размера, которые могут «динамически» изменяться при выполнении программы (например, — уменьшаться после выгрузки неактуальных данных)

Пример создания динамического массива в языке Delphi:

var MyArray = array of real;

begin

SetLength(MyArray,3); {выделение памяти под массив из трех чисел}

MyArray[0] := 1.23456; {в Delphi динамические массивы нумеруются в си-образном стиле: от 0 до n-1}

MyArray[1] := 2.71828;

MyArray[2] := 3.14159;

......

2.2 ЛОКАЛЬНЫЕ И ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ. ОБЛАСТЬ ВИДИМОСТИ.

Область видимости (англ. scope) обозначает такая область программы, в пределах которой идентификатор (имя) некоторой переменной продолжает быть связанным с этой переменной и возвращать её значение. За пределами области видимости один и тот же идентификатор может быть свободным (не связанным ни с какой из них, либо быть связан с другой переменной).

В большинстве языков программирования область видимости переменной определяется местом её объявления. А также, область видимости может задаваться с помощью пространств имён или классов памяти.

Для языков разметки область видимости также может иметь смысл: например, в HTML областью видимости имени элемента управления является форма (HTML) от <form> до </form>.

Виды переменных по области видимости

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


- Глобальные переменные — объявляются вне всех функций и доступны отовсюду. То есть, не написав ни строчки кода, мы уже находимся в глобальной области видимости. Если мы сразу определяем переменную, она находится в глобальной области видимости.

- Локальные переменные — объявляются внутри функции и недоступны снаружи неё. То есть Локальной областью видимости называют любую область видимости, определённую после глобальной.

В объектно-ориентированном программировании каждый объект содержит три специфические области видимости:

- Закрытая (англ. private) — переменная используется только в реализации объекта;

- Общедоступная (англ. public) — переменная используется только при инициализации и использовании объекта;

- Защищённая (англ. protected) — переменная используется, только в реализации объекта или его потомка.

Подробно рассмотрим глобальные и локальные переменные.

Как мы уже знаем по зоне видимости различают локальные и глобальные переменные. Локальные переменные доступны только конкретной подпрограмме, а вот глобальные переменны всей программе. С распространением объектного и модульного программирования, появились ещё и так называемые общие переменные (которые доступные только для определённых уровней иерархии подпрограмм). Область видимости в некоторых случаях задаётся классом памяти, а ограничение видимости может производиться путём введения пространств имён.

Локальной переменной принято называть переменную, объявленную внутри блока кода. Область видимости локальной переменной начинается в точке её объявления и заканчивается в конце этого блока. Например, в языке Си локальными являются переменные объявленные внутри блока или функции (в Си, блоки ограничиваются фигурными скобками {и}).

Существуют языки программирования такие как JavaScript, которые разрешают создавать локальные переменные только в теле функции, а переменные объявленные внутри блоков добавляются в область видимости функции.

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

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

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


Локальной переменной может является любой параметр функции (например, в языке Си), который не использует ссылок или указателей.

Рассмотрим локальные переменные в языке Ruby:

#include <stdio.h>

int a = 0; // глобальная переменная

int main()

{

printf("%d", a); // будет выведено число 0

{

int a = 1; // объявлена локальная переменная а, глобальная переменная a не видна

printf("%d", a); // будет выведено число 1

{

int a = 2; // еще локальная переменная в блоке, глобальная переменная a не видна, не видна и предыдущая локальная переменная

printf("%d", a); // будет выведено число 2

}

}

}

В этом случае запись сделана следующим образом: имени глобальной переменной должен предшествовать знак $, например, $variable_name, в то время как локальная переменная просто не имеет знака $ перед её именем, например, variable_name (в то время как в Perl все скалярные значения имеют $ спереди).

Глобальной переменной называют такую переменную, областью видимости которой является целая программа (кроме затенённых (англ.) областей). Механизмы взаимодействия с глобальными переменными называют механизмами доступа к глобальному окружению или состоянию (англ. global environment). Глобальные переменные в основном могут использоваться для взаимодействия между функциями и процедурами или как альтернатива передачи аргументов и возвращения значений.

Глобальные переменные имею ряд недостатков:

1.Глобальная переменная может быть изменена в любой точке программы (если только она не объявлена как переменная только для чтения) или не располагается в защищённой памяти, что скорее всего повлияет на работу других частей программы. По этой причине глобальные переменные имеют неограниченный потенциал для создания взаимных зависимостей, что приводит к усложнению программы.

2. Глобальные переменные очень затрудняют интеграцию модулей, поскольку код, написанный ранее, в большинстве случаев может содержать глобальные переменные с теми же именами, что и во встраиваемом модуле.

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

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