Стратегия нисходящего структурного программирования (сверху-вниз)

Пример абстракции и уточнения.

Систему хранения идентификаторов пользователей Интернет-магазина можно представить как множество целых чисел, забыв о том, что эти числа — идентификаторы пользователей, и о том, что все это как-то связано с Интернет-магазином.

2) принцип формализации. Этот принцип предполагает строгий методический подход и дает основания для доказательства правильности программ.

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

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

4) принцип иерархического упорядочения, т.е. не просто "разделяй и

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

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

Это были основные цели и принципы технологии структурного программирования

Различают следующие стратегии структурного программирования:

"сверху-вниз"- нисходящая;

"снизу-вверх"- восходящая;

"изнутри-наружу";

"снаружи-внутрь".

--------------------------------------------------------¬

¦ Структурное программирование - модульное нисходящее ¦

¦ пошаговое проектирование алгоритма и структур данных ¦

L--------------------------------------------------------

Она включает три составляющие:

1) нисходящая разработка;

2) структурное кодирование (программирование);

3) сквозной контроль.

Нисходящая разработка - это подход к разработке программного обеспечения, при котором оно разбивается на программные модули (подпрограммы, процедуры, функции), образующие многоуровневую структуру. Не путать с понятием «модуль», которое используется для определения синтпкстической конструкции языка программирования, например UNIT в Borland Pascal.

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

При этом проектирование программного комплекса и кодирование программных модулей, входящих в программный комплекс, ведется сверху вниз.

Сначала проектируется модуль основной программы, далее подпрограммы, вызываемые основным модулем, затем подпрограммы, вызываемые этими уже спроектированными подпрограммами, и т.д. двигаясь в направлении от блоков высшего уровня к более низшего.

Основной принцип: разработка алгоритма начинается сверху с самых общих сведений о задаче и производится по уровням (шагам) вниз до окончательной записи алгоритма или программы.

Вначале принимаются общие решения, более мелкие оставляются.

Каждый шаг детализации не должен быть слишком большим - не нужно стремиться к охвату сразу всех деталей.

На верхнем уровне алгоритм представляется в виде некоторой иерархической схемы, элементы которой описываются на естественном для данной проблемы языке.

При этом на каждом шаге указывается что надо делать, но не раскрывается то, как это должно быть сделано.

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

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

Этот процесс детализации повторяется необходимое число раз.

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

Участки алгоритма, требующие детализации, обозначаются блоками "детализируемая программа".

Полностью заимствованные части алгоритма обозначаются блоками "предопределенный процесс"

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

Вторая составляющая структурного программирования – структурное кодирование.

Структурное кодирование - это метод кодирования (программирования), предусматривающий создание понятных, простых и удобочитаемых программных модулей на требуемом языке программирования.

Свойства программных модулей:

1) должен иметь один вход и один выход;

2) должен решать самостоятельно задачу по принципу "один программный модуль - одна функция".

3) работа программного модуля не должна зависеть:

а) от входных данных;

б) от того, какому программному модулю предназначены его выходные данные;

в) от предыстории вызовов программного модуля.

4) программный модуль может вызывать другой модуль;

5) программный модуль должен возвращать управление модулю, который его вызвал;

6) размер программного модуля желательно ограничивать одной-двумя

страницами исходного текста, т.е. не более 100 операторов

7) каждый модуль должен начинаться с комментария, объясняющего

его назначение, назначение переменных, передаваемых в модуль и из

него, модулей, которые его вызывают, и модулей, которые вызываются

из него

8) Идентификаторы всех переменных должны быть смысловыми

9) Родственные группы идентификаторов должны начинаться с одинакового префикса

10) Нужно использовать только стандартные конструкции (выбор, цикл, выход, блок)

11) В одной строке нужно записывать не более одного оператора

12) не допускать вложенности операторов if более 3-х уровней

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

Существенные преимущества стратегии:

1. Возможность начала программирования почти одновременно и параллельно с разработкой соответствующего алгоритма.

2. Легко модифицировать программу по уровням.

3. Упрощается отладка т.к. она ведется также по уровням.

4. Выполнять разработку алгоритма можно несколькими программистами.

Недостатки:

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

2. Сложно использовать готовые модули, разработанные ранее.

Примеры нисходящей разработки программы для решения вычислительной задачи.

Пример 1.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: