СТРУКТУРНОЕ И МОДУЛЬНОЕ ПРОГРАММИРОВАНИЕ - Студенческий научный форум

X Международная студенческая научная конференция Студенческий научный форум - 2018

СТРУКТУРНОЕ И МОДУЛЬНОЕ ПРОГРАММИРОВАНИЕ

Романова Е.А. 1
1ФГБОУ ВО "Тюменский индустриальный университет"
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF
Программирование в 1960-70 гг. стремительно развивалось. Появилась потребность в написании более крупных, сложных и разнообразных программ. Но чем труднее был проект, тем ниже становилось качество его работы.

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

 

Чтобы избежать этого, известный голландский специалист Эдсгер Дейкстра  опубликовал статью «Доводы против оператора GO TO». Цитата из этой статьи: «Оператор go to сам по себе просто слишком примитивен; он создает слишком сильное побуждение внести путаницу в программу» [2].

С этого момента и началось развитие структурного программирования, в основе которого лежали следующие принципы:

  • Отказ от использования оператора безусловного перехода go to.
  • Состав программы только из трех главных структур: линейной (последовательной), ветвлении и циклов, которые должны иметь только один вход и выход.
  • Использование подпрограмм
  • Алгоритм и программу необходимо разрабатывать поэтапно «сверху вниз»
  • Разбитие программы на отдельные блоки

 

«Я считаю, что программа никогда не является самоцелью; программа предназначается для того, чтобы вызвать вычисления, а цель вычислений - получить нужный результат... Я утверждаю (хотя и не могу доказать), что легкость и гибкость таких наших суждений существенно зависит от простоты взаимосвязей между программой и вычислениями... Грубо говоря, можно считать желательным, чтобы структура программы отражалась в структуре вычислений» - из «Заметок по структурному программированию» [3].

 

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

Найдите наибольшую цифру данного натурального числа.

int main()

{

    int n;

    cout<<"input n: ";     cin>>n;

    if (n<=0)

      cout<<"error n"<<endl;    

   else    

   {             

        int max=0;           

        while (n>0)

         {

                   if ((n%10)>max)

                      max=n%10;

                   n/=10;

         }

         cout<<"answer: "<<max<<endl;

     }

 return 0;

}

 

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

1.     Уменьшение трудностей тестирования и отладки;

2.     Повышение производительности программистов;

3.     Помощь разработчику наметить путь решения задачи, представить алгоритм и писать программу согласно определенной схеме;

4.     Повышение ясности и удобочитаемости программ, что позволяет работать с ними  не только автору, но и другим программистам;

5.     Увеличение уровня надежности

 

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

 

Характеристики модуля:

  • Модуль имеет один вход и выход;
  • Он логически независим;
  • Функционально завершен;
  • Имеет слабые информационные связи с другими частями программы;
  • Он обозримый по размеру и сложности.

 

Впервые специализированная синтаксическая конструкция модуля была предложена Н. Виртом в 1975 г. и включена в его новый язык Modula.

 

Типичный пример модуля  - определение стека. Здесь необходимо решить следующие задачи:

1.     Предоставить пользователю интерфейс для стека (например, функции
push () и pop ()).

2.     Гарантировать, что представление стека (например, в виде массива
элементов) будет доступно лишь через интерфейс пользователя.

3.     Обеспечивать инициализацию стека перед первым его использованием.

 

Ниже представлен на С возможный внешний интерфейс
модуля, реализующего стек:


    // описание интерфейса для  модуля,  реализующего стек символов:
     void push ( char );
     char pop ();
     const int stack_size = 100;

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

      #include "stack.h"            // используем интерфейс стека
      static char v [ stack_size ];    // ``static'' означает локальный
                                                    // в данном файле/модуле
      static char * p = v;                // стек вначале пуст

      void push ( char c )
      {
                                              //проверить на переполнение и поместить в стек
      }

      char pop ()
      {
                                              //проверить, не пуст ли стек, и считать из него
      }

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

      #include "stack.h"       // используем интерфейс стека

      void some_function ()
      {
        push ( 'c' );
        char c = pop ();
        if ( c != 'c' )  error ( "невозможно" );
      }

 

 

Преимущества модульного программирования:

1.     Упрощение разработки программы для группы специалистов;

2.     Возможность корректировки модуля, не затрагивая остальную систему;

3.     Уменьшение времени перекомпиляции при внесении изменений;

4.     Уменьшение объема занимаемой памяти программы за счет сокращения количества повторений кода.

 

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

 

Список литературы

1.     Бьерн Страуструп. Язык программирования С++[Текст] / 2-е изд., перераб. и доп. - М.: БИНОМ, 2004. - 369 с.

2.     Communications of the ACM, Vol. 11, No. 3, March 1968, pp. 147-148. 
Copyright (c) 1968, Association for Computing Machinery, Inc. [Текст]

3.     Дейкстра Э. Структурное программирование [Текст] / Дал У., Дейкстра Э., Хоор К. - М.:"Мир", 1975. - с.7 - 97

4.     https://ru.wikipedia.org [Электронный ресурс]

5.     http://www.feip.ru [Электронный ресурс]

 

Просмотров работы: 571