Меню
Бесплатно
Главная  /  ВТБ24  /  Привет студент. Open Library - открытая библиотека учебной информации Методы проектирования программных продуктов

Привет студент. Open Library - открытая библиотека учебной информации Методы проектирования программных продуктов

СТРУКТУРНОЕ ПРОЕКТИРОВАНИЕ И ПРОГРАММИРОВАНИЕ

Нисходящее проектирование

Модульное программирование

Структурное программирование

Метод нисходящего проектирования предполагает последовательное разложение общей функции обработки данных на простые функциональные элементы ("сверху-вниз").

В результате строится иерархическая схема, отражающая состав и взаимоподчиненность отдельных функций, которая носит название функциональная структура алгоритма (ФСА) приложения.

Последовательность действий по разработке функциональной структуры алгоритма приложения:

определяются цели автоматизации предметной области и их иерархия (цель-подцель);

устанавливается состав приложений (задач обработки), обеспечивающих реализацию поставленных целей;

уточняется характер взаимосвязи приложений и их основные характеристики (информация для решения задач, время и периодичность решения, условия выполнения и др.);

определяются необходимые для решения задач функции обработки данных;

выполняется декомпозиция функций обработки до необходимой структурной сложности, реализуемой предполагаемым инструментарием.

Подобная структура приложения (рис. 18.2) отражает наиболее важное – состав и взаимосвязь функций обработки информации для реализации приложений, хотя и не раскрывает логику выполнения каждой отдельной функции, условия или периодичность их вызовов.

Разложение должно носить строго функциональный характер, т.е. отдельный элемент ФСА описывает законченную содержательную функцию обработки информации, которая предполагает определенный способ реализации на программном уровне.

По частоте использования функции делятся на:

однократно выполняемые;

повторяющиеся.

Степень детализации функций может быть различной, но иерархическая схема должна давать представление о составе и структуре взаимосвязанных функций и общем алгоритме обработки данных. Широко используемые функции приобретают ранг стандартных (встроенных) функций при проектировании внутренней структуры программного продукта.

Пример 18.4. Некоторые функции, например Ф2, далее неразложимы на составляющие: они предполагают непосредственную программную реализацию. Другие функции, например Ф1, Фm, могут быть представлены в виде структурного объединения более простых функций, например Ф11, Ф12 и т.д. Для всех функций-компонентов осуществляется самостоятельная программная реализация; составные функции (типа Ф1, Фm) реализуются как программные модули, управляющие функциями-компонентами, например, в виде программ-меню.

Метод разработки проектов, систем, программ, при котором разработка производится сверху вниз.

Один из основных методов структурного проектирования . Нисходящее программирование - частный случай нисходящей разработки.

Метод предполагает последовательное разложение функции обработки данных на простые функциональные элементы ("сверху вниз").

В результате строится иерархическая схема, которая отражает состав и взаимоподчиненность отдельных функций. Она носит название функциональная структура алгоритма (ФСА) приложения, в которой отражаются:

  • цели предметной области (цель-подцель);
  • состав приложений (задач обработки), обеспечивающих реализацию поставленных целей;
  • характер взаимодействия приложений с их основными характеристиками;
  • функции обработки данных.

Рассмотрим функциональную структуру приложения.

Пример функциональной структуры приложения

Подобная структура отражает состав и взаимосвязь функций обработки информации для реализации приложений, не раскрывая логику выполнения каждой отдельной функции.

Разложение должно носить строго функциональный характер, т.е. отдельный элемент ФСА описывает законченную содержательную функцию обработки информации, которая предполагает определенный способ реализации на программном уровне.

Функции ввода/вывода информации отделяют от функций вычислительной или логической обработки данных.

Некоторые функции, например, Ф2, ФM далее неразложимы на составляющие, они предполагают непосредственную программную реализацию. Другие функции (Ф1) могут быть представлены в виде структурного объединения более простых функций, например Ф11, Ф1k. Для всех функций-компонентов осуществляется самостоятельная программная реализация, составные функции типа Ф1 реализуются как программные модули, управляющие функциями - компонентами, например, в виде программ-меню.

