Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

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

Лекция



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

структурное программирование — парадигма программирования, в основе которой лежит представление программы в виде иерархической структуры блоков. Концептуализирована в конце 1960-х — начале 1970-х годов на фундаменте теоремы Бема — Якопини, математически обосновывающей возможность структурной организации программ, и работы Эдсгера Дейкстры «О вреде оператора goto» (англ. Goto considered harmful).

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

Методология структурного программирования появилась как следствие возрастания сложности решаемых на компьютерах задач, и соответственно, усложнения программного обеспечения. В 1970-е годы объемы и сложность программ достигли такого уровня, что традиционная (неструктурированная) разработка программ перестала удовлетворять потребностям практики. Программы становились слишком сложными, чтобы их можно было нормально сопровождать. Поэтому потребовалась систематизация процесса разработки и структуры программ.

Методология структурной разработки программного обеспечения была признана «самой сильной формализацией 70-х годов».

По мнению Бертрана Мейера, «Революция во взглядах на программирование, начатая Дейкстрой, привела к движению, известному как структурное программирование, которое предложило систематический, рациональный подход к конструированию программ. Структурное программирование стало основой всего, что сделано в методологии программирования, включая и объектное программирование»

Структурное программирование — методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков. Предложена в 70-х годах XX века Э. Дейкстрой, разработана и дополнена Н. Виртом.

В соответствии с данной методологией

  1. Любая программа представляет собой структуру, построенную из трех типов базовых конструкций:
    • последовательное исполнение — однократное выполнение операций в том порядке, в котором они записаны в тексте программы;
    • ветвление — однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия;
    • цикл — многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла).

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

  2. Повторяющиеся фрагменты программы (либо не повторяющиеся, но представляющие собой логически целостные вычислительные блоки) могут оформляться в виде т. н. подпрограмм (процедур или функций). В этом случае в тексте основной программы, вместо помещенного в подпрограмму фрагмента, вставляется инструкция вызова подпрограммы. При выполнении такой инструкции выполняется вызванная подпрограмма, после чего исполнение программы продолжается с инструкции, следующей за командой вызова подпрограммы.
  3. Разработка программы ведется пошагово, методом «сверху вниз».

Теорема о структурном программировании:

Теорема Бома-Якопини

Любую схему алгоритм а можно представить в виде композиции вложенных блоков begin и end, условных операторов if, then, else, циклов с предусловием (while) и, может быть, дополнительных логических переменных (флагов).
Эта теорема была сформулирована итальянскими математиками К. Бомом и Дж. Якопини в 1966 году и говорит нам о том, как можно избежать использования оператора перехода goto.

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

Методология структурного программирования появилась как следствие возрастания сложности решаемых на компьютерах задач, и соответственного усложнения программного обеспечения. В 70-е годы XX века объемы и сложность программ достигли такого уровня, что «интуитивная» (неструктурированная, или «рефлекторная») разработка программ, которая была нормой в более раннее время, перестала удовлетворять потребностям практики. Программы становились слишком сложными, чтобы их можно было нормально сопровождать, поэтому потребовалась какая-то систематизация процесса разработки и структуры программ.

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

Следование принципам структурного программирования сделало тексты программ, даже довольно крупных, нормально читаемыми. Об этом говорит сайт https://intellect.icu . Серьезно облегчилось понимание программ, появилась возможность разработки программ в нормальном промышленном режиме, когда программу может без особых затруднений понять не только ее автор, но и другие программисты. Это позволило разрабатывать достаточно крупные для того времени программные комплексы силами коллективов разработчиков, и сопровождать эти комплексы в течение многих лет, даже в условиях неизбежных изменений в составе персонала.

Методология структурной разработки программного обеспечения была признана «самой сильной формализацией 70-х годов». После этого слово «структурный» стало модным в отрасли, и его начали использовать везде, где надо и где не надо. Появились работы по «структурному проектированию», «структурному тестированию», «структурному дизайну» и так далее. В общем, произошло примерно то же самое, что происходило в 90-х годах и происходит в настоящее время с терминами «объектный», «объектно-ориентированный» и «электронный».

Перечислим некоторые достоинства структурного программирования:

  1. Структурное программирование позволяет значительно сократить число вариантов построения программы по одной и той же спецификации, что значительно снижает сложность программы и, что еще важнее, облегчает понимание ее другими разработчиками.
  2. В структурированных программах логически связанные операторы находятся визуально ближе, а слабо связанные — дальше, что позволяет обходиться безблок-схем и других графических форм изображения алгоритмов (по сути, сама программа является собственной блок-схемой).
  3. Сильно упрощается процесс тестирования и отладки структурированных программ.

процедурное программирование

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

Процедурное программирование является отражением архитектуры традиционных ЭВМ, которая была предложена фон Нейманом в 1940-х годах. Теоретической моделью процедурного программирования служит абстрактная вычислительная система под названием машина Тьюринга.

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

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

