Службы сети Интернет представляют собой различные способы доставки разнообразной по форме информации ее потребителям.
Рассмотрим подробнее наиболее популярные службы сети Интернет: электронную почту, WWW и передачу файлов по протоколу FTP.
Электронная почта.Служба электронной почты (electronic mail, e-mail) появилась раньше сети Интернет, однако она остается популярным способом пересылки сообщений.Электронное письмо содержит адреса электронной почты отправителя и получателя. В конверт с письмом можно вложить открытку или фотографию, а электронное письмо – файл любого формата: исполняемый, графический, звуковой. Отправитель может идентифицировать себя, поставив электронную подпись, как и подписью в обчном письме. Электронное письмо может быть прочитано в удобное время для получателя время, почта доступна, и можно легко и просто отправить письмо любому человеку даже самого высокого ранга. Служба электронной почты позволяет рассылать письма сразу большому количеству получателей и подтверждать получение письма.
Восходящее и нисходящее программирование (проектирование)
Для получения адреса электронной почты необходимо: Во-первых, выбрать почтовый сервис (gmail.com, mail.ru и yandex.ru). Во-вторых, надо зарегистрироваться на почтовом сервисе, выбрать имя для своего почтового ящика и пароль для доступа к нему для предотвращения несанкционированного доступа к почте.
Адрес электронной почты имеет формат:
Длина имени пользователя определяется почтовыми сервисами. Обычно оно должно содержать не менее 5-6 символов. По имени сервиса можно определить, на каком почтовом сервисе зарегистрирован почтовый ящик.
Электронная почта построена по принципу клиент-серверной архитектуры. Пользователь общается с клиентской программой, которая в свою очередь общается с сервером почтового сервиса. Одной из популярных почтовых программ является Outlook Express фирмы Microsoft. Некоторые почтовые программы встроены в браузер – программу для просмотра документов во Всемирной сети (WWW), например, в браузер Opera фирмы Opera Software.
Процедуры отправки и получения почты используют разные протоколы. Для передачи писем используется протокол SMTP (Simple Mail Transfer Protocol – протокол пересылки почты). Для приема почтовых сообщений наиболее часто используется протокол IMAP (Internet Message Access Protocol – протокол доступа к Интернет-сообщениям).
Служба WWW
Всемирная сеть (WWW) – самая популярная служба на базе сети Интернет благодаря своей доступности, простоте и удобству использования. Всемирная сеть объединяет веб-серверы, хранящие гипертекстовые документы.
Гипертекст – это текст, отформатированный особым образом. Гипертекст содержит ссылки на графические изображения и другие гипертекстовые документы, тематически связанные с ним. Пользователь может переходить от одного документа к другому по этим ссылкам. Такие переходы назваются веб-серфингом.
Так как гипертекстовые документы ссылаются не только на текст, но и на мультимедийные ресурсы – совокупность текстовой, графической и видеоинформации, то понятие гипертекст было расширено до понятия гипермедия. Таким образом, гипермедия – это способ организации мультимедийной информации на основе гипертекста.
Технологии программирования 5. Этапы проектирования
В основе Всемирной сети, как и электронной почты, лежит клиент-серверная архитектура. Для работы во Всемирной сети пользователю необходима специальная программа – браузер. Браузер предназначен для:
1) запрос по требованию пользователя информационного ресурса по его адресу URL у веб-сервера, на котором он хранится;2) отображение содержимого запрошенного информационного ресурса на дисплее пользователя.
Браузер повышает удобство работы во Всемирной сети, выполняя следующие сервисные функции:
— хранение, обеспечение поиска и быстрого доступа к адресам URL, которые пользователь посещает чаще всего;
— ведение журнала посещений информационных ресурсов;
— сохранение информационных ресурсов, которые просматривал пользователь, на ВЗУ;
— обеспечение безопасности пользователя во время работы во Всемирной сети. (Internet Explorer фирмы Microsoft, Opera фирмы Opera Software и Mozilla Firefox,)
Всемирная сеть – это совокупность веб-серверов, связанных между собой.Можно выделить 2 типа связи:1) физические: каналы связи, связывающие веб-серверы;
2) информационные: ссылки гипертекстового документа, находящиеся на одном веб-сервере, на информационные ресурсы на других веб-серверах.
Веб-сервер – это совокупность аппаратного и программного обеспечения, решающая единственную основную задачу: получение запроса пользователся на информационный ресурс, обрабтка и выдача его пользователю. Веб-серверы не только выдают текст и графические изображения по запросу, но и могут выполнять более сложные операции по обработке информации: например, делать запросы к БД и наглядно представлять результаты запроса. Прием запроса от браузера веб-серверу и доставка информационных ресурсов осуществляется по протоколу HTTP (Hypertext Transfer Protocol – протокол передачи гипертекста).Гипертекстовый документ, расположенный на одном из веб-серверов, называется веб-страницей, а совокупность страниц, объединенных общей темой и связанных ссылками друг на друга, – веб-сайтами. Веб-сайты, имеющие широкую тематику, называются веб-порталами. Веб-порталы состоят из сотен тысяч страниц.На одном веб-сервере могут располагаться один или более веб-сайтов. Веб-порталы обрабатывают большое количество запросов и, как правило, размещаются на нескольких веб-серверах по двум основным причинам:
1) равномерное распределение запросов между серверами: часть запросов переводится с наиболее загруженных серверов на менее загруженные;
2) хранение веб-портала на нескольких серверах более надежно, так как выход из строя одного из веб-серверов будет компенсирован другими серверами, и веб-портал останется доступным
пользователям Всемирной сети.
Помимо просмотра чужих веб-сайтов можно создать свой веб-сайт и поместить туда информацию, которая будет интересна пользователям Всемирной сети, в виде текста, графики, звуковых и видеофайлов. Информация, размещенная во Всемирной сети, исчисляется огромным количеством байт. Для поиска информации во Всемирной сети используются специальные веб-сайты – информационно-поисковые системы. Они позволяют по ключевым словам найти информационные ресурсы, связанные с ключевыми словами. Это может быть текст, содержащий ключевые слова, или графическое изображение одного из ключевых слов. (Google и Yandex).
Служба передачи файлов
Файлы большого объема можно переслать по электронной почте или разместить на веб-сервере. Однако пересылка по электронной почте возможно лишь нескольким получателям, а размещение файлов на веб-сервере значительно загружает его. Чтобы сделать получение файлов более удобным, используется протокол FTP (File Transfer Protocol – протокол передачи файлов).
По протоколу FTP обычно передаются следующие файлы:
— документы большого объема;
— фото- и видео файлы.
Для доступа к файлам необходимо использовать специальную программу или воспользоваться браузером.
Файлы, расположенные на FTP-сервере, находятся в каталогах точно так же, как в файловой системе ОС. Пользователь может получать список файлов и каталогов, расположенных на FTP-сервере, переходить из одного каталога в другой.
41.Сеть Интернет – это глобальная сеть, соединяющая сети различного размера по всему миру. Сеть Интернет – это информационное пространство, содержащее огромное количество информации, хранилище информационных ресурсов. Информационными ресурсами являются совокупности текстов, изображений и других данных, а также тематические связи между ними.
Провайдер – это организация (фирма, компания), обеспечивающая подключение пользователей к сети Интернет. Подключение может осуществляться двумя способами:
1) по модему (телефонному, ADSL или другого типа)
2) прямым подключением к сети провайдера.
Как только пользователь соединился с провайдером, ПК пользователя становится частью сети провайдера. Каждый провайдер имеет свой канал, связывающий его с более крупным провайдером. В свою очередь сети крупных провайдеров объеденены между собой магистральными линиями.
Протоколы сети Интернет
Протоколы сети Интернет можно разделить на два типа: базовые и прикладные. Базовые протоколы – это протоколы нижнего уровня. Они обеспечивают физическую передачу сообщений между узлами в сети Интернет. Примером базового протокола является протокол ТСР/IP. Прикладные протоколы – протоколы высокого уровня.
Эти протоколы обеспечивают функционирование служб сети Интернет. Например, протокол HTTP служит для передачи гипертекстовых документов, протокол FTP – для передачи файлов, а SMTP – для передачи электронной почты. Базовые и прикладные протоколы находятся в такой же взаимосвязи, что и уровни модели OSI.
На нижнем уровне используются два основных протокола: IP и TCP. Протокол TCP предназначен для управления передачей данных в виде пакетов, регулировкой и синхронизацией передачи на разных скоростях. Протокол IP необходим для однозначного определения адреса получателя пакетов. Такой адрес называется IP-адресом.
Четыре уровня протоколов TCP/IP:
1) уровень межсетевого интерфейса предназначен собственно для передачи данных по сети;
2) межсетевой уровень отвечает за маршрутизацию и доставку пакетов;
3) транспортный уровень выполняет задачи установки и поддержания соединения между двумя узлами, отправку уведомлений о получении данных;
4) прикладной уровень предоставляет доступ к сети приложениям.
Архитектура протоколов TCP/IP предназначена для объединения сетей.
Передача почты осуществляется по прикладному протоколу SMTP, который использует передачу по протоколам TCP/IP. По протоколу TCP данные разбиваются на небольшие пакеты фиксированной структуры и длины и маркируются так, чтобы при получении собрать из них исходное послание.
Обычно длина одного пакета не превышает 1500 байт. Поэтому одно электронное письмо может состоять из нескольких сотен таких пакетов. Малая длина пакета не приводит к блокировке линии связи и не позволяет отдельным пользователям надолго захватывать канал связи.
К каждому полученному пакету протокола TCP протокол IP добавляет информацию, по которой можно определить адрес отправителя и получателя. Для передачи пакета существует несколько маршрутов. Однако пакет не всегда передается по географически наикратчайшему пути. На направление его передачи влияет загруженность каналов связи, а не их протяженность. Протокол TCP/IP гарантирует, что независимо от длины пути в результате конечного числа пересылок TCP-пакеты достигают адресата.
Чтобы посмотреть путь пакета до узла с заданным адресом в ОС Windows, необходимо в командной строке набрать команду tracert .
При получении пакета IP-модуль адресата извлекает пакет протокола ТСР из IP-пакета и передает его TCP-модулю. В свою очередь ТСР-модуль извлекает данные из TCP-пакета и собирает данные принятых пакетов в исходное сообщение. Если пакет отсутствует или принят с ошибками, то производится его повторная передача. Передача одного и того же пакета повторяется до тех пор, пока пакет не будет получен в целостном виде. Для определения ошибок в пакете используются контрольные данные и помехоустойчивые коды, выявляющие и исправляющие ошибки.
Полученное сообщение передается процедурам протокола SMTP, которые далее обрабатывают это сообщение.
Таким образом, по протоколу IP данные непосредственно передаются по сети, а по протоколу ТСР обеспечивается надежная доставка данных адресату. Два узла в сети Интернет могут одновременно передавать в обе стороны по одному каналу несколько ТСР-пакетов от различных узлов.
Восходящий и нисходящий способ проектирования программ.
Восходящее проектирование (или проектирование «снизу вверх») основано на выделении нескольких достаточно крупных модулей, реализующих некоторые функции в общей программе. При выделении модулей опираются на доступность реализуемых функций для понимания, простоту структурирования данных, существование готовых программ и модулей для реализации заданных функций, возможности переделки существующих программ для новых целей; имеет значение и размер будущего модуля. Каждый модуль при восходящем проектировании автономно программируется, тестируется и отлаживается. После этого отдельные модули объединяются в подсистемы с помощью управляющего модуля, в котором определяется последовательность вызовов модулей, ввод-вывод и контроль данных и результатов. В свою очередь, подсистемы затем объединяются в более сложные системы и в общий программный комплекс, который подвергается комплексной отладке с проверкой правильности межмодульных связей.
Рассмотренный подход — при разработке не очень сложных программ. Если размеры подпрограмм невелики, то целесообразно выделить подпрограммы и начать программирование с их составления.
Основные недостатки восходящего проектирования программы проявляются в сложности объединения модулей в единую систему, в трудности выявления и исправления ошибок, допущенных на ранних стадиях разработки модулей. Кроме того, отдельные модули могут создаваться без общего представления о структуре всей системы, что затрудняет их объединение.
Для создания сложных программ — нисходящее проектирование, основанное на выделении в решаемой задаче иерархии уровней обобщения. Схема иерархии уровней обобщения позволяет программисту сначала сконцентрировать внимание на том, что нужно сделать, и лишь затем – на том, как это сделать.
Ведущая программа записывается как программа верхнего уровня, управляющая вызовами модулей более низкого уровня. Каждый из модулей более низкого уровня, в свою очередь, управляет вызовами модулей еще более низкого уровня. Такой способ проектирования позволяет создавать сложные и громоздкие программы из небольших простых модулей: размер задачи отражается только в числе модулей и уровней обобщений.
При нисходящем проектировании появляется возможность использовать вертикальное управление в схеме иерархии с использованием таких правил: модуль возвращает управление вызвавшему; модуль вызывает только модули более низкого уровня; принятие основных решений возлагается на модули максимально высокого уровня.
Причем вместо каждого из модулей при тестировании могут использоваться так называемые «заглушки», т.е. фиктивные модули, содержащие лишь заголовки и операторы возврата. Нисходящий способ проектирования позволяет начать комплексную отладку и тестирование написанной части программной системы, не дожидаясь окончания написания всех модулей.
Основные достоинства нисходящего проектирования:
1. проявление логики программы возникает уже при чтении головного модуля, что делает программу боле простой;
2. возможность контроля хода работы над программой в процессе последовательной детализации программы обеспечивает ее непрерывную корректировку; отсутствие комплексной отладки благодаря сквозному контролю позволяет сэкономить до 30 % общего времени разработки программ;
3. одновременная параллельная работа нескольких программистов может оказаться эффективной.
При нисходящем проектировании, однако, возможны и такие ситуации, когда после значительных затрат на программирование выясняется необходимость объединения нескольких подзадач в один модуль, либо обнаруживается невозможность выполнения модулями нижних уровней своих функций при заданных временных ограничениях.
Источник: poisk-ru.ru
Нисходящая и восходящая разработка программного обеспечения
В литературе встречается ещё один подход – «расширение» ядра. Он предполагает, что в первую очередь проектируют и разрабатывают ядро ПО, например структуры данных и процедуры, связанные с ними. Затем ядро наращивают, комбинируя нисходящий и восходящий методы. На практике данный подход в зависимости от уровня ядра сводится к нисходящему и восходящему подходу.
Восходящий подход. Сначала проектируют и реализуют компоненты нижнего уровня, затем следующего и т.д. По мере завершения тестирования и отладки компонентов осуществляют их сборку. Компоненты нижнего уровня часто помещают в библиотеки компонентов. Для тестирования и отладки компонентов проектируют и реализуют специальные тестирующие программы. Недостатки:
¾ увеличение вероятности несогласованности компонентов вследствие неполноты спецификации;
¾ наличие издержек на проектирование и реализацию тестирующих программ;
¾ позднее проектирование интерфейса, следовательно невозможность продемонстрировать его заказчику.
Исторически восходящий подход появился раньше, что было связано с особенностью мышления программистов. При промышленном изготовлении ПО восходящий подход практически не используется.
Нисходящий подход. При использовании нисходящего подхода применяют иерархический, операционный и комбинированный методы определения последовательности проектирования и реализации компонентов. Иерархический метод предполагает выполнение разработки строго по уровню.
Исключения допускаются при наличии зависимости по данным, то есть если обнаруживается, что некоторый модуль использует результаты другого, то его рекомендуется программировать после этого модуля. Основная проблема этого метода – большое количество достаточно сложных заглушек.
Также основное количество модулей разрабатывается и реализуется в конце работы над проектом, что затрудняет распределение человеческих ресурсов. Операционный метод связывает последовательность разработки модулей с порядком их выполнения при запуске программы. Применение метода усложняется тем, что порядок выполнения модулей может зависеть от данных. Кроме этого модули вывода результатов (хотя они вызываются последними) должны разрабатываться вначале. С точки зрения распределения человеческих ресурсов сложным является начало работы, пока не закончены все модули, находящиеся на так называемом критическом пути. Комбинированный метод учитывает факторы, влияющие на последовательность разработки:
¾ достижимость модуля (наличие всех модулей в цепочке вызова данного модуля),
¾ зависимость по данным (модули, формирующие некоторые данные, должны создаваться раньше обрабатывающих),
¾ обеспечение возможности выдачи результатов,
¾ готовность вспомогательных модулей,
¾ наличие необходимых ресурсов.
Нисходящий подход допускает нарушение нисходящей последовательности разработки компонентов в специально оговоренных случаях. Этот подход обычно используют и при ООП. Нисходящий подход обеспечивает:
1)максимально полное определение спецификации проектируемого компонента и согласованность компонентов между собой.
2)раннее определение интерфейса пользователя, демонстрация которого заказчику, позволяет уточнить требования к создаваемому ПО.
3)возможность нисходящего тестирования и комплексной отладки.
Структурное программирование.
Структурное программирование – это один из способов обеспечения высокого уровня технологичности разрабатываемого ПО.
Существует три вида вычислительного процесса:
Линейный, 2)разветвляющий, 3) цикличный.
Для реализации этих процессов в программировании используют соответствующие управляющие операторы. Для изображения схем алгоритмов таких программ был разработан ГОСТ 19.701-90.
После того, как в 60-х годах было доказано, что любой сколь угодно сложный алгоритм можно представить с использованием трех основных управляющих конструкций, в языках программирования высокого уровня появились управляющие операторы для реализации этих конструкций. К базовым конструкциям относятся:
1) следования,
2) ветвления,
3) цикл “пока”.
Кроме базовых процедурные языки программирования обычно используют еще три конструкции, которые можно составить из базовых:
1)выбор – case
2)цикл “до”
3)цикл for.
Любая дополнительная конструкция легко реализуется через базовые. Эти шесть конструкций были положены в основу структурного программирования.
1).
2.) 3).
1).
2). 3).
Слово структурное в данном случае подчеркивает тот факт, что при программировании используются только эти структуры.
Кроме схем для описания алгоритмов можно использовать псевдокоды, flow-диаграммы и диаграммы Насси — Шнейдермана. Все эти нотации базируются на тех же основных структурах, но допускают разные уровни детализации.
1)Псевдокод – это формализованное текстовое описание алгоритма. Текстовая нотация. В литературе предложено несколько вариантов псевдокодов.
2) Flow-диаграммы (формы) – графическая нотация описания структурных алгоритмов, которая иллюстрирует вложенность структур. Каждый символ flow-формы соответствует управляющей структуре и изображается прямоугольником.
3)Диаграммы Насси — Шнейдермана являются развитием flow-форм. Основное отличие в том, что область обозначений условий и вариантов ветвления изображается в виде треугольников.
Общим недостатком flow-форм и диаграмм Насси — Шнейдермана является сложность построения изображений для больших алгоритмов.
Дата добавления: 2018-05-13 ; просмотров: 1591 ; Мы поможем в написании вашей работы!
Поделиться с друзьями:
Источник: studopedia.net
2.3. Нисходящая и восходящая разработка программного обеспечения
При проектировании, реализации и тестировании компонентов структурной иерархии, полученной при декомпозиции, применяют два подхода: • восходящий; • нисходящий. В литературе встречается еще один подход, получивший название «расширение ядра».
Он предполагает, что в первую очередь проектируют и разрабатывают некоторую основуядро программного обеспечения, например, структуры данных и процедуры, связанные с ними. В дальнейшем ядро наращивают, комбинируя восходящий и нисходящий методы. На практике данный подход в зависимости от уровня ядра практически сводится либо к нисходящему, либо к восходящему подходам.
Восходящий подход. При использовании восходящего подхода сначала проектируют и реализуют компоненты нижнего уровня, затем предыдущего и т. д. По мере завершения тестирования и отладки компонентов осуществляют их сборку, причем компоненты нижнего уровня при таком подходе часто помещают в библиотеки компонентов.
Для тестирования и отладки компонентов проектируют и реализуют специальные тестирующие программы. Подход имеет следующие недостатки: • увеличение вероятности несогласованности компонентов вследствие неполноты спецификаций; • наличие издержек на проектирование и реализацию тестирующих программ, которые нельзя преобразовать в компоненты; • позднее проектирование интерфейса, а соответственно невозможность продемонстрировать его заказчику для уточнения спецификаций и т. д. Исторически восходящий подход появился раньше, что связано с особенностью мышления программистов, которые в процессе обучения привыкают при написании небольших программ сначала детализировать компоненты нижних уровней (подпрограммы, классы).
Это позволяет им лучше осознавать процессы верхних уровней. При промышленном изготовлении программного обеспечения восходящий подход в настоящее время практически не используют. Нисходящий подход.
Нисходящий подход предполагает, что проектирование и последующая реализация компонентов выполняется «сверху-вниз», т. е. вначале проектируют компоненты верхних уровней иерархии, затем следующих и так далее до самых нижних уровней. В той же последовательности выполняют и реализацию компонентов. При этом в процессе программирования компоненты нижних, еще не реализованных уровней заменяют специально разработанными отладочными модулями — «заглушками», что позволяет тестировать и отлаживать уже реализованную часть. При использовании нисходящего подхода применяют иерархический, операционный и комбинированный методы определения последовательности проектирования и реализации компонентов. Иерархический метод предполагает выполнение разработки строго по уровням. Исключения
допускаются при наличии зависимости по данным, т. е. если обнаруживается, что некоторый модуль использует результаты другого, то его рекомендуется программировать после этого модуля. Основной проблемой данного метода является большое количество достаточно сложных заглушек.
Кроме того, при использовании данного метода основная масса модулей разрабатывается и реализуется в конце работы над проектом, что затрудняет распределение человеческих ресурсов. Операционный метод связывает последовательность выполнения при запуске программы. Применение метода усложняется тем, что порядок выполнения модулей может зависеть от данных.
Кроме того, модули вывода результатов, несмотря на то, что они вызываются последними, должны разрабатываться одними из первых, чтобы не проектировать сложную заглушку, обеспечивающую вывод результатов при тестировании. С точки зрения распределения человеческих ресурсов сложным является начало работ, пока не закончены все модули, находящиеся на так называемом критическом пути.
Комбинированный метод учитывает следующие факторы, влияющие на последовательность разработки: • достижимость модуля — наличие всех модулей в цепочке вызова данного модуля; • зависимость по данным — модули, формирующие некоторые данные, должны создаваться раньше обрабатывающих; • обеспечение возможности выдачи результатов — модули вывода результатов должны создаваться раньше обрабатывающих; • готовность вспомогательных модулей — вспомогательные модули, например, модули закрытия файлов, завершения программы, должны создаваться раньше обрабатывающих; • наличие необходимых ресурсов. Кроме того, при прочих равных условиях сложные модули должны разрабатываться прежде простых, так как при их проектировании могут выявиться неточности в спецификациях, а чем раньше это произойдет, тем лучше.
Нисходящий подход допускает нарушение нисходящей последовательности разработки компонентов в специально оговоренных случаях. Так, если некоторый компонент нижнего уровня используется многими компонентами более высоких уровней, то его рекомендуют проектировать и разрабатывать раньше, чем вызывающие его компоненты.
И, наконец, в первую очередь проектируют и реализуют компоненты, обеспечивающие обработку правильных данных, оставляя компоненты обработки неправильных данных напоследок. Пример определения последовательности реализации модулей будет рассмотрен в § 5.2. Нисходящий подход обычно используют и при объектно-ориентированном программировании. В соответствии с рекомендациями подхода вначале проектируют и реализуют пользовательский интерфейс программного обеспечения, затем разрабатывают классы некоторых базовых объектов предметной области, а уже потом, используя эти объекты, проектируют и реализуют остальные компоненты. Нисходящий подход обеспечивает: • максимально полное определение спецификаций проектируемого компонента и согласованность компонентов между собой; • раннее определение интерфейса пользователя, демонстрация которого заказчику позволяет уточнить требования к создаваемому программному обеспечению:
• возможность | нисходящего | тестирования | и | комплексной | отладки | (см. |
гл. 9). |
2.4. Структурное и «неструктурное» программирование. Средства описания структурных алгоритмов
Одним из способов обеспечения высокого уровня технологичности разрабатываемого программного обеспечения является структурное программирование. Различают три вида вычислительного процесса, реализуемого программами: линейный,
разветвленный и циклический. Линейная структура процесса вычислений предполагает, что для получения результата необходимо выполнить некоторые операции в определенной последовательности. Разветвленная структура процесса вычислений предполагает, что конкретная последовательность операций зависит от значений одной или нескольких переменных.
Циклическая структура процесса вычислений предполагает, что для получения результата некоторые действия необходимо выполнить несколько раз. Для реализации указанных вычислительных процессов в программах используют соответствующие управляющие операторы.
Первые процедурные языки программирования высокого уровня, такие, как FORTRAN, понятием «тип вычислительного процесса» не оперировали. Для изменения линейной последовательности операторов в них, как в языках низкого уровня, использовались команды условной (при выполнении некоторого условия) и безусловной передач управления.
Потому и программы, написанные на этих языках, имели запутанную структуру, присущую в настоящее время только низкоуровневым (машинным) языкам. Именно для изображения схем алгоритмов таких программ в свое время был разработан ГОСТ 19.701-90, согласно которому каждой группе действий ставится в соответствие специальный блок (табл. 2.3). Хотя этот стандарт предусматривает блоки для обозначения циклов, он не запрещает и произвольной передачи управления, т. е. допускает использование команд условной и безусловной передачи управления при реализации алгоритма.
В качестве примера, демонстрирующего особенности использования команд передачи управления для организации требуемого типа вычислительного процесса, рассмотрим программу на языке Ассемблера. Пример 2.1 (вариант 1). Реализовать на языке Ассемблера подпрограмму поиска минимального элемента массива а(n). На рис. 2.2 приведен пример неудачной реализации этой подпрограммы.
Стрелками показаны передачи управления. Даже с комментариями и стрелками понять хорошо известный алгоритм достаточно сложно.
После того, как в 60-х годах XX в. было доказано, что любой сколь угодно сложный алгоритм можно представить с использованием трех основных управляющих конструкций, в языках программирования высокого уровня появились управляющие операторы для реализации соответствующих конструкций. Эти три конструкции принято считать базовыми.
К ним относят конструкции: • следование — обозначает последовательное выполнение действий (рис. 2.3, а); • ветвление — соответствует выбору одного из двух вариантов действий (рис. 2.3, б); цикл-пока — определяет повторение действий, пока не будет нарушено некоторое условие, выполнение которого проверяется в начале цикла (рис. 2.3,б).
Помимо базовых, процедурные языки программирования высокого уровня обычно используют еще три конструкции, которые можно составить из базовых: • выбор — обозначает выбор одного варианта из нескольких в зависимости от значения некоторой величины (рис. 2.4, а); • цикл-do — обозначает повторение некоторых действий до выполнения заданного условия, проверка которого осуществляется после выполнения действий в цикле (рис.
2.4, б); • цикл с заданным числом повторений (счетный цикл) — обозначает повторение некоторых действий указанное количество раз (рис. 2.4, в). Любая из дополнительных конструкций легко реализуется через базовые. Перечисленные шесть конструкций были положены в основу структурного программирования.
Перечисленные шесть конструкций были положены в основу структурного программирования. Примечание. Слово «структурное» в данном названии подчеркиваем тот факт, что при программировании использованы только перечисленные конструкции (структуры). Отсюда и понятие «программирование без go to».
Программы, написанные с использованием только структурных операторов передачи управления, называют структурными , чтобы подчеркнуть их отличие от программ, при проектировании или реализации которых использовались низкоуровневые способы передачи управления. Несмотря на то, что Ассемблер не предусматривает соответствующих конструкций, «структурно» можно программировать и на нем.
Вернемся к примеру 2.1. Пример 2.1 (вариант 2). Поскольку реализуемый цикл по типу «счетный» с количеством повторений п-1, используем соответствующую команду Ассемблера. Уберем и усложняющий понимание возврат на метку less, заменив его дубликатом команды сохранения текущего максимального элемента.
Полученный в результате «структурированный» вариант программы поиска максимального элемента массива приведен на рис. 2.5. Единственный возврат реализует циклический процесс, а передача управления на следующие команды — ветвление. Представление алгоритма программы в виде схемы с точки зрения структурного программирования имеет два недостатка: • предполагает слишком низкий уровень детализации, что часто скрывает суть сложных алгоритмов; • позволяет использовать неструктурные способы передачи управления, причем часто на схеме алгоритма они выглядят проще, чем эквивалентные структурные.
Классическим примером последнего является организация поискового цикла с использованием неструктурной передачи управления (рис. 2.6, а) и эквивалентный структурный вариант (рис. 2.6, б). Кроме схем, для описания алгоритмов можно использовать псевдокоды, Flow-формы и диаграммы Насси-Шнейдермана.
Все перечисленные нотации с одной стороны базируются на тех же основных структурах, что и структурное программирование, а с другой — допускают разные уровни детализации. Псевдокоды . Псевдокод — формализованное текстовое описание алгоритма (текстовая нотация). В литературе были предложены несколько вариантов псевдокодов. Один из них приведен в табл. 2.4.
Описать с помощью псевдокодов неструктурный алгоритм невозможно. Использование псевдокодов изначально ориентирует проектировщика только на структурные способы передачи управления, а потому требует более тщательного анализа разрабатываемого алгоритма. В отличие от схем алгоритмов, псевдокоды не ограничивают степень детализации проектируемых операций.
Они позволяют соизмерять степень детализации действия с уровнем абстракции, на котором это действие рассматривают, и хорошо согласуются с основным методом структурного программирования — методом пошаговой детализации. В качестве примера посмотрим, как будет выглядеть на псевдокоде описание алгоритма поискового цикла, представленного на рис.
2.6: i: =1 Цикл-пока i ≥ < n и A[i] ≠ у i: =i+l Все-цикл Если I ≥ n то Вывести «Элемент найден» иначе Вывести «Элемент не найден» Все-если Flow-формы . Flow-формы представляют собой графическую нотацию описания структурных алгоритмов, которая иллюстрирует вложенность структур. Каждый символ Flow-формы соответствует управляющей структуре и изображается в виде прямоугольника. Для демонстрации вложенности структур символ Flow-формы может быть вписан в соответствующую область прямоугольника любого другого символа. В прямоугольниках символов содержится текст на естественном языке или в математической нотации. Размер прямоугольника определяется длиной вписанного в него текста и размерами вложенных прямоугольников. Символы Flow-форм,
соответствующие основным и дополнительным управляющим конструкциям, приведены на рис. 2.7. На рис. 2.8 представлено описание рассмотренного ранее поискового цикла с использованием Flow-формы. Хорошо видны вложенность и следование конструкций, изображенных прямоугольниками. Диаграммы Насси-Шнейдермана. Диаграммы Насси-Шнейдермана являются развитием Flow-форм.
Основное их отличие от Flow-форм заключается в том, что область обозначения условий и вариантов ветвления изображают в виде треугольников (рис. 2.9). Такое обозначение обеспечивает большую наглядность представления алгоритма.
Также, как при использовании псевдокодов, описать неструктурный алгоритм, применяя Flowформы или диаграммы Насси-Шнейдермана, невозможно (для неструктурных передач управления в этих нотациях просто отсутствуют условные обозначения). В то же время, являясь графическими, эти нотации лучше отображают вложенность конструкций, чем псевдокоды. Общим недостатком Flow-форм и диаграмм Насси-Шнейдермана является сложность построения изображений символов, что усложняет практическое применение этих нотаций для описания больших алгоритмов.
Источник: studfile.net