Функциональная декомпозиция

Структурный подход.

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

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

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

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

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

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

Функциональная декомпозиция

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

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

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

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

1. Мелкозернистый параллелизм — на уровне команд (менее 20 команд на блок, количество параллельно выполняемых подзадач — от единиц до нескольких тысяч, средний масштаб параллелизма около 5 команд на блок).

2. Среднеблочный параллелизм — на уровне процедур. Размер блока до 2000 команд. Выявление такого параллелизма сложнее реализовать, поскольку следует учитывать межпроцедурные зависимости. Требования к коммуникациям меньше, чем в случае параллелизма на уровне команд.

3. Крупноблочный параллелизм — на уровне программ (задач). Соответствует выполнению независимых программ на параллельном компьютере. Крупноблочный параллелизм требует поддержки операционной системой.

Важнейшим условием декомпозиции является независимость подзадач. Существуют следующие виды независимости:

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

Полной независимости добиться обычно не удается. (плак-плак)

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

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

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

— системно-техническое проектирование – это анализ тактико-технических требований на проектировании комплекс определенных основ принципов функционирования, разработка структурных схем.

— схемотехническое проектирование – это разработка функциональных и принципиальных схем.

— конструкторское проектирование – это выбор формы, компоновки и размещения конструктивов, трассировка межсоединений и разработка конструкторской документации.

— технологическое проектирование – это разработка маршрутов и технологической базы, выбор оснастки.

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

Функциональная декомпозиция

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

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

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

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

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

Функциональная декомпозиция

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

Структурирование.

В основу структурирования положены следующие простые правила:

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

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

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

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

Чтобы обойтись без произвольных передач управления в программе, там где это возможно, лучше не использовать операторы GOTO, RETURN. Характерной особенностью структурированной программы является не столько отсутствие этих операторов, а сколько наличие жесткой структуры ее организации. Если текст программы будет занимать несколько десятков страниц, то восприятие такой программы будет затрудненно, поэтому рекомендуется вести структурирование текста программы (например, программа состоит из 80 страниц исходного текста, необходимо этот исходный текст заменить на текст в котором отражаются наиболее важные, в функциональном смысле, фразы в виде сегментов). Если расписать весь программный комплекс крупными сегментами, то описание всего комплекса может занять всего одну страницу, а это наглядно и удобно.

Любую программу можно составить только из структур трех типов: следования, ветвления и цикла (это базовые конструкции).

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

Функциональная декомпозиция

5. CS50 на русском: Лекция #5 [Гарвард, Основы программирования, осень 2015 год]


Похожие статьи.

Понравилась статья? Поделиться с друзьями: