Что означают «однократный» и «однократный» для выражения? - PullRequest
0 голосов
/ 02 июля 2019

С Интегрированный подход к программной инженерии. Pankaj Jalote

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

Наиболее часто используемые операторы с одним входом и одним выходом являются

Selection: if B then S1 else S2
if B then S1

Iteration: While B do S
repeat S until B

Sequencing: S1; S2; S3;...

Что означают слова «с одним входом» и «с одним выходом»значит в структурированном утверждении?

Почему операторы, перечисленные в конце, являются однократными и одноступенчатыми?Например, в if B then S1 else S2, почему это однократный выход, учитывая, что он может заканчиваться либо S1, либо S2?

Можете ли вы дать утверждение, которое не является однократной?

Можете ли вы дать утверждение, которое не является единственным выходом?

1 Ответ

1 голос
/ 02 июля 2019

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

Понятие однократного входа / однократного выхода может быть неясным для тех, кто никогда не работал с кодом, который не использовал такой подход. Примеры последнего могут быть найдены при написании кода для платформ, таких как Atari 2600, где пространство ОЗУ часто находится в абсолютной надбавке. Если фрагмент кода будет вызываться из кода, который показывает экран заголовка, или из игровой логики, и там нельзя позволить себе два байта стекового пространства, необходимого для инструкции вызова подпрограммы, это не будет редкостью перейти к коду (вместо использования инструкции «JSR» [перейти к подпрограмме]) и выйти из кода, проверив, идет ли игра и вернувшись к соответствующему месту на «экране заголовка шоу» или « выполнить игровую логику "кода. Такой дизайн может быть неудобно поддерживать, если возникает необходимость вызывать его из большего количества мест в коде, но такие методы могут быть необходимы, если объем ОЗУ действительно ограничен (например, один имеет всего 128 байтов, как в Atari 2600).

...