Open Library - открытая библиотека учебной информации. Нисходящее проектирование Имеет смысл рассматривать полную и частичную ФЗ в том случае, если ПК - составной

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

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

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

В таких случаях более предпочтителен нисходящий метод проектирования (рис. 2), заключающийся в том, что разработка изделия начинается с создания его компоновки и определения структуры, на основе которых затем моделируются входящие в изделие детали и узлы. Ниже мы рассмотрим, как осуществляется проектирование по нисходящему методу — от идеи к чертежам в системе трехмерного проектирования Pro/ENGINEER WILDFIRE (рис. 3) на примере механизма, модель которого приведена на рис. 4 . Рассматриваемый механизм может находиться в двух состояниях: сложенном (а ) и разложенном (б ).

Создание компоновки

Компоновка в Pro/ENGINEER WILDFIRE происходит в два этапа: сначала создается так называемая записная книжка инженера (Layout) , а затем — каркасная модель сборки (Skeleton) .

«Записная книжка» представляет собой концептуальный двумерный эскиз (рис. 5), в котором ведущий конструктор определяет перечень основных управляющих параметров. Для рассматриваемого механизма могут быть определены следующие параметры: габариты конструкции, длина движущихся рычагов, расстояние от концов рычагов до края и, при необходимости, взаимосвязи между ними. Указанные параметры могут быть как задаваемыми, так и расчетными, причем значения первых пользователь вводит с клавиатуры, а значения вторых задаются с помощью уравнений, в которых могут быть использованы арифметические операторы, тригонометрические функции, условные операторы и т.п. Так, например, в нашем случае была задана зависимость длины рычага от высоты и длины конструкции.

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

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

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

Возможности Pro/ENGINEER WILDFIRE позволяют применять в одном проекте несколько «записных книжек» одновременно, что удобно при работе над большими проектами. Например, при разработке автомобиля можно создать отдельные «записные книжки» для двигателя, каркаса, подвески и т.д. и установить взаимосвязи между ними.

Каркасная модель сборки — это трехмерная модель, геометрия которой определяет пространственные требования к сборке, состыковку компонентов и другие характеристики, необходимые для размещения компонентов сборки и определения их геометрии. Каркасная модель обычно состоит из опорных конструктивных элементов (плоскостей, кривых, координатных систем, точек) и поверхностей. На рис. 6 представлена каркасная модель проектируемого механизма.

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

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

Проектирование деталей и узлов

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

Организовать параллельное проектирование в Pro/ENGINEER WILDFIRE дает возможность инструмент Copy Geometry , позволяющий копировать любую геометрию — поверхности, кривые, кромки, точки, координатные системы и т.д. между компонентами сборки. При нисходящем проектировании основным источником копируемой геометрии для разработчика является каркасная модель сборки, однако в некоторых случаях используется копирование между деталями и узлами сборки.

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

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

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

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

Кроме копирования геометрии, проектируемые детали могут связываться с компоновкой подобно тому, как связывается каркасная модель с «записной книжкой инженера», — с помощью уравнений, устанавливающих взаимосвязь между размерами деталей и параметрами «записной книжки». Механизм ассоциативности здесь работает аналогичным образом — изменение управляющих параметров влечет за собой изменение связанных с компоновкой деталей сборки.

Внесение изменений в конструкцию

Продемонстрируем процесс внесения изменений при нисходящем проектировании на примере — увеличим высоту конструкции (см. рис. 4 а ) в разложенном состоянии, для чего в «записной книжке» изменим соответствующий параметр. После этого Pro/ENGINEER WILDFIRE автоматически просчитает все параметры, значения которых вычисляются с использованием уравнений, и выполнит проверку на корректность введенных значений в соответствии с заданными критериями. В нашем случае такая проверка показала, что высота увеличена слишком сильно и конструкция стала неустойчивой, а значит, необходимо увеличить и ее длину. На схеме (рис. 12) красным цветом показаны изменения, которые конструктор вносит вручную. После изменения параметров «записной книжки» каркасная модель обновляется автоматически (на рисунке показан новый каркас), а для обновления сборки достаточно выполнить команду «Перестроить» (Regenerate). Таким образом, изменение, внесенное конструктором на самом верхнем уровне — в «записной книжке инженера», повлекло за собой автоматические изменения на всех остальных уровнях — в сборке, в деталях, в чертежах.

