Логически сгруппированная часть исходного кода например набор инструкций

Структурное
программирование
— методология
разработки программного обеспечения,
в основе которой лежит представление
программы в виде иерархической структуры
блоков. Предложена в 1970-х годах Э.
Дейкстрой и др.

В
соответствии с данной методологией
любая программа строится без использования
оператора goto из трёх базовых управляющих
структур: последовательность, ветвление,
цикл; кроме того, используются подпрограммы.
При этом разработка программы ведётся
пошагово, методом «сверху вниз».

Методология
структурного программирования появилась
как следствие возрастания сложности
решаемых на компьютерах задач, и
соответственно, усложнения программного
обеспечения. В 1970-е годы объёмы и сложность
программ достигли такого уровня, что
традиционная (неструктурированная)
разработка программ перестала
удовлетворять потребностям практики.
Программы становились слишком сложными,
чтобы их можно было нормально сопровождать.
Поэтому потребовалась систематизация
процесса разработки и структуры программ.

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

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

Принципы структурного программирования

Становление
и развитие структурного программирования
связано с именем Эдсгера Дейкстры.
Принцип 1. Следует отказаться от
использования оператора безусловного
перехода goto.
Принцип 2. Любая
программа строится из трёх базовых
управляющих конструкций: последовательность,
ветвление, цикл.

  • Последовательность — однократное
    выполнение операций в том порядке, в
    котором они записаны в тексте программы.

  • Бертран Мейер поясняет: «Последовательное
    соединение: используйте выход одного
    элемента как вход к другому, подобно
    тому, как электрики соединяют выход
    сопротивления со входом конденсатора».

  • Ветвление — однократное выполнение
    одной из двух или более операций, в
    зависимости от выполнения заданного
    условия.

  • Цикл — многократное исполнение одной
    и той же операции до тех пор, пока
    выполняется заданное условие (условие
    продолжения цикла).

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

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

  • В этом случае в тексте основной программы,
    вместо помещённого в подпрограмму
    фрагмента, вставляется инструкция
    «Вызов подпрограммы». При выполнении
    такой инструкции работает вызванная
    подпрограмма. После этого продолжается
    исполнение основной программы, начиная
    с инструкции, следующей за командой
    «Вызов подпрограммы».

  • Бертран Мейер поясняет: «Преобразуйте
    элемент, возможно, с внутренними
    элементами, в подпрограмму, характеризуемую
    одним входом и одним выходом в потоке
    управления».

Принцип 5. Каждую логически
законченную группу инструкций следует
оформить как блок (block).
Блоки являются
основой структурного программирования.
Блок — это логически сгруппированная
часть исходного кода, например, набор
инструкций, записанных подряд в исходном
коде программы. Понятие блок означает,
что к блоку инструкций следует обращаться
как к единой инструкции. Блоки служат
для ограничения области видимости
переменных и функций. Блоки могут быть
пустыми или вложенными один в другой.
Границы блока строго определены.
Например, в if-инструкции блок ограничен
кодом BEGIN..END (в языке Паскаль) или фигурными
скобками {…} (в языке C) или отступами (в
языке Питон). Принцип 6. Все
перечисленные конструкции должны иметь
один вход и один выход.
Произвольные
управляющие конструкции (такие, как в
блюде спагетти) могут иметь произвольное
число входов и выходов. Ограничив себя
управляющими конструкциями с одним
входом и одним выходом, мы получаем
возможность построения произвольных
алгоритмов любой сложности с помощью
простых и надежных механизмов.

Принцип 7. Разработка программы
ведётся пошагово, методом «сверху вниз»

(top–down method)

Соседние файлы в папке Doc-Ответы (Все)

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Хотя C# создавался строго в парадигме ООП, рассмотренные выше операторы языка позволяют реализовать и структурное программирование.

Напомним, что его становление и развитие связано с именем Эдсгера Дейкстры, который опубликовал своё знаменитое письмо «Оператор Go To считается вредным» (1968 год). Это поистине исторический документ, оказавший заметное влияние на дальнейшее развитие программирования.

Вам необходимо освоить технологию структурного программирования для написания «правильных» подпрограмм (структурных единиц ваших программ).

Принципы структурного программирования:

Принцип 1. Следует отказаться от использования оператора безусловного перехода goto.

Принцип 2. Любая программа строится из трёх базовых управляющих конструкций: последовательность, ветвление, цикл.
Последовательность — однократное выполнение операций в том порядке, в котором они записаны в тексте программы.
Ветвление — однократное выполнение одной из двух или более операций, в зависимости от выполнения заданного условия.
Цикл — многократное исполнение одной и той же операции до тех пор, пока выполняется заданное условие (условие продолжения цикла).

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

Принцип 4. Повторяющиеся фрагменты программы можно оформить в виде подпрограмм (процедур и функций). Таким же образом (в виде подпрограмм) можно оформить логически целостные фрагменты программы, даже если они не повторяются. В этом случае в тексте основной программы, вместо помещённого в подпрограмму фрагмента, вставляется инструкция «Вызов подпрограммы». При выполнении такой инструкции работает вызванная подпрограмма. После этого продолжается исполнение основной программы, начиная с инструкции, следующей за командой «Вызов подпрограммы».

