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

1.3. Понятие о структурном программировании. Модульный принцип программирования. Принципы проектирования программ сверху вниз и снизу вверх. Подпрограммы

Основная идея структурного программирования состоит в том, что структура программы должна отражать структуру решаемой задачи, чтобы алгоритм был ясно виден из исходного текста программы. Следовательно, надо разбить программу на последовательность модулей, каждый из которых выполняет одно или несколько действий. Требование к модулю – чтобы его выполнение начиналось с первой команды и заканчивалось последней. Модульность – это основная характеристика структурного программирования. А для этого надо иметь средства для создания программы не только с помощью трех основных алгоритмических конструкций, но и с помощью средств более точно отражающих конкретную структуру алгоритма. С этой целью в программирование введено понятие вспомо- гательного алгоритма или подпрограммы – набора операторов, выполняющего заданные алгоритмические действия и не зависящего от других частей исходного кода. Программа разбивается на множество подпрограмм, каждая из которых выполняет одно из действий исходного кода. Комбинируя эти блоки, удается сформировать итоговый алгоритм уже не из операторов, а из законченных блоков. Обращаться к блокам надо по названиям ( именам подпрограмм), а название несет смысловую нагрузку. Например, в конкретном языке программирования запись Call Summa может означать означает обращение к подпро-

грамме с именем Summa , а Call – оператор вызова подпрограммы. При структурном подходе к составлению алгоритмов и программ используются три основных типа алгоритмов: условные, циклические алгоритмы и подпрограммы. Структурированными считаются алгоритмы и программы, составленные с использованием только этих трех типов алгоритмов, при этом для записи циклов и условий должна использоваться ступенчатая за- пись . Например: Если a>b то Вывод «Первое число больше» Иначе Вывод «Второе число больше» Конец если Алгоритм считается неструктурированным, если нет ступенчатой записи или если при создании программы использован оператор безусловного перехода GoTo – переход к метке, т.е., структурное программирование – это программирование без GoTo . Основным принципом технологии структурного програм- мирования является нисходящее программирование — это про- граммирование с использованием подпрограмм, которое позволяет вести разработку приложения «сверху вниз», от более общих задач к более частным. При проектировании сверху вниз программа строится с помощью последовательных уточнений. Этот процесс начинается с самого общего утверждения об ее абстрактной функции, такого как «Оттранслировать программу в машинный код» или «Обработать команду пользователя» и продолжается путем последовательных шагов уточнения. На каждом шаге уровень абстракции получаемых элементов должен уменьшаться, каждая операция на нем разлагается на композицию одной или нескольких более простых операций. Такой подход обеспечивает хорошее соответствие проекта его начальной спецификации, но не всегда способствует его эффективному повторному использованию. Модули разрабатываются в ответ на отдельные возникающие подзадачи и, как пра-

вило, являются не более общими, чем к этому их вынуждает непосредственный контекст. Проектирование, имеющее в виду возможность повторного использования, подразумевает построение наиболее общих, по возможности, компонент, из которых затем составляются системы. Этот процесс идет снизу вверх (сначала строятся объекты, лишь затем из них конструируется программа) и противоположен идее проектирования сверху вниз, требующей начинать с определения задачи и выводить ее решение путем последовательных уточнений. Вместо поиска самой верхней функции системы будут анализироваться типы входящих в нее объектов. Проектирование системы будет продвигаться вперед путем последовательного улучшения понимания классов этих объектов. Это процесс построения снизу вверх устойчивых и расширяемых решений для отдельных частей задачи и сборки из них все более и более мощных блоков будет продолжаться до тех пор, пока не будет получен окончательный блок, доставляющий решение первоначальной задачи. При этом можно надеяться, что оно не является единственно возможным: если правильно применять метод, то те же компоненты, собранные по-другому и, возможно, объединенные с другими, окажутся достаточно общими, чтобы получить в качестве побочного продукта также и решения каких-то новых задач. Таким образом, проектирование снизу вверх основано на объектах и приводит к концепциям объектно-ориентированного программирования (см. п. 1.4). Теперь рассмотрим подробнее механизм подпрограмм, являющийся основой как классического структурного, так и объ- ектно-ориентированного программирования. Кроме имени подпрограмма может иметь параметры , которые называются формальными . Если имя служит для того. чтобы уникальным образом идентифицировать подпрограмму, то формальные параметры, которые напоминают переменные математических функций, выполняют роль ее входных и выходных данных.

