Файл: пОНЯТИЕ ПЕРЕМЕННОЙ В ПРОГРАММИРОВАНИИ.виды и типы переменных.pdf
Добавлен: 18.05.2023
Просмотров: 193
Скачиваний: 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. Глобальные переменные очень затрудняют интеграцию модулей, поскольку код, написанный ранее, в большинстве случаев может содержать глобальные переменные с теми же именами, что и во встраиваемом модуле.
Но также использование глобальных переменных в некоторых случаях бывает очень полезно. Например, глобальные переменные могут быть использованы в тех случаях, когда нужно избежать необходимости прохода часто используемых переменных через несколько функций.
Как правило глобальные переменные широко используются для передачи данных между секциями кода, которые не участвуют в отношениях вызовов, такие как обработчики сигналов или параллельные нити исполнения