Принцип 5. Каждую логически законченную группу инструкций следует оформить как блок. Блоки являются основой структурного программирования. Блок — это логически сгруппированная часть исходного кода, например, набор инструкций, записанных подряд в исходном коде программы. Понятие блок означает, что к блоку инструкций следует обращаться как к единой инструкции. Блоки служат для ограничения области видимости переменных и функций. Блоки могут быть пустыми или вложенными один в другой. Границы блока строго определены. Например, в операторе if блок ограничен кодом BEGIN..END (в языке Паскаль) или фигурными скобками {…} (в языках C, С++, C#).

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

Принцип 7. Разработка программы ведётся пошагово, методом «сверху вниз».
Конец цитаты.

Примечание (терминологическое) к Принципу 4.
«Подпрограммам» в разных языках соответствуют разные названия:
В Паскале это procedure и function, в Бейсике – subroutine и function, в С и С++ — только функции. В C# используется термин «функция-член». Напомним, что основной единицей инкапсуляции в C# является класс, который определяет форму объекта. Он описывает данные, а также код, который будет ими оперировать. В C# описание класса служит для построения объектов, которые являются экземплярами класса. Код и данные, составляющие вместе класс, называют членами. Данные, определяемые классом, называют полями, или переменными экземпляра. А код, оперирующий данными, содержится в функциях-членах, самым типичным представителем которых является метод. В C# метод служит в качестве аналога подпрограммы (к числу других функций-членов относятся свойства, события и конструкторы). Таким образом, методы класса содержат код, воздействующий на поля, определяемые этим классом.

Следует отметить, что в C# метод, как функция-член обязательно относится к какому-либо классу. При попытке объявить метод вне класса, в пространстве имен, диагностируется ошибка:
«Пространство имен не может непосредственно содержать такие члены, как поля или методы».

Даже в стандартном консольном приложении объявляется один класс Program и один метод static void Main(string[] args) этого класса, имеется одна точка входа и одна точка выхода. Другие методы, объявленные в этом классе, могут вызываться как подпрограммы как прямо, так и опосредованно из Main().

Можно считать, что консольное приложение, в котором учитываются 7 указанных выше принципов (не использовать goto, применять только три управляющие структуры и т.д.), вполне соответствует идеологии структурного программирования.

В Windows-приложении в целом, как уже отмечалось, принцип «один вход — один выход» не применим (какие-либо действия являются реакцией на некоторые события), однако реализация каждого метода должна соответствовать принципам структурного программирования.

ЗАКЛЮЧЕНИЕ

Итак, мы рассмотрели синтаксис операторов языка C# с небольшими примерами. Каждый из них вы должны проверить в консольном приложении и, изменяя что-либо, поэкспериментировать.
Теперь нам надо закрепить изученный материал раздела «Основы языка С#». Для этого вы можете изучить примеры решения задач и написать программы, реализующие задания для самостоятельной работы в следующем части курса «Основы языка C#. Задачи«.


NEW: Наш Чат, в котором вы можете обсудить любые вопросы, идеи, поделиться опытом или связаться с администраторами.


Помощь проекту:

Структу́рное программи́рование — методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков. Предложена в 1970-х годах Э. Дейкстрой и др.

В соответствии с данной методологией любая программа строится без использования оператора goto из трёх базовых управляющих структур: последовательность, ветвление, цикл; кроме того, используются подпрограммы. При этом разработка программы ведётся пошагово, методом «сверху вниз».

Методология структурного программирования появилась как следствие возрастания сложности решаемых на компьютерах задач, и соответственно, усложнения программного обеспечения. В 1970-е годы объёмы и сложность программ достигли такого уровня, что традиционная (неструктурированная) разработка программ перестала удовлетворять потребностям практики. Программы становились слишком сложными, чтобы их можно было нормально сопровождать. Поэтому потребовалась систематизация процесса разработки и структуры программ.

Методология структурной разработки программного обеспечения была признана «самой сильной формализацией 70-х годов».

По мнению Бертрана Мейера, «Революция во взглядах на программирование, начатая Дейкстрой, привела к движению, известному как структурное программирование, которое предложило систематический, рациональный подход к конструированию программ. Структурное программирование стало основой всего, что сделано в методологии программирования, включая и объектное программирование»[1].

Содержание

  • 1 История
  • 2 Цель
  • 3 Спагетти-код
  • 4 Оператор goto
  • 5 Теорема о структурном программировании
  • 6 Принципы структурного программирования
  • 7 Метод «сверху вниз»
  • 8 Достоинства структурного программирования
  • 9 Ясность и читабельность программ
  • 10 Двумерное структурное программирование
  • 11 См. также
  • 12 Примечания
  • 13 Литература
  • 14 Ссылки

История[править | править вики-текст]

Первоначально идея структурного программирования появилась на свет в связи с оператором goto и сомнениями о целесообразности его применения. Впервые подобные сомнения высказал Хайнц Земанек (Heinz Zemanek) на совещании по языку Алгол в начале 1959 года в Копенгагене. Однако это выступление не привлекло к себе внимания и не имело последствий. Эдсгер Дейкстра (Edsger Dijkstra) вспоминает: «До некоторой степени я виню себя за то, что в то время не смог оценить значимость этой идеи»[2][3][4].

Ситуация коренным образом изменилась через десять лет, когда в марте 1968 года Дейкстра опубликовал свое знаменитое письмо «Оператор Go To считается вредным» (Go To Statement Considered Harmful). Это поистине исторический документ, оказавший заметное влияние на дальнейшее развитие программирования.

Судьба самого документа очень интересна. Дело в том, что Дейкстра дал статье совсем другое название: «Доводы против оператора GO TO» (A Case against the GO TO Statement).

Однако в момент публикации произошло нечто непонятное — статья почему-то загадочным образом превратилась в «Письмо к редактору», причем прежнее название столь же загадочно исчезло. Что произошло на самом деле? Дейкстра объяснил таинственное превращение статьи в письмо лишь много лет спустя, в 2001 году, за год до смерти.

Журнал Communications of the ACM опубликовал мой текст под названием «Оператор GOTO считается вредным». В последующие годы его часто цитировали. К сожалению, зачастую это делали люди, которые видели в нем не больше, чем сказано в заголовке. Этот заголовок стал краеугольным камнем моей славы…

Как все это случилось? Я отправил статью под названием «Доводы против оператора GO TO». Чтобы ускорить публикацию, редактор превратил мою статью в «Письмо к редактору». При этом он придумал для статьи новое название, которое изобрел сам. Редактором был Никлаус Вирт[5][6].

Цель[править | править вики-текст]

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

Такая цель была поставлена в связи с ростом сложности программ и неспособностью разработчиков и руководителей крупных программных проектов справиться с проблемами, возникшими в 1960 – 1970 годы в связи с развитием программных средств[7].

Спагетти-код[править | править вики-текст]

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

Спагетти-код (spaghetti code) — плохо спроектированная, слабо структурированная, запутанная и трудная для понимания программа, содержащая много операторов goto (особенно переходов назад), исключений и других конструкций, ухудшающих структурированность[8]. Самый распространённый антипаттерн программирования.

Спагетти-код назван так потому, что ход выполнения программы похож на миску спагетти, то есть извилистый и запутанный. Иногда называется «кенгуру-код» (kangaroo code) из-за множества инструкций jump.

В настоящее время термин применяется не только к случаям злоупотребления goto, но и к любому «многосвязному» коду, в котором один и тот же небольшой фрагмент исполняется в большом количестве различных ситуаций и выполняет много различных логических функций[8].

Спагетти-код может быть отлажен и работать правильно и с высокой производительностью, но он крайне сложен в сопровождении и развитии[8]. Доработка спагетти-кода для добавления новой функциональности иногда несет значительный потенциал внесения новых ошибок. По этой причине становится практически неизбежным рефакторинг (code refactoring) — главное лекарство от спагетти.

Оператор goto[править | править вики-текст]

Основная статья: goto

Начиная с 1970-х годов, оператор безусловного перехода goto оказался в центре систематической и все возрастающей критики. Неправильное и необдуманное использование оператора goto в исходном тексте программы приводит к получению запутанного, неудобочитаемого «спагетти-кода». По тексту такого кода практически невозможно понять порядок исполнения и взаимозависимость фрагментов.

Впервые эта точка зрения была отражена в статье Эдсгера Дейкстры «Оператор Go To считается вредным»[9][3]. Дейкстра заметил, что качество программного кода обратно пропорционально количеству операторов goto в нём. Статья приобрела широкую известность, в результате чего взгляды на использование оператора goto были существенно пересмотрены. В работе «Заметки по структурному программированию»[10] Дейкстра обосновал тот факт, что для кода без goto намного легче проверить формальную корректность.

Код с goto трудно форматировать, так как он может нарушать иерархичность выполнения (парадигму структурного программирования) и потому отступы, призванные отображать структуру программы, не всегда могут быть выставлены правильно. Кроме того, оператор goto мешает оптимизации компиляторами управляющих структур[11].

Некоторые способы применения goto могут создавать проблемы с логикой исполнения программы:

  • Если некоторая переменная инициализируется (получает значение) в одном месте и потом используется далее, то переход в точку после инициализации, но до использования, приведёт к тому, что будет выбрано значение, которое находилось в памяти, выделенной под переменную, до момента выделения (и которое, как правило, является произвольным и случайным).
  • Передача управления внутрь тела цикла приводит к пропуску кода инициализации цикла или первоначальной проверки условия.
  • Аналогично, передача управления внутрь процедуры или функции приводит к пропуску её начальной части, в которой производится инициализация (выделение памяти под локальные переменные).

Доводы против оператора goto оказались столь серьёзными, что в структурном программировании его стали рассматривать как крайне нежелательный. Это нашло отражение при проектировании новых языков программирования. Например, goto запрещён в Java и Ruby. В ряде современных языков он всё же оставлен из соображений эффективности в тех редких случаях, когда применение goto оправданно. Так, goto сохранился в Аде — одном из наиболее продуманных с точки зрения архитектуры языков за всю историю[12].

Однако в языках высокого уровня, где этот оператор сохранился, на его использование, как правило, накладываются жёсткие ограничения, препятствующие использованию наиболее опасных методов его применения: например, запрещается передавать управление извне цикла, процедуры или функции внутрь. Стандарт языка C++ запрещает обход инициализации переменной с помощью goto.

Теорема о структурном программировании[править | править вики-текст]

Теорему сформулировали и доказали итальянские математики Коррадо Бём (Corrado Böhm) и Джузеппе Якопини (Giuseppe Jacopini). Они опубликовали ее в 1965 году на итальянском языке и в 1966 году на английском[13]. Наряду с теоремой, в статье Бёма и Якопини описывались методы преобразования неструктурных алгоритмов в структурные на примере созданного Бёмом языка программирования P′′. Язык P′′ — первый полный по Тьюрингу язык программирования без оператора goto.

Теорема Бёма-Якопини написана сложным языком и в непривычных обозначениях. Если использовать современную терминологию и обозначения, она примет вид:

Любая программа, заданная в виде блок-схемы, может быть представлена с помощью трех управляющих структур:

  • последовательность — обозначается: f THEN g,
  • ветвление — обозначается: IF p THEN f ELSE g,
  • цикл — обозначается: WHILE p DO f,

где f, g — блок-схемы с одним входом и одним выходом,

р — условие,
THEN, IF, ELSE, WHILE, DO — ключевые слова[14].

Пояснение. Формула f THEN g означает следующее: сначала выполняется программа f, затем выполняется программа g.

Как отмечает Харлан Миллс (Harlan Mills), данная теорема резко контрастирует с обычной (в 1960 – 1970 годы) практикой программирования, когда наблюдалось массовое использование операторов перехода goto[14].

Бём и Якопини не употребляли термин «структурное программирование». Тем не менее, доказанную ими теорему (и ее последующие вариации у разных авторов) впоследствии стали называть «Теоремой о структурном программировании», «Структурной теоремой» (Structure theorem[14]), «Теоремой о структурировании»[15].

Принципы структурного программирования[править | править вики-текст]

Становление и развитие структурного программирования связано с именем Эдсгера Дейкстры[16][10].

Принцип 1. Следует отказаться от использования оператора безусловного перехода goto.

Принцип 2. Любая программа строится из трёх базовых управляющих конструкций: последовательность, ветвление, цикл.

  • Последовательность — однократное выполнение операций в том порядке, в котором они записаны в тексте программы.
    Бертран Мейер поясняет: «Последовательное соединение: используйте выход одного элемента как вход к другому, подобно тому, как электрики соединяют выход сопротивления со входом конденсатора»[17].
  • Ветвление — однократное выполнение одной из двух или более операций, в зависимости от выполнения заданного условия.
  • Цикл — многократное исполнение одной и той же операции до тех пор, пока выполняется заданное условие (условие продолжения цикла).

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

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

  • В этом случае в тексте основной программы, вместо помещённого в подпрограмму фрагмента, вставляется инструкция «Вызов подпрограммы». При выполнении такой инструкции работает вызванная подпрограмма. После этого продолжается исполнение основной программы, начиная с инструкции, следующей за командой «Вызов подпрограммы».
  • Бертран Мейер поясняет: «Преобразуйте элемент, возможно, с внутренними элементами, в подпрограмму, характеризуемую одним входом и одним выходом в потоке управления»[17].

Принцип 5. Каждую логически законченную группу инструкций следует оформить как блок (block). Блоки являются основой структурного программирования.

Блок — это логически сгруппированная часть исходного кода, например, набор инструкций, записанных подряд в исходном коде программы. Понятие блок означает, что к блоку инструкций следует обращаться как к единой инструкции. Блоки служат для ограничения области видимости переменных и функций. Блоки могут быть пустыми или вложенными один в другой. Границы блока строго определены. Например, в if-инструкции блок ограничен кодом BEGIN..END (в языке Паскаль) или фигурными скобками {…} (в языке C) или отступами (в языке Питон).

Принцип 6. Все перечисленные конструкции должны иметь один вход и один выход.

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

Принцип 7. Разработка программы ведётся пошагово, методом «сверху вниз» (top–down method)[18].

Метод «сверху вниз»[править | править вики-текст]

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

Если говорить точнее, заглушка удовлетворяет требованиям интерфейса заменяемого фрагмента (модуля), но не выполняет его функций или выполняет их частично. Затем заглушки заменяются или дорабатываются до настоящих полнофункциональных фрагментов (модулей) в соответствии с планом программирования. На каждой стадии процесса реализации уже созданная программа должна правильно работать по отношению к более низкому уровню. Полученная программа проверяется и отлаживается[19].

После того, как программист убедится, что подпрограммы вызываются в правильной последовательности (то есть общая структура программы верна), подпрограммы-заглушки последовательно заменяются на реально работающие, причём разработка каждой подпрограммы ведётся тем же методом, что и основной программы. Разработка заканчивается тогда, когда не останется ни одной заглушки.

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

При сопровождении и внесении изменений в программу выясняется, в какие именно процедуры нужно внести изменения.Они вносятся, не затрагивая части программы, непосредственно не связанные с ними. Это позволяет гарантировать, что при внесении изменений и исправлении ошибок не выйдет из строя какая-то часть программы, находящаяся в данный момент вне зоны внимания программиста[20][18][21][22][23][24].

Следует также учесть, что в «Предисловии» к книге «Структурное программирование»[25] Тони Хоар (Tony Hoare) отмечает, что принципы структурного программирования в равной степени могут применяться при разработке программ как «сверху вниз», так и «снизу вверх»[26].

Достоинства структурного программирования[править | править вики-текст]

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

  1. Структурное программирование позволяет значительно сократить число вариантов построения программы по одной и той же спецификации, что значительно снижает сложность программы и, что ещё важнее, облегчает понимание её другими разработчиками.
  2. В структурированных программах логически связанные операторы находятся визуально ближе, а слабо связанные — дальше, что позволяет обходиться без блок-схем и других графических форм изображения алгоритмов (по сути, сама программа является собственной блок-схемой).
  3. Сильно упрощается процесс тестирования и отладки структурированных программ.

Ясность и читабельность программ[править | править вики-текст]

Структурное программирование значительно повышает ясность и читабельность (readability) программ[27]. Эдвард Йордан (Edward Yourdon) поясняет:

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

Структурным программам, напротив, свойственна тенденция к последовательным организации и исполнению[28].

Улучшение читабельности структурных программ объясняется тем, что отсутствие оператора goto позволяет читать программу сверху донизу без разрывов, вызванных передачами управления. В итоге можно сразу (одним взглядом) обнаружить условия, необходимые для модификации того или иного фрагмента программы[29].

Двумерное структурное программирование[править | править вики-текст]

Р-технология производства программ, или «технология двумерного программирования»[30] была создана в Институте кибернетики имени В. М. Глушкова[31]. Графическая система Р-технологии программирования закреплена в стандартах ГОСТ 19.005-85[32], ГОСТ Р ИСО/МЭК 8631—94[33] и международном стандарте ISО 8631Н.

Автор Р-технологии программирования доктор физико-математических наук профессор Игорь Вельбицкий предложил пересмотреть само понятие «структура программы». По его мнению, «структура — понятие многомерное. Поэтому отображение этого понятия с помощью линейных текстов (последовательности операторов) сводит практически на нет преимущества структурного подхода. Огромные ассоциативные возможности зрительного аппарата и аппарата мышления человека используются практически вхолостую — для распознавания структурных образов в виде единообразной последовательности символов»[34].

Методология двумерного структурного программирования существенно отличается от классического одномерного (текстового) структурного программирования[35][32].

Идеи структурного программирования разрабатывались, когда компьютерная графика фактически ещё не существовала и основным инструментом алгоритмиста и программиста был одномерный (линейный или ступенчатый) текст. До появления компьютерной графики методология классического структурного программирования была наилучшим решением[10].

С появлением компьютерной графики ситуация изменилась. Используя выразительные средства графики, появилась возможность видоизменить, развить и дополнить три типа базовых (текстовых) управляющих структурных конструкций, а также полностью отказаться от ключевых слов if, then, else, case, switch, break, while, do, repeat, until, for, foreach, continue, loop, exit, when, last и т. д. и заменить их на управляющую графику, то есть использовать двумерное структурное программирование[35][32].

Важной проблемой является сложность современного программирования и поиск путей ее преодоления. По мнению кандидата технических наук, доцента Евгения Пышкина, изучение структурного программирования исключительно как инструмента разработки текстов программ, построенных на базе основной «структурной триады» (линейная последовательность, ветвление и цикл), является недостаточным и, по сути дела, сводит на нет анализ преимуществ структурного подхода[36]. В процессе преодоления существенной сложности программного обеспечения важнейшим инструментом является визуализация проектирования и программирования[36].

См. также[править | править вики-текст]

  • Функциональное программирование
  • Логическое программирование
  • Автоматное программирование
  • Процедурное программирование
  • Объектно-ориентированное программирование
  • Прототипное программирование
  • Аспектно-ориентированное программирование
  • Компонентно-ориентированное программирование

Примечания[править | править вики-текст]

  1. Мейер Б. Почувствуй класс. Учимся программировать хорошо с объектами и контрактами. — Пер. с англ. — М.: Национальный открытый университет ИНТУИТ: БИНОМ. Лаборатория знаний, 2011. — 775с. — С. 208. — ISBN 978-5-9963-0573-5
  2. Э. Дейкстра. Оператор goto считается вредным
  3. 1 2 Dijkstra E. Go To Statement Considered Harmful // Communications of the ACM, Volume 11, No. 3, March 1968, pp. 147-148. — Association for Computing Machinery, Inc.
  4. См. также материалы из Архива Дейкстры. E. W. Dijkstra Archive. The manuscripts of Edsger W. Dijkstra. — Department of Computer Science The University of Texas at Austin
  5. Рукопись EWD1308 из Архива Дейкстры. What led to «Notes on Structured Programming” — Nuenen, 10 June 2001. — Department of Computer Sciences. The University of Texas at Austin, USA
  6. Расшифровка рукописи EWD1308 из Архива Дейкстры. What led to «Notes on Structured Programming” — Nuenen, 10 June 2001. — Department of Computer Sciences. The University of Texas at Austin, USA
  7. Лингер Р., Миллс Х., Уитт Б. Теория и практика структурного программирования. — Пер. с англ. — М.: Мир, 1982. — 406с. — С. 7.
  8. 1 2 3 John Vlissides, Kyle Brown, Gerard Meszaros AntiPatterns: The Survival Guide. Spaghetti code.
  9. Э. Дейкстра. Оператор Go To считается вредным
  10. 1 2 3 Дейкстра Э. Заметки по структурному программированию. // Дал У., Дейкстра Э., Хоор К. Структурное программирование. — М.: Мир, 1975. — С. 7–97.
  11. Donald Knuth. Structured Programming with go to Statements 1974
  12. Code Complete: A Practical Handbook of Software Construction Redmond: Microsoft Press, 1993. 880 p.
  13. Bohm, Corrado; and Giuseppe Jacopini (May 1966). «Flow Diagrams, Turing Machines and Languages with Only Two Formation Rules». Communications of the ACM 9 (5): 366–371. DOI:10.1145/355592.365646.
  14. 1 2 3 Harlan D. Mills Mathematical Foundations for Structured Programming. — February 1972. — Federal Systems Division. IBM Corporaton. Gaithersburg, Maryland. p. 4.
  15. Бутаков Е. А. Методы создания качественного программного обеспечения ЭВМ. — М.: Энергоатомиздат, 1984. — 232с. — С. 114.
  16. Notes on Structured Programming. By Prof. Dr. Edsger W. Dijkstra — T. H. Report 70-WSK-03 Second Edition April 1970.
  17. 1 2 3 Мейер Б. Почувствуй класс. Учимся программировать хорошо с объектами и контрактами. — Пер. с англ. — М.: Национальный открытый университет ИНТУИТ: БИНОМ. Лаборатория знаний, 2011. — 775с. — С. 209. — ISBN 978-5-9963-0573-5
  18. 1 2 Wirth N. Program Development by Stepwise Refinement // Communications of the ACM, Volume 14, No. 4, April 1971, pp. 221-227. — Association for Computing Machinery, Inc.
  19. Гласс Р. Руководство по надежному программированию. — М.: Финансы и статистика, 1982. — 256с. — С. 84.
  20. Хьюз Дж., Мичтом Дж. Структурный подход к программированию. — М.: Мир, 1980. — 278c. — С. 29-71. (См. «Глава 2. Нисходящая разработка. Проектирование программы» и «Глава 3. Нисходящая разработка. Планирование и реализация»).
  21. Вирт Н. Систематическое программирование. Введение. — М.: Мир, 1977. — 184с. — С. 139-168. (См. «Глава 15. Пошаговая разработка программ»).
  22. Гласс Р. Руководство по надежному программированию. — М.: Финансы и статистика, 1982. — 256с. — С. 83-87. (См. Раздел «3.3.1. Программирование сверху вниз и снизу вверх»).
  23. Лингер Р., Миллс Х., Уитт Б. Теория и практика структурного программирования. — М.: Мир, 1982. — 406с. — С. 324-327. (См. Раздел «7.3.3. Структурное программирование по нисходящему принципу» и «Раздел 7.3.4. Программирование с использованием принципа пошаговой реорганизации»).
  24. Иванова Г.С., Ничушкина Т.Н. Проектирование программного обеспечения. Учебное пособие по выполнению и оформлению курсовых, дипломных и квалификационных работ. — М.: Московский государственный технический университет им. Н.Э. Баумана. Факультет Информатики и систем управления, 2002. — 74с. — С. 28-31.
  25. Дал У., Дейкстра Э., Хоор К. Структурное программирование. — М.: Мир, 1975. — 247c.
  26. Хоор К. Предисловие. // Дал У., Дейкстра Э., Хоор К. — М.: Мир, 1975. — 247c. — С. 6.
  27. Йодан Э. Структурное проектирование и конструирование программ. — Пер. с англ. — М.: Мир, 1979. — 415с. — С. 174.
  28. Йодан Э. Структурное проектирование и конструирование программ. — Пер. с англ. — М.: Мир, 1979. — 415с. — С. 174, 175.
  29. Йодан Э. Структурное проектирование и конструирование программ. — Пер. с англ. — М.: Мир, 1979. — 415с. — С. 175.
  30. Вельбицкий И. В., Ходаковский В. Н., Шолмов Л. И. Технологический комплекс производства программ на машинах ЕС ЭВМ и БЭСМ-6. — М.: Статистика, 1980. — 263с. — С. 5.
  31. Стогний А. А. Предисловие. // Вельбицкий И. В., Ходаковский В. Н., Шолмов Л. И. Технологический комплекс производства программ на машинах ЕС ЭВМ и БЭСМ-6. — М.: Статистика, 1980. — 263с. — С. 3.
  32. 1 2 3 Межгосударственный стандарт ГОСТ 19.005-85. Единая система программной документации. Р-схемы алгоритмов и программ. Обозначения условные графические и правила выполнения. Unified system for program documentation. R-charts. Graphical chart symbols and conventions for charting. 1985.
  33. ГОСТ Р ИСО/МЭК 8631-94 Информационная технология. Программные конструктивы и условные обозначения для их представления. Information technology. Program constructs and conventions for their representation. Госстандарт России. — Издательство стандартов, 1995.
  34. Знакомьтесь, Р-технология // НТР: проблемы и решения. — 1987, № 13, 7–20 июля. — С. 4, 5.
  35. 1 2 Ермаков И. Е., Жигуненко Н. А. Двумерное структурное программирование; класс устремлённых графов. (Теоретические изыскания из опыта языка «ДРАКОН»). — М.: МГУ им. М. В. Ломоносова, 2010. — С. 452—461. — (Сборник трудов V Международной конференции «Инновационные информационно-педагогические технологии в системе ИТ-образования»).
  36. 1 2 Пышкин, 2005

Литература[править | править вики-текст]

  • Пышкин Е. В. Структурное проектирование: основание и развитие методов. С примерами на языке C++: Учеб. пособие. — СПб.: Политехнический университет, 2005. — 324 с. — ISBN 5-7422-1000-0

Ссылки[править | править вики-текст]

Блок (программирование)

  • Блок (также говорят блок кода, блок команд, блок инструкций) в программировании — это логически сгруппированный набор идущих подряд инструкций в исходном коде программы, является основой парадигмы структурного программирования.

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

    Блок в коде иногда сравнивают с параграфом в тексте, хотя эти понятия имеют существенные различия.

Источник: Википедия

Связанные понятия

Каламбур типизации является прямым нарушением типобезопасности. Традиционно возможность построить каламбур типизации связывается со слабой типизацией, но и некоторые сильно типизированные языки или их реализации предоставляют такие возможности (как правило, используя в связанных с ними идентификаторах слова unsafe или unchecked). Сторонники типобезопасности утверждают, что «необходимость» каламбуров типизации является мифом.

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

Подробнее: Объявление (информатика)

Из-за путаницы с терминологией словом «оператор» в программировании нередко обозначают операцию (англ. operator), см. Операция (программирование).Инстру́кция или опера́тор (англ. statement) — наименьшая автономная часть языка программирования; команда или набор команд. Программа обычно представляет собой последовательность инструкций.

Подробнее: Оператор (программирование)

Конста́нта в программировании — способ адресации данных, изменение которых рассматриваемой программой не предполагается или запрещается.

Ленивые вычисления (англ. lazy evaluation, также отложенные вычисления) — применяемая в некоторых языках программирования стратегия вычисления, согласно которой вычисления следует откладывать до тех пор, пока не понадобится их результат. Ленивые вычисления относятся к нестрогим вычислениям. Усовершенствованная модель ленивых вычислений — оптимистичные вычисления — переходит в разряд недетерминированных стратегий вычисления.

Упоминания в литературе

Существует возможность пополнения галереи стандартных блоков своими. Можно создать стандартные блоки из фрагментов работы, которые у вас будут часто повторяться (например, структура однотипных таблиц, сложные формулы, схемы, заголовки разделов или даже тема работы, если она у вас большая).

Блок функции представляет собой локальный блок, по структуре аналогичный блоку процедуры. В теле функции должна быть хотя бы одна инструкция присваивания, в левой части которой стоит имя функции. Именно она и определяет значение, возвращаемое функцией. Если таких инструкций несколько, то результатом функции будет значение последней выполненной инструкции присваивания.

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

Для предприятий характерно внутреннее структурирование. Такое структурирование трудно не учитывать при построении модели. В этом случае приходится иметь дело не с «черным ящиком», а с системой, содержащей несколько взаимодействующих между собой блоков. Если входы и выходы всех блоков известны и могут быть измерены, то применительно к каждому блоку может быть поставлена задача поиска функциональной модели. Модель системы представляется системой уравнений, описывающих функциональные преобразования координат в блоках. И здесь при решении вопроса поиска структур и параметров математических моделей блоков может быть поставлена в математической корректной форме. Совсем другое положение создается, когда система распадается на структурные подсистемы, а с другой входы и выходы всех подсистем (блоков) не поддаются контролю и не могут быть измерены. Здесь важно, чтобы математическая модель давала возможность изучить не поддающиеся контролю структурные блоки системы. Тогда для описания работы каждого блока можно применить минимальное математическое описание. Такой путь позволяет получить систему уравнений, описывающих работу блоков моделируемой системы.

Так, Morgan Stanley определяет блокчейн как «совместное использование данных через сеть отдельных компьютеров», или «компьютеры, передающие блоки записей в хронологической цепочке». По сути, это распределенный реестр – два термина взаимозаменяемы{80}.

Связанные понятия (продолжение)

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

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

Зарезерви́рованное сло́во (или ключево́е сло́во) — в языках программирования слово, имеющее специальное значение. Идентификаторы с такими именами запрещены.

Вывод типов (англ. type inference) — в программировании возможность компилятора самому логически вывести тип значения у выражения. Впервые механизм вывода типов был представлен в языке ML, где компилятор всегда выводит наиболее общий полиморфный тип для всякого выражения. Это не только сокращает размер исходного кода и повышает его лаконичность, но и нередко повышает повторное использование кода.

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

Абстрактное синтаксическое дерево (АСД) — в информатике конечное помеченное ориентированное дерево, в котором внутренние вершины сопоставлены (помечены) с операторами языка программирования, а листья — с соответствующими операндами. Таким образом, листья являются пустыми операторами и представляют только переменные и константы.

Область видимости (англ. scope) в программировании — часть программы, в пределах которой идентификатор, объявленный как имя некоторой программной сущности (обычно — переменной, типа данных или функции), остаётся связанным с этой сущностью, то есть позволяет посредством себя обратиться к ней. Говорят, что идентификатор объекта «виден» в определённом месте программы, если в данном месте по нему можно обратиться к данному объекту. За пределами области видимости тот же самый идентификатор может быть…

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

Литерал (англ. literal ) — запись в исходном коде компьютерной программы, представляющая собой фиксированное значение. Литералами также называют представление значения некоторого типа данных.

Сопрограммы (англ. coroutines) — методика связи программных модулей друг с другом по принципу кооперативной многозадачности: модуль приостанавливается в определённой точке, сохраняя полное состояние (включая стек вызовов и счётчик команд), и передаёт управление другому. Тот, в свою очередь, выполняет задачу и передаёт управление обратно, сохраняя свои стек и счётчик.

Подробнее: Сопрограмма

Мона́да — это абстракция линейной цепочки связанных вычислений. Монады позволяют организовывать последовательные вычисления.

Ме́тод в объектно-ориентированном программировании — это функция или процедура, принадлежащая какому-то классу или объекту.

Фу́нкция вы́сшего поря́дка — в программировании функция, принимающая в качестве аргументов другие функции или возвращающая другую функцию в качестве результата. Основная идея состоит в том, что функции имеют тот же статус, что и другие объекты данных. Использование функций высшего порядка приводит к абстрактным и компактным программам, принимая во внимание сложность производимых ими вычислений.

Пара́метр в программировании — принятый функцией аргумент. Термин «аргумент» подразумевает, что конкретно и какой конкретной функции было передано, а параметр — в каком качестве функция применила это принятое. То есть вызывающий код передает аргумент в параметр, который определен в члене спецификации функции.

Объектами первого класса (англ. first-class object, first-class entity, first-class citizen) в контексте конкретного языка программирования называются элементы, которые могут быть переданы как параметр, возвращены из функции, присвоены переменной.

Замыкание (англ. closure) в программировании — функция первого класса, в теле которой присутствуют ссылки на переменные, объявленные вне тела этой функции в окружающем коде и не являющиеся её параметрами. Говоря другим языком, замыкание — функция, которая ссылается на свободные переменные в своей области видимости.

Динамическая идентификация типа данных (англ. run-time type information, run-time type identification, RTTI) — механизм в некоторых языках программирования, который позволяет определить тип данных переменной или объекта во время выполнения программы.

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

Перечисляемый тип (сокращённо перечисле́ние, англ. enumeration, enumerated type) — в программировании тип данных, чьё множество значений представляет собой ограниченный список идентификаторов.

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

Подробнее: Состояние (информатика)

Низкоуровневый язык программирования (язык программирования низкого уровня) — язык программирования, близкий к программированию непосредственно в машинных кодах используемого реального или виртуального (например, байт-код, Microsoft .NET) процессора. Для обозначения машинных команд обычно применяется мнемоническое обозначение. Это позволяет запоминать команды не в виде последовательности двоичных нулей и единиц, а в виде осмысленных сокращений слов человеческого языка (обычно английских).

Множество — тип и структура данных в информатике, которая является реализацией математического объекта множество.

По́ле кла́сса или атрибу́т (переменная-член, data member, class field, instance variable) в объектно-ориентированном программировании — переменная, связанная с классом или объектом. Все данные объекта хранятся в его полях. Доступ к полям осуществляется по их имени. Обычно тип данных каждого поля задаётся в описании класса, членом которого является поле.

Абстра́ктный тип да́нных (АТД) — это математическая модель для типов данных, где тип данных определяется поведением (семантикой) с точки зрения пользователя данных, а именно в терминах возможных значений, возможных операций над данными этого типа и поведения этих операций.

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

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

Интерпретируемый язык программирования — язык программирования, исходный код на котором выполняется методом интерпретации. Классифицируя языки программирования по способу исполнения, к группе интерпретируемых относят языки, в которых операторы программы друг за другом отдельно транслируются и сразу выполняются (интерпретируются) с помощью специальной программы-интерпретатора (что противопоставляется компилируемым языкам, в которых все операторы программы заранее оттранслированы в объектный код…

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

В информатике лексический анализ («токенизация», от англ. tokenizing) — процесс аналитического разбора входной последовательности символов на распознанные группы — лексемы, с целью получения на выходе идентифицированных последовательностей, называемых «токенами» (подобно группировке букв в словах). В простых случаях понятия «лексема» и «токен» идентичны, но более сложные токенизаторы дополнительно классифицируют лексемы по различным типам («идентификатор, оператор», «часть речи» и т. п.). Лексический…

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

Сравне́ние в программировании — общее название ряда операций над па́рами значений одного типа, реализующих математические отношения равенства и порядка. В языках высокого уровня такие операции, чаще всего, возвращают булево значение («истина» или «ложь»).

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

Побо́чные эффе́кты (англ. side effects) — любые действия работающей программы, изменяющие среду выполнения (англ. execution environment). Например, к побочным эффектам относятся…

Подробнее: Побочный эффект (программирование)

Перегрузка процедур и функций — возможность использования одноимённых подпрограмм: процедур или функций в языках программирования.

Логи́ческий тип да́нных, или булев тип, или булевый тип (от англ. Boolean или logical data type) — примитивный тип данных в информатике, принимающий два возможных значения, иногда называемых истиной (true) и ложью (false). Присутствует в подавляющем большинстве языков программирования как самостоятельная сущность или реализуется через численный тип данных. В некоторых языках программирования за значение истина полагается 1, за значение ложь — 0.

Запись — агрегатный тип данных, инкапсулирующий без сокрытия набор значений различных типов.

Дестру́ктор — специальный метод класса, служащий для деинициализации объекта (например освобождения памяти).

Синтаксис языка программирования — набор правил, описывающий комбинации символов алфавита, считающиеся правильно структурированной программой (документом) или её фрагментом. Синтаксису языка противопоставляется его семантика. Синтаксис языка описывает «чистый» язык, в то же время семантика приписывает значения (действия) различным синтаксическим конструкциям.

В программировании, строковый тип (англ. string «нить, вереница») — тип данных, значениями которого является произвольная последовательность (строка) символов алфавита. Каждая переменная такого типа (строковая переменная) может быть представлена фиксированным количеством байтов либо иметь произвольную длину.

Неопределённое поведение (англ. undefined behaviour, в ряде источников непредсказуемое поведение) — свойство некоторых языков программирования (наиболее заметно в Си), программных библиотек и аппаратного обеспечения в определённых маргинальных ситуациях выдавать результат, зависящий от реализации компилятора (библиотеки, микросхемы) и случайных факторов наподобие состояния памяти или сработавшего прерывания. Другими словами, спецификация не определяет поведение языка (библиотеки, микросхемы) в любых…

Раскрутка компилятора (англ. bootstrapping — от boot и strap) — метод создания транслятора для некоторого языка программирования, при котором транслятор пишется на том же языке программирования, для трансляции которого создаётся; создание транслятором исполняемых файлов из исходного кода самого транслятора. Используется для переноса трансляторов на новые платформы. Появился в середине 1950-х годов. Позволяет создать транслятор, который генерирует сам себя. Применялся для создания трансляторов многих…

По одной из классификаций, языки программирования неформально делятся на сильно и слабо типизированные (англ. strongly and weakly typed), то есть обладающие сильной или слабой системой типов. Эти термины не являются однозначно трактуемыми, и чаще всего используются для указания на достоинства и недостатки конкретного языка. Существуют более конкретные понятия, которые и приводят к называнию тех или иных систем типов «сильными» или «слабыми».

Подробнее: Сильная и слабая типизация

Объе́ктный мо́дуль (также — объектный файл, англ. object file) — файл с промежуточным представлением отдельного модуля программы, полученный в результате обработки исходного кода компилятором. Объектный файл содержит в себе особым образом подготовленный код (часто называемый двоичным или бинарным), который может быть объединён с другими объектными файлами при помощи редактора связей (компоновщика) для получения готового исполнимого модуля либо библиотеки.

Свёртка списка (англ. folding, также известна как reduce, accumulate) в программировании — функция высшего порядка, которая производит преобразование структуры данных к единственному атомарному значению при помощи заданной функции. Операция свёртки часто используется в функциональном программировании при обработке списков. Свёртка может быть обобщена на произвольный алгебраический тип данных при помощи понятия катаморфизма из теории категорий.

Упоминания в литературе (продолжение)

В практической деятельности очень важно иметь возможность использовать созданные ранее наработки: опыт показывает, что большинство проектно-конструкторских проектов создается на базе новых сочетаний элементов, давно известных как по принципу функционирования, так и по исполнению. AutoCAD обеспечивает эффективное повторное использование имеющихся наработок путем их вставки в рисунки в виде блоков или внешних ссылок. Управлять блоками, внешними ссылками, растровыми изображениями и содержимым рисунков, находящихся в других источниках (и даже подготовленных в других приложениях), позволяет Центр управления AutoCAD DesignCenter.

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

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

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

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

Не стоит использовать одинаковые списки ключевых слов для разных страниц сайта. Конечно, так проще, но содержимое документов различное, да и поиск ведется по-разному. Если вам хочется автоматизировать эту работу (действительно, довольно трудоемкую, ведь общий объем ключевых слов одного документа может достигать 50 % от его объема), напишите программу, которая выбирала бы текст из определенных блоков документа, например, из контейнеров, заключенных в тэгах H, I и B. Задача не кажется сложной, да и можно найти подобную программу в архивах программного обеспечения в Internet.

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

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

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

Прежде всего, это аппаратная часть компьютера (системный блок, монитор, принтер, сканер, МФУ и др.). Поскольку так называемая «hardware» часть рабочего места переводчика является скорее объектом дипломного проекта какой-либо технической специальности, мы не будем подробно останавливаться на ней, заметив лишь на основании собственного опыта, что на сегодняшний день большинство ИТ инструментов мало зависит от аппаратной части ЭВМ и выбор как аппаратной платформы, так и технических характеристик компьютера может быть продиктован субъективными предпочтениями, он практически не влияет на работоспособность отдельно взятого программно-аппаратного комплекса.

В некоторых случаях одну топовую видеокарту можно заменить на две одинаковые подешевле, получив практически такую же производительность. Чтобы две видеокарты могли быть объединены в одной конфигурации, они должны поддерживать соответствующую технологию, которая у NVIDIA носит название SLI, а у ATI/AMD – CrossFireX. При выборе такого варианта надо, во-первых, проверить возможности общего блока питания компьютера (две видеокарты могут потреблять более 150 Вт) и при необходимости заменить его на более мощный. Во-вторых, такое решение требует материнской платы с двумя разъемами PCI-Express x16, причем расположенными так, чтобы видеокарты друг другу не мешали. Потому на практике такое решение применяется редко.

Самым маленьким по размеру вирусом считается Repus (Win95.с) – всего 156 байт (существуют, однако, и более тяжеловесные модификации, вплоть до 256 байт). Для уменьшения размера этого вируса используются различные программные хитрости и уловки; вреда он не приносит, и все программы работают без проблем. При этом есть как резидентные, так и нерезидентные представители Repus (Win95.с). Помимо малого размера, Repus стал первым вирусом, использующим для своего размножения кэш-память Windows. Он ищет в кэш-блоках заголовки файлов, записывается в них и устанавливает для блоков атрибут dirty, который дает системе команду сохранить его на диск. Подобная методика позволяет даже нерезидентному варианту распространяться со скоростью резидентного вируса.

Анализ конкретных употреблений термина «скрепа» показывает, что авторы по-разному подходят к его содержательной стороне. Исследователи синтаксиса текста скрепой называют иногда целые фрагменты текста, например: «Номинация «история, которую рассказывали Ростову», носит внутрипроизведенческий характер и помимо номинативной функции выполняет текстообразующую, являясь своеобразной скрепой различных композиционно-смысловых блоков романа» [Ильенко 1989]. В особом типе текста, художественном диалоге, в качестве показателя связи выделяют наречия как фразовые скрепы. В работах по теории сложного предложения термин скрепа часто используют вместо названий таких формальных средств связи, как союз, союзное слово, функциональные аналоги союзов и т. п. Другими словами, скрепой называется любой сегмент плана выражения, который выполняет связующую функцию.

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

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

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

Часто корпус называют системным блоком, что не всегда верно. Корпус становится системным блоком только тогда, когда в нем уже установлены все необходимые для работы компьютера комплектующие. Разве назовете вы корпус системным блоком, если он будет использоваться в качестве вазона или аквариума для рыб? А ведь такое не только возможно, но и довольно часто практикуется у тех, кто занимается моддингом компьютеров!

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

Что касается коррекции ошибок (ЕСМ, Error Correction Mode), то этот режим относится только к факс-модемам. Коррекция ошибок обычно реализуется программным методом, т. к. аппаратная реализация требует большого количества памяти для запоминания переданных блоков. Программная реализация коррекции ошибок доступна в факс-модемах класса 1, когда для запоминания используется оперативная память компьютера и данный режим поддерживается во многих программах работы с факс-модемами, например, в Microsoft Fax или Symantec WinFax Pro.

На рис. 3.9 показан пример рекламной полосы, полностью отведенной под рекламные объявления, и модульная сетка (предельно простая), использованная для верстки этой полосы. За основу модульной сетки взят тот же минимальный блок, что и в примере на рис. 3.8, однако сетка обычной полосы была несколько сложнее, поскольку предусматривала размещение текстовой информации.

Итак, для большей надежности каждое последующее звено цепочки содержит информацию о предыдущем звене или блоке[52]. Увеличение количества проверенных блоков повышает достоверность всех предыдущих транзакций, ведь каждый раз при создании нового блока пользователи проверяют действительность полной цепочки транзакций: от начала и до конца[53]. Чем длиннее цепочка взаимосвязанных блоков, тем меньше вероятность фальсификации. Механизм, при помощи которого подтверждаются сделки в блокчейне Bitcoin, получил название «подтверждение работы» (proof of work)[54]. Подтверждение цепочки взаимосвязанных блоков самими пользователями – характерное свойство блокчейна, обусловливающее доверие участников распределенной цепочки данных[55].

Практически все информационные блоки на строке состояния являются кнопками, предназначенными для быстрого вызова команд. При щелчке на кнопке с количеством страниц открывается окно Найти и заменить, позволяющее быстро перейти к другой странице документа. Щелчок на кнопке с количеством слов открывает окно статистики документа, которое показывает количество строк, абзацев, знаков без пробелов и с пробелами. Это очень полезно при написании статей и рефератов. В предыдущих версиях Word вызывать окно статистики было гораздо менее удобно.

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

Мы подходим теперь к центральному вопросу – о метрической структуре строки дротткветта. Уже было высказано предположение, что скальдическая метрика, может быть, не столь сложна, как представляется при подходе к ней с мерками эддического стиха. Как будет показано ниже, скальд оперировал формализованными просодическими структурами, своего рода «готовыми блоками». Для того чтобы вычленить эти блоки и получить тем самым представление о стихотворной технике скальда, необходимы три условия.

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

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

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

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «МОРДОВСКИЙ ГОСУДАРСТВЕННЫЙ ПЕДАГОГИЧЕСКИЙ УНИВЕРСИТЕТ ИМ.М.Е.ЕВСЕВЬЕВА»

Факультет физико-математический

Кафедра информатики и вычислительной техники

Реферат

Принципы структурного программирования. Основные алгоритмические структуры и их суперпозиции.

Выполнила: студентка группы МДИ-117

Федюшкина В. А.

Проверила: Кормилицына Т. В.

Саранск 2021

Содержание

Введение 3

1 Структурное программирование 4

1.1 История становления структурного программирования 4

1.2 Типичные методы структурного программирования 4

1.3 Принципы структурного программирования 6

1.4 Достоинства структурного программирования 8

2 Основные алгоритмические структуры и их суперпозиции 9

Заключение 16

Список использованной литературы 17

Введение

Структурное программирование – методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков. Предложена в 70-х годах XX в. Э. Дейкстрой, разработана и дополнена Н. Виртом. Типичными методами структурного программирования являются: нисходящее проектирование (проектирование сверху вниз); модульное (процедурное) программирование; структурное кодирование.

Целями структурного программирования являются: обеспечение дисциплины программирования, повышение эффективности и надежности программ, уменьшение времени и стоимости программной разработки. Основные принципы структурного программирования: абстракция, формальность, «разделяй и властвуй», иерархическое упорядочение.

Метод нисходящего проектирования предполагает последовательное разложение общей функции обработки данных на простые функциональные элементы («сверху-вниз»). Средства достижения целей на предыдущем уровне превращаются в цели на нижнем.

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

Фундаментом структурного программирования является теорема о структурировании, сформулированная итальянскими математиками К.Бомом и Дж.Якопини в 1966 г. Теорема устанавливает, что как бы сложна ни была задача, схему алгоритм ее решения (и, соответственно, программу) всегда можно представить в виде композиции трех типов вложенных блоков: следования (begin-end – начало-конец), ветвления (if-then-else – если-то-иначе), циклов с предусловием (while – пока).

1 Структурное программирование

1.1 История становления структурного программирования

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

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

Первоначально идея структурного программирования появилась на свет в связи с оператором «go to» и сомнениями в целесообразности его применения. Впервые подобные сомнения высказал Хайнц Земанек на совещании по языку Алгол в начале 1959 года в Копенгагене. Однако это выступление не привлекло к себе внимания и не имело последствий. Эдсгер Дейкстра вспоминает: «До некоторой степени я виню себя за то, что в то время не смог оценить значимость этой идеи».

Ситуация коренным образом изменилась через десять лет, когда в марте 1968 года Дейкстра опубликовал своё знаменитое письмо «Оператор Go To считается вредным». Это поистине исторический документ, оказавший заметное влияние на дальнейшее развитие программирования.

    1. Типичные методы структурного программирования

Типичными методами структурного программирования являются:

  • нисходящее проектирование (проектирование сверху вниз);
  • модульное (процедурное) программирование;
  • структурное кодирование.
  1. Нисходящее проектирование.

Метод нисходящего проектирования предполагает последовательное разложение общей функции обработки данных на простые функциональные элементы («сверху-вниз»). В результате строится иерархическая схема – функциональная структура алгоритма (ФСА), отражающая состав и взаимоподчиненность отдельных функций.

  1. Модульное программирование.

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

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

Среди множества модулей различают:

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

Структурное кодирование – это метод написания программ, имеющих определенную структуру и за «Фундаментом структурного программирования» является теорема о структурировании, сформулированная итальянскими математиками К.Бомом и Дж.Якопини в 1966 г.

Теорема устанавливает, что как бы сложна ни была задача, схему алгоритм ее решения (и, соответственно, программу) всегда можно представить в виде композиции трех типов вложенных блоков:

следования (begin-end – начало-конец),

ветвления (if-then-else – если-то-иначе),

циклов с предусловием (while – пока).

    1. Принципы структурного программирования

Становление и развитие структурного программирования связано с именем Эдсгера Дейкстры.

Принцип 1. Следует отказаться от использования оператора безусловного перехода goto.

Принцип 2. Любая программа строится из трёх базовых управляющих конструкций: последовательность, ветвление, цикл.

  • Последовательность – однократное выполнение операций в том порядке, в котором они записаны в тексте программы.

Бертран Мейер поясняет: «Последовательное соединение: используйте выход одного элемента как вход к другому, подобно тому, как электронщики соединяют выход сопротивления со входом конденсатора».

  • Ветвление – однократное выполнение одной из двух или более операций, в зависимости от выполнения заданного условия.
  • Цикл – многократное исполнение одной и той же операции до тех пор, пока выполняется заданное условие (условие продолжения цикла).

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

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

  • В этом случае в тексте основной программы, вместо помещённого в подпрограмму фрагмента, вставляется инструкция «Вызов подпрограммы». При выполнении такой инструкции работает вызванная подпрограмма. После этого продолжается исполнение основной программы, начиная с инструкции, следующей за командой «Вызов подпрограммы».
  • Бертран Мейер поясняет: «Преобразуйте элемент, возможно, с внутренними элементами, в подпрограмму, характеризуемую одним входом и одним выходом в потоке управления».

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

Блок – это логически сгруппированная часть исходного кода, например, набор инструкций, записанных подряд в исходном коде программы. Понятие блок означает, что к блоку инструкций следует обращаться как к единой инструкции. Блоки служат для ограничения области видимости переменных и функций. Блоки могут быть пустыми или вложенными один в другой. Границы блока строго определены. Например, в if-инструкции блок ограничен кодом BEGIN..END (в языке Паскаль) или фигурными скобками {…} (в языке C) или отступами (в языке Питон).

Принцип 6. Все перечисленные конструкции должны иметь один вход и один выход.

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

Принцип 7. Разработка программы ведётся пошагово, методом «сверху вниз» (top-down method).

    1. Достоинства структурного программирования

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

  1. Структурное программирование позволяет значительно сократить число вариантов построения программы по одной и той же спецификации, что значительно снижает сложность программы и, что ещё важнее, облегчает понимание её другими разработчиками.
  2. В структурированных программах логически связанные операторы находятся визуально ближе, а слабо связанные – дальше, что позволяет обходиться без блок-схем и других графических форм изображения алгоритмов (по сути, сама программа является собственной блок-схемой).
  3. Сильно упрощается процесс тестирования и отладки структурированных программ.
  4. Основные алгоритмические структуры и их суперпозиции

С появлением массовых ЭВМ 3-го поколения устаревшая технология программирования оказалась основным фактором, сдерживающим развитие и распространение компьютерных (информационных) технологий, что подтолкнуло ведущие в этой сфере деятельности фирмы, в первую очередь IBM, к разработке новых методологий программирования. Появившийся в начале 1970-х годов новый подход к разработке алгоритмов получил название структурного.

С появлением структурного программирования описанные выше трудности были во многом преодолены. В основе технологических принципов структурного программирования лежит утверждение о том, что логическая структура программы может быть выражена комбинацией трех базовых структур: следования, ветвления и цикла (это содержание теоремы Бема-Якопини).

Следование – самая важная из структур. Она означает, что действия могут быть выполнены друг за другом, рисунок 1:

https://studfile.net/html/2706/19/html_gDOPevPMEb.buTH/img-wiPb_7.png

Рисунок 1.Структура «следование»

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

Ветвление – это структура, обеспечивающая выбор между двумя альтернативами. Выполняется проверка, а затем выбирается один из путей (рисунок 2).

Эта структура называется также «ЕСЛИ – ТО – ИНАЧЕ», или «развилка». Каждый из путей (ТО или ИНАЧЕ) ведет к общей точке слияния, так что выполнение программы продолжается независимо от того, какой путь был выбран.

https://studfile.net/html/2706/19/html_gDOPevPMEb.buTH/img-CYoOtu.png

Рисунок 2.Структура «ветвление»

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

https://studfile.net/html/2706/19/html_gDOPevPMEb.buTH/img-zaQCD4.png

Рисунок 3.Структура «неполное ветвление»

Цикл (или повторение) предусматривает повторное выполнение некоторого Набора команд программы. Если бы циклы не существовали, вряд ли занятие программированием было бы оправданным: циклы позволяют записать длинные последовательности операций обработки данных с помощью небольшого числа повторяющихся команд. Разновидности цикла изображены на рисунок 4 и рисунок 5.

Цикл начинается с проверки логического выражения. Если оно истинно, то выполняется «a», затем все повторяется снова, пока логическое выражение сохраняет значение «истина». Как только оно становится ложным, выполнение операций «а» прекращается и управление передается по программе дальше.

https://studfile.net/html/2706/19/html_gDOPevPMEb.buTH/img-9ybvuW.png

Рисунок 4.Структура цикла «пока»

https://studfile.net/html/2706/19/html_gDOPevPMEb.buTH/img-5BBS40.png

Рисунок 5.Структура цикла «до»

https://studfile.net/html/2706/19/html_gDOPevPMEb.buTH/img-3f1K_U.png

Рисунок 6.Нахождение суммы трех чисел

https://studfile.net/html/2706/19/html_gDOPevPMEb.buTH/img-vtGQkp.png

Рисунок 7.Нахождение наибольшего из трех чисел

Эти структуры можно комбинировать одну с другой – как путем организации их следований, так и путем создания суперпозиций (вложений одной структуры в другую) – сколь угодно разнообразно для выражения логики алгоритма решения любой задачи. Используя описанные структуры, можно полностью исключить использование каких-либо еще операторов условного и безусловного перехода, что является важным признаком структурного программирования. Направление выполнения команд часто изображают сверху вниз. На рисунке 6 — 8 приведены простейшие примеры структурной реализации алгоритмов работы с величинами.

https://studfile.net/html/2706/19/html_gDOPevPMEb.buTH/img-fA23rS.png

Рисунок 8.Нахождение суммы 100 чисел

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

Так как выражение, управляющее циклом, проверяется в самом начале, то в случае, если условие сразу окажется ложным, операторы циклической части «a» могут вообще не выполняться. Операторы циклической части «а» должны изменять переменную (или переменные), влияющие на значение логического выражения, иначе программа «зациклится» – будет выполняться бесконечно. Рассмотренная циклическая конструкция называется также цикл «пока», или «цикл с предусловием».

Существует и иная конструкция цикла, которая предусматривает проверку условия, по которому, наоборот, выполнение команд циклической части прекращается, после команд циклической части.

https://studfile.net/html/2706/19/html_gDOPevPMEb.buTH/img-3FzgMO.png

Рисунок 9.Алгоритм типа развилка, вложенная в цикл, для нахождения суммы положительных чисел из 100 возможных

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

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

1) возможность создания программы несколькими программистами;

2) простота проектирования и последующих модификаций программы;

