Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

ББК 32.973 15 страница





Вариант 4 соответствует языку МОДУЛА-2, где также есть заменители, однако goto исключен. Следует подчеркнуть, что при наличии заменителей сфера применения goto резко сужается, так что удельный вес ошибок, связанных с его применением, заметно уменьшается; поэтому вопрос об исключении goto теряет прежнюю остроту.

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

Отживающий метод?

Вместе с тем структурное программирование породило преувеличенные надежды, которые сменились разочарованием и упреками в невыполнении обещаний. В самом деле, на начальном этапе развития структурной технологии не было недостатка в оптимистических прогнозах. Структурный подход даже называли “революцией в программировании”. В 1972 г. Дейкстра писал: “Мы научились столь многому, что в течение ближайших лет программирование может превратиться в деятельность, во многом отличающуюся от того, что имеется сегодня, — настолько отличающуюся, что мы должны очень хорошо подготовить себя к ожидающему нас шоку... Семидесятые годы завершатся тем, что мы окажемся способны проектировать и реализовывать такие системы, которые в настоящее время требуют напряжения всех наших способностей, причем расходы на них будут составлять лишь небольшой процент в человекогодах от их сегодняшней стоимости, и, кроме того, эти системы будут фактически свободны от ошибок” [5].

Оправдались ли эти прогнозы? Вот что пишет Н. Брусенцов в 1985 г. (т. е. спустя пять лет после обозначенного Дейкстрой “контрольного срока”): “Ожидавшегося эффекта эти мероприятия пока не дали. Трудозатраты на разработку и сопровождение программ, если и уменьшились, то незначительно. Надежность по-прежнему остается острейшей проблемой. Даже рьяные поборники идеи структурирования признают, что революция не удалась” [6]. В этих условиях некоторые авторы поспешили объявить структурное программирование “отживающим методом” [7].

ПРАВ ЛИ ИГОРЬ ВЕЛЬБИЦКИЙ?

Размышляя о причинах неудачи и стремясь поправить дело, И. Вель­бицкий предлагает радикальным образом пересмотреть само понятие “структура программы”. По его мнению, “структура — понятие многомерное. Поэтому отображение этого понятия с помощью линейных текстов (последовательности операторов) сводит практически на нет преимущества структурного подхода. Огромные ассоциативные возможности зрительного аппарата и аппарата мышления человека используются практически вхолостую — для распознавания структурных образов в виде единообразной последовательности символов” [8].

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

В настоящее время визуальное программирование бурно развивается, число его сторонников растет. Тем не менее, уместно спросить: в какой мере предлагаемый Вельбицким пересмотр понятия “структура программы” согласуется с пионерскими взглядами Дейкстры?

ЧЕТЫРЕ ПРИНЦИПА СТРУКТУРИЗАЦИИ БЛОК-СХЕМ,
ПРЕДЛОЖЕННЫЕ Э. ДЕЙКСТРОЙ

Попытаемся еще раз заглянуть в темные переулки истории и внимательно перечитаем классический труд Дейкстры “Заметки по структурному программированию”. К немалому удивлению, мы обнаружим, что основной тезис о структурных управляющих конструкциях (для обозначения которых названный автор вводит термины “сочленение”, “выбор”, “повторение” [2]) излагается с прямой апелляцией к визуальному языку блок-схем! Непосредственный анализ первоисточника со всей очевидностью подтверждает: дейкстрианская “структурная революция” началась с того, что Дейкстра, использовав блок-схемы как инструмент анализа структуры программ, предложил наряду с другими важными идеями четыре принципа структуризации блок-схем, которые в дальнейшем были преданы забвению или получили иное, по нашему мнению, слишком вольное толкование. Эти принципы таковы.

1. Принцип ограничения топологии блок-схем. Структурная программа должна приводить “к ограничению топологии блок-схем по сравнению с различными блок-схемами, которые могут быть получены, если разрешить проведение стрелок из любого блока в любой другой блок. Отказавшись от большого разнообразия блок-схем и ограничившись...тремя типами операторов управления, мы следуем тем самым некоей последовательностной дисциплине” [2].

2. Принцип вертикальной ориентации входов и выходов блок-схемы. Имея в виду шесть типовых блок-схем (if-do, if-then-else, case-of, while-do, repеat-until, а также “действие”), Дейкстра пишет: “Общее свойство всех этих блок-схем состоит в том, что у каждой из них один вход сверху и один выход снизу” [2].