Читайте также:  Div блочная верстка примеры

Формальные параметры должны быть выбраны таким образом, чтобы ими был исчерпан весь набор необходимых входных и выходных величин. Нередко один и тот же параметр может оказаться входным и выходным одновременно. Например, на вход такого алгоритма может быть подан массив для обработки, а на выходе он может предстать в измененном виде как выходной параметр. Рис. 11. Подпрограмма Первый элемент блок-схемы на рис. 11, в отличие от ранее рассмотренных примеров, где этот блок имел наименование “Начало”, включает имя подпрограммы Warn и один формальный параметр с именем i . С помощью этого имени подпрограмма может быть вызвана из другой подпрограммы или главной программы. Из схемы видно, что если на вход подпрограммы Warn подать i=0 , то она в блоке 3 выдаст сообщение «Введите данные». При любом другом i будет выведено сообщение «Конец расчетов». Этим исчерпываются возможности подпрограммы Warn .

На рис. 12 дана схема головного алгоритма (первый блок имеет наименование «Начало»). Этот алгоритм в блоках 2 и 8 обращается к процедуре Warn . При этом фактические пара- метры — константы 0 и 1 – поочередно подставляются на место формального параметра i . Рис. 12. Головной алгоритм и вызов подпрограммы Обычно при обучении программированию различают подпрограммы двух видов: процедуры и функции . Процедуры оформляются как отдельные независимые части программного кода, просто выполняющие последовательность операторов. Например, процедура вычисления суммы двух чисел, обозна- ченных a и b, могла бы быть описана следующим образом: Процедура Summa (a,b) c = a + b

Вывод с Конец Summa Здесь Summa – это назначенное программистом имя под- программы-процедуры, а в скобках указаны формальные параметры a и b . Соответственно, обращение из главной программы к процедуре осуществляется по имени с перечнем в скобках фактических параметров, которые ей передаются, например, оператор Summa( x,y ) может означать вызов процедуры с передачей ей фактических параметров x и y , которые будут подставлены на место формальных параметров a и b соответственно, так что процедура найдет и напечатает значение x+y . Процедура всегда вызывается отдельным оператором. Функция , в отличие от процедуры, всегда имеет один выходной параметр, следовательно, если этот параметр – скалярный (не является массивом), функция может быть вызвана непо- средственно в процессе вычисления выражения и справа от зна- ка присваивания , например, выражение y:=max(sin(x),cos(x)) демонстрирует вызов трех функций – sin и cos для вычисления синуса и косинуса от величины x и затем функции max , которая найдет большее из этих двух значений. Подпрограммы необходимы при составлении алгоритма решения сложной задачи, так как позволяют решать задачу «по частям» или коллективно. Кроме того, их применение уменьшает объем программы за счет неоднократного использования подпрограмм для выполнения повторяющихся расчетов. Приведем пример. Пусть требуется составить на структурированном языке алгоритм вычисления периметра треугольника, если известны координаты его вершин (треугольник лежит на плоскости). Обозначим координаты вершин xA , yA , xB , yB , xC , yC и ввод их значений осуществим в главной программе. Пусть AB — расстояние между точками A и B , BC — между B и C , AC — между A и С , а Р – периметр. Периметр вычислим по известной форму-

Читайте также:  Stm32 уроки программирования hal

Источник

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