3) упрощение отладки программы – поиска и устранения в ней ошибок;

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

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

Рисунок 10.Алгоритм типа «цикл, вложенный в неполную развилку»

Рисунок 11.Алгоритм типа «цикл в цикле»

Рисунок 12.Алгоритм типа «развилка в развилке»

Рисунок 13.Иллюстрация трехкратного вложения одной базовой структуры в другую.

На следующем этапе эти задачи, в свою очередь, разбиваются на более мелкие подчиненные подзадачи и так далее, до уровня относительно небольших подзадач, вторые требуют для решения небольших модулей в 3 — 5 строк. Такой метод проектирования программ позволяет преодолевать проблему сложности разработки программы (и ее последующей отладки и сопровождения).

Заключение

Структурное программирование – методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков. Предложена в 70-х годах XX в. Э. Дейкстрой, разработана и дополнена Н. Виртом. Типичными методами структурного программирования являются: нисходящее проектирование (проектирование сверху вниз); модульное (процедурное) программирование; структурное кодирование.

Целями структурного программирования являются: обеспечение дисциплины программирования, повышение эффективности и надежности программ, уменьшение времени и стоимости программной разработки. Основные принципы структурного программирования: абстракция, формальность, «разделяй и властвуй», иерархическое упорядочение.