Процедурные языки программирования

  • Ada (язык общего назначения)
  • Алгол 60
  • Алгол 68
  • Basic (до появления Visual Basic)
  • Си
  • КОБОЛ
  • Фортран
  • Модула-2
  • HAL/S
  • Pascal
  • PureBasic
  • ПЛ/1
  • Рапира
  • REXX

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

модульность программного кода

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

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

Программный код часто разбивается на несколько файлов, каждый из которых компилируется отдельно от остальных. Такая модульность программного кода позволяет значительно уменьшить время перекомпиляции при изменениях, вносимых лишь в небольшое количество исходных файлов, и упрощает групповую разработку. Также это возможность замены отдельных компонентов (таких как jar-файлы, so или dll библиотеки) конечного программного продукта, без необходимости пересборки всего проекта (например, разработка плагинов к уже готовой программе).

Одним из методов написания модульных программ является объектно-ориентированное программирование. ООП обеспечивает высокую степень модульности благодаря таким свойствам, как инкапсуляция, полиморфизм и позднее связывание.

Понятие алгоритма

Алгоритм - это четко определенный план (последовательность) действий.

Свойства алгоритма

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

Понятие программы

Программа – это
• алгоритм, записанный на каком-либо языке программирования
• набор команд для компьютера

Информационный процесс процесс получения, хранения, обработки и передачи информации с помощью компьютерных и других технических средств

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

Команда – это описание действий, которые должен выполнить компьютер.

  • откуда взять исходные данные?
  • что нужно с ними сделать?
  • куда поместить резльтат?

Данные - информация любой природы, зафиксированная тем или иным способом

структуризация алгоритмических моделей

Структуризация моделей программ - - это структурное программирование в узком смысле, как оно зародилось в конце 60-х, иначе называемое программированием без go to(начало - статья Дейкстры 1965 г. "GO TO considered to be harmful": частые ошибки кодирования - неправильная передача управления - вызваны скачками по тексту). Разрешены только три вида элементарных управляющих структур над функциональными блоками SN:

· Последовательность (составной оператор): S1; S2;

· Выбор (разветвление): if P then S1 else S2;

· Повторение (цикл): while P d oS1;

Каждая из этих стандартных структур имеет, как и функциональными блоками, один вход - один выход (два входа потребовали бы go to!), следовательно возможны эквивалентные преобразования для иерархической структуризации:

- функциональный блок- станд. структура (детализация)

- станд. структура - функциональный блок (обобщение)

Теоретическое обоснование возможности записи любого алгоритма с помощью только указанных трех ЭС - теорема Бома-Якопини (1966).

Запрет на go to часто приводит к потере эффективности. Например, следующее преобразование неструктурной блок-схемы в структурную путем дублирования блока В:

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

Рис. 6-1

Дублирование кода В неэффективно по памяти, оформление В какподпрограммы - неэффективно по времени. Лишние проверки условий - в следующем примере преобразования рис.6-2.

Существует универсальный метод Ашкрофта-Манна (1971) автоматического преобразования любой блок-схемы в структурную (правда, крайне неэффективную и не наглядную); его можно считать конструктивным доказательством теоремы Бома-Якопини. Однако проще и лучше проектировать структурный алгоритм изначально.


Вопрос 1.

Языки программирования делятся на структурные – содержащие конструкции трех стандартных структур управления, и неструктурные. К первым относятся все современные языки (в них список стандартных структур расширен добавлением операторовcase, forи repeat); некоторые из них вообще не содержат go to(Modula-2, BLISS, CLU). Ко вторым ассемблеры и первоначальный Фортран, Бейсик.

Вопрос 2.

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

Рис. 6-2

Чтобы избежать неэффективности, современные языки содержат “структурные” операторы перехода: не на метку, а в точку входа в объемлющий блок (break) или точку вызова подпрограммы (return), позволяя описывать преждевременный выход из цикла или подпрограммы. Подобным же образом оператор возбуждения исключения (механизм exception в Аде, CLU или С++) описывает переход не на метку, а по имени исключительной ситуации – на код ее обработки. В целом современный подход не рекомендует, но и не запрещает go to.

Виды парадигм программирования. Парадигмы программирования

Вообще строгого определения нет. но по сути парадигма программирования - это то, что определяет стиль написания исходного кода программ.

В некоторой степени “стиль” диктует так же способ формализации алгоритмов.

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

Вау!! 😲 Ты еще не читал? Это зря!

А как ты думаешь, при улучшении структурное программирование, будет лучше нам? Надеюсь, что теперь ты понял что такое структурное программирование, процедурное программирование, алгоритм, модульность, программа, структуризация алгоритмических моделей, структуризация и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Алгоритмизация и программирование. Структурное программирование. Язык C

создано: 2014-08-21
обновлено: 2021-03-13
132555



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Алгоритмизация и программирование. Структурное программирование. Язык C

Термины: Алгоритмизация и программирование. Структурное программирование. Язык C