Философия даосизма. Структурный подход. Проектирование программных модулей. FlowДиаграммы. Диаграммы Нессишнайдермана
Скачать 1.47 Mb.
|
Структурный подход. Проектирование программных модулей. Flow-Диаграммы. Диаграммы Несси-шнайдермана.АрхитектураПрограммного обеспечения – это совокупность базовых концепций (принципов) его построения Программного средства – это его строение, как оно видно извне его, т.е. представление ПС как системы, состоящей из некоторой совокупности взаимодействующих подсистем. По количеству пользователей различаютМногопользовательскую архитектуру Однопользовательскую архитектуру
Пакеты программ Программные комплексы Программные системы Структуры данныхЭто множество элементов данных и связей между ними Классификация структур данныхСтруктуры данных Простые Базовые Статические Файловые Дина- мические Полу статические Числовые Символьные Логические Перечисление Интервал Указатели Вектор Массивы Множества Записи Таблицы Стеки Очереди Деки Строки Линейные или разветвленные связанные списки Графы Деревья Последовательные Прямого доступа Комбинированного доступа Организованные разделами Предварительное проектирование включаетСтруктурирование системы Моделирование управления Декомпозиция подсистем на модули Классификация методов разработки структуры программМетоды разработки структуры программ Нисходящие Восходящие Классический подход Нисходящая разработка Нисходящая реализация Классический подход Восходящая разработка Восходящая реализация Архитектурный подход Конструктивный подход разработка реализация разработка реализация целенаправленная Структурная схемаэто схема, отражающая состав и взаимодействие по управлению частей разрабатываемого ПО определяется архитектурой разрабатываемого ПО Компоненты структурной схемыПрограммы Подсистемы Базы данных Библиотеки ресурсов Структурная схемаРешение задачи Оформление сделки Ввод и накопление данных Поиск данных Формирование отчетных документов Спецификации процессовПсевдокод Блок-схема алгоритма Flow - форма Диаграмма Насси-Шнейдермана Краткое текстовое описание Псевдокод
ПсевдокодПроцесс: Проверка и внесение данных о клиенте Вход: Информация о клиенте по его звонку Выход: Формирование данных о клиенте в БД Алгоритм: 1. Проверить в накопителе наличие данных о клиенте 2 . Если данные отсутствуют ТО внести новую запись о клиенте в БД 3. Вывести данные о клиенте на экран ПсевдокодПроцесс: Внесение заказа Вход: Проект заказа, Данные о клиенте, Данные о продуктах Выход: Заказ Алгоритм: 1. Рассмотрение списка продукции 2. Рассмотрение других заказов 3. Внести данные в проект заказа 4. Произвести расчет услуг по заказу 5. Представить проект заказа клиенту 6. ЕСЛИ клиент не удовлетворен сформированным заказом ТО 6.1. Произвести его корректировку 6.2. Вернуться к пункту 4 Схемы алгоритмов (ГОСТ 19.702-90)
Схемы алгоритмов
Flow-диаграммыFlow-диаграммы Flow-диаграммы (flow-формы) представляют собой графическую нотацию описания структурных алгоритмов, которая иллюстрирует их вложенность. Они базируются на основных идеях структурного программирования и позволяют определять потоки управления с помощью специальных иерархически организованных схем. Flow-диаграммыFlow-диаграммы Flow-диаграммы (flow-формы) Каждый символ Flow-формы имеет вид прямоугольника и может быть вписан в любой внутренний прямоугольник любого другого символа. Символы помечаются с помощью предложений на естественном языке или с использованием математической нотации. Главная особенность: отсутствие стрелок. Flow-диаграмма алгоритма сортировки «Пузырек» МодульностьМодуль – отдельная, функционально законченная программная единица, которая может применяться самостоятельно либо быть частью программы. «Модульность – свойство ПО, обеспечивающее интеллектуальную возможность создания сколь угодно сложной системы» Г.Майерс Признаки модуляреализует одну или несколько функций, т.е. выполняет какое-то действие; имеет определенную логическую структуру, т.е. определяет его внутренний алгоритм (то, как модуль выполняет функцию); используется в одном или нескольких контекстах – описывает конкретное использование модуля. Принципы модульного подходаОдин из фундаментальных принципов структурного проектирования заключается в том, что большая система должна быть расчленена на обозримые модули. При этом существенным является то, что это расчленение должно быть выполнено таким образом, чтобы модули были как можно более независимы (критерий сцепления - coupling), и чтобы каждый модуль выполнял единственную (связанную с общей задачей) функцию (критерий связности - cohesion). Принцип информационной закрытостиСодержание модулей должно быть скрыто друг от друга Клиенты Интерфейс «Секрет» Алгоритм Структура данных Реализация интерфейса Размещение ресурса Информационная закрытость означаетВсе модули независимы, обмениваются только информацией, необходимой для работы; Доступ к операциям и структурам данных модуля ограничен Достоинства информационной закрытостиОбеспечивается возможность разработки модулей различными независимыми коллективами Обеспечивается легкая модификация системы Связность модуля (cohesion) – это мера зависимости его частейЧем выше связность модуля, тем лучше результат проектирования Для измерения связности используют понятие силы связности (СС). Существует 7 типов связности Связность модуляСвязность по совпадению (СС=0). В модуле отсутствуют явно выраженные внутренние связи. Логическая связность (СС=1). Части модуля объединены по принципу функционального подобия Временная связность (СС=3). Части модуля не связаны, но необходимы в один и тот же момент времени. Связность модуляПроцедурная связность (СС=5). Части модуля связаны порядком выполняемых действий, реализующих сценарий поведения. Коммуникативная связность (СС=7). Части модуля связаны по данным (работают с одной и той же структурой данных) Связность модуляИнформационная (последовательная) связность (СС=9). Выходные данные одной части модуля используются как входные данные другой части модуля. Функциональная связность (СС= 10). Части модуля вместе реализуют одну функцию. Характеристика типов связности модуляСвязность модуляТаким образом, связность является мерой функциональной зависимости объектов (исполняемых операторов, областей данных и т.д.) внутри одного модуля. В хорошем проекте связность каждого модуля является высокой (последовательность введенных выше определений уровней связности соответствует направлению от лучшей связности к худшей). Вместе со сцеплением, связность является одним из лучших критериев оценки качества проекта. Сцепление модулей (coupling) - этомера взаимозависимости модулей по данным внешняя характеристика модуля, которую желательно уменьшать Сцепление модулейСлабое сцепление между модулями служит признаком хорошо спроектированной системы по следующим причинам: уменьшение количества соединений между двумя модулями приводит к уменьшению вероятности появления “волнового эффекта” (ошибка в одном модуле влияет на работу других модулей); минимизация риска появления “эффекта ряби” (внесение изменений, например, при исправлении ошибки, приводит к появлению новых ошибок), т.к. изменение влияет на минимальное количество модулей; при сопровождении модуля отсутствие необходимости беспокоиться о внутренних деталях других модулей; упрощение системы для понимания, насколько это возможно. Сцепление модулейСлабое сцепление может быть достигнуто за счет комбинирования трех следующих способов действий: удаления необязательных связей; уменьшения количества необходимых связей; упрощением необходимых связей. Сцепление модулейСпециалистами предлагаются следующие практические рекомендации для ослабления сцепления модулей: Создавайте минимальные по количеству параметров межмодульные связи. Создавайте прямые (а не косвенные) межмодульные связи, поскольку интерфейс между двумя модулями наиболее понятен (и, следовательно, менее сложен), если человек может постигнуть его сразу без предварительной ссылки к некоторым другим информационным объектам. Создавайте локализованные связи (например, значения списка параметров вычисляйте непосредственно перед вызовом модуля). Создавайте явные связи. Красноречивым примером неявной связи является взаимодействие модуля А с модулем В за счет модификации области данных из В: для того, чтобы человек, сопровождающий модуль В понял, за счет чего модифицируется эта область данных, он будет должен проделать огромную работу. Создавайте гибкие связи для облегчения модификаций. Виды сцепленияСцепление по данным (data coupling). Один модуль вызывает другой. Входные и выходные параметры вызываемого модуля – простые элементы данных. А В Элементы данных Виды сцепленияСцепление по образцу (stamp coupling). Один модуль вызывает другой. В качестве параметров используются структуры данных. А В Структуры данных Виды сцепленияСцепление по управлению (control coupling). Один модуль управляет функционирование другого (с помощью флагов или переключателей), посылая ему управляющие данные. начало Флаг конец А В Флаг Виды сцепленияСцепление по внешним ссылкам (external coupling). Модули ссылаются на один и тот же глобальный элемент данных. В С А N M Элемент данных Виды сцепленияСцепление по общей области (common coupling). Модули разделяют одну и ту же глобальную структуру данных. В С А N M Структура данных Виды сцепленияСцепление по кодам (code coupling). Команды перемежаются друг с другом Независимое сцепление. Модули не вызывают друг друга и не работают с общими данными. Виды сцепленияНеобходимо отметить, что любые два модуля могут быть сцеплены более чем одним способом. В этом случае тип их сцепления определяется худшим типом сцепления. Например, если два модуля сцеплены по образцу и общей области, то они характеризуются как сцепленные по общей области. Они по-прежнему сцеплены по образцу, но это сцепление выше, чем сцепление по общей области. Характеристики основных видов сцепленияДиаграммы Насси-Шнейдермана Дальнейшее развитие FLOW-формы получили в диаграммах Насси-Шнейдермана. Диаграммы Насси — Шнейдермана имеют ряд преимуществ перед блок-схемами при разработке структурированных алгоритмов и программ: Запись является более компактной. Изобразив алгоритм или программу в виде диаграммы Насси — Шнейдермана, можно быть гарантировано уверенным в том, что принципы структурного программирования соблюдены. Диаграммы Насси-Шнейдермана Диаграммы Насси — Шнейдермана удобнее использовать для пошаговой детализации задачи, так как они тоже строятся по принципу пошаговой детализации — изначально диаграмма представляет собой один прямоугольник, затем в нём рисуется некоторая структура управления, в которой имеется несколько прямоугольников, и далее с каждым прямоугольником может быть проделана та же операция. наглядность; отсутствие соединительных линий со стрелками, что помогает избежать случайных ошибок; простота использования. Диаграммы Насси-Шнейдермана Общим недостатком Flow-форм и диаграмм Насси —Шнейдермана является сложность построения изображений символов, что затрудняет практическое применение этих нотаций для описания больших алгоритмов. Условные обозначения элементов в диаграммах Насси — Шнейдермана Все элементы диаграммы Насси — Шнейдермана имеют прямоугольную форму и различаются только внутренним содержимым. Блоки с разветвлениемБлоки с разветвлением Блок с разветвлением используется, когда в алгоритме возможны два варианта действий, а выбор того или иного варианта действия зависит от некоторого условия: Такая алгоритмическая конструкция (ветвление) представляется двумя смежными блоками действий; действие слева выполняется, если условие верно, действие справа — если условие неверно. Возможно также неполное ветвление, при котором некоторое действие выполняется не всегда, а только при определенном условии: Блок множественного выбора Блок множественного выбора используется, когда существует несколько вариантов возможных действий, выбор которых зависит от значения некоторого выражения Например, в задаче выбора разных видов обуви для разных видов спорта: Блок цикла с предусловием Блок цикла с предусловием используется тогда, когда должна быть многократно выполнена некоторая последовательность действий, причем перед каждым выполнением проверяется некоторое условие: Действия, которые повторяются (так называемое “тело цикла”), представлены самостоятельным блоком внутри блока цикла с предусловием Например, для задачи: “Накачать спущенную велосипедную шину”: Блок цикла с постусловием Блок цикла с постусловием используется, когда в алгоритме действия должны повторяться до наступления определенного условия (условие проверяется после выполнения действий ). Действия в цикле с постусловием всегда выполняются хотя бы один раз, потому что проверка осуществляется в конце цикла. Например, в задаче приготовления теста для блинов: Цикл с заданным количеством повторений тела цикла (в языках программирования его называют “цикл с параметром” или “цикл со счетчиком”) — это тоже цикл с предусловием. Действия повторяются определенное количество раз и отсчитываются перед каждым выполнением. Блок подпрограммыБлок подпрограммы Блок подпрограммы используется в случаях, когда некоторый процесс в алгоритме слишком большой, чтобы изображать его на диаграмме, или когда какие-то блоки действий используются несколько раз в разных местах одной и той же диаграммы. Перечисленные блоки могут произвольным образом вкладываться один в другой. Например, для задачи стрижки газона около дома диаграмма алгоритма ее решения может быть оформлена так: Диаграмма, иллюстрирующая действия в подпрограмме, оформляется отдельно. Подпрограмма “Очистить травосборник” Диаграмма Насси-Шнайдермана алгоритма сортировки «Пузырек» Методология структурных картМетодика структурных карт используется на этапе проектирования ПО для того, чтобы продемонстрировать, каким образом программный продукт выполняет системные требования. При этом наиболее часто применяются две техники: структурные карты Константайна (Constantine), предназначенные для описания отношений между модулями, и структурные карты Джексона (Jackson), предназначенные для описания внутренней структуры модулей. Методология структурных картСтруктуру программной системы составляют модули, которые в любом языке программирования имеют следующие общие свойства: модуль имеет имя, по которому к нему можно обращаться как к единому фрагменту; модуль состоит из множества операторов языка программирования, записанных последовательно; модуль может принимать и/или передавать данные как параметры в вызывающей последовательности или связывать данные через фиксированные ячейки или общие области. Структурные карты КонстантайнаСтруктурные карты Константайна представляют собой модель отношений между модулями программы. Узлы структурных карт соответствуют модулям и областям данных, потоки изображают межмодульные связи. На диаграмме специальными узлами изображаются циклические и условные вызовы модулей, а потоки проходят через эти специальные узлы. Потоки, изображающие межмодульные связи по данным и управлению, также изображаются на диаграмме специальными узлами, а стрелками указываются направления потоков. Элементы структурных карт Константайна Типы модулей Модуль является базовым элементом структурной карты. Подсистема - детализированный модуль или программа. Может использоваться повторно любое число раз. Библиотека - совокупность подпрограмм, размещенных в модуле отдельно от данной системы. Область данных - описывает модули, содержащие исключительно области глобальных/распределенных данных Отдельные части программной системы (программы, подпрограммы) могут вызываться последовательно, параллельно или как сопрограммы. Типы вызовов модулей Для моделирования условных и циклических вызовов применяются следующие узлы: условный узел применяется для моделирования конструкций IF-THEN-ELSE (на диаграмме из узла выходят два потока) и IF-THEN (из узла выходит один поток). Условный узел изображается в виде ромба, потоки — альтернативные вызовы — изображаются выходящими из него; итерационный узел используется для того, чтобы показать, что вызываемый модуль выполняется в цикле. Он изображается полуокружностью со стрелкой с выходящими из него потоками. Условные и циклические вызовы модулей: циклический; условный; однократный Связи по данным и управлению между модулями (передаваемые как параметры) обозначают стрелками, параллельными дуге вызова, которые показывают направления связей. Связь по данным Связь по управлению Пример: Разработать структурную карту Константайна для задачи сортировки одномерного массива с помощью алгоритмов Пузырька, прямого выбора и Шелла. Программа состоит из модулей Меню, Методов сортировки и Вывода результата. Пользователь выбирает нужный метод, вводит массив и получает в результате отсортированный массив. Структурные карты ДжексонаТехника структурных карт Джексона основана на методе структурного программирования Джексона, который выявляет соответствие между структурой потоков данных и структурой программы. Основное внимание в методе сконцентрировано на соответствии входных и выходных потоков данных. Структурные карты ДжексонаПо аналогии со структурными картами Константайна диаграмма Джексона может включать объекты следующих типов: СТРУКТУРНЫЙ блок (базовая компонента методологии) представляет частную функцию или блок кодов с одним входом и одним выходом. ПРОЦЕДУРНЫЙ блок является специальным видом структурного блока, представляющим вызов ранее определенной процедуры. БИБЛИОТЕЧНЫЙ блок аналогичен процедурному и представляет вызов библиотечного модуля. Структурные карты ДжексонаДля взаимоувязывания блоков используются связи следующих типов: последовательная связь, обеспечивающая последовательное выполнение слева направо; параллельная связь, обеспечивающая одновременное выполнение блоков; условная связь, обеспечивающая выбор одной из альтернатив; итерационная связь, обеспечивающая выполнение блока в цикле. Структуры на диаграммах Джексона строятся из четырех основных компонентов: Операция — блок кодов, имеющий один вход и один выход Следование — последовательное выполнение операций слева направо Выбор — выполнение одной из операций в зависимости от выполнения условия Итерация — многократное выполнение блока У менеджера торговой фирмы имеется файл, содержащий записи о принтерах со следующими полями: фирма-производитель, марка, скорость печати, стоимость, количество единиц на складе. Эти поля образуют структуру входных данных. По запросу менеджера программа выдает сведения о нужных покупателю принтерах в соответствии с критерием поиска. Критерием может быть: цена, скорость или фирма-производитель. Выходными данными является список, содержащий наименования выбранных принтеров. С точки зрения структурного программирования Джексона алгоритм программы будет следующим: Программа Цикл-пока не конец файла Прочитать запись Сравнить заданные поля с критерием поиска Если совпали Сохранить в выходной список Конец-если Конец-цикл Вывод результирующего списка Конец-программа |