Глава 30
РЕКОМЕНДАЦИИ ПО ИСПОЛЬЗОВАНИЮ АЛГОРИТМИЧЕСКИХ
СТРУКТУР «СИЛУЭТ» И «ПРИМИТИВ»
§1. ЧТО ЛУЧШЕ: СИЛУЭТ ИЛИ ПРИМИТИВ?Предположим, вы собираетесь начертить дракон-схему. Какую структуру
лучше выбрать: силуэт или примитив?
Этот вопрос в упрощенном виде обсуждался в главе 6. В этой главе мы
дадим более подробные и окончательные рекомендации.
§2. ГОЛОВНОЙ АЛГОРИТМ
И ДВА МЕТОДА СОЗДАНИЯ АЛГОРИТМОВГоловной алгоритм — это алгоритм самого верхнего уровня на лестнице
декомпозиции. Головной алгоритм может содержать вставки (вызываемые
процедуры). Но сам он не может быть вставкой для алгоритма более
высокого уровня.
Головной алгоритм — это всегда силуэт. Он не может быть примитивом.
Для создания головного алгоритма используют два метода, которые могут
дополнять друг друга:
• метод наглядной декомпозиции;
• метод многостраничного силуэта.
Метод наглядной декомпозиции описан в главе 21. Метод многостраничного
силуэта изложен ниже.
§3. КАК НАРИСОВАТЬ БОЛЬШОЙ АЛГОРИТМПолезно различать три понятия:
• большие алгоритмы;
• средние алгоритмы;
• малые алгоритмы.
1. Чтобы создать большой алгоритм, следует использовать систему силуэтов.
2. Головной алгоритм большой схемы обязательно должен быть силуэтом.
3. Алгоритм надо рассматривать как последовательную декомпозицию
силуэтов.В том смысле, что каждый силуэт может содержать много
вставок, каждая из которых раскрывается как силуэт.
4. Ни в коем случае нельзя представлять головной алгоритм как систему
примитивов. Потому что в этом случае НЕВОЗМОЖНО БЫСТРО УВИДЕТЬ
ГЛАЗАМИ, как эти примитивы логически связаны между собой. Чтобы понять
эту связь, нужен трудоемкий мыслительный анализ, который требует усилий,
отнимает время и снижает производительность труда.
5. Если кто-либо (по ошибке) начнет рисовать головной алгоритм в виде
системы примитивов, надо немедленно прекратить работу. И превратить
примитивы в силуэт. При этом каждый примитив превращается в ветку
силуэта. Иногда часть примитивов превращается в ветки силуэта более
низкого уровня на лестнице декомпозиции.
6. Пример. На рис. 183—185 показано, что любой, сколь угодно большой
и сложный алгоритм можно изобразить в виде системы силуэтов.
Головной алгоритм представлен на рис. 183. Силуэты более низкого
уровня формируются из головного алгоритма с помощью вставок.
При этом используется простой и единообразный прием — наглядная
декомпозиция.
Вставки нижних уровней изображаются в виде примитива только
как исключение.
§4. ОДНОСТРАНИЧНЫЙ И МНОГОСТРАНИЧНЫЙ СИЛУЭТГоловной алгоритм большого или среднего размера может быть:
• одностраничным силуэтом;
• многостраничным силуэтом.
Одностраничный силуэт размещается на одном листе бумаги
согласно стандарту ЕСКД (например, формата А1 и т.д.). Примеры
показаны на рис. 183—185.
Многостраничный силуэт размещают на нескольких листах бумаги
(например, формата А1 и т.д.)
Рассмотрим пример. На рис. 218—221 изображен силуэт, показанный
в виде комплекта из четырех листов формата А3.
Мысленно расположите на столе листы по горизонтали слева направо.
Пронумеруйте листы 1, 2, 3, 4. Все четыре листа связаны соединителями.
В данном примере силуэт из четырех листов содержит 19 веток
(рис. 218—221).
Число листов в дракон-схеме формально не ограничено. Но практика
показывает, что многостраничный силуэт редко содержит более 32 веток.
§5. КАК НАРИСОВАТЬ СРЕДНИЙ АЛГОРИТМСредний и большой алгоритмы различаются только размерами. Методика
их создания одна и та же. Она описана в §§3 и 4.
§6. КАК НАРИСОВАТЬ МАЛЫЙ АЛГОРИТМАлгоритмы малых размеров рисуют в виде примитива. Примеры показаны
на рис. 32, 56, 79, 80, 90, 91, 128, 168, 169, 186, 201, 202, 205.
Сравнивая силуэт и примитив, можно отметить следующее.
1. Силуэт — главное достоинство языка ДРАКОН. Он обладает мощными
выразительными средствами. В реальной работе силуэт используется
в подавляющем большинстве случаев.
2. Примитив применяют крайне редко, скорее как исключение.
3. Тем не менее, полностью отказываться от понятия «примитив» не следует
по двум причинам.
4. Первая причина — педагогическая. Примитив — это прообраз (зародыш)
ветки. Основные понятия и правила ДРАКОНа удобно объяснять на самой
простой модели. То есть на примитиве. И только после этого переходить
к рассказу о силуэте.
5. Вторая причина — необходимость описания «мелких огрызков».
Откуда берутся «мелкие огрызки»?
В процессе декомпозиции силуэта может случиться (довольно редко),
что какая-нибудь вставка окажется очень простой, элементарной.
Настолько простой, что ее неудобно представлять в виде силуэта.
Такую вставку можно назвать «мелким огрызком». Вот в этом
(исключительном) случае полезно использовать примитив.
§7. СОЕДИНИТЕЛЬУже говорилось, что при создании многостраничного силуэта
необходимы соединители.
Икона «соединитель» имеет вид кружка (рис. 17, икона И26). Она позволяет
соединять горизонтальные шины (линии), находящиеся на соседних листах.
Иначе говоря, соединитель служит для перехода линии с листа на лист.
Рассмотрим пример.
На первом листе (рис. 218) есть два соединителя (см. справа 1 и 2).
На втором листе (рис. 219) — четыре соединителя (слева 1, 2, справа 3, 4).
На третьем листе (рис. 220) — четыре соединителя (слева 3, 4, справа 5, 6).
На четвертом листе (рис. 221) — два соединителя (слева 5, 6).
§8. ВЫВОДЫ1. Алгоритмы следует рисовать как силуэты.
2. Сложные алгоритмы следует изображать как силуэты, в которых
многократно используются иконы «вставка». Последние, в свою очередь,
раскрываются как силуэты и т.д.
3. В сложных случаях удобно использовать многостраничные силуэты.
4. Примитивы рекомендуется применять только в крайних случаях.
_________________________________________________________
Эта глава взята из моей пока еще не законченной книги.
Но примерно такой же (но более короткий) материал есть в книге "Дружелюбные алгоритмы,
понятные каждому" М.: ДМК-пресс, 2010.
См. глава 20. стр. 321--323.