Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Темы 2.5.-2.6. Структурное программирование. Структурирование. Методы структурирования программ

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

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

2. Структурное программирование позволяет значительно сократить число вариантов построения программы по одной и той же спецификации, что приводит к значительному снижению сложности программы.

3. В структурированных программах логически связанные операторы находятся визуально ближе, а слабо связанные дальше, что позволяет обходиться без блок-схем и других графических форм изображения алгоритмов.

4. Сильно упрощается процесс тестирования и отладки структурированных программ.

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

6. ясность и читаемость программ;

7. более высокую эффективность за счет глобальной оптимизации программы.

СП сосредотачивается на одном из наиболее подверженных ошибками факторов программирования – логики программы и включает три главные составляющие:

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

Метод проектирования сверху - вниз предусматривает вначале определение задачи, а затем постепенное уточнение структуры путем внесения более мелких деталей. Проектирование представляет собой последовательность шагов такого уточнения. На каждом шаге необходимо выявить функции, которые нужно воплотить, т.е. данная задача разбивается на ряд, каждому из них будет соответствовать один модуль. Именно такой традиционный и по существу иерархический подход применяется при создании сложных структур в других областях (в технике, в серийном производстве). Далее следует описать данные, указывая их структуру и основные процессы обработки. Это описание должно включать тщательно отработанные примеры, убедительно демонстрирующие функции системы и их наиболее существенные варианты – такие примеры будут полезны позже на стадии тестирования. При описании модуля должны быть описаны его тестовые данные. Тестирование программы неизбежно, поэтому выявление требований к тестированию, заранее на стадиях проектирования, являются хорошей практикой. Логическая проверка фрагментов программы должна уменьшить необходимость тестирования конечной программы.

Основное преимущество такого метода работы то, что он обеспечивает создание документации.

2. модульное программирование. Чтобы преуспеть в структурном программировании программу следует представить в виде модулей.

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

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

При этом преследуется две цели:

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

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

Оптимальный размер модуля 60 строк.

Независимость. Следует стремиться к независимости между модулями или программами.

Для достижения этого требуется, чтобы модуль не зависел от:

1) источника входных данных;

2) местоназначения выходных данных;

3) от предистории.

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

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

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

Использование модулей приводит к уменьшению сложностей, факторы сложности при этом включают три составляющие:

1) функциональная сложность – обусловлено тем, что один модуль выполняет слишком много функций;

2) распределенная сложность – это сложность идентификации общей функции распределенной между несколькими модулями за счет чего утрачивается возможность уменьшения сложности всей программы при модульном программировании;

3) сложность связи – определяется сложностью взаимодействия модулей, при использовании общих данных.

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

Этот принцип положен в основу проектирования схем, где любая логическая структура может быть создана из элементарных структур:

­ структура последовательности – это формализация того, что операторы программы выполняются в порядке их появления в программе, пока что-то не изменит их последовательность.

­ структура выбора – это выбор одного из двух действий исходя из выполненного некоторого условия.

­ структура повторения – используется для повторного выполнения группы команд до тех пор, пока не выполниться некоторое условие.

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

Структурирование.

В основу структурирования положены следующие простые правила:

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

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

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

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

Чтобы обойтись без произвольных передач управления в программе, там где это возможно, лучше не использовать операторы GOTO, RETURN. Характерной особенностью структурированной программы является не столько отсутствие этих операторов, а сколько наличие жесткой структуры ее организации. Если текст программы будет занимать несколько десятков страниц, то восприятие такой программы будет затрудненно, поэтому рекомендуется вести структурирование текста программы (например, программа состоит из 80 страниц исходного текста, необходимо этот исходный текст заменить на текст, в котором отражаются наиболее важные, в функциональном смысле, фразы в виде сегментов). Если расписать весь программный комплекс крупными сегментами, то описание всего комплекса может занять всего одну страницу, а это наглядно и удобно.

Графическое представление программных алгоритмов имеет широкое распространение благодаря наглядности. Граф-схема представляет собой граф, состоящий из вершин, соединенных направленными стрелками-дугами.

1. вершина –

2. функциональный оператор –

3. условный или объединяющий операторы –

4. останов – конечный оператор

5. дуги, определяющие последовательность выполнения действий

Программа называется простой, если ее граф-схема удовлетворяет следующим условиям: 1) один вход и один выход,

2) через каждую ее вершину проходит хотя бы один путь от входа к выходу.

Сложная программа обычно имеет больше, чем один вход или выход.

Если комплекс программ большой и блок-схема программы большая необходимо выделить в ней подграфы, достаточно простые и понятные по структуре.

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

­ операторов и операндов программ, соответствующих компонентам текста программ на языке программирования;

­ программных модулей, оформляемых, как законченные компоненты текста программ;

­ функциональных групп программ или пакета ПП;

­ комплекса программ, оформляемого как завершенное ПС определенного целевого назначения.

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

Иногда основному проектированию сверху – вниз сопутствует разработка компонент снизу – вверх. Разработка начинается с модулей нижнего уровня, далее переходят к разработке модулей следующего уровня и т.д.

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

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

Эти правила состоят в следующем:

1. правило связи программных модулей по управлению.

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

2. правило связи программных модулей по информации.

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

3. типовая структура программного модуля.

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

Типовая структура модуля в общем случае включает:

1) заголовок;

2) описание переменных;

3) тело модуля;

4) точки входа и выхода.

Элементарные базовые структуры. Любую программу можно синтезировать на основе элементарных базовых конструкций трех типов:

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

2. альтернатива состоит в проверке некоторого условия.

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

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

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

 

<== предыдущая лекция | следующая лекция ==>
Темы 2.3.-2.4. Выбор и обоснование языка программирования. Использование библиотек программ, встроенные функции | Тема 2.7. Объектно-ориентированное программирование
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 2421; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.085 сек.