3. Принцип единой вертикали. Вход и выход каждой типовой блок-схемы должны лежать на одной вертикали.

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

Хотя Дейкстра не дает словесной формулировки третьего и четвертого принципов, они однозначно вытекают из имеющихся в его работе иллюстраций [2]. Чтобы у читателя не осталось сомнений, мы приводим точные копии подлинных рисунков Дейкстры (рис. 131, средняя и левая графа)[21].

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

ПОЧЕМУ НАУЧНОЕ СООБЩЕСТВО НЕ ПРИНЯЛО
ВИДЕОСТРУКТУРНУЮ КОНЦЕПЦИЮ Э. ДЕЙКСТРЫ?

Далее события развивались довольно загадочным образом, поскольку вокруг видеоструктурной[22] концепции Дейкстры образовался многолетний заговор молчания.

Неприятность в том, что изложенные выше рекомендации Дейкстры не были приняты во внимание разработчиками национальных и международных стандартов на блок-схемы (ГОСТ 19.701–90, стандарт ISO 5807–85 и т. д.). В итоге метод стандартизации, единственный метод, который мог бы улучшить массовую практику вычерчивания блок-схем, не был использован, а идея Дейкстры оказалась наглухо изолированной от

Рис. 131. Структурные блок-схемы Дейкстры и эквивалентные им визуальные операторы языка ДРАКОН
131

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

Здесь уместно сделать отступление. Американский историк и философ Томас Кун в книге “Структура научных революций” говорит о том, что в истории науки время от времени появляются особые периоды, когда выдвигаются “несоизмеримые” с прежними взглядами научные идеи. Последние он, следуя Р. Бергману, называет парадигмами. История науки — история смены парадигм. Разные парадигмы — это разные образцы мышления ученых. Поэтому сторонникам старой парадигмы зачастую бывает сложно или даже невозможно понять сторонников новой парадигмы (новой системы идей), которая приходит на смену устоявшимся стереотипам научного мышления. По нашему мнению, текстовое и визуальное программирование — это две парадигмы, причем нынешний этап развития программирования есть болезненный процесс ломки прежних взглядов, в ходе которого прежняя текстовая парадигма постепенно уступает место новой визуальной парадигме. При этом — в соответствии с теорией Куна — многие, хотя и не все видные пред­ставители прежней, отживающей парадигмы проявляют своеобразную слепоту при восприятии новой парадигмы, которая в ходе неустанной борьбы идей в конечном итоге утверждает свое господство.

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

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

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

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

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

Мы подошли к наиболее интригующему пункту в истории структурного программирования. Чтобы выявить главное звено проблемы, зададим вопрос: являются ли блок-схемы и структурное программирование взаимно исключающими, несовместимыми решениями? В литературе по этому вопросу наблюдается редкое единодушие: да, они несовместимы. Вот несколько отзывов. Блок-схемы “не согласуются со структурным программированием, поскольку в значительной степени ориентированы на использование goto ” [4]. Они “затемняют особенности программ, созданных по правилам структурного программирования” [9]. “C появлением языков, отвечающих принципам структурного программирования,... блок-схемы стали отмирать” [10].

Парадокс в том, что приведенные высказывания основываются на недоразумении. Чтобы логический дефект стал очевидным, сопоставим две цитаты по методу “очной ставки” (табл. 5). Сравнивая мнение современных авторов с позицией Дейкстры, нетрудно убедиться, что описываемый критиками изъян действительно имеет место, но лишь в том случае, если правила вычерчивания блок-схем игнорируют предложенный Дейкстрой принцип ограничения топологии блок-схем. И наоборот, соблюдение указанного принципа сразу же ликвидирует недостаток.

Таблица 5

Мнение критиков, убежденных в невозможности структуризации блок-схем Предложение Э. Дейкстры о структуризации блок-схем
“Основной недостаток блок-схем заключается в том, что они не приучают к аккуратности при разработке алгоритма: ромб можно поставить в любом месте блок-схемы, а от него повести выходы на какие угодно участки. Так можно быстро превратить программу в запутанный лабиринт, разобраться в котором через некоторое время не сможет даже сам ее автор” [10] Структуризация блок-схем с неизбежностью приводит “к ограничению топологии блок-схем по сравнению с различными блок-схемами, которые могут быть получены, если разрешить проведение стрелок из любого блока в любой другой блок. Отказавшись от большого разнообразия блок-схем и ограничившись... тремя операторами управления, мы следуем тем самым некоей последовательностной дисциплине” [2]