По частоте использования функции делятся на однократно выполняемые и повторяющиеся.

Литература

  1. Истомин Е.П., Новиков В.В., Новикова М.В. Высокоуровневые методы информатики и программирования: Учебник. - СПб. ООО "Адреевский издательский дом", 2006 г. - 228 с.

Вопрос 4. Восходящее и нисходящее проектирование.

Наименование параметра Значение
Тема статьи: Вопрос 4. Восходящее и нисходящее проектирование.
Рубрика (тематическая категория) Производство

ЭС относятся к сложным системам и их проектирование характеризуется высоким разнообразием проектных задач, наличием высокого числа вариантов решений, крайне важно стью учета большего количества факторов.

Кроме процедур детализации на иерархические уровни при блочно-иерархическом подходе к проектированию ЭС применяют расчленение представлений об изделии на ряд аспектов по характеру отображаемых свойств.

К числу базовых аспектов относятся функциональный, конструкторский и топологический .

Функциональным принято называть аспект, связанный с описанием проектируемых действий и процессов функционального объекта.

В функциональном аспекте выделяются системный или структурный, функционально-логический, схемотехнический и компонентный уровни абстрагирования.

На системном уровне в качестве систем фигурируют комплексы, а в качестве элементов – блоки аппаратуры.

На функционально-логическом уровне эти блоки рассматриваются как системы, состоящие из элементов, в качестве которых выступают функциональные узлы.

На схемотехническом уровне эти блоки рассматриваются как системы, состоящие из схематических компонентов.

На компонентном уровне сами компоненты рассматривают как системы и рассматривают процессы, протекающие в схематических компонентах.

Конструкторскому аспекту соответствует иерархия конструктивов, включающая уровни описания компонентов изделия, дискретных элементов и микросхем и топологических фрагментов.

В технологическом аспекте рассматриваются иерархические уровни описания технологических процессов в виде маршрутов проектирования, совокупности операций и переходов.

Учитывая зависимость оттого в какой последовательности выполняются проектные процедуры различают два способа проектирования:

Восходящее проектирование - ϶ᴛᴏ проектирование, при котором выполнение процедур низких уровней предшествует выполнению проектных процедур, относящихся к более высоким иерархическим уровням (ᴛ.ᴇ. – снизу вверх).

Нисходящее проектирование - ϶ᴛᴏ проектирование сверху вниз, и характеризуется противоположной последовательностью выполнения процедур.

Типичная последовательность процедур нисходящего проектирования ЭС, включает в себя:

- системно-техническое проектирование - ϶ᴛᴏ анализ тактико-технических требований на проектировании комплекс определœенных основ принципов функционирования, выработка структурных схем.

- схемотехническое проектирование - ϶ᴛᴏ выработка функциональных и принципиальных схем.

- конструкторское проектирование - ϶ᴛᴏ выбор формы, компоновки и размещения конструктивов, трассировка межсоединœений и выработка конструкторской документации.

- технологическое проектирование - ϶ᴛᴏ выработка маршрутов и технологической базы, выбор оснастки.

Нисходящее проектирование (рис. 3).

Рис. 3 Последовательность этапов нисходящего проектирования ЭС

Типичная последовательность процедур восходящего проектирования включает в себя (рис. 4).:

Приборно-технологическое проектирование - ϶ᴛᴏ выбор базовой технологии, расчёт диффузии профиля, выбор топологии компонентов.

Схемотехническое проектирование - ϶ᴛᴏ синтез принципиальной электрической схемы, оптимизация параметров элементов.

Функционально-логическое проектирование - ϶ᴛᴏ синтез логических схем, реализация памяти, синтез контролирующих и проверяющих тестов.

Конструкторско-технологическое проектирование - ϶ᴛᴏ размещение элементов, трассировка межсоединœений, проверка соответствия топологических и электрических схем, вычерчивание послойной топологии.

