## Структурные карты Константайна
На структурной карте отношения между модулями представляют в виде графа, вершинами которого соответствуют модули и общие области данных, а дугам - межмодульные вызовы и обращения к общим областям данных.  
![Элементы структурной карты Константайна](../Pictures/18_01.%20Элементы%20структурной%20карты%20Константайна.png)  
#### Вызовы
При этом отдельные части программной системы (программы, подпрограммы) могут вызываться последовательно, параллельно или как сопрограммы.  
![Вызовы](../Pictures/18_02.%20Вызовы.png)
#### Параллельный вызов
![Параллельный вызов](../Pictures/18_03.%20Параллельный%20вызов.png)
#### Особые условия
Циклический вызов:  
![Циклический вызов](../Pictures/18_04.%20Циклический%20вызов.png)  
Условный вызов:  
![Условный вызов](../Pictures/18_05.%20Условный%20вызов.png)  
Однократный вызов:  
![Однократный вызов](../Pictures/18_06.%20Однократный%20вызов.png)  
Связи по данным и управлению обозначают стрелками, параллельными дуге вызова, направление стрелки указывает направление связи:  
![Связи по данным](../Pictures/18_07.%20Связи%20по%20данным.png)  
Структурные карты Константайна позволяют наглядно представить результат декомпозиции программы на модули и оценить ее качество, т. е. соответствие рекомендациям структурного программирования (сцепление и связность).  
**Пример:** структурная карта Константайна для программы построения графиков/таблиц функций:  
![Структурная карта Константайна](../Pictures/18_08.%20Структурная%20карта%20Константайна.png)  
Анализ показывает, что количество сцеплений по образцу в программе можно уменьшить, если подпрограмму "Расчет значений функции" перенести на следующий уровень.  
Таким образом, мы избавляемся от зависимости модулей.  
![Структурная карта Константайна](../Pictures/18_09.%20Структурная%20карта%20Константайна.png)  
## Проектирование структур данных
Под **проектированием структур данных** понимают разработку их представлений в памяти.  
Основными параметрами, которые необходимо учитывать при проектировании структур данных, являются:
- Вид хранимой информации каждого элемента данных
- Связи элементов данных и вложенных структур
- Время хранения данных структуры ("время жизни")
- Совокупность операции над элементами данных, вложенными структурами и структурами в целом
#### Представление данных в оперативной памяти
**Векторная структура** представляет собой последовательность байт памяти, которые используются для размещения полей данных.  
![Векторная структура](../Pictures/18_10.%20Векторная%20структура.png)  
Плюсы:
- Прямой доступ к элементам
- Быстрый поиск
- Расположение векторных представлений в динамической памяти иногда позволяет существенно увеличить эффективность
  
Минусы:
- Нет операций добавления и удаления элементов (сдвиг всех элементов)
- Объем работы с вектором зависит от исходных данных
  
**Списковые структуры** строят из специальных элементов, включающих помимо информационной части еще и один или несколько указателей-адресов элементов или вложенных структур, связанных с данными элементами.  
![Списковая структура](../Pictures/18_11.%20Списковая%20структура.png)  
Плюсы:
- Организация различных внутренних иерархических структур
  
Минусы:
- Для хранения указателей необходима дополнительная память
- Поиск информации в линейных списках осуществляется последовательно, а потому требует больше времени
- Требует более высокой квалификации программистов
  
Для выбора структуры необходимо проводить исследование внутренних данных будущей системы.  
В таблице приведены результаты расчета временной сложности указанных операций на уровне машинных команд в тактах микропроцессора для каждого представления и емкостной сложности этих представлений.  
![Таблица расчета временной сложности операций](../Pictures/18_12.%20Таблица%20расчета%20временной%20сложности%20операций.png)  
#### Представление данных во внешней памяти
Современные операционные системы поддерживают 2 способа организации данных во внешней памяти:
- Последовательный
- С прямым доступом
  
Основными параметрами, которые необходимо учитывать при проектировании структур данных, являются:
- Вид хранимой информации каждого элемента данных
- Связи элементов данных и вложенных структур
- Время хранения данных структуры ("время жизни")
- Совокупность операций надо элементами данных, вложенными структурами и структурами в целом
  
При **последовательном доступе** к данным возможно выполнение только последовательного чтения элементов данных или последовательная их запись.  
Такой вариант предполагается при работе с логическими устройствами типа клавиатуры или дисплея, при обработке текстовых файлов или файлов, формат записей которых меняется в процессе работы.  
![Последовательный доступ к данным](../Pictures/18_13.%20Последовательный%20доступ%20к%20данным.png)  
**Прямой доступ** возможен только для дисковых файлов, обмен информацией с которыми осуществляется записями фиксированной длины (двоичные файлы C или типизированные файлы Pascal). Адрес записи такого файла можно определить по ее номеру, что и позволяет напрямую обращаться к нужной записи.  
![Прямой доступ к данным](../Pictures/18_14.%20Прямой%20доступ%20к%20данным.png)  
#### Методика Джексона
- Добавляют блоки обработки элементов, для которых не обнаружены соответствия
- Анализируют и обрабатывают несоответствия, т. е. разрешают "столкновения"
- Добавляют необходимые операции (ввод, вывод, открытие/закрытие файлов и т. п.)
- Записывают программу в структурной нотации (псевдокоде)
  
![Методика Джексона](../Pictures/18_15.%20Методика%20Джексона.png)
#### Методика Варнье-Орра
Базируется на том же положении, что и методика Джексона, но основными при построении программы считаются структуры выходных данных и, если структуры входных данных не соответствуют структурам выходных, то их допускается менять.  
Однако на практике не всегда существует возможность пересмотра структур входных данных: эти структуры уже могут быть строго заданы, например, если используются данные, полученные при выполнении других программ, поэтому данную методику применяют реже.