ПЛОХИЕ БЛОК-СХЕМЫ
ИЛИ ПЛОХИЕ СТАНДАРТЫ?

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

! Обвинения, выдвигаемые противниками блок-схем, неправомерны, потому что ставят проблему с ног на голову. Дело не в том, что блок-схемы по своей природе противоречат принципам структуризации, а в том, что при разработке стандартов на блок-схемы указанные принципы не были учтены. На них просто не обратили внимания, поскольку в ту пору — именно в силу парадигмальной “слепоты” — считалось, что на практике структурное программирование следует применять к текстам программ, а отнюдь не к блок-схемам.

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

! Видеоструктурная концепция Дейкстры — это фундаментальная идея, высказанная более двадцати лет назад и оказавшаяся невостре­бованной, поскольку она значительно опередила свое время.

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

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

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

! Современные стандарты на блок-схемы (международный стандарт ISO 5807–85, отечественный ГОСТ 19.701–90 и другие национальные стандарты, в том числе американский стандарт ANSI), а также инст­рукции по их применению следует признать устаревшими, так как они игнорируют принципы структуризации, формализации и эргономизации и объективно содействуют снижению качества соответствующей интеллектуальной продукции.

БЛОК-СХЕМЫ И ТЕОРЕТИЧЕСКОЕ
ПРОГРАММИРОВАНИЕ

Наш интерес к структуризации и формализации блок-схем имеет и другую, не менее серьезную причину. Дело в том, что теоретическое программирование, в частности, теория схем программ (схематология) [11] и теория оптимизирующих преобразований программ [12] тесно связаны с теорией графов. По словам А. Ершова, “графы являются основной конструкцией для программиста”, так как они “обладают огромной, неисчерпаемой изобразительной силой, соразмерной масштабу задачи программирования” [13].

Для наших целей особенно важным является тот факт, что “графовая форма схем программ” [11] или, что одно и то же, “графовая схема” [14] (короче, граф-схема) аналогична блок-схеме [11, 12]. Более того, как убедительно показал А. Ершов, использовавший блок-схемы в качестве граф-схем [15], разграничение этих понятий является в некотором смысле условным. Различия в начертании (топологии) блок-схем и граф-схем несущественны, а наличие двух терминов оправдывается скорее разными сферами применения, так как термин “блок-схема” используется преимущественно в практическом, а “граф-схема” — в теоретическом программировании.

НОВЫЕ ЦЕЛИ СТАНДАРТИЗАЦИИ БЛОК-СХЕМ

Изложенная выше постановка проблемы нуждается в обобщении и уточнении, что мы и сделаем в форме шести тезисов.

! Существуют три сферы применения блок-схем:

1) практическое программирование;

2) теоретическое программирование;

3) учебная и научно-техническая литература[23].

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

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

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

! Теоретическое обоснование предполагаемого стандарта должно подразумевать два момента. Во-первых, в основу концепции формализации блок-схем следует положить математический (теоретико-гра­фовый, алгебраический и логический) взгляд на проблему блок-схем. Во-вторых, следует учесть, что в терминах инженерной психологии блок-схемы относятся к классу абстрактных систем отображения информации, которые “служат сенсорной опорой для выполнения человеком логических или математических операций” [16]. Поэтому синтаксис формальных блок-схем следует проектировать с учетом рекомендаций когнитивной эргономики. Поскольку формальные блок-схемы предназначены не только для автоматической обработки в компьютере, но и для зрительного восприятия человеком, постольку их синтаксис следует строить с учетом характеристик зрительного анализатора, учитывать системную организацию человеческого зрения (принцип эргономизации).

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

! Правила визуального структурного программирования (или, что одно и то же, визуальный синтаксис языка ДРАКОН) удовлетворяют пере­численным требованиям и, следовательно, могут быть положены в основу проекта упомянутого стандарта, а гарантом его выполнения и единого понимания может стать визуальный ДРАКОН-редактор.