Рис. 4 Последовательность этапов восходящего проектирования, характерная для проектирования интегральных схем (ИС)

При этом как при нисходящем, так и при восходящем проектировании последовательности этапов проектирования свойственен итерационный характер, при котором приближение к окончательным результатам осуществляется путём многократного выполнения одной и той же процедуры с корректировкой исходных данных.

Алгоритм получения проектного решения представлен на рисунке 5

Рис. 5 Алгоритм выполнения проектной процедуры

Анализ - процедура мысленного или реального расчленения предмета͵ свойства предмета или отношения между предметами (явлениями или процессами) на части и выявление взаимосвязей между этими частями.

Аналитические процедуры являются одними из главных приёмов получения новых творческих результатов.

Синтез - процедура, обратная анализу, определяющая соединœение различных компонентов, сторон предмета в единое целое, которая осуществляется как в практической деятельности, так и в процессе мысленного познания действительности.

Оценка - установление соответствия качества предмета (продукта разработки) предъявляемым требованиям.

Вопрос 4. Восходящее и нисходящее проектирование. - понятие и виды. Классификация и особенности категории "Вопрос 4. Восходящее и нисходящее проектирование." 2017, 2018.

1. Суть нисходящего проектирования. Материал: файл tema_3vopr1.doc

2. Пример нисходящей разработки.

Материал: файлы tema_3vopr2.doc, plan_nish_otl. doc, primer2.doc

3. Условия успешного применения и оценка нисходящего подхода.

Материал: файл tema_3vopr3&4.doc

4. Восходящий подход как «традиционная» альтернатива нисходящему. Соотношение подходов

Материал, общий для тем 3 и 4: схемы нисходящей и восходящей отладки – файлы
nishotl. doc, voshotl. doc; принципы тестирования - файл test_bas. doc (выдавались на лабора-
торных работах).

1. Суть нисходящего проектирования

В сокращенном виде материал по нисходящей разработке был представлен в лабораторной работе 1.

· Нисходящая разработка как двухкомпонентный процесс поуровневого проектирования и отладки

Нисходящая разработка представляет собой поэтапный процесс, результатом которого на каждом уровне разработки является отлаженная и оттестированная программа этого уровня, т. е., возможно, с наличием нераскрытых абстракций . Отделить проектирование от отладки в процессе разработки нельзя. Однако такое разделение неизбежно при описании разработки, поскольку описание являет собой вещь статическую. Поэтому в данной теме делается акцент на проектировании, а в следующей – на нисходящей отладке разрабатываемого программного продукта. Тем не менее связь этих аспектов просматривается постоянно и справочный материал по разработке и отладке является практически полностью общим для обеих тем.

· Общая характеристика нисходящего проектирования

Методика нисходящей, или пошаговой разработки программ считается самой сильной формализацией в области проектирования алгоритмов начиная с 70-х годов. Именно поэтому нисходящий подход представляет собой один из важнейших принципов современной методологии разработки программ, независимо от используемой парадигмы программирования и расстановки акцентов на тех или иных этапах жизненного цикла.

Предлагаемый подход может рассматриваться как синтез классического нисходящего подхода и более поздней методики потоков работ (Workflow methodology).

Суть этого подхода, как и суть любого процесса проектирования, на первый взгляд проста: разбиение задачи на подзадачи до получения подзадач, реализуемых имеющимися в наличии исполнителя средствами. Однако эта простота обманчива, и в действительности для овладения описываемым подходом требуются хорошо отработанные навыки систематического мышления и взгляд на программирование как на интеллектуальную дисциплину, направленную на решение задач, а не на комбинирование операторов конкретного языка. Поэтому такой подход требует серьезной и тщательной работы.

В рамках учебного процесса, не позволяющего конструктивно (т. е. доводя решение до программного продукта) рассматривать достаточно сложные реальные задачи, требующие прежде всего анализа и уточнения постановки, нисходящая разработка лучше всего иллюстрируется на процессе разработки алгоритмов достаточно хорошо сформулированных задач. Поэтому ниже изложение ведется именно в таком аспекте.

