Структурный подход. Содержание лекции разработка структурной и функциональной схем проектирование структур данных. Цель лекции
![]()
|
Структурный подход. Проектирование программного обеспечения Содержание лекции: разработка структурной и функциональной схем; проектирование структур данных. Цель лекции: ознакомиться с проектированием ПО при структурном подходе. Процесс проектирования сложного программного обеспечения начинают с уточнения его структуры, т. е. определения структурных компонентов и связей между ними. Результат уточнения структуры может быть представлен в виде структурной и/или функциональной схем и описания (спецификаций) компонентов. Структурной называют схему, отражающую состав и взаимодействие по управлению частей разрабатываемого ПО. Структурные схемы пакетов программ не информативны, поскольку организация программ в пакеты не предусматривает передачи управления между ними. Поэтому структурные схемы разрабатывают для каждой программы пакета, а список программ пакета определяют, анализируя функции, указанные в техническом задании. Разработку структурной схемы самого простого вида ПО - программы, включающей в качестве структурных компонентов только подпрограммы и библиотеки ресурсов, выполняют методом пошаговой детализации. Структурными компонентами программной системы (комплекса) служат программы, библиотеки ресурсов, подсистемы, базы данных. Структурная схема программного комплекса демонстрирует передачу управления от программы-диспетчера соответствующей программе (рисунок 11.1а). ![]() ![]() ![]() Рисунок 11.1 - Пример схем программного комплекса: а) структурной; б) функциональной Структурная схема программной системы показывает наличие подсистем или других структурных компонентов. В отличие от программного комплекса отдельные части (подсистемы) программной системы интенсивно обмениваются данными между собой и с основной программой. Структурная схема программной системы этого не показывает (рисунок 11.2а). ![]() ![]() ![]() Рисунок 11.2 – Пример схем программной системы: а) структурной; б) функциональной Более полное представление о проектируемом ПО с точки зрения взаимодействия его компонентов между собой и с внешней средой дает функциональная схема. Функциональная схема (схема данных, ГОСТ 19.701-90) - схема взаимодействия компонентов ПО с описанием информационных потоков, состава данных в потоках и указанием используемых файлов и устройств. Для изображения функциональных схем используют специальные обозначения, установленные стандартом. Основные обозначения схем данных приведены в таблице Г.1. Функциональные схемы более информативны, чем структурные. На рисунках 11.1б и 11.2б приведены функциональные схемы программных комплексов и систем. Все компоненты структурных и функциональных схем должны быть описаны. Следует тщательно прорабатывать спецификации межпрограммных интерфейсов, так как от качества их описания зависит количество самых дорогостоящих ошибок, к которым относятся ошибки, обнаруживаемые при комплексном тестировании. Структурный подход к программированию изначально предлагал осуществлять декомпозицию программ методом пошаговой детализации. Результат - структурная схема программы, т.е. многоуровневая иерархическая схема взаимодействия подпрограмм по управлению. Минимально такая схема отображает два уровня иерархии (показывает общую структуру программы). Тот же метод позволяет получить структурные схемы с большим количеством уровней. Разбиение на модули выполняется эвристически, исходя из рекомендуемых размеров модулей (20-60 строк) и сложности структуры (2-3 вложенных управляющих конструкции). Для анализа технологичности иерархии модулей используют методики Константайна или Джексона. На структурной карте Константайна отношения между модулями представляют в виде графа, вершинам которого соответствуют модули и общие области данных, а дугам - межмодульные вызовы и обращения к общим областям данных. Различают четыре типа вершин: модуль – подпрограмма; подсистема – программа; библиотека - совокупность подпрограмм, размещенных в отдельном модуле; область данных - специальным образом оформленная совокупность данных, к которой возможно обращение извне. При этом отдельные части программной системы могут вызываться последовательно, параллельно или как сопрограммы. Практически одновременно появились методики проектирования ПО Джексона и Варнье-Орра, также основанные на декомпозиции данных. Обе методики предназначены для создания «простых» программ, работающих со сложными, но иерархически организованными структурами данных. При разработке программных систем предлагается вначале разбить систему на отдельные программы, а затем использовать эти методики. Они могут использоваться только в том случае, если данные разрабатываемых программ могут быть представлены в виде иерархии или совокупности иерархий. Методика Джексона основана на поиске соответствий структур исходных данных и результатов. Однако при ее применении возможны ситуации, когда на каких-то уровнях соответствия отсутствуют. Например, записи исходного файла сортированы не в том порядке, в котором соответствующие строки должны появляться в отчете. Такие ситуации были названы «столкновениями». Методика Варнье-Орра базируется на том же положении, что и методика Джексона, но основными при построении программы считаются структуры выходных данных и, если структуры входных данных не соответствуют структурам выходных, то их допускается менять. Таким образом, ликвидируется основная причина столкновений. Однако на практике не всегда существует возможность пересмотра структур входных данных: эти структуры уже могут быть строго заданы, например, если данные получены при выполнении других программ, поэтому эту методику применяют реже. Под проектированием структур данных понимают разработку их представлений в памяти [6]. Основными параметрами, которые необходимо учитывать при проектировании структур данных, являются: вид хранимой информации каждого элемента данных - определяет тип соответствующего поля памяти; связи элементов данных и вложенных структур, а также совокупность операций над ними - определяют структуры памяти, используемые для представления данных; время хранения данных структуры («время жизни») - учитывается при размещении данных в статической или динамической памяти, а также во внешней памяти. Различают две базовые структуры организации данных в оперативной памяти: векторную и списковую. Векторная структура - последовательность байт памяти, которые используются для размещения полей данных. Последовательное размещение организованных структур данных позволяет осуществлять прямой доступ к элементам: по индексу (в массивах или строках) или по имени поля (в записях или объектах). Однако выполнение операций добавления и удаления элементов для размещения элементов массивов требует осуществления многократных сдвигов элементов. Расположение векторных представлений в динамической памяти позволяет существенно увеличить эффективность использования оперативной памяти. Списковые структуры строят из специальных элементов, включающих помимо информационной части один или несколько указателей - адресов элементов или вложенных структур, связанных с этим элементом. Размещая их в динамической памяти, организуют различные внутренние структуры. Обычно векторное представление используют для хранения статических множеств, таблиц (одномерных и многомерных: матриц, строк, записей), а также графов, представленных матрицей смежности, матрицей инцидентности или аналитически [10]. Списковое представление удобно для хранения динамических (изменяемых) структур и структур со сложными связями. Современные операционные системы поддерживают два способа организации данных во внешней памяти: последовательный и с прямым доступом. При последовательном доступе к данным возможно выполнение только последовательного чтения элементов данных или последовательная их запись (работа с клавиатурой или дисплеем, обработка текстовых файлов или файлов, формат записей которых меняется в процессе работы). Прямой доступ возможен только для дисковых файлов, обмен информацией с которыми осуществляется записями фиксированной длины (двоичные файлы С или типизированные файлы Pascal). Адрес записи такого файла можно определить по ее номеру, что и позволяет напрямую обращаться к нужной записи. В оперативной памяти размещают данные, к которым необходим быстрый доступ как для чтения, так и для их изменения; во внешней - данные, которые должны сохраняться после завершения программы. Возможно, что во время работы данные целесообразно хранить в оперативной памяти для ускорения доступа к ним, а при ее завершении - переписывать во внешнюю память для длительного хранения. Именно этот способ используют большинство текстовых редакторов: во время работы с текстом он весь или его часть размещается в оперативной памяти, откуда по мере надобности переписывается во внешнюю память. В подобных случаях разрабатывают два представления данных: в оперативной и во внешней памяти. Правильный выбор структур во многом определяет эффективность разрабатываемого ПО и его технологические качества, поэтому при проектировании этому вопросу следует уделять достаточно внимания. |