Диаграмма Насси — Шнейдермана
Диаграмма Насси — Шнейдермана (англ. Nassi — Shneiderman diagram) — это графический способ представления структурированных алгоритмов и программ, разработанный в 1972 году американскими аспирантами Беном Шнейдерманом и Айзеком Насси.
ИсторияПравить
Поскольку в структурном программировании не используется безусловный переход, то Бен Шнейдерман решил, что для записи структурированных алгоритмов не нужны используемые в блок-схемах стрелки. Придумав разные способы изображения основных структур управления (последовательностей, ветвлений и циклов), он затем вместе с Айзеком Насси подробно проработал свою идею. Вместе они написали статью «Техника блок-схем для структурного программирования», которая была опубликована в научном журнале «SIGPLAN Notices» в августе 1973 года.
Диаграммы Насси — Шнейдермана получили широкое распространение в некоторых странах, особенно в Германии, где для них даже был разработан официальный стандарт Немецким институтом по стандартизации: DIN 66261.
Диаграммы Насси — Шнейдермана имеют ряд преимуществ перед блок-схемами при разработке структурированных алгоритмов и программ:
- Запись является более компактной (в первую очередь за счёт отсутствия стрелок между элементами).
- Изобразив алгоритм или программу в виде диаграммы Насси — Шнейдермана, можно быть гарантировано уверенным в том, что принципы структурного программирования соблюдены (при использовании блок-схем можно случайно получить неструктурированный алгоритм, если быть невнимательным).
- Диаграммы Насси — Шнейдермана удобнее использовать для пошаговой детализации задачи, так как они тоже строятся по принципу пошаговой детализации — изначально диаграмма представляет собой один прямоугольник (исходная задача), затем в нём рисуется некоторая структура управления, в которой имеется несколько прямоугольников (подзадач исходной задачи), и далее с каждым прямоугольником (подзадачей) может быть проделана та же операция.
Условные обозначения элементов в диаграммахПравить
Все элементы диаграммы Насси — Шнейдермана имеют прямоугольную форму и различаются только внутренним содержимым.
Простое действиеПравить
Выполняемое действие (в том числе команда языка в программе или подзадача в алгоритме) изображается в диаграммах Насси — Шнейдермана как прямоугольник, в котором записывается обозначение действия (команда) либо формулировка подзадачи.
Пример записи подзадачи:
Найти наименьший элемент в массиве |
Пример записи выполняемой команды (при записи программы на языке Pascal):
writeln('Hello world!') |
ПоследовательностьПравить
При записи структуры последовательного выполнения элементы изображаются вертикально один за другим. При этом все элементы последовательности должны иметь одинаковую ширину — за счёт этого вся последовательность тоже имеет прямоугольную форму. Например:
Открыть файл на чтение |
Прочитать первую строку файла |
Вывести прочитанное значение на экран |
Закрыть файл |
Запись этого же алгоритма в виде диаграммы Насси — Шнейдермана с использованием языка Pascal:
reset(f) |
readln(f, str) |
writeln(str) |
close(f) |
Простое ветвлениеПравить
Структура простого ветвления изображается в виде прямоугольника, разделённого горизонтальной чертой на две части. В верхней части располагается заголовок ветвления, а в нижней — две ветки ветвления, разделённые вертикальной чертой. В заголовке рисуются две линии, ведущие от верхних углов к началу линии, разделяющей ветви. В получившемся вверху треугольнике записывается условие ветвления, в двух нижних треугольниках над ветвями подписываются значения условия, соответствующие этим ветвям, например «истина» и «ложь», или «да» и «нет».
Многовариантный выборПравить
Структура многовариантного выбора изображается похоже на структуру простого ветвления, только основная ветвь и треугольник над ней делятся на много частей вертикальными линиями. В верхнем треугольнике записывается выражение-переключатель, над ветвями записываются соответствующие значения переключателя.
Повтор с предусловиемПравить
Структура повтора с условием в начале изображается как прямоугольник, внутри которого в правой нижней части нарисован ещё один прямоугольник. Над внутренним прямоугольником записывается заголовок цикла, а внутри него — тело цикла.
Пример записи цикла с предусловием (в данном примере тело цикла является последовательностью из двух действий):
Повтор с постусловиемПравить
Отличается от цикла с предусловием только тем, что внутренний прямоугольник рисуется в правой верхней части внешнего, а заголовок записывается снизу.
Пример записи цикла с постусловием (в данном примере тело цикла является последовательностью из двух действий):
Повтор со счётчикомПравить
Внутренний прямоугольник рисуется в правой части и не касается верха и низа внешнего прямоугольника. Условие цикла записывается сверху.
См. такжеПравить
СсылкиПравить
- Краткая история диаграмм Насси — Шнейдермана и список программ для их создания на официальной странице Бена Шнейдермана Архивная копия от 14 апреля 2012 на Wayback Machine.
Программное обеспечениеПравить
- EasyCODE (недоступная ссылка) – среда разработки диаграмм Насси-Шнейдермана для нескольких языков программирования (C#, C++, C, Java, Cobol)
- Atego's BlueRiverX32 Архивная копия от 14 мая 2012 на Wayback Machine – среда разработки диаграмм Насси-Шнейдермана для C и C++
- Structorizer Архивная копия от 19 августа 2020 на Wayback Machine – кроссплатформенный редактор диаграмм Насси-Шнейдермана (операционные системы Linux, Mac OS X, Microsoft Windows)
- Struktograaf Архивная копия от 2 апреля 2012 на Wayback Machine – редактор диаграмм Насси-Шнейдермана для операционной системы Microsoft Windows