Собственно нисходящая методика принципиально не предполагает использования какого-либо конкретного языка программирования и наилучшим образом реализуется на основе средств проектирования алгоритмов, основанных на структурном подходе. Такими средствами являются, например, язык проектирования программ PDL (см. ссылку на кн. Лингера и др. в теме 2) и менее жесткий язык псевдокод, рассмотренный в теме 2. Очевидно, что используемый при нисходящей разработке язык проектирования должен содержать средства описания подзадач и их связи с задачами более высокого уровня.

· Общая схема

Суть нисходящего проектирования, или проектирования сверху вниз, состоит в пошаговой декомпозиции (разложении) задачи на точно определенные подзадачи.

К счастью или к сожалению, четких формальных критериев такой декомпозиции не существует, поэтому процесс, особенно для нестандартных задач, является в большой степени творческим и требует навыка и опыта. Парадоксальным на первый взгляд, но наиболее конструктивным критерием выделения подзадач является такой: каждая подзадача должна быть сформулирована кратко, точно и емко, т. е. должно быть ясно, что дано и что требуется найти, и при этом нет необходимости прибегать к описанию мелких действий. Примеры корректных формулировок: «Найти сумму..», «Проверить наличие элементов …» и т. д.

Процесс нисходящей разработки является иерархическим. Схема его приведена на рис. 3.1.

Рис. 3.1. Общая схема нисходящего проектирования

Смысловая сторона нисходящего проектирования состоит в следующем: на каждом уровне проектирования мы полагаем, что каждая сформулированная подзадача реализуема, и, не интересуясь деталями этой реализации, рассматриваем ее как единое обобщенное действие, называемое абстракцией. Иначе говоря, абстракция – подзадача, рассматриваемая как «черный ящик». По форме это некоторое обобщенное действие ("проверить правильность", "поиск максимума", "найти сумму"). Будем обозначать абстракции именами, начинающимися с буквы А.

Назовем реализацией, или раскрытием абстракции некоторого уровня некоторый способ объединения результатов решения ее подзадач (абстракций низшего уровня). В этих терминах исходную постановку задачи можно рассматривать как абстракцию самого высокого (нулевого) уровня, а решение задачи – как пошаговую реализацию этой абстракции вплоть до исполнительного уровня. Обозначим эту абстракцию A0.

Как видно из схемы, каждая подзадача некоторого уровня раскрывается на следующем, также путем разложения на подзадачи – и т. д., до получения подзадач, алгоритм решения которых можно непосредственно записать на языке исполнительного (физического) уровня.

В случае проектирования алгоритмов исполнительным уровнем (операционной средой) является заданное множество возможных операций по преобразованию используемых данных. Это - возможности того, кто исполняет алгоритм. Например, исполнительный уровень при решении арифметических задач вручную – множество арифметических операций, на компьютере – множество операций используемого языка или среды программировния, для алгебраических задач – законы алгебры. Если задачу решает специалист в некоторой области, то исполнительный уровень – множество методов, которыми владеет этот специалист.

Реально прямой переход от задачи к решению возможен только для тривиальных задач; обычно число уровней много больше двух.

Одним из ярких, но неосознаваемых примеров нисходящего подхода является расчет параметров электрической цепи. Здесь иcполнительный уровень – арифметические операции, выполняемые согласно нужным формулам. Но до получения этих формул исходя из заданных параметров цепи и подстановки в формулы численных данных необходимо проделать массу преобразований схем и выводов формул.

· Нисходящее проектирование и нисходящая отладка

На любом уровне проектирования одни элементы алгоритма могут быть доведены до исполнительного уровня и закодированы, другие же представлены в виде абстракций. Нисходящая отладка представляет собой постепенный процесс отладки такого незавершенного кода программы на каждом уровне. В основе ее лежит тот факт, что любая подзадача связана с остальными только своим интерфейсом, т. е. совокупностью получаемых ею входных данных и передаваемых дальше выходных данных.

