Файл: Понятие переменной в программировании. Виды и типы переменных. ( Адрес переменной).pdf

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

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

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

Добавлен: 26.06.2023

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

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

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

Глобальные переменные используйся в тех случаях, когда их значения должны быть доступны одновременно нескольким функциям. В процедурно-ориентированных программах глобальные переменные содержат наиболее важную информацию, используемую программой. Тем не менее, всеобщая доступность глобальных переменных имеет и негативную сторону: они не защищены от несанкционированного и некорректного доступа со стороны функций. В программах, написанных с применением объектно-ориентированного подхода, необходимость в глобальных переменных гораздо меньше.[56]

Следует помнить, что если существует две переменные с одинаковыми именами: одна – глобальная, другая – локальная, то при обращении по этому имени будет получен доступ к локальной переменной. Одноимённая глобальная переменная будет «замаскирована» своей локальной «тезкой».[57]

Всем знаком совет избегать глобальных переменных. Это дельный совет, поскольку довольно трудно отследить, где и как они используются. Из-за «загрязнения пространства имён» (создания нескольких имён, которые могут конфликтовать с вашими локальными переменными) код может изменить глобальную переменную тогда, когда создатель планировал изменить локальную и наоборот. [58]

Время жизни переменных

Время жизни переменной начинается в момент связывания её с определённой областью памяти и заканчивается при разрыве этой связи.

В зависимости от времени жизни все переменные можно разделить на четыре категории.

Это статистические переменные. Они связываются с областью памяти во время трансляции программы и остаются связанными с этой областью до конца выполнения программы. Глобальные переменные и переменные объявляемые в подпрограммах, которые должны сохранять своё значение между отдельными выполняемыми подпрограммами, реализуются как статистические переменные.[59]

Статическую переменную, так же, как и любую другую, можно инициализировать при объявлении. Замечательное свойство таких переменных заключается в том, что они сохраняют своё значение по окончанию работы функции. При очередном вызове используется оставшееся после предыдущей работы значение. В то же время статические переменные зачищены от изменений извне. Одним из традиционных применений статических переменных является использование их в качестве счётчиков для сбора различной статистической информации о вызове функции, например, о количестве вызовов.[60]


Автоматические переменные являются локальными по отношению к блоку и хранятся внутри того блока, где они написаны. Их можно инициализировать произвольными выражениям. Автоматические объекты существуют только во время выполнения данного блока и теряют свои значения при выходе из него. При каждом вхождении в блок им присваиваются начальные значения, заданные в описании. Если начальные значения не заданы, то значения автоматических объектов при входе в блок не определены.[61]

Явные динамические переменные – это переменные, которые связываются с соответствующей областью памяти во время выполнения программы при обработке оператора создания новых объектов, такого, как оператор new в языке C++, использующего в качестве операнда тип задаваемой переменной. Так же, как и автоматические переменные, явные динамические переменные связываются с типом статически. При выполнении оператора создания новой переменной создаётся явная динамическая переменная, имеющая тип операнда, и возвращается указатель на неё.

Неявные динамические переменные – это переменные, которые связываются с соответствующей областью памяти только при присвоении им значений. Время жизни неявной динамической переменной определяется с момента присвоения этой переменной значения до момента присваивания ей нового значения.[62]

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

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

Процедура. Область видимости – только та процедура, в которой переменная объявлена. Эта область задаётся с помощю определённых операторов, разных для каждого языка.

Модуль. Область видимости – все процедуры модуля, в котором переменная объявлена.

Проект. Область видимости – все процедуры модулей активного проекта.[63]

Правила видимости переменных переделяют, каким образом ссылки на переменные, объявленные вне выполняющейся в данный момент подпрограммы (блока), связанны с объявлениями этих переменных. Такое связывание называется ассоциацией и может быть представлено в виде пары, состоящей из идентификатора и связанного с ним объекта данных.[64]


Программисты часто допускают ошибку забывая об области видимости переменных, поэтому, если не помнить принципы её работы, это поможет в отладке некоторых весьма неочевидных ошибок программного ода. Достаточно сказать, что, если вы не объявили переменную каким-нибудь особым образом, её область видимости ограничена локальным пространством: либо в пределах кода текущей функции, либо в пределах кода, на принадлежащего никаким функциям, в зависимости от того, где эта переменная была впервые создана, или где к ней впервые был получен доступ, внутри функции, или за её пределами.[65]