Метод нисходящего проектирования предполагает последовательное разложение общей функции обработки данных на простые функциональные элементы («сверху-вниз»). Средства достижения целей на предыдущем уровне превращаются в цели на нижнем.

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

Фундаментом структурного программирования является теорема о структурировании, сформулированная итальянскими математиками К.Бомом и Дж.Якопини в 1966 г. Теорема устанавливает, что как бы сложна ни была задача, схему алгоритм ее решения (и, соответственно, программу) всегда можно представить в виде композиции трех типов вложенных блоков: следования (begin-end – начало-конец), ветвления (if-then-else – если-то-иначе), циклов с предусловием (while – пока).

Список использованной литературы

    1. Бутаков Е. А. Методы создания качественного программного обеспечения ЭВМ. М.: Энергоатомиздат, 1984. 232с. С. 114.
    2. Вирт Н. Систематическое программирование. Введение. М.: Мир, 1977. 184с. С. 139-168.
    3. Гласс Р. Руководство по надежному программированию. – М.: Финансы и статистика, 1982. – 256с. – С. 84.
    4. Дал У., Дейкстра Э., Хоор К. Структурное программирование. – М.: Мир, 1975. – 247c.
    5. Дейкстра Э. Заметки по структурному программированию. // Дал У., Дейкстра Э., Хоор К. Структурное программирование. – М.: Мир, 1975. – С. 7–97.
    6. Ермаков И. Е., Жигуненко Н. А. Двумерное структурное программирование; класс устремлённых графов. (Теоретические изыскания из опыта языка «ДРАКОН»). – М.: МГУ им. М. В. Ломоносова, 2010. – С. 452–461. – (Сборник трудов V Международной конференции «Инновационные информационно-педагогические технологии в системе ИТ-образования»).
    7. Лингер Р., Миллс Х., Уитт Б. Теория и практика структурного программирования. – Пер. с англ. – М.: Мир, 1982. – 406с. – С. 7.
    8. Мейер Б. Почувствуй класс. Учимся программировать хорошо с объектами и контрактами. Пер. с англ. М.: Национальный открытый университет ИНТУИТ: БИНОМ. Лаборатория знаний, 2011. 775с. С. 208.
    9. Пышкин Е. В. Структурное проектирование: основание и развитие методов. С примерами на языке C++: Учеб. пособие. СПб.: Политехнический университет, 2005. 324 с.

Понравилась статья? Поделить с друзьями:
  • Логиста инструкция по применению цена
  • Логимакс инструкция по применению цена отзывы аналоги
  • Логест инструкция по применению цена отзывы после 40 лет отзывы
  • Логест инструкция по применению цена отзывы врачей
  • Логест инструкция по применению схема