Главная страница
Навигация по странице:

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

  • Спагетти-код (spaghetti code)

  • Пример

  • Структурный оператор

  • Лекции Булатицкий Дмитрий Иванович (во многом по материалам Прасолова А. Н.)


    Скачать 319.62 Kb.
    НазваниеЛекции Булатицкий Дмитрий Иванович (во многом по материалам Прасолова А. Н.)
    Дата11.01.2022
    Размер319.62 Kb.
    Формат файлаdocx
    Имя файлаLecture_Programming_2021_09_01.docx
    ТипЛекции
    #328427
    страница11 из 36
    1   ...   7   8   9   10   11   12   13   14   ...   36

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

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


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

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

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

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

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

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

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

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

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


    Язык Си является достаточно развитым для того, чтобы вообще обойтись без каких-либо особых способов записи алгоритмов.

    Однако для тех, кто только начинает программировать, может понадобится более наглядное средство иллюстрации алгоритмов.

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

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

    Рассмотрим базовые логические структуры и их представление в виде структограмм.

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


    Проверка условия - управление передается в один из нижних процессов:


    Цикл - пока. Процесс повторяется несколько раз пока истинно условие.
      1. Операторы языка Си


    Выражение, оканчивающееся точкой с запятой, является оператором, т.е. наименьшей элементарной частью программы.
    БНФ:

    оператор = выражение ";"
    Пример:

    ab = ( c = d + 5 ) * 6; /* это оператор */
    В дальнейшем будем строго придерживаться этой терминологии, т.е. выражением будем называть совокупность операндов, связанных операциями, а простым оператором - выражение заканчивающейся точкой с запятой.

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

    Признаком конца оператора в простейшем случае является ";". Одиночная ";" является пустым оператором. Как было отмечено выше, точка с запятой поставленная после выражения превращает его в простой оператор.

    Кроме простого оператора в языке Си вводится понятие составного оператора, который представляет собой несколько операторов, заключенных в фигурные скобки:
    БНФ:

    составной_оператор = "{" оператор { оператор } "}"
    Пример:

    { a = b + c; scanf( "%lf", &t ); }
    Составной оператор рассматриваются компилятором как одиночный оператор и может быть использован в любом месте, где допускается использование одиночного оператора.

    Структурный оператор – это оператор, реализующий одну из управляющих структур: следование, ветвление (выбор), повторение (цикл).

    Все операторы языка Си, кроме оператора-выражения начинаются с ключевых слов. Например, описания начинаются с int, double и т.д.

    Ключевые слова являются зарезервированными, т.е. их нельзя использовать для обозначения объектов программ. Имена стандартных функций не являются зарезервированными.
      1. 1   ...   7   8   9   10   11   12   13   14   ...   36


    написать администратору сайта