Структурный подход к программированию.. Лабораторная работа Структурный подход к программированию. Стадия Технический проект
Скачать 211.13 Kb.
|
ЛАБОРАТОРНАЯ РАБОТА № 4. Структурный подход к программированию. Стадия «Технический проект» Цель работы: изучить вопросы проектирования программного обеспечения. Теоретическая часть. Составляющие технического проекта ПРОЕКТ ТЕХНИЧЕСКИЙ — образ намеченного к созданию объекта, представленный в виде его описания, схем, чертежей, расчетов, обоснований, числовых показателей. Технический проект Цель технического проекта — определение основных методов, используемых при создании информационной системы, и окончательное определение ее сметной стоимости. Техническое проектирование подсистем осуществляется в соответствии с утвержденным техническим заданием. Технический проект программной системы подробно описывает: • выполняемые функции и варианты их использования; • соответствующие им документы; • структуры обрабатываемых баз данных; • взаимосвязи данных; • алгоритмы их обработки. Технический проект должен включать данные об объемах и интенсивности потоков обрабатываемой информации, количестве пользователей программной системы, характеристиках оборудования и программного обеспечения, взаимодействующего с проектируемым программным продуктом. При разработке технического проекта оформляются: • ведомость технического проекта. Общая информация по проекту; • пояснительная записка к техническому проекту. Вводная информация, позволяющая ее потребителю быстро освоить данные по конкретному проекту; • описание систем классификации и кодирования; • перечень входных данных (документов). Перечень информации, которая используется как входящий поток и служит источником накопления; • перечень выходных данных (документов). Перечень информации, которая используется для анализа накопленных данных; • описание используемого программного обеспечения. Перечень программного обеспечения и СУБД, которые планируется использовать для создания информационной системы; • описание используемых технических средств. Перечень аппаратных средств, на которых планируется работа проектируемого программного продукта; • проектная оценка надежности системы. Экспертная оценка надежности с выявлением наиболее благополучных участков программной системы и ее узких мест; • ведомость оборудования и материалов. Перечень оборудования и материалов, которые потребуются в ходе реализации проекта. Структурная схема Структурной называют схему, отражающую состав и взаимодействие по управлению частями разрабатываемого программного обеспечения. Структурная схема определяется архитектурой разрабатываемого ПО. Разработку структурной схемы программы обычно выполняют методом пошаговой детализации (см. разд. 4.1.3). Структурные схемы пакетов программ разрабатывают для каждой программы пакета по отдельности, поскольку организация программ в пакеты не предусматривает передачи управления между ними. Компонентами структурной схемы программной системы или программного комплекса могут служить программы, подсистемы, базы данных, библиотеки ресурсов и т. п. Пример структурной схемы программного комплекса для решения математических задач изображен на рис. 4.1. Рис. 4.1. Пример структурной схемы программного комплекса Как правило, для программных систем разрабатывается функциональная схема, которая дает более полное представление о проектируемом программном обеспечении с точки зрения взаимодействия его компонентов между собой и с внешней средой. Функциональная схема Функциональная схема — это схема взаимодействия компонентов программного обеспечения с описанием информационных потоков, состава данных в потоках и указанием используемых файлов и устройств. Для изображения функциональных схем используют специальные обозначения, установленные стандартом (табл. 4.1). Функциональные схемы более информативны, чем структурные. На рис. 4.2 приведена функциональная схема программного комплекса, реализующего различные методы сортировки массивов. - Рис. 4.2. Пример функциональной схемы программного комплекса Разработка алгоритмов Метод пошаговой детализации реализует нисходящий подход к программированию и предполагает пошаговую разработку алгоритма. Можно выделить следующие этапы [38]: 1. Создается описание программы в целом. Определяются основные логические шаги, требуемые для решения задачи, даже если пока неизвестно, как их выполнить. Эти логические шаги могут отражать различные физические способы решения или могут быть удобными групповыми именами для тех действий, выполнение которых представляется довольно смутно. Последовательности шагов, требуемых для решения задачи, записываются на обычном языке или на псевдокоде (см. разд. 3.5.1). 2. В общих терминах детализируется описание шагов, введенных на этапе 1. В детализированное описание может входить обозначение циклических структур, в то время как действия внутри циклов могут по-прежнему оставаться неясными. Таким образом, выполняются только общие эскизы сложных действий. 3. На этом и последующих уровнях в виде последовательных итераций производятся те же действия, что описаны на этапе 2. При каждой новой итерации уточняются детали, оставшиеся неясными после предыдущих итераций, и создаются более определенные описания. По мере выполнения итераций неопределенные детали становятся все проще и проще, так что на каком-то этапе могут быть полностью описаны. 4. Разработка завершена: в модульном виде получено описание требуемой программы. Перевод этого описания в программу на конкретном языке программирования должен быть достаточно простой задачей. Пример 4.1. Пусть требуется определить наибольшее значение в некотором наборе данных и вывести эти данные, поделенные на наибольшее значение. Скажем, если данные представляют собой последовательность чисел: 5.0, -3.24, 10.0, -1.25, 8.33, то вывод должен выглядеть следующим образом: 0.5, -0.324, 1, -0.125, 0.833 Уровень 1: Программа ввести данные найти максимум введенных данных вывести результаты Конец. Детализация 1.1. Ввод данных можно детализировать на псевдокоде следующим образом: Ввести данные: определить количество чисел Цикл-пока: не все элементы введены прочитать и запомнить значение элемента Все-цикл Детализация 1.2. Отыскание максимума можно детализировать следующим образом: Найти максимум: выбрать в качестве максимума первый элемент данных сравнить все значения с максимумом, заменяя текущий максимум на очередное значение, если оно не превысило его Детализация 1.3. Вывод результатов можно детализировать следующим образом: Цикл-пока не все элементы выведены вывести значение элемента Все-цикл Уровень 2. Он включает в себя три детализованные выше части, из которых только детализация 1.2 требует дополнительного внимания. Ее можно детализировать на псевдокоде следующим образом: Найти максимум: выбрать в качестве максимума первый элемент данных Цикл-пока не все элементы проверены сравнить все значения с максимумом Если текущее значение больше максимума Максимум = текущее значение Конец-если Конец-цикл Задача в приведенном примере проста и не требует разбиения на модули. При решении реальной задачи может потребоваться написание на псевдокоде многих уровней, чтобы довести все модули до такого состояния, при котором они окажутся готовыми для программирования. Структурные карты Методика структурных карт используется на этапе проектирования ПО для того, чтобы продемонстрировать, каким образом программный продукт выполняет системные требования. Структурные карты Константайна предназначены для описания отношений между модулями . Узлы структурных карт соответствуют модулям и областям данных, потоки изображают межмодульные связи. На диаграмме специальными узлами изображаются циклические и условные вызовы модулей, а потоки проходят через эти специальные узлы. Потоки, изображающие межмодульные связи по данным и управлению, также изображаются на диаграмме специальными узлами, а стрелками указываются направления потоков. На рис. 4.3 приведены основные компоненты структурных карт Константайна. Модуль является базовым элементом структурной карты. Различают следующие типы модулей (рис. 4.4): • модуль (рис. 4.4, а); • подсистема — детализированный модуль или программа. Может использоваться повторно любое число раз (рис. 4.4, б); • библиотека — совокупность подпрограмм, размещенных в модуле отдельно от данной системы (рис. 4.4, в); • область данных — описывает модули, содержащие исключительно области глобальных/распределенных данных (рис. 4.4, г). Отдельные части программной системы (программы, подпрограммы) могут вызываться последовательно, параллельно или как сопрограммы (рис. 4.5). Для моделирования условных и циклических вызовов применяются следующие узлы (рис. 4.6): • условный узел применяется для моделирования конструкций IF-THEN-ELSE (на диаграмме из узла выходят два потока) и IF-THEN (из узла выходит один поток). Условный узел изображается в виде ромба, потоки — альтернативные вызовы — изображаются выходящими из него; • итерационный узел используется для того, чтобы показать, что вызываемый модуль выполняется в цикле. Он изображается полуокружностью со стрелкой с выходящими из него потоками. Если необходимо показать, что подчиненный модуль вызывается однократно, это осуществляется указанием цифры «1» рядом со стрелкой, обозначающей вызов модуля-наследника. Связи по данным и управлению между модулями (передаваемые как параметры) обозначают стрелками, параллельными дуге вызова, которые показывают направления связей (рис. 4.7). Пример 4.2. Разработать структурную карту Константайна для задачи сортировки одномерного массива с помощью алгоритмов Пузырька, прямого выбора и Шелла. Программа состоит из модулей Меню, Методов сортировки и Вывода результата. Пользователь выбирает нужный метод, вводит массив и получает в результате отсортированный массив. Рис. 4.8. Пример структурной карты Константайна Результат приведен на рис. 4.8. Техника структурных карт Джексона основана на методе структурного программирования Джексона, который выявляет соответствие между структурой потоков данных и структурой программы. Основное внимание в методе сконцентрировано на соответствии входных и выходных потоков данных. Структуры на диаграммах Джексона строятся из четырех основных компонентов, представленных на рис. 4.9: • операция — блок кодов, имеющий один вход и один выход (рис. 4.9, а) • следование — последовательное выполнение операций слева направо (рис. 4.9, б); • выбор — выполнение одной из операций в зависимости от выполнения условия (рис. 4.9, в); • итерация — многократное выполнение блока (рис. 4.9, г). Пример 4.3. У менеджера торговой фирмы имеется файл, содержащий записи о принтерах со следующими полями: фирма-производитель, марка, скорость печати, стоимость, количество единиц на складе. Эти поля образуют структуру входных данных. По запросу менеджера программа выдает сведения о нужных покупателю принтерах в соответствии с критерием поиска. Критерием может быть: цена, скорость или фирма-производитель. Выходными данными является список, содержащий наименования выбранных принтеров. С точки зрения структурного программирования Джексона алгоритм программы будет следующим: Программа Цикл-пока не конец файла Прочитать запись Сравнить заданные поля с критерием поиска Если совпали Сохранить в выходной список Конец-если Конец-цикл Вывод результирующего списка Конец-программа Рис. 4.10. Структурная карта Джексона Полученная структурная карта Джексона приведена на рис. 4.10. Порядок выполнения работы 1. На основе технического задания из лабораторной работы № 1 и спецификаций из лабораторной работы № 2 разработать уточненные алгоритмы программ, составляющих заданный программный модуль. Использовать метод пошаговой детализации . 2. На основе уточненных и доработанных алгоритмов разработать структурную схему программного продукта . 3. Разработать функциональную схему программного продукта. 4. Представить структурную схему в виде структурных карт Константайна. 5. Представить структурную схему в виде структурных карт Джексона. 6. Оформить результаты, используя MS Office или MS Visio в виде технического проекта. 7. Сдать и защитить работу. Защита отчета по лабораторной работе Отчет по лабораторной работе должен состоять из: 1. Структурной схемы программного продукта. 2. Функциональной схемы. 3. Алгоритма программы. 4. Структурной карты Константайна. 5. Структурной карты Джексона. 6. Законченного технического проекта программного модуля. |