Структурное проектирование программ
В этом методе разбиение сложной системы на несколько подсистем получило название «разделяй и властвуй» (divide et impera), иерархическая или функциональная декомпозиция и др. При этом базовыми принципами являются:
a) «разделяй и властвуй»;
b) Проектирование «сверху вниз» — от общей постановки задачи к отдельным подзадачам и т.д.;
c) принцип иерархического упорядочения, который предполагает объединение составных частей системы в иерархические древовидные структуры с добавлением новых деталей на каждом уровне.
Процесс проектирования сложного программного обеспечения начинают с уточнения его структуры, т. е. определения структурных компонентов и связей между ними. Результат уточнения структуры может быть представлен в виде структурной и/или функциональной схем и описания (спецификаций) компонентов.
Структурная схема разрабатываемого программного обеспечения
Структурной называют схему, отражающую состав и взаимодействие по управлению частей разрабатываемого программного обеспечения. Обычно такие схемы разрабатывают для каждой программы большого пакета, а список программ определяют, анализируя функции, указанные в техническом задании.
Проектирование / Разработка программы. Этапы создания программы. Блок-схема и псевдокод.
Самый простой вид программного обеспечения — программа, которая в качестве структурных компонентов может включать только подпрограммы и библиотеки ресурсов. Разработку структурной схемы программы обычно выполняют методом пошаговой детализации.
Структурными компонентами программной системы или комплекса могут служить программы, подсистемы, базы данных, библиотеки ресурсов и т. п.
Так схема программного комплекса демонстрирует передачу управления от программы-диспетчера соответствующей программе, как показано на рис. 4.1. Программы комплекса, как правило, слабо связаны. Поэтому для организации их совместной работы используется диспетчер.
Рис. 4.1. Пример структурной схемы программного комплекса.
Структурная схема программной системы, как правило, показывает наличие подсистем или других структурных компонентов. В отличие от комплекса отдельные части (подсистемы) программной системы интенсивно обмениваются данными между собой и, возможно, с основной программой. Структурная же схема программной системы этого, как правило, не показывает, как это видно из рис. 4.2.
Обычно она представляет собой многоуровневую иерархическую схему взаимодействия подпрограмм по управлению. На начальном этапе схема отображает два уровня иерархии, т. е. показывает общую структуру программы. Однако тот же метод позволяет получить структурные схемы с большим количеством уровней.
Метод пошаговой детализации реализует нисходящий подход и базируется на основных конструкциях структурного программирования. Он предполагает пошаговую разработку алгоритма, как показано на рисунке 4.3. Каждый шаг при этом включает разложение функции на подфункции. Так на первом этапе описывают решение поставленной задачи, выделяя общие подзадачи.
Блок-схемы для начинающих (Блок схемы алгоритмов)
На следующем аналогично описывают подзадачи, формулируя при этом элементы следующего уровня. Таким образом, на каждом шаге происходит уточнение функций проектируемого программного обеспечения. Процесс продолжают, пока не доходят до подзадач, алгоритмы, решения которых очевидны.
При этом необходимо, в первую очередь, детализировать управляющие процессы, оставляя уточнение операций с данными напоследок. Это связано с тем, что приоритетная детализация управляющих процессов существенно упрощает структуру компонентов всех уровней иерархии и позволяет не отделять процесс принятия решения от его выполнения. Определив условие выбора некоторой альтернативы, сразу же вызывают модуль, ее реализующий.
Функциональная схема или схема данных (ГОСТ 19. 701-90) — схема взаимодействия компонентов программного обеспечения с описанием информационных потоков, состава данных в потоках и указанием используемых файлов и устройств. Для изображения этих схем используют специальные обозначения, установленные стандартом.
Функциональные схемы более информативны, чем структурные. На рис. 4.4 для сравнения приведены функциональные схемы программных комплексов и систем.
б)
Рис. 4.4. Примеры функциональных схем: а — комплекс программ, б — программная система.
Все компоненты структурных и функциональных схем должны быть описаны. При структурном подходе особенно тщательно необходимо прорабатывать спецификации межпрограммных интерфейсов, так как от них зависят самые дорогостоящие ошибки.
Структурное проектирование использует три основных вида моделей (диаграмм):
1) SADT (Structured Analysis and Design Technique — метод структурного анализа и проектирования) — модели и соответствующие функциональные диаграммы;
2) DFD (Data Flow Diagrams) — диаграммы потоков данных;
3) ERD (Entity-Relationship Diagrams) — диаграммы «сущность-связь».
Функциональная модель SADT отображает функциональную структуру объекта, т.е. производимые им действия и связи между этими действиями.
Главным компонентом модели является диаграмма. На ней все функции и интерфейсы представлены в виде блоков и дуг соответственно. Место соединения дуги с блоком определяет тип интерфейса. Управляющая информация входит в блок сверху. Входная информация, которая подвергается обработке, показана с левой стороны блока, а результат (выход) — с правой.
Механизм (человек или автоматизированная система), который осуществляет операцию, представляется дугой, входящей в блок снизу (рис. 4.5).
Построение SADT-модели начинается с представления всей системы в виде простейшего компонента — одного блока и дуг, изображающих интерфейс с функциями вне системы. Затем этот блок детализируется на другой диаграмме с помощью нескольких блоков, соединенных интерфейсным дугами. Новые блоки определяют основные подфункции исходной функции, которые, в свою очередь, могут быть детализировании и т.д. (см. рис. 4.6).
Рис. 4.6
Диаграммы потоков данных (DFD) являются основным средством моделирования функциональных требований к проектируемой системе. С их помощью эти требования представляются в вид иерархий функциональных компонентов (процессов), связанных потоками данных. Главная цель такого представления — продемонстрировать, как каждый процесс преобразует свои входные данные в выходные, а также выявить отношения между этими процессами.
Основными компонентами диаграмм потоков данных являются:
a) внешние сущности;
b) системы и подсистемы;
d) накопители данных;
Внешняя сущность представляет собой материальный объект или физическое лицо, являющийся источником или приемником информации. Она изображается объемным прямоугольником с надписью, как показано на рисунке 4.7.
Подсистема (см. рис. 4.8) или процесс (рис. 4.9) представляются прямоугольником с закругленными краями. Он содержит три поля:
c) Физической реализации.
Подсистема и процесс отличаются именем. В первой записывается название подсистемы, а во втором – глагол, определяющий, что делает процесс.
Рис. 4.8. ГНИ – Государственная налоговая инспекция
Накопитель данных — это абстрактное устройство для хранения информации. Он изображается, как показано на рис. 4.10. Его обозначение начинается с буквы D.
Пример диаграммы потоков данных приведен на рис. 4.11.
Более сложная диаграмма потоков данных приведена на рис. 4.12.
ER-диаграммы будут рассмотрены позднее.
В курсовом проекте, кроме функциональной диаграммы, необходимо представить схемы алгоритмов наиболее сложных функций (например, сортировки и поиска).
Источник: infopedia.su
Проектирование программного обеспечения при структурном подходе
При проектировании сложного программного обеспечения прежде всего необходимо определить структурные компоненты и связи между ними. Полученная в результате структура ПО должна быть представлена в виде структурной или функциональной схем и спецификаций ее компонентов [1].
Структурная схема разрабатываемого программного обеспечения
Структурной называют схему, отражающую состав и взаимодействие по управлению частей разрабатываемого программного обеспечения.
Структурная схема определяется архитектурой разрабатываемого ПО (см. разд. 3.2).
Разработку структурной схемы программы обычно выполняют методом пошаговой детализации (см. разд. 4.1.3).
Структурные схемы пакетов программ разрабатывают для каждой программы пакета по отдельности, поскольку организация программ в пакеты не предусматривает передачи управления между ними.
Компонентами структурной схемы программной системы или программного комплекса могут служить программы, подсистемы, базы данных, библиотеки ресурсов и т. п.
Пример структурной схемы программного комплекса для решения математических задач изображен на рис. 4.1.
Рис. 4.1. Пример структурной схемы программного комплекса
Как правило, для программных систем разрабатывается функциональная схема, которая дает более полное представление о проектируемом программном обеспечении с точки зрения взаимодействия его компонентов между собой и с внешней средой.
Источник: studref.com
Структурная схема разрабатываемого программного обеспечения.
Структурной называют схему, отражающую состав и взаимодействие по управлению частей разрабатываемого программного обеспечения.
Структурные схемы пакетов программ не информативны, поскольку организация программ в пакеты не предусматривает передачи управления между ними. Поэтому структурные схемы разрабатывают для каждой программы пакета, а список программ пакета определяют, анализируя функции, указанные в техническом задании.
Самый простой вид программного обеспечения — программа, которая в качестве структурных компонентов может включать только подпрограммы ибиблиотеки ресурсов. Разработку структурной схемы программы обычно выполняют методом пошаговой детализации.Структурными компонентами программной системы или программного комплекса могут служить программы, подсистемы, базы данных, библиотеки ресурсов и т. п.Структурная схема программного комплекса демонстрирует передачу управления от программы-диспетчера соответствующей программе (рис. 5.1).
Рис. 5.1. Пример структурной схемы программного комплекса
Структурная схема программной системы, как правило, показывает наличие подсистем или других структурных компонентов. В отличие от программного комплекса отдельные части (подсистемы) программной системы интенсивно обмениваются данными между собой и, возможно, с основной программой. Структурная же схема программной системы этого обычно не показывает (рис. 5.2).
Рис. 5.2. Пример структурной схемы программной системы
Более полное представление о проектируемом программном обеспечении с точки зрения взаимодействия его компонентов между собой и с внешней средой дает функциональная схема.
Функциональная схема.Функциональная схема или схема данных (ГОСТ 19.701-90) — схема взаимодействия компонентов программного обеспечения с описанием информационных потоков, состава данных в потоках и указанием используемых файлов и устройств. Для изображения функциональных схем используют специальные обозначения, установленные стандартом. Основные обозначения схем данных по ГОСТ 19.701-90 приведены в табл. 5.1.
Название блока | Обозначение | Назначение блока |
Запоминаемые данные | ![]() |
Для обозначения таблиц и других структур данных, которые должны быть сохранены без уточнения типа устройства |
Оперативное запоминающее устройство | ![]() |
Для обозначения таблиц и других структур данных, хранящихся в оперативной памяти |
Запоминающее устройство с последовательной выборкой | ![]() |
Для обозначения таблиц и других структур данных, хранящихся на устройствах с последовательной выборкой (магнитной ленте и т.п.) |
Запоминающее устройство с прямым доступом | ![]() |
Для обозначения таблиц и других структур данных, хранящихся на устройствах с прямымдоступом (дисках) |
Документ | ![]() |
Для обозначения таблиц и других структур данных, выводимых на печатающее устройство |
Ручной ввод | ![]() |
Для обозначения ручного ввода данных с клавиатуры |
Карта | ![]() |
Для обозначения данных на магнитных или перфорированных картах |
Дисплей | ![]() |
Для обозначения данных, выводимых на дисплей компьютера |
Функциональные схемы более информативны, чем структурные. На рис. 5.3 для сравнения приведены функциональные схемы программных комплексов и систем.
Все компоненты структурных и функциональных схем должны быть описаны. При структурном подходе особенно тщательно необходимо прорабатывать спецификации межпрограммных интерфейсов, так как от качества их описания зависит количество самых дорогостоящих ошибок. К самым дорогим относятся ошибки, обнаруживаемые при комплексном тестировании, так как для их устранения могут потребоваться серьёзные изменения уже отлаженных текстов.
Рис. 5.3. Примеры функциональных схем: а — комплекс программ; б — программная система
Схемы алгоритмов
Источник: cyberpedia.su
Структурная и функциональная схемы программы
Структурная схема — это совокупность элементарных звеньев объекта и связей между ними, один из видов графической модели. Под элементарным звеном понимают часть объекта, системы управления и т. д., которая реализует элементарную функцию. На рис. 2.1 представлена структурная схема разработанной программы.
Рисунок 2.1 — Структурная схема программы
Функциональная схема — документ, разъясняющий процессы, протекающие в отдельных функциональных цепях изделия (установки) или изделия в целом. Функциональная схема является экспликацией отдельных видов процессов, протекающих в целостных функциональных блоках и цепях устройства. На рис.2.2 представлена функциональная схема разработанной программы.
Рисунок 2.2 — Функциональная схема программы
Описание процедур, функций и модулей
Объявление модуля:
Каждый исходный файл должен содержать объявление модуля. Слово unit является ключевым, поэтому оно должно быть написано в нижнем регистре. Имя модуля может содержать символы, как в верхнем, так и в нижнем регистре и должно быть таким же, как и имя используемое для этого файла операционной системой.
Стандартные модули языка Delphi. В состав среды Delphi входит великолепный набор модулей, возможности которых удовлетворят даже самого привередливого программиста. Все модули можно разбить на две группы: системные модули и модули визуальных компонентов.
К системным модулям относятся System, SysUtils, ShareMem, Math. В них содержатся наиболее часто используемые в программах типы данных, константы, переменные, процедуры и функции. Модуль System — это сердце среды Delphi; содержащиеся в нем подпрограммы обеспечивают работу всех остальных модулей системы. Модуль System подсоединяется автоматически к каждой программе и его не надо указывать в операторе uses.
Модули визуальных компонентов (VCL — Visual Component Library) используются для визуальной разработки полнофункциональных GUI-приложений — приложений с графическим пользовательским интерфейсом (Graphical User Interface). Эти модули в совокупности представляют собой высокоуровневую объектно-ориентированную библиотеку со всевозможными элементами пользовательского интерфейса: кнопками, надписями, меню, панелями и т.д. Кроме того, модули этой библиотеки содержат простые и эффективные средства доступа к базам данных. Данные модули подключаются автоматически при помещении компонентов на форму.
procedure TForm2.Button1Click(Sender: TObject);
Эта процедура осуществляет закрытие титульного и листа и выход из программы.
procedure TForml.Button2Click(Sender: TObject);
Эта процедура открывает главное меню программы и убирает с экрана титульный лист.
procedure TForm2.Button1Click(Sender: TObject);
Эта процедура открывает окно с выбором метода решения транспортной задачи и убирает с экрана окно меню.
procedure TForm2.Button2Click(Sender: TObject);
Эта процедура открывает окно содержащие информацию о разработанной программе и убирает с экрана окно меню.
procedure TForm2.Button3Click(Sender: TObject);
Эта процедура открывает окно с информацией о справке данной программы, которая позволяет облегчить работу пользователя и убирает окно меню.
procedure TForm2.Button4Click(Sender: TObject);
Эта процедура открывает окно о разработчике, и убирает окно меню.
procedure TForm2.Button5Click(Sender: TObject);
Эта процедура закрывает окно меню и выходит из программы.
procedure TForm3.Button1Click(Sender: TObject);
Эта процедура осуществляет выход в главное меню, и закрывает окно с выбором метода решения транспортной задачи:
procedure TForm3.Button3Click(Sender: TObject);
Эта процедура закрывает окно с решениями транспортной задачи тремя методами и выводит на экран форму с решением задачи методом минимальной стоимости:
procedure TForm3.Button4Click(Sender: TObject);
Эта процедура закрывает окно с решениями транспортной задачи тремя методами и выводит на экран форму с решением задачи методом двойного предпочтения:
procedure TForm2.Button2Click(Sender: TObject);
procedure TForm2.Button3Click(Sender: TObject);
procedure TForm2.Button4Click(Sender: TObject);
Эти процедуры позволяют пользователю отправиться из главного меню в любой пункт программы: «Форма решения», «Руководство пользователя», «Сведения о разработчике», «Выход».
Это процедура пошагового выполнения расчета в программе можно отследить каждый этап заполнения таблицы. После произведения одного расчета процедура прерывает выполнение расчета и ждет комадны от пользователя.
procedure TForm4.Label2Click(Sender: TObject);
procedure TForm4.Label3Click(Sender: TObject);
procedure TForm4.Label4Click(Sender: TObject);
procedure TForm4.Label5Click(Sender: TObject);
Эти процедуры загружают в текстовое поле Memo содержимое текстового документа, в зависимости от выбранного пункта меню. В текстовых документах находится информация о пользовании приложением.
procedure TForm1.Button8Click(Sender: TObject);
Эта процедура выполняет расчет по формулам, подставляет введенные значения и в итоге выполнения записывает результат в переменную.
procedure TForm1.Button9Click(Sender: TObject);
Эта процедура выводит ответ в текстовом поле.
procedure TForm1.Button2Click(Sender: TObject);
Эта процедура заполняет поля ввода исходными данными в соответствии с заданием на курсовой проект.
procedure TForm3.Button4Click(Sender: TObject);
procedure TForm4.Button1Click(Sender: TObject);
Эти процедуры закрывают окно с и выводит на экран форму с выбором пункта меню.
Эта процедура очищает поля ввода и вывода, освобождает переменные от значения, которое в них хранится.
Источник: vuzlit.com
СТРУКТУРНАЯ СХЕМА ПРОГРАММЫ
Основные функции, которые необходимо реализовать в нашей программе, следуют из постановки и анализа задачи:
1)Отображение данных пользователя в виде таблицы и работа с ней.
2)Добавления и удаления типов объектов.
3)Графическое представление плана с возможностью масштабирования.
4)Работа с файлами и вывод результатов на печать.
5)Удобный пользовательский интерфейс.
Ниже приведена функциональная структурная схема программы, изображенная в виде основных модулей и связей между ними. Она наглядно представляет реализацию вышеперечисленных требований в программе.
Рис. 3.1. Функциональная структура программы.
Главной частью программы является модуль управления и формирования интерфейса. Он представляет собой главную форму, на которой находятся элементы управления, позволяющие осуществлять остальные функции, а также формирующие пользовательский интерфейс.
ОСНОВНЫЕ АЛГОРИТМЫ
Основным является алгоритм построения изображения по данным из главной таблицы, реализованный в виде метода plandraw().
Ниже приведены его блок-схема и описание.
Описание алгоритма
Если не активирована вкладка, на которой находится наше изображение плана, мы ее активируем.
Далее активируем кнопки увеличения масштаба и установки масштаба по умолчанию.
Подготавливаем таблицу расстояний, очистив ее от предыдущих записей.
Устанавливаем параметры фона (цвет) и рисуем его, затем устанавливаем параметры пера (толщина линии и стиль), от которых будет зависеть отображение линий маршрута на рисунке. В начале толщина линии равна единице — для рисования координатной сетки.
С помощью свойства таблицы RecordCount находим количество строк в главной таблице.
Устанавливаем указатель текущей записи на первую, и организуем цикл прохода по всем записям таблицы, в котором подсчитываем количество маршрутов.
Далее организуем цикл рисования каждого маршрута, в котором количество повторений определяется ранее подсчитанным количеством маршрутов.
В самом начале цикла осуществляем подготовку для отображения масштаба — переменной масштаба присваиваем коэффициент увеличения (в целых единицах), для обеих полос прокрутки определяем максимальную величину, которая зависит от степени увеличения и размеров рисунка.
Если номер маршрута равен нулю, тогда выполняется условие рисования координатной сетки — меридианов и параллелей. Сначала выполняется цикл рисования меридианов — мы проходим от 0 до 360 градусов с шагом, зависящим от степени увеличения (15, 6, 3, или 1 градусов), причем возле каждого меридиана подписывается соответствующий ему градус долготы (восточная долгота — со знаком «+», западная — со знаком «-«). Нулевой меридиан изображается черным цветом. Аналогичные действия осуществляются и в цикле рисования параллелей, единственное отличие — цикл проходит от 0 до 180 градусов. Со знаком «+» обозначается северная широта, со знаком «-» — южная.
Меняем толщину линии на 2, для изображения линий маршрутов.
Создаем три массива, в которые будем заносить индексы записей текущего маршрута и координаты. Далее организуем цикл, в котором проходим по записям таблицы и для текущего маршрута заполняем эти массивы. Причем в массивы координат заносят уже отмасштабированные величины. В этом же цикле подсчитываем количество точек маршрута.
В следующем цикле сортируем содержимое массива индексов, чтобы потом нарисовать точки маршрутов в том порядке, в котором они находятся в таблице.
Задаем цвет линии в зависимости от номера маршрута. И организуем цикл, рисующий линии.
В цикле рисования линий проделываем следующее: учитывая позиции лент прокрутки, вычисляется положение окна по отношению к карте, и относительно этого положения вычисляются координаты точки в окне. Если у нас первое прохождение, то мы просто перемещаем курсор в точку с вычисленными координатами, если нет, и флажок рисования линий включен, — рисуем линию от предыдущей точки до этой. Если флажок отключен, на карте ставятся только точки.
Затем вычисляется расстояние между точками, находящимися на Земном шаре, проекции которых мы только что изобразили на нашей карте. Расстояния вычисляются в километрах, радиус Земли берется равным 6371км. Вычисление расстояния производится в том случае, если i не равно 0, те не первое прохождение по циклу. Это условие необходимо, так как мы используем координаты предыдущей точки, чтобы найти расстояние до текущей.
Так как поверхность земли имеет шарообразную форму, нам нужно вычислить длину дуги. Основной проблемой здесь является нахождение угла, на который опирается дуга.
Рассматриваются три случая:
1)если точки находятся на одной долготе, угол определить просто — он будет равен разности между большим и меньшим значением широты.
2)если точки находятся на одинаковой широте, то тут его определение тоже не представляет сложности — он равен разности между большим и меньшим значением долготы, умноженной на поправку cos(f), где f — текущая широта.
3)если точки располагаются на разной широте и долготе, этот случай нахождения угла является более сложным. Рассмотрим его подробно.
Сначала находим разность долгот точек, как если бы они находились на одной широте, помножаем на поправку cos(f), и вычисляем линейное расстояние между ними по теореме косинусов (другие две стороны треугольника — радиусы Земли). Таким же образом рассчитываем расстояние между точками, как если бы они находились на одной долготе. Эти расстояния обозначим l1 и l2.
Теперь у нас есть прямоугольный треугольник с катетами l1, l2, гипотенузой которого является расстояние l3. Вычисляем ее по теореме Пифагора. Нашей целью является найти угол a. С помощью теоремы косинусов находим косинус этого угла. Вычислив по нему арккосинус, мы получаем угол!
Ниже приводится поясняющий рисунок.
Рис. 4.1. Пояснение к расчету расстояния на различных широте и долготе.
После нахождения угла, вычисляем длину дуги и заносим полученное расстояние в таблицу расстояний вместе с номером текущего маршрута.
Замечание: так как функции косинуса и арккосинуса оперируют с углами, заданными в радианах, в программе производится пересчет радианов в градусы и наоборот. Все эти вычисления приводят к накоплению погрешности.
Все упомянутые формулы даны в Приложении Д.
Вычислив расстояние, выводим его на план рядом с текущей точкой, если включен соответствующий флажок. Причем в связи с условием оценки длины маршрута на рисунке отображается не длина одного отрезка, а сумма длин отрезков, предшествующих этой точке. Длины же отдельных отрезков пользователь может посмотреть в таблице расстояний.
Также на карте отображаются тип объекта для данной точки, если флажок «показывать тип объекта» установлен.
Если флажок «не показывать таблицу расстояний» отключен, делаем ее видимой.
После того, как все маршрут отрисованы, освобождаем память, отведенную под массивы индексов и координат.
Блок-схема алгоритма
Рис. 4.2. Блок-схема алгоритма рисования плана.
Источник: studbooks.net