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

Поделись знанием:
Перейти к: навигация, поиск
Парадигмы программирования
 • Императивная
(контрастирует с декларативной)
Процедурная
Структурная
Аспектно-ориентированная
Объектно-ориентированная
Агентно-ориентированная
Компонентно-ориентированная
Прототипно-ориентированная
Обобщённое программирование

 • Декларативная
(контрастирует с императивной)

Чистота языка
Чистота функции
Функциональная
В терминах Рефал-машины
Аппликативная
Комбинаторная
Бесточечная
(чистая конкатенативная)
Логическая
Ограничениями

 • Конкатенативная
 • Векторная[en]
 • Метапрограммирование

Языково-ориентированная
Предметно-ориентированная
Пользователями[en]
Автоматизация процесса программирования
Рефлексивность
Гомоиконность[en]

 • Связанные темы

Программирование в крупном и мелком масштабе[en]
Модульность
Полиморфизм
Продолжения и CPS
Параллелизм и конкурентность

 • Методы и алгоритмы

Автоматное
Динамическое
Потоков данных
Событийно-ориентированное
Реактивное
Сервис-ориентированное

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

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

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

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

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





История

Первоначально идея структурного программирования появилась на свет в связи с оператором 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]. Самый распространённыйК:Википедия:Статьи без источников (тип: не указан)[источник не указан 3044 дня] антипаттерн программирования.

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

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

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

Оператор goto

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

Впервые эта точка зрения была отражена в статье Эдсгера Дейкстры «Оператор Go To считается вредным»[3][9]. Дейкстра заметил, что качество программного кода обратно пропорционально количеству операторов 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].

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

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

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

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

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

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

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

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

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

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

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

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

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

Метод «сверху вниз»

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

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

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

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

При сопровождении и внесении изменений в программу выясняется, в какие именно процедуры нужно внести изменения.Они вносятся, не затрагивая части программы, непосредственно не связанные с ними. Это позволяет гарантировать, что при внесении изменений и исправлении ошибок не выйдет из строя какая-то часть программы, находящаяся в данный момент вне зоны внимания программиста[18][20][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][36].

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

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

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

См. также

Напишите отзыв о статье "Структурное программирование"