Эти положения приведены в лабораторной работе 1 и подробно рассматриваются в теме 4 и примере нисходящей разработки. Здесь об этом упоминается, чтобы еще раз подчеркнуть единство процессов нисходящего проектирования и нисходящей отладки, обеспечивающее эффективность разработки в целом.

· Механизм процедур как адекватное средство реализации нисходящего подхода

Самым мощным механизмом любого достаточно развитого конкретного языка программирования является механизм процедур.

Аппарат процедур предоставляет формальные средства абстракции, т. е. формально в виде процедуры может быть оформлена любая последовательность операций с тем, чтобы впоследствии быть вызванной по имени. Однако как некоторый результат деятельности по разработке программы такая последовательность всегда несет смысловую нагрузку - решает какую-либо задачу. Таким образом, уже сам факт использования процедур в любом случае предполагает (осознанно или неосознанно, формализовано или нет) процесс нисходящего решения задачи с поэтапным выделением подзадач.

Поэтому механизм процедур является адекватным средством реализации нисходящей методологии, начиная с этапа проектирования и заканчивая реализацией программы с использованием конкретной системы программирования.

Процесс нисходящего проектирования есть процесс поэтапного раскрытия абстракций. Сам процесс выделения абстракций - неформальный, творческий Общих критериев его оценки нет. Составить удачный проект за один проход чаще всего нельзя.

Принцип нисходящего проектирования кажется интуитивно очевидным, однако практика показывает, что реализация этой идеи весьма непроста.

Подпрограммы

Структурное программирование

В предыдущем разделœе рассматривались основные операторы и типы данных, необходимые для составления программ. При этом предполагалось, что текст программы представляет собой линœейную последовательность операторов присваивания, цикла и условных операторов. Таким способом можно решать не очень сложные задачи и составлять программы, содержащие несколько сот строк кода. После этого понятность исходного текста резко падает из-за того, что общая структура алгоритма теряется за конкретными операторами языка, выполняющими слишком детальные, элементарные действия. Возникают многочисленные вложенные условные операторы и операторы циклов, логика становится совсœем запутанной, при попытке исправить один ошибочный оператор вносится несколько новых ошибок, связанных с особенностями работы этого оператора, результаты выполнения которого нередко учитываются в самых разных местах программы. По этой причине набрать и отладить длинную линœейную последовательность операторов практически невозможно.

При создании средних по размеру приложений (несколько тысяч строк исходного кода) используется структурное программирование, идея которого состоит по сути в том, что структура программы должна отражать структуру решаемой задачи, чтобы алгоритм решения был ясно виден из исходного текста. Для этого нужно иметь средства для создания программы не только с помощью трех простых операторов, но и с помощью средств, более точно отражающих конкретную структуру алгоритма. С этой целью в программирование введено понятие подпрограммы - набора операторов, выполняющих нужное действие и не зависящих от других частей исходного кода. Программа разбивается на множество мелких подпрограмм (занимающих до 50 операторов - критический порог для быстрого понимания цели подпрограммы), каждая из которых выполняет одно из действий, предусмотренных исходным заданием. Комбинируя эти подпрограммы, удается формировать итоговый алгоритм уже не из простых операторов, а из законченных блоков кода, имеющих определœенную смысловую нагрузку, причем обращаться к таким блокам можно по названиям. Получается, что подпрограммы - это новые операторы или операции языка, определяемые программистом.

Возможность применения подпрограмм относит язык программирования к классу процедурных языков.

Наличие подпрограмм позволяет вести проектирование и разработку приложения сверху вниз - такой подход принято называть нисходящим проектированием. Сначала выделяется несколько подпрограмм, решающих самые глобальные задачи (к примеру, инициализация данных, главная часть и завершение), потом каждый из этих модулей детализируется на более низком уровне, разбиваясь в свою очередь на небольшое число других подпрограмм, и так происходит до тех пор, пока вся задача не окажется реализованной.