ЧЕМ ОТЛИЧАЮТСЯ БЛОК-СХЕМЫ
ОТ ДРАКОН-СХЕМ?

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

С точки зрения правил языка ДРАКОН, первая блок-схема на рис. 132 (заимствованная из [5]) имеет следующие недостатки.

! Неоправданно большое число изломов линий (в блок-схеме 16 изломов, в дракон-схеме только 5).

! Большое число “паразитных” элементов: 18 стрелок и 4 кружка, которые в дракон-схеме отсутствуют.

Рис. 132. Преобразование блок-схем в эквивалентные дракон-схемы
132лев

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

! Функционально однородные иконы Ф1 — Ф5 в блок-схеме разбросаны по всей площади чертежа, занимая четыре разных горизонтальных уровня; в дракон-схеме они расположены на одном уровне, что служит для читателя наглядной подсказкой об их функциональной однородности.

! Ромбы имеют выход влево, что в дракон-схеме не допускается.

! Икона Ф1 и ее вертикаль расположены слева от шампура (в дракон-схеме это запрещено).

! Ниже икон Ф4, Ф5 имеется четыре уровня горизонтальных линий, которые имеют “паразитный” характер; в дракон-схеме четыре уровня сведены в одну линию.

Вторая блок-схема на рис. 132 (взятая из [17]) имеет следующие изъяны.

! Слева от иконы А2 имеется пересечение линий (в дракон-схеме пересечения запрещены).

! Возле иконы Е3 имеется линия под углом 45º (в дракон-схеме наклонные линии не допускаются).

! Иконы А2, А3 и Е3 имеют более одного входа (в дракон-схеме это запрещено).

! Иконы А1, А2, А3, Е3 имеют входы сбоку (в дракон-схеме вход разрешается только сверху).

! Отсутствует шампур, так как выход иконы “заголовок” и вход иконы “конец” не лежат на одной вертикали.

Предыдущие два примера “плохих” блок-схем были случайным образом взяты из технической литературы. Следующий (третий) пример (см. рис. 132) скопирован из источника [18], где он характеризуется как “стандартная блок-схема ANSI” (Американский национальный институт стандартов). Блок-схема, выполненная по американскому стандарту, также имеет многочисленные дефекты:

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

! Икона G имеет два входа (в дракон-схеме разрешается только один вход).

! Икона G имеет вход сбоку (в дракон-схеме это запрещено).

! У иконы G выход находится слева (в дракон-схеме он должен быть снизу).

! Две петли обратной связи обычного цикла находятся слева от шампура и закручены по часовой стрелке (в дракон-схеме они расположены справа от шампура и закручены против часовой стрелки).

! Используются неудобные ромбы (в дракон-схеме их заменяют эргономичные иконы “вопрос”).

! Ромб L имеет выход слева (в дракон-схеме он должен быть справа).

! Используются 12 стрелок, из которых 10 — паразитные (в дракон-схеме всего 2 стрелки).

! Имеется один избыточный излом линии (в блок-схеме 9 изломов, в дракон-схеме только 8).

Таким образом, американская блок-схема, как и предыдущие при­меры, по всем параметрам проигрывает дракон-схеме.

В ЧЕМ СХОДСТВО ВИЗУАЛЬНОГО И ТЕКСТОВОГО СТРУКТУРНОГО ПРОГРАММИРОВАНИЯ?

Можно предложить девять правил, устанавливающих соответствие между понятиями шампур-метода и классического структурного кодирования.

1. Понятие “функциональный атом” (рис. 122) эквивалентно понятиям “функциональный узел”, “функция” [3] и “узел обработки” [5], используемым в литературе по структурному программированию.

2. Макроикона “развилка” (рис. 122), в которую произведен ввод функционального атома в левую или обе критические точки, эквивалентна конструкциям if-then и if-then-else соответственно [3] — см. также две верхние графы на рис. 131.

3. Макроикона “обычный цикл” (рис. 122), в которую произведен ввод функционального атома в одну или обе критические точки, экви­валентна конструкциям do-until, while-do, do-while-do соответственно [3] — см. две нижние графы на рис. 131.

4. Непустая макроикона “переключатель” (рис. 122), в которую введено нужное число икон “вариант” с помощью операции “добавление варианта”, эквивалентна конструкции case [2] — см. рис. 131.