Основные выводы

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

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

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

Эффективность использования нисходящего проектирования в Pro/ENGINEER WILDFIRE оценена по достоинству — этот метод активно применяют на многих российских предприятиях, о чем мы не раз рассказывали на страницах журнала, информируя читателей о результатах проектов, выполненных компанией SOLVER на отечественных машино- и приборостроительных предприятиях.

«САПР и графика» 11"2004

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

Такой подход удобен тем, что позволяет человеку постоянно мыслить на предметном уровне, не опускаясь до конкретных операторов и переменных. Кроме того, появляется возможность некоторые подпрограммы не реализовывать сразу, а временно откладывать, пока не будут закончены другие части. Например, если имеется необходимость вычисления сложной математической функции, то выделяется отдельная подпрограмма такого вычисления, но реализуется она временно одним оператором, который просто присваивает заранее выбранное значение (например, 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, потому что две оценки, самую большую и самую маленькую, учитывать не надо.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

· повторяющиеся;

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



Модульное проектирование

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

Модуль характеризуется:

· один вход и один выход – на входе программный модуль получает отдельный набор исходных данных, выполненные содержат обработку и возвращается один набор результатных данных, т.е. реализует стандартный принцип IPO(Input->Process->Output) – вход – процесс – выход;

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

· логическая независимость – результат работы программного модуля зависит только от исходных данных, но не зависит от работы других модулей;

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

· обозримый по размеру и сложности программный элемент ;

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

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

При определенном наборе модулей учитывается следующие:

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

· принятие основных решений в алгоритме выносится на максимально «высокий» по иерархии уровень;

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

Объектно-ориентированное проектирование

Объектно-ориентированный подход к проектированию программного продукта основан на:

· выделении классов объектов;

· установлении характерных свойств объектов и методов их обработки;

· создание иерархии классов, наследовании свойств объектов и методов их обработки;

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

Объединенный подход при разработке алгоритмов и программ предполагает:

· объектно-ориентированный анализ предметной области;

· объектно-ориентированное проектирование;

· объектно-ориентированный анализ – анализ предметной области и выделение объектов, определенных свойств и методов обработки объектов, установленных их взаимосвязей;

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

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

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

5. Индивидуальное задание

5.1 Постановка задачи

Автоматизированная информационная справочная система ЗМК

Организационно-экономическая сущность задачи

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

5.1.2 Описание входной информации

Входная информация содержится в базе данных со следующим названием: Заказы.mdb. база данных содержит следующие поля с типами данных:

Таблица 1.

Код Счетчик
Дата Дата и время
Код двери Короткий текст
Организация Короткий текст
Подразделение Короткий текст
Дата запуска Дата и время
Дата исполнения Дата и время
Ответственный Короткий текст

магистерская работа

1.1.2 Последовательное проектирование (нисходящее и восходящее)

Процесс проектирования изделий с использованием САПР, как правило, может быть реализован в виде двух возможных вариантов:

ѕ нисходящего (сверху вниз);

ѕ восходящего (снизу вверх) проектирования.

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

Рисунок 1.3 - Принципиальное отличие восходящего и нисходящего вариантов проектирования изделия

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

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

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

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

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

Проектирование твердотопливного ракетного двигателя третьей ступени трехступенчатой баллистической ракеты

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

Разработка жидкостного ракетного двигателя первой ступени ракетоносителя

На рисунке 9 изображена пневмогидравлическая схема ДУ ЖРД 1-й ступени, работающего на керосине и кислороде. На схеме линиями изображены трубопроводы, двойными линиями - механические связи. К схеме прилагается перечень агрегатов (таблица 1)...

Разработка микроспутника связи

К задачам баллистического проектирования относят: 1) построение трассы, 2) определение характеристик зоны обзора специальной аппаратурой, 3) определение зон видимости КА...

ракетный космический инженерный автоматизированный Проектирование - процесс создания проекта, прототипа, прообраза предполагаемого или возможного объекта, состояния. В технике - разработка проектной...

Управление инженерными данными на этапе концептуального проектирования ракеты-носителя

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

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 и примере нисходящей разработки. Здесь об этом упоминается, чтобы еще раз подчеркнуть единство процессов нисходящего проектирования и нисходящей отладки, обеспечивающее эффективность разработки в целом.

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

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

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

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

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

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

Статьи по теме