Примечания

  1. Мейер Б. Почувствуй класс. Учимся программировать хорошо с объектами и контрактами. — Пер. с англ. — М.: Национальный открытый университет ИНТУИТ: БИНОМ. Лаборатория знаний, 2011. — 775с. — С. 208. — ISBN 978-5-9963-0573-5
  2. [khpi-iip.mipk.kharkiv.edu/library/extent/dijkstra/pp/ewd215.html Э. Дейкстра. Оператор goto считается вредным]
  3. 1 2 [files.ifi.uzh.ch/rerg/arvo/courses/kvse/uebungen/Dijkstra_Goto.pdf 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. См. также материалы из Архива Дейкстры. [www.cs.utexas.edu/users/EWD/ E. W. Dijkstra Archive. The manuscripts of Edsger W. Dijkstra. — Department of Computer Science The University of Texas at Austin]
  5. Рукопись EWD1308 из Архива Дейкстры. [www.cs.utexas.edu/users/EWD/ewd13xx/EWD1308.PDF What led to «Notes on Structured Programming» — Nuenen, 10 June 2001. — Department of Computer Sciences. The University of Texas at Austin, USA]
  6. Расшифровка рукописи EWD1308 из Архива Дейкстры. [www.cs.utexas.edu/users/EWD/transcriptions/EWD13xx/EWD1308.html 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. [sourcemaking.com/antipatterns/spaghetti-code Spaghetti code].
  9. [khpi-iip.mipk.kharkiv.edu/library/extent/dijkstra/pp/ewd215.html Э. Дейкстра. Оператор Go To считается вредным]
  10. 1 2 3 Дейкстра Э. Заметки по структурному программированию. // Дал У., Дейкстра Э., Хоор К. Структурное программирование. — М.: Мир, 1975. — С. 7–97.
  11. Donald Knuth. [pplab.snu.ac.kr/courses/adv_pl05/papers/p261-knuth.pdf Structured Programming with go to Statements] 1974
  12. [www.stevemcconnell.com/ccgoto.htm Code Complete: A Practical Handbook of Software Construction] Redmond: Microsoft Press, 1993. 880 p.
  13. Bohm, Corrado; and Giuseppe Jacopini (May 1966). «[citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.119.9119&rep=rep1&type=pdf 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 [trace.tennessee.edu/cgi/viewcontent.cgi?article=1055&context=utk_harlan Harlan D. Mills Mathematical Foundations for Structured Programming. — February 1972. — Federal Systems Division. IBM Corporaton. Gaithersburg, Maryland. p. 4.]
  15. Бутаков Е. А. Методы создания качественного программного обеспечения ЭВМ. — М.: Энергоатомиздат, 1984. — 232с. — С. 114.
  16. [www.cs.utexas.edu/users/EWD/ewd02xx/EWD249.PDF 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 [en.wikipedia.org/wiki/Top-down_and_bottom-up_design#Computer_science 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. [vint.0x01.ru/~vint/BMSTU/diploma/Proekt_po.pdf Иванова Г.С., Ничушкина Т.Н. Проектирование программного обеспечения. Учебное пособие по выполнению и оформлению курсовых, дипломных и квалификационных работ. — М.: Московский государственный технический университет им. Н.Э. Баумана. Факультет Информатики и систем управления, 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 Межгосударственный стандарт ГОСТ 19.005-85. Единая система программной документации. Р-схемы алгоритмов и программ. Обозначения условные графические и правила выполнения. Unified system for program documentation. R-charts. Graphical chart symbols and conventions for charting. 1985.
  33. [www.complexdoc.ru/pdf/%D0%93%D0%9E%D0%A1%D0%A2%20%D0%A0%20%D0%98%D0%A1%D0%9E%7C%D0%9C%D0%AD%D0%9A%208631-94/gost_r_iso/mek_8631-94.pdf ГОСТ Р ИСО/МЭК 8631-94 Информационная технология. Программные конструктивы и условные обозначения для их представления. Information technology. Program constructs and conventions for their representation. Госстандарт России. — Издательство стандартов, 1995.]
  34. Знакомьтесь, Р-технология // НТР: проблемы и решения. — 1987, № 13, 7–20 июля. — С. 4, 5.
  35. 1 2 Ермаков И. Е., Жигуненко Н. А. [2010.it-edu.ru/docs/C4/a4a%20Ермаков%20И.Е1287620722076198.doc Двумерное структурное программирование; класс устремлённых графов. (Теоретические изыскания из опыта языка «ДРАКОН»)]. — М.: МГУ им. М. В. Ломоносова, 2010. — С. 452—461. — (Сборник трудов V Международной конференции «Инновационные информационно-педагогические технологии в системе ИТ-образования»).
  36. [nit.miem.edu.ru/sbornik/2009.pdf Шамардина Е.И., Манюнин П.А. Язык алгоритмических чертежей "ДРАКОН", его математическая модель и редактор // Новые информационные технологии. Тезисы докладов ХVII Международной студенческой конференции-школы-семинара. — М.: МИЭМ, 2009. — 399с. — С. 279, 280. — ISBN 978-5-94506-223-8]
  37. 1 2 Пышкин, 2005, с. 10.

Литература

  • Пышкин Е. В. [kspt.ftk.spbstu.ru/media/files/people/pyshkin/books/StructDesign-Excerpt.pdf Структурное проектирование: основание и развитие методов. С примерами на языке C++: Учеб. пособие]. — СПб.: Политехнический университет, 2005. — 324 с.ISBN 5-7422-1000-0

Отрывок, характеризующий Структурное программирование

Пьер с удивлением посмотрел на него.
– Однако, – сказал он, – ведь говорят же, что война подобна шахматной игре.
– Да, – сказал князь Андрей, – только с тою маленькою разницей, что в шахматах над каждым шагом ты можешь думать сколько угодно, что ты там вне условий времени, и еще с той разницей, что конь всегда сильнее пешки и две пешки всегда сильнее одной, a на войне один батальон иногда сильнее дивизии, а иногда слабее роты. Относительная сила войск никому не может быть известна. Поверь мне, – сказал он, – что ежели бы что зависело от распоряжений штабов, то я бы был там и делал бы распоряжения, а вместо того я имею честь служить здесь, в полку вот с этими господами, и считаю, что от нас действительно будет зависеть завтрашний день, а не от них… Успех никогда не зависел и не будет зависеть ни от позиции, ни от вооружения, ни даже от числа; а уж меньше всего от позиции.
– А от чего же?
– От того чувства, которое есть во мне, в нем, – он указал на Тимохина, – в каждом солдате.
Князь Андрей взглянул на Тимохина, который испуганно и недоумевая смотрел на своего командира. В противность своей прежней сдержанной молчаливости князь Андрей казался теперь взволнованным. Он, видимо, не мог удержаться от высказывания тех мыслей, которые неожиданно приходили ему.
– Сражение выиграет тот, кто твердо решил его выиграть. Отчего мы под Аустерлицем проиграли сражение? У нас потеря была почти равная с французами, но мы сказали себе очень рано, что мы проиграли сражение, – и проиграли. А сказали мы это потому, что нам там незачем было драться: поскорее хотелось уйти с поля сражения. «Проиграли – ну так бежать!» – мы и побежали. Ежели бы до вечера мы не говорили этого, бог знает что бы было. А завтра мы этого не скажем. Ты говоришь: наша позиция, левый фланг слаб, правый фланг растянут, – продолжал он, – все это вздор, ничего этого нет. А что нам предстоит завтра? Сто миллионов самых разнообразных случайностей, которые будут решаться мгновенно тем, что побежали или побегут они или наши, что убьют того, убьют другого; а то, что делается теперь, – все это забава. Дело в том, что те, с кем ты ездил по позиции, не только не содействуют общему ходу дел, но мешают ему. Они заняты только своими маленькими интересами.
– В такую минуту? – укоризненно сказал Пьер.
– В такую минуту, – повторил князь Андрей, – для них это только такая минута, в которую можно подкопаться под врага и получить лишний крестик или ленточку. Для меня на завтра вот что: стотысячное русское и стотысячное французское войска сошлись драться, и факт в том, что эти двести тысяч дерутся, и кто будет злей драться и себя меньше жалеть, тот победит. И хочешь, я тебе скажу, что, что бы там ни было, что бы ни путали там вверху, мы выиграем сражение завтра. Завтра, что бы там ни было, мы выиграем сражение!
– Вот, ваше сиятельство, правда, правда истинная, – проговорил Тимохин. – Что себя жалеть теперь! Солдаты в моем батальоне, поверите ли, не стали водку, пить: не такой день, говорят. – Все помолчали.
Офицеры поднялись. Князь Андрей вышел с ними за сарай, отдавая последние приказания адъютанту. Когда офицеры ушли, Пьер подошел к князю Андрею и только что хотел начать разговор, как по дороге недалеко от сарая застучали копыта трех лошадей, и, взглянув по этому направлению, князь Андрей узнал Вольцогена с Клаузевицем, сопутствуемых казаком. Они близко проехали, продолжая разговаривать, и Пьер с Андреем невольно услыхали следующие фразы:
– Der Krieg muss im Raum verlegt werden. Der Ansicht kann ich nicht genug Preis geben, [Война должна быть перенесена в пространство. Это воззрение я не могу достаточно восхвалить (нем.) ] – говорил один.
– O ja, – сказал другой голос, – da der Zweck ist nur den Feind zu schwachen, so kann man gewiss nicht den Verlust der Privatpersonen in Achtung nehmen. [О да, так как цель состоит в том, чтобы ослабить неприятеля, то нельзя принимать во внимание потери частных лиц (нем.) ]
– O ja, [О да (нем.) ] – подтвердил первый голос.
– Да, im Raum verlegen, [перенести в пространство (нем.) ] – повторил, злобно фыркая носом, князь Андрей, когда они проехали. – Im Raum то [В пространстве (нем.) ] у меня остался отец, и сын, и сестра в Лысых Горах. Ему это все равно. Вот оно то, что я тебе говорил, – эти господа немцы завтра не выиграют сражение, а только нагадят, сколько их сил будет, потому что в его немецкой голове только рассуждения, не стоящие выеденного яйца, а в сердце нет того, что одно только и нужно на завтра, – то, что есть в Тимохине. Они всю Европу отдали ему и приехали нас учить – славные учители! – опять взвизгнул его голос.
– Так вы думаете, что завтрашнее сражение будет выиграно? – сказал Пьер.
– Да, да, – рассеянно сказал князь Андрей. – Одно, что бы я сделал, ежели бы имел власть, – начал он опять, – я не брал бы пленных. Что такое пленные? Это рыцарство. Французы разорили мой дом и идут разорить Москву, и оскорбили и оскорбляют меня всякую секунду. Они враги мои, они преступники все, по моим понятиям. И так же думает Тимохин и вся армия. Надо их казнить. Ежели они враги мои, то не могут быть друзьями, как бы они там ни разговаривали в Тильзите.
– Да, да, – проговорил Пьер, блестящими глазами глядя на князя Андрея, – я совершенно, совершенно согласен с вами!
Тот вопрос, который с Можайской горы и во весь этот день тревожил Пьера, теперь представился ему совершенно ясным и вполне разрешенным. Он понял теперь весь смысл и все значение этой войны и предстоящего сражения. Все, что он видел в этот день, все значительные, строгие выражения лиц, которые он мельком видел, осветились для него новым светом. Он понял ту скрытую (latente), как говорится в физике, теплоту патриотизма, которая была во всех тех людях, которых он видел, и которая объясняла ему то, зачем все эти люди спокойно и как будто легкомысленно готовились к смерти.
– Не брать пленных, – продолжал князь Андрей. – Это одно изменило бы всю войну и сделало бы ее менее жестокой. А то мы играли в войну – вот что скверно, мы великодушничаем и тому подобное. Это великодушничанье и чувствительность – вроде великодушия и чувствительности барыни, с которой делается дурнота, когда она видит убиваемого теленка; она так добра, что не может видеть кровь, но она с аппетитом кушает этого теленка под соусом. Нам толкуют о правах войны, о рыцарстве, о парламентерстве, щадить несчастных и так далее. Все вздор. Я видел в 1805 году рыцарство, парламентерство: нас надули, мы надули. Грабят чужие дома, пускают фальшивые ассигнации, да хуже всего – убивают моих детей, моего отца и говорят о правилах войны и великодушии к врагам. Не брать пленных, а убивать и идти на смерть! Кто дошел до этого так, как я, теми же страданиями…
Князь Андрей, думавший, что ему было все равно, возьмут ли или не возьмут Москву так, как взяли Смоленск, внезапно остановился в своей речи от неожиданной судороги, схватившей его за горло. Он прошелся несколько раз молча, но тлаза его лихорадочно блестели, и губа дрожала, когда он опять стал говорить:
– Ежели бы не было великодушничанья на войне, то мы шли бы только тогда, когда стоит того идти на верную смерть, как теперь. Тогда не было бы войны за то, что Павел Иваныч обидел Михаила Иваныча. А ежели война как теперь, так война. И тогда интенсивность войск была бы не та, как теперь. Тогда бы все эти вестфальцы и гессенцы, которых ведет Наполеон, не пошли бы за ним в Россию, и мы бы не ходили драться в Австрию и в Пруссию, сами не зная зачем. Война не любезность, а самое гадкое дело в жизни, и надо понимать это и не играть в войну. Надо принимать строго и серьезно эту страшную необходимость. Всё в этом: откинуть ложь, и война так война, а не игрушка. А то война – это любимая забава праздных и легкомысленных людей… Военное сословие самое почетное. А что такое война, что нужно для успеха в военном деле, какие нравы военного общества? Цель войны – убийство, орудия войны – шпионство, измена и поощрение ее, разорение жителей, ограбление их или воровство для продовольствия армии; обман и ложь, называемые военными хитростями; нравы военного сословия – отсутствие свободы, то есть дисциплина, праздность, невежество, жестокость, разврат, пьянство. И несмотря на то – это высшее сословие, почитаемое всеми. Все цари, кроме китайского, носят военный мундир, и тому, кто больше убил народа, дают большую награду… Сойдутся, как завтра, на убийство друг друга, перебьют, перекалечат десятки тысяч людей, а потом будут служить благодарственные молебны за то, что побили много люден (которых число еще прибавляют), и провозглашают победу, полагая, что чем больше побито людей, тем больше заслуга. Как бог оттуда смотрит и слушает их! – тонким, пискливым голосом прокричал князь Андрей. – Ах, душа моя, последнее время мне стало тяжело жить. Я вижу, что стал понимать слишком много. А не годится человеку вкушать от древа познания добра и зла… Ну, да не надолго! – прибавил он. – Однако ты спишь, да и мне пера, поезжай в Горки, – вдруг сказал князь Андрей.
– О нет! – отвечал Пьер, испуганно соболезнующими глазами глядя на князя Андрея.
– Поезжай, поезжай: перед сраженьем нужно выспаться, – повторил князь Андрей. Он быстро подошел к Пьеру, обнял его и поцеловал. – Прощай, ступай, – прокричал он. – Увидимся ли, нет… – и он, поспешно повернувшись, ушел в сарай.
Было уже темно, и Пьер не мог разобрать того выражения, которое было на лице князя Андрея, было ли оно злобно или нежно.
Пьер постоял несколько времени молча, раздумывая, пойти ли за ним или ехать домой. «Нет, ему не нужно! – решил сам собой Пьер, – и я знаю, что это наше последнее свидание». Он тяжело вздохнул и поехал назад в Горки.
Князь Андрей, вернувшись в сарай, лег на ковер, но не мог спать.
Он закрыл глаза. Одни образы сменялись другими. На одном он долго, радостно остановился. Он живо вспомнил один вечер в Петербурге. Наташа с оживленным, взволнованным лицом рассказывала ему, как она в прошлое лето, ходя за грибами, заблудилась в большом лесу. Она несвязно описывала ему и глушь леса, и свои чувства, и разговоры с пчельником, которого она встретила, и, всякую минуту прерываясь в своем рассказе, говорила: «Нет, не могу, я не так рассказываю; нет, вы не понимаете», – несмотря на то, что князь Андрей успокоивал ее, говоря, что он понимает, и действительно понимал все, что она хотела сказать. Наташа была недовольна своими словами, – она чувствовала, что не выходило то страстно поэтическое ощущение, которое она испытала в этот день и которое она хотела выворотить наружу. «Это такая прелесть был этот старик, и темно так в лесу… и такие добрые у него… нет, я не умею рассказать», – говорила она, краснея и волнуясь. Князь Андрей улыбнулся теперь той же радостной улыбкой, которой он улыбался тогда, глядя ей в глаза. «Я понимал ее, – думал князь Андрей. – Не только понимал, но эту то душевную силу, эту искренность, эту открытость душевную, эту то душу ее, которую как будто связывало тело, эту то душу я и любил в ней… так сильно, так счастливо любил…» И вдруг он вспомнил о том, чем кончилась его любовь. «Ему ничего этого не нужно было. Он ничего этого не видел и не понимал. Он видел в ней хорошенькую и свеженькую девочку, с которой он не удостоил связать свою судьбу. А я? И до сих пор он жив и весел».
Князь Андрей, как будто кто нибудь обжег его, вскочил и стал опять ходить перед сараем.


25 го августа, накануне Бородинского сражения, префект дворца императора французов m r de Beausset и полковник Fabvier приехали, первый из Парижа, второй из Мадрида, к императору Наполеону в его стоянку у Валуева.
Переодевшись в придворный мундир, m r de Beausset приказал нести впереди себя привезенную им императору посылку и вошел в первое отделение палатки Наполеона, где, переговариваясь с окружавшими его адъютантами Наполеона, занялся раскупориванием ящика.
Fabvier, не входя в палатку, остановился, разговорясь с знакомыми генералами, у входа в нее.
Император Наполеон еще не выходил из своей спальни и оканчивал свой туалет. Он, пофыркивая и покряхтывая, поворачивался то толстой спиной, то обросшей жирной грудью под щетку, которою камердинер растирал его тело. Другой камердинер, придерживая пальцем склянку, брызгал одеколоном на выхоленное тело императора с таким выражением, которое говорило, что он один мог знать, сколько и куда надо брызнуть одеколону. Короткие волосы Наполеона были мокры и спутаны на лоб. Но лицо его, хоть опухшее и желтое, выражало физическое удовольствие: «Allez ferme, allez toujours…» [Ну еще, крепче…] – приговаривал он, пожимаясь и покряхтывая, растиравшему камердинеру. Адъютант, вошедший в спальню с тем, чтобы доложить императору о том, сколько было во вчерашнем деле взято пленных, передав то, что нужно было, стоял у двери, ожидая позволения уйти. Наполеон, сморщась, взглянул исподлобья на адъютанта.
– Point de prisonniers, – повторил он слова адъютанта. – Il se font demolir. Tant pis pour l'armee russe, – сказал он. – Allez toujours, allez ferme, [Нет пленных. Они заставляют истреблять себя. Тем хуже для русской армии. Ну еще, ну крепче…] – проговорил он, горбатясь и подставляя свои жирные плечи.
– C'est bien! Faites entrer monsieur de Beausset, ainsi que Fabvier, [Хорошо! Пускай войдет де Боссе, и Фабвье тоже.] – сказал он адъютанту, кивнув головой.
– Oui, Sire, [Слушаю, государь.] – и адъютант исчез в дверь палатки. Два камердинера быстро одели его величество, и он, в гвардейском синем мундире, твердыми, быстрыми шагами вышел в приемную.
Боссе в это время торопился руками, устанавливая привезенный им подарок от императрицы на двух стульях, прямо перед входом императора. Но император так неожиданно скоро оделся и вышел, что он не успел вполне приготовить сюрприза.
Наполеон тотчас заметил то, что они делали, и догадался, что они были еще не готовы. Он не захотел лишить их удовольствия сделать ему сюрприз. Он притворился, что не видит господина Боссе, и подозвал к себе Фабвье. Наполеон слушал, строго нахмурившись и молча, то, что говорил Фабвье ему о храбрости и преданности его войск, дравшихся при Саламанке на другом конце Европы и имевших только одну мысль – быть достойными своего императора, и один страх – не угодить ему. Результат сражения был печальный. Наполеон делал иронические замечания во время рассказа Fabvier, как будто он не предполагал, чтобы дело могло идти иначе в его отсутствие.
– Я должен поправить это в Москве, – сказал Наполеон. – A tantot, [До свиданья.] – прибавил он и подозвал де Боссе, который в это время уже успел приготовить сюрприз, уставив что то на стульях, и накрыл что то покрывалом.
Де Боссе низко поклонился тем придворным французским поклоном, которым умели кланяться только старые слуги Бурбонов, и подошел, подавая конверт.
Наполеон весело обратился к нему и подрал его за ухо.
– Вы поспешили, очень рад. Ну, что говорит Париж? – сказал он, вдруг изменяя свое прежде строгое выражение на самое ласковое.
– Sire, tout Paris regrette votre absence, [Государь, весь Париж сожалеет о вашем отсутствии.] – как и должно, ответил де Боссе. Но хотя Наполеон знал, что Боссе должен сказать это или тому подобное, хотя он в свои ясные минуты знал, что это было неправда, ему приятно было это слышать от де Боссе. Он опять удостоил его прикосновения за ухо.
– Je suis fache, de vous avoir fait faire tant de chemin, [Очень сожалею, что заставил вас проехаться так далеко.] – сказал он.
– Sire! Je ne m'attendais pas a moins qu'a vous trouver aux portes de Moscou, [Я ожидал не менее того, как найти вас, государь, у ворот Москвы.] – сказал Боссе.
Наполеон улыбнулся и, рассеянно подняв голову, оглянулся направо. Адъютант плывущим шагом подошел с золотой табакеркой и подставил ее. Наполеон взял ее.
– Да, хорошо случилось для вас, – сказал он, приставляя раскрытую табакерку к носу, – вы любите путешествовать, через три дня вы увидите Москву. Вы, верно, не ждали увидать азиатскую столицу. Вы сделаете приятное путешествие.
Боссе поклонился с благодарностью за эту внимательность к его (неизвестной ему до сей поры) склонности путешествовать.
– А! это что? – сказал Наполеон, заметив, что все придворные смотрели на что то, покрытое покрывалом. Боссе с придворной ловкостью, не показывая спины, сделал вполуоборот два шага назад и в одно и то же время сдернул покрывало и проговорил:
– Подарок вашему величеству от императрицы.
Это был яркими красками написанный Жераром портрет мальчика, рожденного от Наполеона и дочери австрийского императора, которого почему то все называли королем Рима.
Весьма красивый курчавый мальчик, со взглядом, похожим на взгляд Христа в Сикстинской мадонне, изображен был играющим в бильбоке. Шар представлял земной шар, а палочка в другой руке изображала скипетр.
Хотя и не совсем ясно было, что именно хотел выразить живописец, представив так называемого короля Рима протыкающим земной шар палочкой, но аллегория эта, так же как и всем видевшим картину в Париже, так и Наполеону, очевидно, показалась ясною и весьма понравилась.
– Roi de Rome, [Римский король.] – сказал он, грациозным жестом руки указывая на портрет. – Admirable! [Чудесно!] – С свойственной итальянцам способностью изменять произвольно выражение лица, он подошел к портрету и сделал вид задумчивой нежности. Он чувствовал, что то, что он скажет и сделает теперь, – есть история. И ему казалось, что лучшее, что он может сделать теперь, – это то, чтобы он с своим величием, вследствие которого сын его в бильбоке играл земным шаром, чтобы он выказал, в противоположность этого величия, самую простую отеческую нежность. Глаза его отуманились, он подвинулся, оглянулся на стул (стул подскочил под него) и сел на него против портрета. Один жест его – и все на цыпочках вышли, предоставляя самому себе и его чувству великого человека.
Посидев несколько времени и дотронувшись, сам не зная для чего, рукой до шероховатости блика портрета, он встал и опять позвал Боссе и дежурного. Он приказал вынести портрет перед палатку, с тем, чтобы не лишить старую гвардию, стоявшую около его палатки, счастья видеть римского короля, сына и наследника их обожаемого государя.
Как он и ожидал, в то время как он завтракал с господином Боссе, удостоившимся этой чести, перед палаткой слышались восторженные клики сбежавшихся к портрету офицеров и солдат старой гвардии.
– Vive l'Empereur! Vive le Roi de Rome! Vive l'Empereur! [Да здравствует император! Да здравствует римский король!] – слышались восторженные голоса.
После завтрака Наполеон, в присутствии Боссе, продиктовал свой приказ по армии.
– Courte et energique! [Короткий и энергический!] – проговорил Наполеон, когда он прочел сам сразу без поправок написанную прокламацию. В приказе было:
«Воины! Вот сражение, которого вы столько желали. Победа зависит от вас. Она необходима для нас; она доставит нам все нужное: удобные квартиры и скорое возвращение в отечество. Действуйте так, как вы действовали при Аустерлице, Фридланде, Витебске и Смоленске. Пусть позднейшее потомство с гордостью вспомнит о ваших подвигах в сей день. Да скажут о каждом из вас: он был в великой битве под Москвою!»
– De la Moskowa! [Под Москвою!] – повторил Наполеон, и, пригласив к своей прогулке господина Боссе, любившего путешествовать, он вышел из палатки к оседланным лошадям.
– Votre Majeste a trop de bonte, [Вы слишком добры, ваше величество,] – сказал Боссе на приглашение сопутствовать императору: ему хотелось спать и он не умел и боялся ездить верхом.
Но Наполеон кивнул головой путешественнику, и Боссе должен был ехать. Когда Наполеон вышел из палатки, крики гвардейцев пред портретом его сына еще более усилились. Наполеон нахмурился.
– Снимите его, – сказал он, грациозно величественным жестом указывая на портрет. – Ему еще рано видеть поле сражения.
Боссе, закрыв глаза и склонив голову, глубоко вздохнул, этим жестом показывая, как он умел ценить и понимать слова императора.


Весь этот день 25 августа, как говорят его историки, Наполеон провел на коне, осматривая местность, обсуживая планы, представляемые ему его маршалами, и отдавая лично приказания своим генералам.
Первоначальная линия расположения русских войск по Ко лоче была переломлена, и часть этой линии, именно левый фланг русских, вследствие взятия Шевардинского редута 24 го числа, была отнесена назад. Эта часть линии была не укреплена, не защищена более рекою, и перед нею одною было более открытое и ровное место. Очевидно было для всякого военного и невоенного, что эту часть линии и должно было атаковать французам. Казалось, что для этого не нужно было много соображений, не нужно было такой заботливости и хлопотливости императора и его маршалов и вовсе не нужно той особенной высшей способности, называемой гениальностью, которую так любят приписывать Наполеону; но историки, впоследствии описывавшие это событие, и люди, тогда окружавшие Наполеона, и он сам думали иначе.
Наполеон ездил по полю, глубокомысленно вглядывался в местность, сам с собой одобрительно или недоверчиво качал головой и, не сообщая окружавшим его генералам того глубокомысленного хода, который руководил его решеньями, передавал им только окончательные выводы в форме приказаний. Выслушав предложение Даву, называемого герцогом Экмюльским, о том, чтобы обойти левый фланг русских, Наполеон сказал, что этого не нужно делать, не объясняя, почему это было не нужно. На предложение же генерала Компана (который должен был атаковать флеши), провести свою дивизию лесом, Наполеон изъявил свое согласие, несмотря на то, что так называемый герцог Эльхингенский, то есть Ней, позволил себе заметить, что движение по лесу опасно и может расстроить дивизию.
Осмотрев местность против Шевардинского редута, Наполеон подумал несколько времени молча и указал на места, на которых должны были быть устроены к завтрему две батареи для действия против русских укреплений, и места, где рядом с ними должна была выстроиться полевая артиллерия.
Отдав эти и другие приказания, он вернулся в свою ставку, и под его диктовку была написана диспозиция сражения.
Диспозиция эта, про которую с восторгом говорят французские историки и с глубоким уважением другие историки, была следующая:
«С рассветом две новые батареи, устроенные в ночи, на равнине, занимаемой принцем Экмюльским, откроют огонь по двум противостоящим батареям неприятельским.
В это же время начальник артиллерии 1 го корпуса, генерал Пернетти, с 30 ю орудиями дивизии Компана и всеми гаубицами дивизии Дессе и Фриана, двинется вперед, откроет огонь и засыплет гранатами неприятельскую батарею, против которой будут действовать!
24 орудия гвардейской артиллерии,
30 орудий дивизии Компана
и 8 орудий дивизии Фриана и Дессе,
Всего – 62 орудия.
Начальник артиллерии 3 го корпуса, генерал Фуше, поставит все гаубицы 3 го и 8 го корпусов, всего 16, по флангам батареи, которая назначена обстреливать левое укрепление, что составит против него вообще 40 орудий.
Генерал Сорбье должен быть готов по первому приказанию вынестись со всеми гаубицами гвардейской артиллерии против одного либо другого укрепления.
В продолжение канонады князь Понятовский направится на деревню, в лес и обойдет неприятельскую позицию.
Генерал Компан двинется чрез лес, чтобы овладеть первым укреплением.
По вступлении таким образом в бой будут даны приказания соответственно действиям неприятеля.
Канонада на левом фланге начнется, как только будет услышана канонада правого крыла. Стрелки дивизии Морана и дивизии вице короля откроют сильный огонь, увидя начало атаки правого крыла.
Вице король овладеет деревней [Бородиным] и перейдет по своим трем мостам, следуя на одной высоте с дивизиями Морана и Жерара, которые, под его предводительством, направятся к редуту и войдут в линию с прочими войсками армии.
Все это должно быть исполнено в порядке (le tout se fera avec ordre et methode), сохраняя по возможности войска в резерве.
В императорском лагере, близ Можайска, 6 го сентября, 1812 года».
Диспозиция эта, весьма неясно и спутанно написанная, – ежели позволить себе без религиозного ужаса к гениальности Наполеона относиться к распоряжениям его, – заключала в себе четыре пункта – четыре распоряжения. Ни одно из этих распоряжений не могло быть и не было исполнено.
В диспозиции сказано, первое: чтобы устроенные на выбранном Наполеоном месте батареи с имеющими выравняться с ними орудиями Пернетти и Фуше, всего сто два орудия, открыли огонь и засыпали русские флеши и редут снарядами. Это не могло быть сделано, так как с назначенных Наполеоном мест снаряды не долетали до русских работ, и эти сто два орудия стреляли по пустому до тех пор, пока ближайший начальник, противно приказанию Наполеона, не выдвинул их вперед.
Второе распоряжение состояло в том, чтобы Понятовский, направясь на деревню в лес, обошел левое крыло русских. Это не могло быть и не было сделано потому, что Понятовский, направясь на деревню в лес, встретил там загораживающего ему дорогу Тучкова и не мог обойти и не обошел русской позиции.
Третье распоряжение: Генерал Компан двинется в лес, чтоб овладеть первым укреплением. Дивизия Компана не овладела первым укреплением, а была отбита, потому что, выходя из леса, она должна была строиться под картечным огнем, чего не знал Наполеон.
Четвертое: Вице король овладеет деревнею (Бородиным) и перейдет по своим трем мостам, следуя на одной высоте с дивизиями Марана и Фриана (о которых не сказано: куда и когда они будут двигаться), которые под его предводительством направятся к редуту и войдут в линию с прочими войсками.
Сколько можно понять – если не из бестолкового периода этого, то из тех попыток, которые деланы были вице королем исполнить данные ему приказания, – он должен был двинуться через Бородино слева на редут, дивизии же Морана и Фриана должны были двинуться одновременно с фронта.
Все это, так же как и другие пункты диспозиции, не было и не могло быть исполнено. Пройдя Бородино, вице король был отбит на Колоче и не мог пройти дальше; дивизии же Морана и Фриана не взяли редута, а были отбиты, и редут уже в конце сражения был захвачен кавалерией (вероятно, непредвиденное дело для Наполеона и неслыханное). Итак, ни одно из распоряжений диспозиции не было и не могло быть исполнено. Но в диспозиции сказано, что по вступлении таким образом в бой будут даны приказания, соответственные действиям неприятеля, и потому могло бы казаться, что во время сражения будут сделаны Наполеоном все нужные распоряжения; но этого не было и не могло быть потому, что во все время сражения Наполеон находился так далеко от него, что (как это и оказалось впоследствии) ход сражения ему не мог быть известен и ни одно распоряжение его во время сражения не могло быть исполнено.


Многие историки говорят, что Бородинское сражение не выиграно французами потому, что у Наполеона был насморк, что ежели бы у него не было насморка, то распоряжения его до и во время сражения были бы еще гениальнее, и Россия бы погибла, et la face du monde eut ete changee. [и облик мира изменился бы.] Для историков, признающих то, что Россия образовалась по воле одного человека – Петра Великого, и Франция из республики сложилась в империю, и французские войска пошли в Россию по воле одного человека – Наполеона, такое рассуждение, что Россия осталась могущественна потому, что у Наполеона был большой насморк 26 го числа, такое рассуждение для таких историков неизбежно последовательно.