Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Вопрос 10. Концепция связывания, способы связи переменных с памятью



Связывание — процесс установления некоторой связи, например, между атрибутом и объектом или между операцией и символом. Момент установления связи называется временем связывания (binding time).

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

Например, символ звездочки (*) обычно связывается с операцией умножения в процессе создания языка, а тип данных INT/INTEGER с некоторым диапазоном возможных значений целых чисел во время реализации языка. В языках C и Pascal переменная связывается с конкретным типом данных, а вызов библиотечной функции с её командами при компиляции программы.

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

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

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

Связывание переменных с ячейками памяти

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

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

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

Явные динамические переменные — это безымянные (абстрактные) ячейки памяти, размещаемые и удаляемые с помощью явных команд периода выполнения, определяемых программистом. Обращаться к этим переменным можно только с помощью указателей и ссылок. Память для таких переменных извлекается из так называемой кучи (heap), которая представляет собой неорганизованный набор ячеек. Явные динамические переменные создаются либо специальным оператором, как, например, в языках Ada и C++, либо вызовом предусмотренной для этого системной подпрограммы, как в языке C. Кроме того, в некоторых языках, в частности в C++, есть средства уничтожения таких переменных. Явные динамические переменные часто применяются для организации различных динамических структур, таких как связанные списки и деревья, которые могут «увеличиваться» и «уменьшаться» во время выполнения программы. Также такие переменные используются в объектно-ориентированном программировании для работы с объектами.

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

Именованной константой называется переменная, связываемая со своим значением только во время связывания её с ячейкой памяти. Значение именованной константы невозможно изменить оператором присваивания или ввода.

 

Вопрос 11. Арифметические выражения, порядок вычисления операторов.

Линейная программа, как правило, составляется для вычисления значений по форму­лам. Эти вычисления выполняются с помощью оператора присваивания – основного оператора любого типа языка программирования. Действие этого оператора состоит в том, что он присваивает переменной значение, полученное в результате вычисления выражения. Оператор присваивания имеет вид: < переменная>: =< выражение>

В зависимости от типа переменной, стоящей в левой части, операторы присваивания делятся на следующие группы: арифметические, логические и символьные. Арифметичес­кий оператор присваивания служит для присваивания переменной вещественного или целого типа числового значения. В связи с этим в правой части такого оператора должно быть записано арифметическое выражение, задающее правило вычисление числового значения. Например, формула х = а + 2 на языке паскаль записывается в виде оператора присваивания: х: = а + 2

при выполнении этого оператора к значению, которое имеет переменная а, прибавляется 2 и результат присваивается переменной х. прежнее значение переменной х, если оно и было, теряется. С помощью оператора присваивания можно как задавать переменной начальное значение, так и изменить то значение, которое она уже имеет. Например, оператор: n: =n+ 1

увеличит значение переменной nна 1. этот пример подчеркивает различие между симво­лом присваивания и знаком равенства, используемым в математических формулах. Очевидно, что запись n: =n+ 1 не имеет смысла, если ее рассматривать как уравнение.

Переменная и выражение в операторе присваивания должны быть одного типа. Допускается использование переменной вещественного типа с выражением целого типа.

Арифметические выражения

Арифметическое выражение является аналогом обычной алгебраической формулы, оно задает правило и определяет порядок выполнения операций при вычислении по формуле. Арифметическое выражение состоит из следующих элементов: числовых констант, переменных, указателей функции, знаков арифметических операций и круглых скобок. Частным случаем арифметического выражения является числовая константа, переменная, указатель функции. Константы, переменные и функции должны быть либо описаны в программе, либо иметь стандартные имена. В арифметическом выражении используются следующие знаки арифметических операций: + (сложение), - (вычитание), * (умножение), / (деление), div(деление нацело с отбрасыванием остатка), mod(нахождение целого остатка при делении нацело).

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

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

- выражение записывают в строку без надстрочных или подстрочных символов;

- использовать только круглые скобки, число открывающихся скобок всегда должно рав­няться числу закрывающихся скобок, «лишние» круглые скобки, если они использованы без нарушения правил, не играют никакой роли, поэтому, когда возникает сомнения в последовательности выполнения операций, можно поставить «лишние» скобки;

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

- необходимо помнить, что порядок выполнения арифметического выражения определя­ется скобками, в их отсутствие операции выполняются согласно старшинству (приори­тету) операций в следующем порядке: вычисление значения функции; операции умноже­ния, деления, divилиmod; операции сложения или вычитания. Операции одинакового приоритета выполняются последовательно слева направо.

Тип результата арифметического выражения зависит от типов операндов, участвую­щих в операции. Тип результата операций «+», «-«, «*» будет Integer, если оба операнда имеют типInteger, в противном случае результат будет типа Real. Результат операции «/» всегда имеет типReal. Операции div и mod допустимы только при целочисленных опе­рандах и дают результат типа Integer. Результаты вычисления арифметических выражений (в том числе промежуточные) не должны выходить из допустимой области значений целых и вещественных величин.


Поделиться:



Популярное:

  1. V. Регламент переговоров машиниста и помощника машиниста по поездной радиосвязи
  2. Автомат с магазинной памятью
  3. АКСИОМЫ СТАТИКИ. СВЯЗИ И ИХ РЕАКЦИИ. ТРЕНИЕ. КЛАССИФИКАЦИЯ СИЛ
  4. Анализ взаимосвязи затрат, объема продаж и прибыли (маржинальный анализ)
  5. Анализ взаимосвязи нынешнего и прошлого воплощений
  6. Анализ новых тенденций в их взаимосвязи
  7. Аномалии развития в связи с недостаточностью двигательной сферы
  8. Аномалии развития в связи с недостаточностью зрения и слуха
  9. Блок 15. Сложное предложение с различными видами связи. Знаки препинания в сложных синтаксических конструкциях. Сочетание знаков и последовательность их расположения
  10. В биоценозах пищевые связи играют двоякую роль.
  11. В связи с этим основными проблемами, связанными с реализацией модели 4С, являются следующие.
  12. В ЭЛЕКТРОННОЙ ФОРМЕ ПО ТЕЛЕКОММУНИКАЦИОННЫМ КАНАЛАМ СВЯЗИ


Последнее изменение этой страницы: 2016-05-29; Просмотров: 955; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.021 с.)
Главная | Случайная страница | Обратная связь