Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
pnayavka_quest.doc
Скачиваний:
6
Добавлен:
25.09.2019
Размер:
182.78 Кб
Скачать

Алиасинг

Сложность с именами параметров называется «Алиасинг», потому что один фактический идентификатор имеет два формальных имени, в пример Two имеет два различных имени V2 и Temp.

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

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

{Фактические параметры должны быть различными идетификаторами}

могли бы быть полезными.

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

Намеренное или непреднамеренное использование различных имен (псевдонимов) для доступа к одному и тому же объекту в памяти. Различают:

  • Parameter aliasing — совмещение имен переданных параметров — ситуация, возникающая при передаче в процедуру или функцию параметров по ссылке, когда нескольким формальным параметрам соответствует один и тот же фактический (local parameter aliasing), либо переданный фактический параметр доступен в теле процедуры или функции как глобальный объект (global parameter aliasing).

  • Pointer aliasing — совмещение указателей — косвенный доступ к одному объекту через несколько различных указателей.

  • View aliasing — вариантное совмещение имен — использование одного участка памяти для хранения различных объектов (например, объединения — unions в Си и C++).

  • Subscript aliasing — совмещение имен индексов — доступ к одному и тому же элементу массива, когда индекс массива представлен различными переменными, имеющими одинаковое значение.

  • Overlap aliasing — перекрывающее совмещение имен 1. Одновременный доступ как к целому объекту, так и к его части (например, члену класса). 2. Обращение в сегментных моделях памяти к одной ячейке с разными комбинациями сегмент/смещение.

Спецификация программы

Спецификация программы описывает задачу и ее решение как отношение между входными и выходными строками.

Новые идеи: спецификация.

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

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

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

Примеры:

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

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

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

Эти три примера иллюстрируют, что спецификации программ могут быть функциями или отношениями и их области определения могут быть ограничены.

Хотя некоторые спецификации могут быть более применимыми, чем другие в данном контексте задачи, не существует жесткого правила для их разработки. Например, в спецификации про вычисление арифметических выражений может быть важным распознавать строки, которые не являются арифметическими выражениями и выдавать сообщения об ошибке. Каждый набор сообщений об ошибках для каждого отклонения синтаксиса арифметического выражения от корректного может быть частью спецификации. Таким образом, две спецификации для одних арифметических выражений, но с различной обработкой некорректного синтаксиса будут разными спецификациями. Спецификация может быть даже в форме «если синтаксис арифметического выражения некорректен, выдать сообщение об ошибке». Здесь программист свободен в выборе сообщений об ошибке. Здесь спецификация – это отношение, в котором каждое корректно сформулированное арифметическое выражение связано с уникальным выходом, а некорректно сформулированное выражение соответствует любому выходу, который может быть распознан как сообщение об ошибке. (Очевидно, что в данном случае неблагоразумно присваивать ошибкам номера и выдавать сообщение такие как, например 125, потому что они могут быть спутаны с результатами вычисления.)

Также полезно делать BNF для спецификации, однако всегда надо выбирать степень точности.

Спецификация – это отношение, содержащее приемлемые пары входных и выходных строк.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]