Программирование «сверху вниз», или нисходящее программирование – это методика разработки программ, при которой разработка начинается с определения целей решения проблемы, после чего идет последовательная детализация, заканчивающаяся детальной программой. Является противоположной методике программирования «снизу вверх».
При нисходящем проектировании задача анализируется с целью определения возможности разбиения ее на ряд подзадач. Затем каждая из полученных подзадач также анализируется для возможного разбиения на подзадачи. Процесс заканчивается, когда подзадачу невозможно или нецелесообразно далее разбивать на подзадачи.
В данном случае программа конструируется иерархически – сверху вниз: от главной программы к подпрограммам самого нижнего уровня, причем на каждом уровне используются только простые последовательности инструкций, циклы и условные разветвления.
Программирование «снизу вверх», или восходящее программирование – это методика разработки программ, начинающаяся с разработки подпрограмм (процедур, функций), в то время когда проработка общей схемы не закончилась. Является противоположной методике программирования «сверху вниз».
Снизу-вверх или Сверху-вниз? Как учиться?
Такая методика является менее предпочтительной по сравнению с нисходящим программированием так как часто приводит к нежелательным результатам, переделкам и увеличению времени разработки.
Программирование «сверху вниз», или пошаговая детализация. Суть метода заключается в разбиении исходной задачи на последовательность нескольких меньших подзадач. Эти подзадачи, в свою очередь, тоже распадаются на подзадачи и т. д. до тех пор, пока не останутся только элементарные алгоритмы.
Пример. Чтобы написать число 512, сначала пишут цифру 5, затем 1 и, наконец, 2. При этом цифры рисуют, последовательно прорисовывая линии, из которых они состоят. Принтер напечатает это число точками.
При разработке программы пошагово, методом «сверху вниз» сначала пишется текст основной программы, в котором, вместо каждого связного логического фрагмента текста, вставляется вызов подпрограммы, которая будет выполнять этот фрагмент. Вместо настоящих, работающих подпрограмм, в программу вставляются «заглушки», которые ничего не делают.
Полученная программа проверяется и отлаживается. После того, как программист убедится, что подпрограммы вызываются в правильной последовательности (то есть общая структура программы верна), подпрограммы-заглушки последовательно заменяются на реально работающие, причём разработка каждой подпрограммы ведётся тем же методом, что и основной программы.
Разработка заканчивается тогда, когда не останется ни одной «затычки», которая не была бы удалена. Такая последовательность гарантирует, что на каждом этапе разработки программист одновременно имеет дело с обозримым и понятным ему множеством фрагментов, и может быть уверен, что общая структура всех более высоких уровней программы верна. При сопровождении и внесении изменений в программу выясняется, в какие именно процедуры нужно внести изменения, и они вносятся, не затрагивая части программы, непосредственно не связанные с ними. Это позволяет гарантировать, что при внесении изменений и исправлении ошибок не выйдет из строя какая-то часть программы, находящаяся в данный момент вне зоны внимания программиста.
Компас 3D: Проектирование сверху вниз — вращение контура эскиза
В теории и практике программирования наиболее популярны стратегии «сверху вниз» и «снизу вверх». Такие полярные варианты взаимодействия процессов проектирования и реализации оказываются применимыми только для программ небольшого или среднего размера. Создание же крупной программы обычно связано с поиском разумного компромисса между этими вариантами. Существует и еще одно решение – программирование «вширь».
Программирование «вширь» — ориентиром провозглашается набор однородных модулей. В одной программе может быть выявлено несколько однородных наборов. После того как однородные модули выявлены, приступают к непосредственному программированию, которое, собственно, и разбивается на этапы. На первом этапе создается лишь минимальное число представителей каждого из выделенных однородных наборов. Если поиск однородности проводился достаточно энергично, то обычно оказывается, что объем работ первого этапа реализации сравнительно невелик.
Источник: studfile.net
Понятие о структурном программирование. Модульный принцип программирования. Подпрограммы . Принципы проектирования программ сверху-вниз и снизу-вверх
Сутью структурного программирования является возможность разбиения программы на составляющие элементы.Модульный принцип программирования допускает включения в программу локальных процедур.
Распространены две методики (стратегии) разработки программ, относящиеся к структурному программированию:
– программирование «сверху вниз»;
– программирование «снизу вверх».
Программирование «сверху вниз», или нисходящее программирование – это методика разработки программ, при которой разработка начинается с определения целей решения проблемы, после чего идет последовательная детализация, заканчивающаяся детальной программой.Сначала выделяется несколько подпрограмм, решающих самые глобальные задачи (например, инициализация данных, главная часть и завершение), потом каждый из этих модулей детализируется на более низком уровне, разбиваясь в свою очередь на небольшое число других подпрограмм, и так происходит до тех пор, пока вся задача не окажется реализованной.
В данном случае программа конструируется иерархически — сверху вниз: от главной программы к подпрограммам самого нижнего уровня, причем на каждом уровне используются только простые последовательности инструкций, циклы и условные разветвления.
Такой подход удобен тем, что позволяет человеку постоянно мыслить на предметном уровне, не опускаясь до конкретных операторов и переменных. Кроме того, появляется возможность некоторые подпрограммы не реализовывать сразу, а временно откладывать, пока не будут закончены другие части. Например, если имеется необходимость вычисления сложной математической функции, то выделяется отдельная подпрограмма такого вычисления, но реализуется она временно одним оператором, который просто присваивает заранее выбранное значение (например, 5). Когда все приложение будет написано и отлажено, тогда можно приступить к реализации этой функции.
Программирование «снизу вверх», или восходящее программирование – это методика разработки программ, начинающаяся с разработки подпрограмм (процедур, функций), в то время когда проработка общей схемы не закончилась.
Такая методика является менее предпочтительной по сравнению с нисходящим программированием так как часто приводит к нежелательным результатам, переделкам и увеличению времени разработки.
Подпрограмма (процедура) (англ. subroutine) — поименованная или иным образом идентифицированная часть компьютерной программы, содержащая описание определённого набора действий.
5. Объективно-ориентированное программирование. Основные понятия.
Объектно-ориентированное программирование — методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования.
Абстракция данных:Абстрагирование означает выделение значимой информации и исключение из рассмотрения незначимой. В ООП рассматривают лишь абстракцию данных (нередко называя её просто «абстракцией»), подразумевая набор значимых характеристик объекта, доступный остальной программе.
Инкапсуляция — свойство системы, позволяющее объединить данные и методы, работающие с ними, в классе. Некоторые языки (например, С++) отождествляют инкапсуляцию с сокрытием, но большинство (Smalltalk, Eiffel, OCaml) различают эти понятия.
Наследование — свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. Класс, от которого производится наследование, называется базовым, родительским или суперклассом. Новый класс — потомком, наследником, дочерним или производным классом.
Полиморфизм — свойство системы, позволяющее использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта. Другой вид полиморфизма — параметрический — в ООП называют обобщённым программированием.
Класс:Класс является описываемой на языке терминологии исходного кода моделью ещё не существующей сущности (объекта). Фактически он описывает устройство объекта, являясь своего рода чертежом. Говорят, что объект — это экземпляр класса. При этом в некоторых исполняющих системах класс также может представляться некоторым объектом при выполнении программы посредством динамической идентификации типа данных. Обычно классы разрабатывают таким образом, чтобы их объекты соответствовали объектам предметной области.
Объект-Сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса (например, после запуска результатов компиляции и связывания исходного кода на выполнение).
Модуль 8
1.Основные этапы развития языков программирования
1.Первый этап – «стихийное» программирование (от появления первых вычислительных машин до середины 60-х годов XX в). Первые программы имели простейшую структуру. Они состояли из собственно программы на машинном языке и обрабатываемых ею данных. Появление ассемблеров позволило вместо двоичных или 16-ричных кодов использовать символические имена данных и мнемоники кодов операций.
2.Второй этап – структурный подход к программированию (60-70-е годы XX в.). В основе структурного подхода лежит декомпозиция (разбиение на части) сложных систем с целью последующей реализации в виде отдельных небольших (до 40-50 операторов) подпрограмм. При таком подходе задача представляется в виде иерархии подзадач простейшей структуры.
3.Третий этап – объектный подход к программированию (с середины
80-х до конца 90-х годов ХХ века). Объектно-ориентированное программирование определяется как технология создания сложного программного обеспечения, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного типа (класса), а классы образуют иерархию с наследованием свойств. Объектная структура программы впервые была использована в языке имитационного моделирования сложных систем Simula (60-е годы XX в.), в специализированном языке моделирования Smalltalk (70-е годы XX в.), а затем в новых версиях универсальных языков программирования, таких, как Pascal, C++, Modula, Java. Были созданы среды, поддерживающие визуальное программирование, например, Delphi, C++ Builder, Visual C++ и т.д.
4.Четвертый этап – компонентный подход и CASE-технологии (с середины 90-х годов XX до нашего времени). Компонентный подход предполагает построение программного обеспечения из отдельных компонентов физически отдельно существующих частей программного обеспечения, которые взаимодействуют между собой через стандартизованные двоичные интерфейсы. Отличительной особенностью современного этапа развития технологии программирования является создание и внедрение автоматизированных технологий разработки и сопровождения программного обеспечения, которые были названы CASE-технологиями.
1957 г. Fortran США, IBM, Дж. Бэкус: первый широко применяемый язык, ориентированный на научно-инженерные и численные задачи.
1960 г. Cobol США, Объединенный комитет производителей и пользователей ЭВМ: язык для коммерческих задач.
1960 г. Algol-60 Улучшенный вариант языка Algol-58, Европа, США, международная рабочая группа: универсальный язык, прародитель Pascal-я.
1965 г. BASIC Дж. Кемени, Т.Куртц, США, Дартмутский колледж
1969 г. LogoС.Пейперт, США, Массачусетский технологический институт
1966 г. PL-1 группа IBM,США: Многоцелевой язык для систем коллективного пользования.
1968 г. Algol-68 Европа, международная рабочая группа
1970 г. PascalН.Вирт, Швейцария, федеральный институт технологии, Цюрих: язык для обучения специалистов в области информатики.
1959 г. LispДж.Маккарти, США, Массачусетский технологический институт: язык функционального программирования.
1972 г. PrologА.Колмероэ и его коллеги из лаборатории Искуственного интеллекта, Марсельский университет, Франция: язык логического программирования.
1972-75гг. С и его развитие С++. Д. Керниган, Д. Ричи, Б. Страустрап, AT https://cyberpedia.su/33xbad9.html» target=»_blank»]cyberpedia.su[/mask_link]
Понятие о структурном программировании. Модульный принцип программирования. Принципы проектирования программ сверху вниз и снизу вверх. Подпрограммы
Основная идея структурного программирования состоит в том, что структура программы должна отражать структуру решаемой задачи, чтобы алгоритм был ясно виден из исходного текста программы. Следовательно, надо разбить программу на последовательность модулей, каждый из которых выполняет одно или несколько действий. Требование к модулю – чтобы его выполнение начиналось с первой команды и заканчивалось последней. Модульность – это основная характеристика структурного программирования. А для этого надо иметь средства для создания программы не только с помощью трех основных алгоритмических конструкций, но и с помощью средств более точно отражающих конкретную структуру алгоритма.
С этой целью в программирование введено понятие вспомогательного алгоритма или подпрограммы – набора операторов, выполняющего заданные алгоритмические действия и не зависящего от других частей исходного кода. Программа разбивается на множество подпрограмм, каждая из которых выполняет одно из действий исходного кода. Комбинируя эти блоки, удается сформировать итоговый алгоритм уже не из операторов, а из законченных блоков. Обращаться к блокам надо по названиям (именам подпрограмм), а название несет смысловую нагрузку. Например, в конкретном языке программирования запись Call Summa может означать означает обращение к подпрограмме с именем Summa, а Call – оператор вызова подпрограммы.
При структурном подходе к составлению алгоритмов и программ используются три основных типа алгоритмов: условные, циклические алгоритмы и подпрограммы. Структурированными считаются алгоритмы и программы, составленные с использованием только этих трех типов алгоритмов, при этом для записи циклов и условий должна использоваться ступенчатая запись. Например:
Вывод «Первое число больше»
Вывод «Второе число больше»
Алгоритм считается неструктурированным, если нет ступенчатой записи или если при создании программы использован оператор безусловного перехода GoTo – переход к метке, т.е., структурное программирование – это программирование безGoTo.
Основным принципом технологии структурного программирования является нисходящее программирование — это программирование с использованием подпрограмм, которое позволяет вести разработку приложения «сверху вниз», от более общих задач к более частным. При проектировании сверху вниз программа строится с помощью последовательных уточнений. Этот процесс начинается с самого общего утверждения об ее абстрактной функции, такого как «Оттранслировать программу в машинный код» или «Обработать команду пользователя» и продолжается путем последовательных шагов уточнения. На каждом шаге уровень абстракции получаемых элементов должен уменьшаться, каждая операция на нем разлагается на композицию одной или нескольких более простых операций.
Такой подход обеспечивает хорошее соответствие проекта его начальной спецификации, но не всегда способствует его эффективному повторному использованию. Модули разрабатываются в ответ на отдельные возникающие подзадачи и, как правило, являются не более общими, чем к этому их вынуждает непосредственный контекст.
Проектирование, имеющее в виду возможность повторного использования, подразумевает построение наиболее общих, по возможности, компонент, из которых затем составляются системы. Этот процесс идет снизу вверх (сначала строятся объекты, лишь затем из них конструируется программа) и противоположен идее проектирования сверху вниз, требующей начинать с определения задачи и выводить ее решение путем последовательных уточнений.
Вместо поиска самой верхней функции системы будут анализироваться типы входящих в нее объектов. Проектирование системы будет продвигаться вперед путем последовательного улучшения понимания классов этих объектов. Это процесс построения снизу вверх устойчивых и расширяемых решений для отдельных частей задачи и сборки из них все более и более мощных блоков будет продолжаться до тех пор, пока не будет получен окончательный блок, доставляющий решение первоначальной задачи. При этом можно надеяться, что оно не является единственно возможным: если правильно применять метод, то те же компоненты, собранные по-другому и, возможно, объединенные с другими, окажутся достаточно общими, чтобы получить в качестве побочного продукта также и решения каких-то новых задач.
Таким образом, проектирование снизу вверх основано на объектах и приводит к концепциям объектно-ориентированного программирования (см. п. 1.4).
Теперь рассмотрим подробнее механизм подпрограмм, являющийся основой как классического структурного, так и объектно-ориентированного программирования.
Кроме имени подпрограмма может иметь параметры, которые называются формальными. Если имя служит для того. чтобы уникальным образом идентифицировать подпрограмму, то формальные параметры, которые напоминают переменные математических функций, выполняют роль ее входных и выходных данных.
Формальные параметры должны быть выбраны таким образом, чтобы ими был исчерпан весь набор необходимых входных и выходных величин. Нередко один и тот же параметр может оказаться входным и выходным одновременно. Например, на вход такого алгоритма может быть подан массив для обработки, а на выходе он может предстать в измененном виде как выходной параметр.
Рис. 11. Подпрограмма
Первый элемент блок-схемы на рис. 11, в отличие от ранее рассмотренных примеров, где этот блок имел наименование “Начало”, включает имя подпрограммы Warn и один формальный параметр с именем i. С помощью этого имени подпрограмма может быть вызвана из другой подпрограммы или главной программы.
Из схемы видно, что если на вход подпрограммы Warn подать i=0, то она в блоке 3 выдаст сообщение «Введите данные». При любом другом i будет выведено сообщение «Конец расчетов». Этим исчерпываются возможности подпрограммы Warn.
На рис. 12 дана схема головного алгоритма (первый блок имеет наименование «Начало»). Этот алгоритм в блоках 2 и 8 обращается к процедуре Warn. При этом фактические параметры — константы 0 и 1 – поочередно подставляются на место формального параметра i.
Рис. 12. Головной алгоритм и вызов подпрограммы
Обычно при обучении программированию различают подпрограммы двух видов: процедуры и функции. Процедуры оформляются как отдельные независимые части программного кода, просто выполняющие последовательность операторов. Например, процедура вычисления суммы двух чисел, обозначенных a и b, могла бы быть описана следующим образом:
Процедура Summa (a,b)
Здесь Summa – это назначенное программистом имя подпрограммы-процедуры, а в скобках указаны формальные параметры a и b. Соответственно, обращение из главной программы к процедуре осуществляется по имени с перечнем в скобках фактических параметров, которые ей передаются, например, оператор
может означать вызов процедуры с передачей ей фактических параметров 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 и С, а Р – периметр. Периметр вычислим по известной формуле Р=AB+BC+AC, а расстояние же между двумя точками вычислим по формуле: . Вычисление расстояния между двумя точками вынесем в подпрограмму-функцию, назовем ее Длина, а формальные аргументы подпрограммы – функции обозначим через x1, y1, x2, y2. Тогда для вычисления AB, BC и AB надо три раза обратиться к подпрограмме-функции, передав ей значения фактических аргументов, сначала координаты, например, точек A и B, затем B и C, A и C.
функция длина(x1, y1, x2, y2)
ввод координат вершин xA,yA,xB,yB,xC,yC.
В ряде языков, например, в C++, понятие процедуры (но не функции) отсутствует. Аналогом процедуры является функция со специальным типом void (не возвращающая никакого значения).
Популярное:
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям .
Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние.
Как построить свою речь (словесное оформление): При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою.
Почему 1285321 студент выбрали МегаОбучалку.
Система поиска информации
Источник: megaobuchalka.ru