- Принцип проектирования программ сверху-вниз и снизу–вверх.
- Лекция № 7. Основные технологии программирования – 2 час.
- 27 Понятие о структурном программировании. Модульный принцип программирования. Подпрограммы.
- Технология структурного программирования при разработке серьезных программных комплексов, основана на следующих принципах:
Принцип проектирования программ сверху-вниз и снизу–вверх.
Программирование «сверху вниз», или нисходящее программирование – это методика разработки программ, при которой разработка начинается с определения целей решения проблемы, после чего идет последовательная детализация, заканчивающаяся детальной программой. Является противоположной методике программирования «снизу вверх».
При нисходящем проектировании задача анализируется с целью определения возможности разбиения ее на ряд подзадач. Затем каждая из полученных подзадач также анализируется для возможного разбиения на подзадачи. Процесс заканчивается, когда подзадачу невозможно или нецелесообразно далее разбивать на подзадачи.
В данном случае программа конструируется иерархически – сверху вниз: от главной программы к подпрограммам самого нижнего уровня, причем на каждом уровне используются только простые последовательности инструкций, циклы и условные разветвления.
Программирование «снизу вверх», или восходящее программирование – это методика разработки программ, начинающаяся с разработки подпрограмм (процедур, функций), в то время когда проработка общей схемы не закончилась. Является противоположной методике программирования «сверху вниз».
Такая методика является менее предпочтительной по сравнению с нисходящим программированием так как часто приводит к нежелательным результатам, переделкам и увеличению времени разработки.
Программирование «сверху вниз», или пошаговая детализация. Суть метода заключается в разбиении исходной задачи на последовательность нескольких меньших подзадач. Эти подзадачи, в свою очередь, тоже распадаются на подзадачи и т. д. до тех пор, пока не останутся только элементарные алгоритмы.
Пример. Чтобы написать число 512, сначала пишут цифру 5, затем 1 и, наконец, 2. При этом цифры рисуют, последовательно прорисовывая линии, из которых они состоят. Принтер напечатает это число точками.
При разработке программы пошагово, методом «сверху вниз» сначала пишется текст основной программы, в котором, вместо каждого связного логического фрагмента текста, вставляется вызов подпрограммы, которая будет выполнять этот фрагмент. Вместо настоящих, работающих подпрограмм, в программу вставляются «заглушки», которые ничего не делают. Полученная программа проверяется и отлаживается. После того, как программист убедится, что подпрограммы вызываются в правильной последовательности (то есть общая структура программы верна), подпрограммы-заглушки последовательно заменяются на реально работающие, причём разработка каждой подпрограммы ведётся тем же методом, что и основной программы. Разработка заканчивается тогда, когда не останется ни одной «затычки», которая не была бы удалена. Такая последовательность гарантирует, что на каждом этапе разработки программист одновременно имеет дело с обозримым и понятным ему множеством фрагментов, и может быть уверен, что общая структура всех более высоких уровней программы верна. При сопровождении и внесении изменений в программу выясняется, в какие именно процедуры нужно внести изменения, и они вносятся, не затрагивая части программы, непосредственно не связанные с ними. Это позволяет гарантировать, что при внесении изменений и исправлении ошибок не выйдет из строя какая-то часть программы, находящаяся в данный момент вне зоны внимания программиста.
В теории и практике программирования наиболее популярны стратегии «сверху вниз» и «снизу вверх». Такие полярные варианты взаимодействия процессов проектирования и реализации оказываются применимыми только для программ небольшого или среднего размера. Создание же крупной программы обычно связано с поиском разумного компромисса между этими вариантами. Существует и еще одно решение – программирование «вширь».
Программирование «вширь» — ориентиром провозглашается набор однородных модулей. В одной программе может быть выявлено несколько однородных наборов. После того как однородные модули выявлены, приступают к непосредственному программированию, которое, собственно, и разбивается на этапы. На первом этапе создается лишь минимальное число представителей каждого из выделенных однородных наборов. Если поиск однородности проводился достаточно энергично, то обычно оказывается, что объем работ первого этапа реализации сравнительно невелик.
Лекция № 7. Основные технологии программирования – 2 час.
Понятие о структурном программировании. Модульный принцип программирования. Подпрограммы. Принципы проектирования программ сверху-вниз и снизу-вверх. Основные положения объектно-ориентированного программирования. Интегрированные среды программирования. Этапы решения задач на компьютере. Эволюция и классификация языков программирования. Основные понятия языков программирования. Структуры и типы данных языка программирования.
РАЗДЕЛ 6. ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ.
Понятие о структурном программировании. Модульный принцип программирования. Подпрограммы. Принципы проектирования программ сверху-вниз и снизу-вверх. Основные положения объектно-ориентированного программирования. Интегрированные среды программирования. Этапы решения задач на компьютере.
- Основные технологии программированияСамостоятельная работа: [3] стр. 198–209; [4] стр. 182–184
- Основные принципы структурного программирования (программирование без GO TO)
- Основные принципы объектно-ориентированного программированияСамостоятельная работа: [4] стр. 157–181
- Этапы решения задач на компьютереСамостоятельная работа: [3] стр. 198–209; [4] стр. 182–184
- Постановка задачи:
- Анализ и исследование модели задачи:
- Разработка алгоритма:
- Программирование:
- Отладка и тестирование:
- Деятельность, направленная на исправление ошибок в программной системе, называется отладкой .Тестирование – прогон отлаженной программы на эталонных вариантах исходных данных, для которых заранее известны результаты.
- Анализ результатов тестирования и, если нужно, уточнение модели и повторение п.п. 2–5.
- Сопровождение программы: составление документации по мат. модели, алгоритму, программе, набору тестов, использованию готовой программы и т. п.
27 Понятие о структурном программировании. Модульный принцип программирования. Подпрограммы.
Сутью структурного программирования является возможность разбиения программы на составляющие элементы.
Идеи структурного программирования появились в начале 70-годов в компании IBM, в их разработке участвовали известные ученые Э. Дейкстра, Х. Милс, Э. Кнут, С. Хоор.
Распространены две методики (стратегии) разработки программ, относящиеся к структурному программированию: программирование «сверху вниз» и программирование «снизу вверх».
Программирование «сверху вниз», или нисходящее программирование — это методика разработки программ, при которой разработка начинается с определения целей решения проблемы, после чего идет последовательная детализация, заканчивающаяся детальной программой. Является противоположной методике программирования «снизу вверх».
При нисходящем проектировании задача анализируется с целью определения возможности разбиения ее на ряд подзадач. Затем каждая из полученных подзадач также анализируется для возможного разбиения на подзадачи. Процесс заканчивается, когда подзадачу невозможно или нецелесообразно далее разбивать на подзадачи.
В данном случае программа конструируется иерархически — сверху вниз: от главной программы к подпрограммам самого нижнего уровня, причем на каждом уровне используются только простые последовательности инструкций, циклы и условные разветвления.
Программирование «снизу вверх», или восходящее программирование — это методика разработки программ, начинающаяся с разработки подпрограмм (процедур, функций), в то время когда проработка общей схемы не закончилась. Является противоположной методике программирования «сверху вниз».
Такая методика является менее предпочтительной по сравнению с нисходящим программированием так как часто приводит к нежелательным результатам, переделкам и увеличению времени разработки.
Достоинства структурного программирования:
1) повышается надежность программ (благодаря хорошему структурированию при проектировании, программа легко поддается тестированию и не создает проблем при отладке);
2) повышается эффективность программ (структурирование программы позволяет легко находить и корректировать ошибки, а отдельные подпрограммы можно переделывать (модифицировать) независимо от других);
3) уменьшается время и стоимость программной разработки;
4) улучшается читабельность программ.
Технология структурного программирования при разработке серьезных программных комплексов, основана на следующих принципах:
— программирование должно осуществляться сверху вниз;
— весь проект должен быть разбит на модули (подпрограммы) с одним входом и одним выходом;
— подпрограмма должна допускать только три основные структуры — последовательное выполнение, ветвление (if, case) и повторение (for, while, repeat).
— недопустим оператор передачи управления в любую точку программы (goto);
— документация должна создаваться одновременно с программированием в виде комментариев к программе.
Структурное программирование эффективно используется для решения различных математических задач, имеющих алгоритмический характер.
3. Модульное программирование
Модульное программирование — это организация программы как совокупности небольших независимых блоков (модулей), структура и поведение которых подчиняется определенным заранее правилам.
Модулем (в модульном программировании) называется множество взаимосвязанных подпрограмм (процедур) вместе с данными, которые эти подпрограммы обрабатывают.
Модульное программирование предназначено для разработки больших программ.
Разработкой больших программ занимается коллектив программистов. Каждому программисту поручается разработка некоторой самостоятельной части программы. И он в таком случае отвечает за конструирование всех необходимых процедур и данных для этих процедур. Сокрытие данных (запрет доступа к данным из-за пределов модуля) предотвращает их случайное изменение и соответственно нарушение работы программы. Для взаимодействия отдельных частей (модулей) программы коллективу программистов необходимо продумать только интерфейс (взаимодействие) сконструированных модулей в основной программе.
Модульное программирование — это организация программы как совокупности небольших независимых блоков (модулей), структура и поведение которых подчиняется определенным заранее правилам.
Модулем (в модульном программировании) называется множество взаимосвязанных подпрограмм (процедур) вместе с данными, которые эти подпрограммы обрабатывают.
Модульное программирование предназначено для разработки больших программ.
Разработкой больших программ занимается коллектив программистов. Каждому программисту поручается разработка некоторой самостоятельной части программы. И он в таком случае отвечает за конструирование всех необходимых процедур и данных для этих процедур. Сокрытие данных (запрет доступа к данным из-за пределов модуля) предотвращает их случайное изменение и соответственно нарушение работы программы. Для взаимодействия отдельных частей (модулей) программы коллективу программистов необходимо продумать только интерфейс (взаимодействие) сконструированных модулей в основной программе.
Подпрограмма (англ. subroutine) — поименованная или иным образом идентифицированная часть компьютерной программы, содержащая описание определённого набора действий. Подпрограмма может быть многократно вызвана из разных частей программы. В языках программирования для оформления и использования подпрограмм существуют специальные синтаксические средства.
Подпрограммы изначально появились как средство оптимизации программ по объёму занимаемой памяти — они позволили не повторять в программе идентичные блоки кода, а описывать их однократно и вызывать по мере необходимости. К настоящему времени данная функция подпрограмм стала вспомогательной, главное их назначение — структуризация программы с целью удобства её понимания и сопровождения.
- Выделение набора действий в подпрограмму и вызов её по мере необходимости позволяет логически выделить целостную подзадачу, имеющую типовое решение. Такое действие имеет ещё одно (помимо экономии памяти) преимущество перед повторением однотипных действий: любое изменение (исправление ошибки, оптимизация, расширение функциональности), сделанное в подпрограмме, автоматически отражается на всех её вызовах, в то время как при дублировании каждое изменение необходимо вносить в каждое вхождение изменяемого кода.
- Даже в тех случаях, когда в подпрограмму выделяется однократно производимый набор действий, это оправдано, так как позволяет сократить размеры целостных блоков кода, составляющих программу, то есть сделать программу более понятной и обозримой.