- •Глава II
- •12. Предварительные замечания о процессе разработки программ
- •12.1. Жизненный цикл математического обеспечения
- •12. Предварительные замечания о процессе разработки программ
- •12.1. Жизненный цикл математического обеспечения
- •12.2. Анализ требований
- •12.3. Пример задачи
- •13.1. Обзор процесса проектирования
- •13.2.1. Вводный раздел
- •13.2.2. Разделы абстракций
- •13.8. Абстракция строки
- •13.9. Обзор и обсуждение
- •14. Этап перехода от проектирования к реализации
- •14.1. Оценка проекта
- •14.1.1. Корректность и эффективность
- •14.1.2. Структура
- •15.2. Выбор подхода
13.2.1. Вводный раздел
Во вводном разделе перечислены все определяемые абстракции, а также содержатся сведения о том, где в журнале расположена относящаяся к ним информация. Также должно указываться, какие вспомогательные абстракции используются для имеющихся целевых абстракций. Документация имеет форму диаграммымодульной зависимости,определяющей все используе-емые в процессе проектирования абстракции (указанные спецификации или введенные как вспомогательные) и показывающей их взаимосвязи.
Диаграмма модульной зависимости состоит из узлов и дуг. Узлы представляют абстракции, и каждый узел содержит имя абстракции. Имеется три типа узлов, по одному на каждый используемый нами тип абстракций. Узлы, подобные Р и Qна рис. 13.1,представляют процедуры; узлы, подобные Е и D— представляют типы данных, а подобные 1 —представляют итераторы. Дуги показывают, какие абстракции используют при реализации другие абстракции. Мы говорим, что целевая абстракцияиспользуетвспомогательные илизависитот них. Целевая абстракция использует процедуру или итератор, обращаясь к нему. Тип данных используется в том случае, если вызывается одна или несколько его операций. На диаграмме не указываются конкретные операции. Указанная зависимость является результатом использования любой операции. Более подробная запись перегрузит? диаграмму и усложнит работу о ней. Если необходима дополни-
Рис. 13,1. Диаграмма модульной зависимости,
тельная информация, то она указывается в примечаниях к диаграмме.
Иногда абстракция использует объект типа без обращения к операциям типа. Например, она может получать объект в качестве аргумента и просто передавать его другой абстракции. В таком случае мы говорим, что целевая абстракцияслабоиспользует тип. Для обозначения этого используется специальная пунктирная дуга,
Зависимости определяют уровень узлов. Абстракция А находится на более высоком уровне, чем абстракция В, если А зависит от В,аВ не зависит от А (т. е. отсутствует прямая или косвенная рекурсия). Если А и В зависят друг от друга, то они должны быть указаны на одном и том же уровне.
На рис. 13.1процедура Р должна быть реализована при помощи трех вспомогательных абстракций, Q, Dи 1. Qпредставляет собой еще одну процедуру. Ее реализация использует D.Е и D есть типы данных. Реализация В использует D,но Dне использует вспомогательных абстракций. 1есть итератор; он определен в терминах самого себя, т. е. является рекурсивным. Отметим,410вся структура представляет собой направленный граф. Это не дерево, поскольку одна абстракция может использоваться при реализации нескольких других. Отметим также, что граф может включать в себя циклы. Циклы появляются там, где имеет место рекурсия. Если в реализации абстракция используется непосредственно, то это отмечается дугой, исходящей из данного узла и заканчивающейся на нем же (как в случае 1на рис. 13.1).Циклы, содержащие более одной дуги, представляют собой связанную рекурсию. В общем случае рекурсия оправдана, если решаемая задача рекурсивна по своей природе. Мы видели примеры естественной рекурсии при анализе реализаций списков listи sortedJist в гл. 4.Однако при использовании слишком длинных циклов о большим числом дуг нужно быть особенно осторожным.
Диаграмма модульной зависимости полезна при обнаружении ошибок. Ошибка в проектировании проявляется в виде ошибки в абстракции. Например, эффективная реализация становится невозможной или отсутствуют необходимые аргументы. Потенциальные последствия ошибки могут быть определены анализом ди?.граммы. Реализации всех абстракций, использующих ошибочную, должны быть пересмотрены. (При этом пересмотре могут обнаружиться другие неверно составленные абстракции и т. д.) Абстракция, слабо использующая ошибочный тип, реагирует на ошибку в том случае, если тип полностью исчезает, а не в случае, когда тип изменяется или подменяется другим. Например, для задачи на рис. 13.1при обнаружении проблемы g Dнеобходимо пересмотреть реализации только для Е и Р, поскольку Qи 1 затронуты не будут. Разумеется, если повторный анализ Е при-
274 Глава !3
ведет к необходимости внесения изменен: ий в ее спецификацию) мы вынуждены будем пересмотреть та^сже реализацию Q.
Вводный раздел рабочего журнала должен также содержать информацию об общем процессе реализаци и проекта. В нем должно учитываться число людей, предположительно привлекаемых к проекту, последовательность реализации -различных абстракций) а также продолжительность выполнения отдельных этапов. В ней также должен быть предложен набор т-^стов, предназначенных для уже законченной реализации. В гл. 14гобсуждаются стратегии, используемые в процессе реализации.