Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
программирование лекции.doc
Скачиваний:
32
Добавлен:
03.12.2018
Размер:
4.85 Mб
Скачать

1.5 Технология программирования хороших программ

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

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

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

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

Программирование – это написание, корректирование и тестирование программ.

Структурное программирование – это проектирование, написание, тестирование программы в соответствии с заранее определенной дисциплиной. В структурном программировании важными факторами являются форма и дисциплина. Главное в нем:

  • нисходящая разработка;

  • непосредственно структурное программирование.

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

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

1.5.1 Способы проектирования алгоритмов и программ

Наибольшее распространение получили три способа проектирования алгоритмов и программ – восходящий, нисходящий, встречный.

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

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

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

Основными недостатками восходящего способа проектирования являются:

  • сложность процесса объединения отдельных модулей в алгоритм;

  • трудность исправления ошибок, допущенных на ранних стадиях разработки;

  • сложность контроля разработки и прогноза завершения.

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

  • производится декомпозиция общей задачи на точно определенные подзадачи;

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

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

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

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

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

Реальная стратегия разработки алгоритмов и программ почти всегда представляет собой разумное сочетание нисходящего и восходящего способов проектирования (встречное проектирование).