Такой подход удобен тем, что позволяет человеку постоянно мыслить на предметном уровне, не опускаясь до конкретных операторов и переменных. Вместе с тем, появляется возможность некоторые подпрограммы не реализовывать сразу, а временно откладывать, пока не будут закончены другие части. К примеру, если имеется крайне важность вычисления сложной математической функции, то выделяется отдельная подпрограмма такого вычисления, но реализуется она временно одним оператором, который просто присваивает заранее выбранное значение (к примеру, 5). Когда всœе приложение будет написано и отлажено, тогда можно приступить к реализации этой функции.

Немаловажно, что небольшие подпрограммы значительно проще отлаживать, что существенно повышает общую надежность всœей программы.

Очень важная характеристика подпрограмм - это возможность их повторного использования. С интегрированными системами программирования поставляются большие библиотеки стандартных подпрограмм, которые позволяют значительно повысить производительность труда за счет использования чужой работы по созданию часто применяемых подпрограмм.

Рассмотрим пример, демонстрирующий методику нисходящего проектирования. Имеется массив Ocenki, состоящий из N (N > 2) судейских оценок (каждая оценка положительна). В некоторых видах спорта принято отбрасывать самую большую и самую маленькую оценки, чтобы избежать влияния необъективного судейства, а в зачет спортсмену идет среднее арифметическое из оставшихся оценок. Решим эту задачу, постепенно детализируя алгоритм (без привязки к конкретному языку программирования).

1. Процесс решения наиболее просто описывается подпрограммами:

Ввести_оценки_в_массив;

Удалить_самую_большую_оценку;

Удалить_самую_маленькую_оценку;

Вывести_результаты;

Теперь можно приступить к детализации каждой их этих подпрограмм.

2. Удалить_самую_большую_оценку;

Как удалить самую большую оценку из статического массива? Вместо нее можно просто записать значение 0, а при подсчете среднего арифметического нулевые значения не учитывать.

I = Номер_самого_большого_элеменша_в_массиве;

3. Удалить_самую_маленькую_оценку;

I = Номер_самого_маленького_элемента_в_массиве;

При реализации подпрограммы Номер_самого_маленького_элемента_в_массиве нужно учесть, что искать придется самое маленькое из положительных значений (больших нуля).

Здесь потребуется оператор цикла, вычисляющий сумму всœех элементов массива Ocenki.

FOR I = 1 ТО N

SUM = SUM + Ocenki(I)

SUM = SUM / (N - 2)

В последнем операторе происходит вычисление среднего арифметического всœех оценок. Сумма элементов массива делится на число элементов, уменьшенное на 2, потому что две оценки, самую большую и самую маленькую, учитывать не нужно.

В случае если бы эта задача решалась последовательно, то уже на этапе удаления оценок могли возникнуть определœенные проблемы.

Реализацию подпрограмм Номер_самого_большого_элемента_в_массиве и Номер_ самого_маленького_элемента_в_массиве выполните самостоятельно.


  • - Тема 3.2 Нисходящее проектирование

    Метод нисходящего проектирования предполагает последовательное разло- жение общей функции обработки данных на простые функциональные элементы ("сверху- / вниз"). В результате строится иерархическая схема, отражающая состав и взаимопод-чиненность отдельных... [читать подробенее]


  • - Нисходящее проектирование

    Занятие 12-2 часа Метод нисходящего проектирования предполагает последовательное разложение общей функции обработки данных на простые функциональные элементы ("сверху- / вниз"). В результате строится иерархическая схема, отражающая состав и взаимоподчиненность... [читать подробенее]


  • - Маршруты проектирования могут начинаться с нижних иерархических уровней описаний (восходящее проектирование) либо с верхних (нисходящее проектирование).

    Между всеми этапами проектирования существует глубокая взаимосвязь. Так, определение окончательной конструкции и разработка всей технической документации часто не могут быть выполнены до окончания разработки технологии. В процессе конструирования и разработки...