5. Непустая макроикона “цикл ДЛЯ” (рис. 122) эквивалентна циклу for языка СИ.

6. Непустая макроикона “переключающий цикл” (рис. 122), в которую введено нужное число икон “вариант”, эквивалентна циклу с вложенным оператором саse, используемым, например, при построении рекурсивных структурированных программ по методу Ашк­рофта—Манны [3].

7. Шампур-блок — видеоструктурный эквивалент понятия “простая программа” [3].

8. Атом — общее понятие для основных составляющих блоков, необходимых для построения программы согласно структурной теореме Бома и Джакопини [1]. Оно охватывает также все элементарные структуры структурного кодирования, кроме последовательности [3] (последняя в шампур-методе считается неэлементарной структурой).

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

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

В ЧЕМ РАЗЛИЧИЕ ВИЗУАЛЬНОГО И ТЕКСТОВОГО
СТРУКТУРНОГО ПРОГРАММИРОВАНИЯ?

Структурные, лианные и адресные блоки

Шампур-метод позволяет строить как структурные, так и метаструктурные (лианные) программы. Выше мы выяснили, что базовые операции моделируют классическое структурное кодирование. Чтобы смоделировать полезные функции оператора goto, в шампур-методе предусмотрены операции “пересадка лианы” и “заземление лианы”.

Введем три понятия.

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

Лианный блок — шампур-блок, полученный из структурного блока с помощью операции “пересадка лианы”.

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

В примитиве могут использоваться только структурные и лианные блоки (рис. 133, 134), в силуэте — все три типа блоков: структурные, лианные и адресные (рис. 135, 136)[24].

Операции с лианой и оператор goto

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

Чтобы убедиться в этом на примере, вернемся к анализу рис. 27. В гл. 7 мы рассмотрели эргономические преимущества схемы на рис. 27 б по сравнению с рис. 27 а. Было показано, что улучшение эргономич­ности достигнуто за счет использования равносильных преобразований алгоритмов: вертикального и горизонтального объединения. При этом за кадром осталась важная проблема — проблема синтаксиса: как построить указанные схемы? Теперь мы имеем возможность осветить этот вопрос. Схема на рис. 27 а представляет собой структурный блок, полученный с помощью операции “ввод атома”. В отличие от нее схема на рис. 27 б — это лианный блок, построенный методом пересадки лианы.

Уместно вспомнить предостережение Г. Майерса: “Правила структурного программирования часто предписывают повторять одинаковые фрагменты программы в разных участках модуля, чтобы избавиться от употребления операторов goto. В этом случае лекарство хуже болезни; дублирование резко увеличивает возможность внесения ошибок при изменении модуля в будущем” [4]. Как видно из рис. 26 и 27, пересадка лианы позволяет элегантно и без потерь решить эту непростую проблему, одновременно улучшая наглядность и понимаемость программы, обеспечивая более эффективное топологическое упорядочивание маршрутов.

Рис. 135. Силуэт, построенный из структурных блоков
Рис. 133. Примитив, построенный из структурных блоков
Рис. 134. Примитив, построенный из структурных и лианных блоков
133 — 135 117, 118

136, 137







Дата добавления: 2015-10-12; просмотров: 623. Нарушение авторских прав; Мы поможем в написании вашей работы!




Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...


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


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


ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Кишечный шов (Ламбера, Альберта, Шмидена, Матешука) Кишечный шов– это способ соединения кишечной стенки. В основе кишечного шва лежит принцип футлярного строения кишечной стенки...

Принципы резекции желудка по типу Бильрот 1, Бильрот 2; операция Гофмейстера-Финстерера. Гастрэктомия Резекция желудка – удаление части желудка: а) дистальная – удаляют 2/3 желудка б) проксимальная – удаляют 95% желудка. Показания...

Ваготомия. Дренирующие операции Ваготомия – денервация зон желудка, секретирующих соляную кислоту, путем пересечения блуждающих нервов или их ветвей...

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

Признаки классификации безопасности Можно выделить следующие признаки классификации безопасности. 1. По признаку масштабности принято различать следующие относительно самостоятельные геополитические уровни и виды безопасности. 1.1. Международная безопасность (глобальная и...

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

Studopedia.info - Студопедия - 2014-2024 год . (0.01 сек.) русская версия | украинская версия