Каждая переменная обладает своей областью видимости. Традиционно доступ к переменной может быть получен в рамках только одного модуля, в котором она объявлена. В область видимости входят также подключённые к модулю файлы. Следует обратить более пристальное внимание на работу с переменными в рамках одного модуля. Внутри функции используется локальная область видимости переменных. Впрочем, переменные, объявленные вне функций, всё же могут быть им доступны. Для этого их надо пометить как глобальные.[66]

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

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

Динамическая область видимости имён, реализованная в таких языках программирования, как APL и Snobol, представляет собой множество активаций подпрограмм, в которых активации идентификаторов видимы во время выполнения программы. Динамическая область видимости имён опирается не на пространственную взаимосвязь подпрограмм, а на последовательность их вызовов. [68]

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

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


Переменные в Java и переменные в Perl

Чтобы показать, что переменная в разных языках программирования по-разному пишется и имеет разную область видимости можно привести сравнительную характеристику любых языков программирования. Я же для этой цели выбрала Java и Perl.

Perl предоставляет три типа переменных: скаляры (единственного числа), массивы (множественного числа) и хеши (именуемые также ассоциативными массивами, также множественного числа).[69]

В Java существуют примитивные переменные, переменная типа класс, переменная типа интерфейс, переменная типа “array of T” где T примитивный тип и где T ссылочный тип.

Что же касается Perl – это язык прощающий многие ошибки. Поэтому ну трудно написать программу на Perl, которая будет работать, но при этом делать совсем не то, для чего она предназначалась. Использование инструкции strict может навести порядок в программе при объявлении переменных перед их использованием.[70]

Переменная Perl является пакетной переменной, пока перед ней не будет стоять ключевое слово my, тогда она будет считаться лексической переменной, то есть переменной, которая определена внутри блока или файла, в котором она появляется. Пакет определяет пространство имён Perl. Например, в певременной по имени SWWW::Mechanize: :ех $ех — скалярная переменная из пакета WWW::Mechanize, где слово «пакет» используется в смысле пространства имен. Пакетная переменная определяется внутри пакета, в котором она появляется. Другие пакеты могут ссылаться на пакетные переменные путем использования полного имени переменной (например, SText::Wrap::columns).[71]

Когда в Java объявляются переменные, то нужно обязательно указывать их тип. Например: image, sum. В языке программирования Java, когда происходит запуск программы, то все объявленные в ней переменные привязываются к конкретным ячейкам памяти, и не могут менять ячейку до конца выполнения программы.

Что касается непосредственно объявления переменных в Java, то выполняется оно по следующим правилам. В первую очередь при объявлении переменной перед ее именем в обязательном порядке указывается идентификатор типа. Например, инструкцией int n объявляется переменная n целочисленного типа int. В качестве оператора присваивания в Java используется оператор =.[72]


В Java нужно сначала объявить саму переменную, а уж потом присваивать ей значение. А язык Perl не является строго типизированным. Переменные Perl начинают свое существование с присвоением им значения, их не нужно объявлять или инициализировать, хотя это могло бы сделать программу более понятной. [73]Вполне допускается следующий код:

$a = ‘Применить’;

$a = 12;

print $a;

Здесь переменная a сначала принимает значение строкового типа, а затем – числового.[74] В Java это недопустимо так как это может вызвать множество ошибок.

В Perl, чтобы заставить Perl требовать объявления переменных перед присваиванием им значений, в программу включается инструкция use strict. [75]

Что касается доступности переменных в Java, то она определяется блоком, в котором эта переменная объявлена. Блок, в свою очередь, выделяется парой фигурных скобок (то есть { и }).[76]

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

В Java, как и в С++, допускается динамическая инициализация переменных. При динамической инициализации значение переменной присваивается при объявлении, причем значением является выражение, содержащее другие переменные. Пример динамической инициализации переменной:

int a=3,b=4; int c=a*a+b*b;

В данном случае переменная c инициализируется выражением a*a+b*b, то есть получает значение 25. Главное и единственное условие для динамической инициализации — все переменные, входящие в соответствующее выражение, должны быть предварительно объявлены и им должны быть присвоены значения.[78]

В Perl массивы имеют упорядоченную структуру. Размер массива растет по мере необходимости. Если будет ссылка на неинициализированный элемент массива, например на элемент, выходящий за его пределы, Perl возвращает значение undef (не определен).[79]

Массивы в Java относятся к ссылочным типам и описываются своеобразно, но характерно для ссылочных типов. И описываются в три этапа.

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