Сутью структурного программирования является возможность разбиения программы на составляющие элементы. Идеи структурного программирования появились в начале 70-годов в компании IBM, в их разработке участвовали известные ученые Э. Дейкстра, Х. Милс, Э. Кнут, С. Хоор. Распространены две методики (стратегии) разработки программ, относящиеся к структурному программированию: программирование «сверху вниз» и программирование «снизу вверх». Программирование «сверху вниз», или нисходящее программирование – это методика разработки программ, при которой разработка начинается с определения целей решения проблемы, после чего идет последовательная детализация, заканчивающаяся детальной программой. Является противоположной методике программирования «снизу вверх». При нисходящем проектировании задача анализируется с целью определения возможности разбиения ее на ряд подзадач. Затем каждая из полученных подзадач также анализируется для возможного разбиения на подзадачи. Процесс заканчивается, когда подзадачу невозможно или нецелесообразно далее разбивать на подзадачи. В данном случае программа конструируется иерархически — сверху вниз: от главной программы к подпрограммам самого нижнего уровня, причем на каждом уровне используются только простые последовательности инструкций, циклы и условные разветвления. Программирование «снизу вверх», или восходящее программирование – это методика разработки программ, начинающаяся с разработки подпрограмм (процедур, функций), в то время когда проработка общей схемы не закончилась. Является противоположной методике программирования «сверху вниз». Такая методика является менее предпочтительной по сравнению с нисходящим программированием, так как часто приводит к нежелательным результатам, переделкам и увеличению времени разработки. Рассмотрим следующий пример. Разработать программный комплекс, который рисует на экране дисплея дачный участок, состоящий из дороги, забора, елки и сияющего на небе солнца. Нарисованная картина показана на рис. 1. Рис. 1. Дачный участок. Укажем в виде схем, которые называются структурными диаграммами, составные элементы картины: Посмотрим на изображение дома. Здесь можно выделить следующие элементы:Дальнейшая детализация стены, крыши, двери, окна, трубы, дороги, забора и солнца нецелесообразна. Елка состоит из двух элементов:Если объединить все приведенные структурные диаграммы, то получим первый вариант изображения структурной диаграммы программного комплекса, показанный на рис. 2.Рис. 2. Структурная диаграмма (первый вариант) Второй вариант представления структурной диаграммы имеет вид, представленный на рис. 3.Рис. 3. Структурная диаграмма (второй вариант) На рис. 2 и рис. 3 отмечены уровни, занимаемые программными модулями. Каждый нижележащий уровень соответствует более полной детализации программного комплекса. Те модули, которые не имеют дальнейшей детализации, например, «солнце», «ствол», «стена», являются процедурами, или функциями, реализующими решение соответствующей подзадачи. Разбиение программы на модули представляет одну из достаточно ответственных и сложных задач, так как влияет на дальнейший ход разработки программного комплекса, его надёжность, эффективность, продолжительность тестирования и отладки, сопровождение и возможность использование стандартных программных процедур. Достоинства структурного программирования: 1) повышается надежность программ (благодаря хорошему структурированию при проектировании, программа легко поддается тестированию и не создает проблем при отладке); 2) повышается эффективность программ (структурирование программы позволяет легко находить и корректировать ошибки, а отдельные подпрограммы можно переделывать (модифицировать) независимо от других); 3) уменьшается время и стоимость программной разработки; 4) улучшается читабельность программ. Резюме Технология структурного программирования при разработке серьезных программных комплексов, основана на следующих принципах: — программирование должно осуществляться сверху вниз; — весь проект должен быть разбит на модули (подпрограммы) с одним входом и одним выходом; — подпрограмма должна допускать только три основные структуры – последовательное выполнение, ветвление (if, case) и повторение (for, while, repeat). — недопустим оператор передачи управления в любую точку программы (goto); — документация должна создаваться одновременно с программированием в виде комментариев к программе. Структурное программирование эффективно используется для решения различных задач, имеющих алгоритмический характер.

Читайте также:  Сталкер 600 лан 3 таблица программирования

Источник

Оцените статью