Название: Вопросно-ответное программирование человеко-компьютерной деятельности( Соснин П.И.)

Жанр: Информационные системы и технологии

Просмотров: 1887


2.4. псевдопрограммирование

2.4.1. Что такое псевдопрограммированиеВ  алгоритмической  практике  с  разными  целями  широко использовали и используют в настоящее время методы и средства псевдопрограммирования.Под псевдопрограммированием задач понимают их программирование, осуществляемое на языке, промежуточном между естественным языком (в его алгоритмическом употреблении) и языками компьютерного программирования. Хороший язык псевдокодового программирования  должен быть как можно ближе к естественному языку  задачи  (или  определённой  группы  задач),  но  его  псевдокодыдолжны быть похожи на исходные коды компьютерных программ.Псевдокоды – это программные тексты, записанные на ограниченном естественном языке, дополненном средствами, которые позволяют писать эти тексты, подобно исходным кодам, а читать и понимать их как будто они написаны на естественном языке.Более конкретно, в любом языке псевдопрограммирования LPk используют лексику тех задач, для программирования которых язык LPk создан или выбран и модифицирован. В состав лексики языка включаютопределённый     набор     ключевых     слов,     которые     используются в операторах компьютерных языков (и привычны даже для тех, кто имел элементарный опыт компьютерного программирования) или являются синонимами этих ключевых слов.Основная нагрузка на ключевые слова – указать на действия, соответствующие базисным операторам языков компьютерного программирования (например, get, put, read, write, display, goto, if…

then … else, for, repeat …until, do… while). Принято выделять имена действий, используемых в операторах псевдокода.В записи псевдокодов принято использовать формы, подобные формам, применяемым в исходных кодах:1.    Псеводкодовым        программным            текстам           присваивают имена(заголовок псевдокодового текста TP).2.  Каждый текст TPk  связывают с выполнением определённой работы.3.  Типовым текстам TPk  приписывают статус процедуры или функции, отмечая тот факт ключевыми словами (например, procedure или function).4.         Каждый простой оператор записывают в строку.5.         Составной оператор разбивают на строки.6.   В записи операторов используют отступы и скобки (например, begin и end).7. Для  связывания псевдотекстов используют вызовы,  например,типа call.Если не предусмотрена обработка псевдокода с помощью претранслятора  или  транслятора,  то  лицо,  использующее  язык  LPk вправе выбирать наиболее подходящие ему ключевые слова (и не обязательно на английском языке) и формы записи. Строгие требованияк языкам типа LPk отсутствуют.Главная цель псевдокодекса состоит в том, чтобы определить процедурную логику алгоритма в простой, легкой для понимания манере для ее читателей, которые возможно, не являются опытными в программировании.Для     демонстрации            сходства         и          различий        компьютерных и псевдокодовых программ приведём следующий пример:

а) Pseudocode:if номер кредитной карты действителен then Обслужить запрос в соответствии с суммой и заказом elseВывести сообщение об отрицательной реакции на запросend ifb) PHP-текст:<?phpif (is_valid($cc_number)) {execute_transaction($cc_number, $order);} else {show_failure();}?>Пример выбран специально, чтобы показать близость демонстрационного   псевдокода,   как   к   естественному   языку,   так и к исходному PHP-тексту.Ещё одной версией записи псевдокодовой программы   является следующий пример:1.       Get 2 positive integers as input. Call the larger I and the smaller J.2.   Divide I by J and call the remainder R.3.   While R is not 01.   Reset I to the value of J2.   Reset J to the value of R3.   Reset R to the remainder of dividing the new I by the new J.4.   End of While5.   Return J.2.4.2. Кто и почему псевдопрограммируетПсевдопрограммирование является деятельностью, которую выполняют по определённым причинам заинтересованные в такой деятельности люди. Обобщённо их назовём и представим причины, по которым они псевдопрограммируют:

1. Профессиональный программист, создавая предварительный упрощенный проект (макет) программы, для того чтобы:  понять     и          убедиться,      что      фактическое   программирование,вероятно, будет соответствовать спецификациям проекта; структурировать     будущую     программу     и     обобщённо алгоритмизовать структурные части, каждая из которых будет разработана, возможно, другим программистом;  проверить (протестировать) логику программы.2. Специалист, использующий специальный компьютерный инструментарий    с    псевдопрограммной    настройкой    на    решение с помощью инструментария определённых задач.3. Учитель информатики, который обучает школьников программистскому мышлению на примерах, в освоении и развитии которого можно обойтись без компьютера.4.  Автор  учебника  или  учебного  пособия  по  программированию,включившего в тексты примеры по программированию.5. Автор научной статьи, раскрывающий алгоритмическую сущность предлагаемого им решения или решений.6. Автор руководства по использование технического или бытового устройства с программируемой логикой функционирования или с трудно запоминаемыми настройками на функции.7.  Создатель  плана  действий  или  методики  выполнения определённой совокупности действий (индивидуальных или коллективных),     выполняемых     в      деятельности     любого     вида с использованием любых полезных инструментов (применение компьютеров не является обязательным).8. Любой субъект, принявший решение использовать псевдопрограммирование для решения стоящей перед ним задачи.

Из приведённого перечня сначала раскроем пункт 2. В различных программных приложениях используются так называемые мастера, включённые в приложение по разным причинам. За каждым мастером стоит управляемое (выборами пользователя) исполнение определённой совокупности действий, что можно квалифицировать как исполнение псевдопрограммы.Кроме мастеров, в которых псевдопрограммирование встроено неявно, в ряде приложений он используется явно. Одним из таких приложений является Matlab, скриншот из которого с псевдопрограммой приведён на рис. 2.14.Рис. 2.14. Псевдопрограммирование в Matlab2.4.3. Пошаговая детализацияИз  названных  выше  причин  псевдопрограммирования  раскроем в  деталях  проектное  псевдопрограммирование, получившее  название«пошаговая   детализация»   (в   англоязычной   терминологии   stepwise refinement – «пошаговая разумная очистка» в пословном переводе).

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

Задача_Z(Z1, Z1, …, ZL) 1-й шаг T1(Z)

Z1(Z11, Z12, …, Z1N) 2-й шаг T2(Z)…         ZL(ZL1, ZL2, …, ZLM)

Z11(Z111, Z112, …, Z11P) …        ……  (Z1N1, Z1N2 …, Z1NQ) …3-й шаг T3(Z)…….

…        …        …        …        …        … R-й шаг T1(Z)

Рис. 2.15. Пошаговая детализация с позиции дерева задачПошаговая детализация начинается с формулировки исходной постановки задачи T1(Z) и построения её решения, выраженного через подчинённые задачи Z(Z1, Z1, …, ZL), которые будут представлены их постановками задач {T1(Zl)} и деталями на втором шаге. Со вторым шагом будет связано решение уточнённой версии постановки задачи T2(Z), формулировка которой синтезирована из совокупности текстов T1(Z) и {T1(Zl)}.

На третьем шаге и так далее до требуемого уровня детализации (обычно разного для разных направлений детализации) осуществляются действия, подобные тем, о которых уже сказано. В результате образуется дерево задач, решённых с помощью средств проектирования программ (выбранных и используемых создателем программы средств псевдопрограммирования).На рис. 2.15 отражено, что в пошаговой детализации предусмотрены возвраты назад для корректировки уже принятых решений, что осуществить намного дешевле, чем для возвратов в исходных кодах.Для того чтобы прояснить механизмы реализации пошаговой детализации,  представим  их  использование  в  следующей  задачнойситуации:Агент по продаже компьютеров (коммивояжер) должен обслуживать район с известным количеством «городов». Компания, с которой коммивояжер связан, возвращает ему только часть дорожных расходов, коммивояжер вычислил, сколько будет стоить переезд из «города» в «город» на обслуживаемой им территории. Его интересует программа, которая позволила ему вычислять маршруты переездов, на которых его расходы за проезд были бы минимальны.Текст, описывающий задачную ситуацию, представляет собой её знаковую модель с определённым объёмом неопределённостей, которые должны  быть  в  достаточной  мере  сняты  при  «переводе»  описания в исходную постановку задачи.Предположим, что в результате перевода задачной ситуации коммивояжера сформулирована следующая исходная постановка задачи:

Задано  множество  «городов»,  в  котором  любые  два«города» связаны «дорогой», которая не содержит на её трассе других «городов». Стоимость проезхда по каждой«дороге» известна. Требуется разработать программу, которая могла бы определить «тур», который начинается и заканчиваетсяв одном из городов и стоимость проезда по которому минимальна.Перейдём  к  проектированию  решения  задачи  с  использованием пошаговой детализации.1. Шаг первый:Job Задача коммивояжера;data      среда;  /первый            шаг      начинается     c          выбора            и предварительной спецификации входных и выходных данных/sequence перечень_«городов»;sequence перечень_стоимостей переезда;sequence рекомендуемый тур;text текст (сообщения);atad;/закрывающая скобка для data/proc коммивояжер; / первый шаг разумно оформить в виде линейной последовательности задач/use среда;call контроль среды; /входные данные обычно приходится контролировать на их корректность /call преобразование среды в машинную среду; /от входных данных, формируемых человеком, логично переходит   их представлениям, ориентированным на компьютер/call поиск тура;/базовая функциональность/call ответ; /подготовка и вывод результата/corp. / закрывающая скобка для proc/Отметим,  что  приведённые  псевдокоды  первого  шага  выражают целостное решение задачи коммивояжера.

2. Второй шаг:На втором шаге построим псевдокоды только для процедур контроля и преобразования среды, то есть входных данных, вводимых коммивояжером,   который   легко   может   ошибаться   в   их   записи. В процедуру контроля разумно вложить и проверку возможности реализации базовой функциональности (поиска тура). Если исходить из реализации этой функциональности в виде полного перебора, то есть опасность   столкнуться   с   «комбинаторным   взрывом»   из-за   числа«городов» (предположим, что допустимое значение числа меньше 20).Контроль входных данных свяжем со следующим программным решением:proc  контроль  среды;  /   предполагается  ввод  всех  данных коммивояжером/use среда;call         применимость           алгоритма;     /оценка           возможности омбинаторного взрыва /call контроль перечня стоимостей; / в последовательности из элементов «город_i, город_j, стоимость;» /call  контроль  соответствия  входных  последовательностей;/перечня городов и перечня стоимостей/corp.От  форм  записи  входных  данных  перейдём  к  их  внутреннему представлению, в котором  каждому городу вместо его имени назначенопорядковое число, соответствующее его месту в перечне:proc преобразование среды;use среда;call   формирование   словаря;   /регистрация   приписанных городам их номеров /call формирование матрицы стоимости; / для индексации используются номера городов /corp.

3. Третий шаг:Для третьего шага приведём только процедуру контроля на возможный комбинаторный взрыв из-за того, что число городов превышает   введённое   ограничение   «20».   Такой   контроль   свяжем с  процедурой,  псевдокод  которой  уже  можно  переводить  на  языкалгоритмического языка:proc применимость алгоритма; / полный перебор/use среда; N = 0; whilenoend        (перечень       городов)         /            функция         проверяет кончился список городов или нет/+doN = N + 1;перечень   городов          =            delete  (перечень_городов);/функция  удаляет  из  текущего  состояния  перечня  городов первый элемент/od;if N> 20then do put (“комбинаторный взрыв”)stop; od; fi;corp;Детализация контроля применимости алгоритма на третьем шаге прекращается, но это не означает, что она завершится на третьем шаге для всех направлений кодирования, выбранных в демонстрационном проекте. Представленных шагов детализации в примере вполне достаточно для того, чтобы понять» «каким образом псевдопрограммирование применяется для проектирования программ». Отметим,   что   в   настоящее   время   для   проектирования  программ, особенно сложных программных комплексов, широко используется диаграмматика (UML-диаграммы и диаграммы других видов).

2.4.4. Псевдопрограммирование и прецедентыПсевдопрограммирование    во     всех     его     версиях     понимания и применения нацелено на построение моделей задач с позиций их решения.  Любая  псевдопрограмма,  как  модель  решения соответствующей ей задачи, предназначена для порождения ответов на вопросы, которые были вложены в эту модель.В число вопросов, вложенных в псевдопрограммы (как   модели задач), введем вопросы, связанные с использованием псевдопрограммирования в построении и применениях моделей прецедентов.Рассмотрим позитивы псевдопрограммирования, представленные выше, в их проявлениях к решениям задач, в которых используются модели прецедентов.Начнём с позитивов пошаговой детализации. В пошаговой детализации  построение  решения  задачи  Z  шаг  за  шагом  приводит к выделению подчинённых задач, поиску и построению их эскизных (концептуально-алгоритмических) решений, в результате чего оперативно формируется дерево задач. Если за какими то из подзадач стоят прецеденты, то в общий псевдокод логично включать модели прецедентов,   также    представленные   на    используемом   в    задаче Z псевдокодовом языке.Выводы по второй главе1. В  наиболее  общем  плане  программирование является специфическим видом деятельности DP, в основе которого лежит особая форма организации проблемного мышления (действующего субъекта Sb) и деятельности DP, согласованно нацеленных на построение программ действий для реагирования в задачных ситуациях.2. Проблемное мышление в программировании базируется на естественном программировании (N-программировании), которое осуществляется в виде деятельности DE, использующем естественный

LE       или      естественно-профессиональный     язык    LEP     в          его алгоритмическом употреблении.3.   Для осуществления   деятельности DP, в состав которой входит DE,    человечеством    за    его    длительную    историю    разработано и    используется    множество    методов    и    средств,    в    том    числе и    инструментальных,   среди   которых   не    так    давно   появилсякомпьютер.4.   Изобретение  и            освоение        компьютерных          инструментов            IK

привело          к            возможности

введения        в            состав

деятельности DP

принципиально            новой

составляющей           –

компьютерного

программирования   DK,

дополняющего            DЕ

и            существенно

повышающего  эффективность  программ  действий,  разрабатываемыхсубъектом Sb.5.   Эффективность компьютерного программирования DK, в первую очередь его результативность (класс задач, которые оно в составе DP позволяет  решать)  в  существенной  мере  зависит  от  возможностейинструментария IK  и от такого, насколько программирующий субъектвладеет инструментарием IK.6. Повторное использование, за которым стоят прецеденты компьютерного программирования, занимает в DK  особое место, определяя  одну  из  важнейших  причин  его  эволюционного  развития (..., объектно-ориентированное, сервисно-ориентированное, агентно- ориентированное, ...).7. Год за годом инструментальные средства компьютерного программирования (как аппаратные средства, так и программные) беспрерывно усложняются, упрощая высокопрофессиональное компьютерное программирование.8. Практика   обучения   компьютерному   программированию демонстрирует, что существует проблема всеобщей «компьютерной грамотности», обусловленная не недостатком компьютеров, а низкой результативностью обучения (процент числа лиц, овладевших элементарным компьютерным программированием, от числа обучавшихся).9.        Реальность   компьютерного   программирования   такова,   чтослишком низок процент числа высокопрофессиональных программистов от числа лиц, овладевших элементарным и «средним» компьютерным программированием.10. Проблемы в  обучении компьютерному программированию не в том, что освоение компьютерного программирования  сложно, а в том, что традиционное обучение уходит в «сторону» от  естественного программирования и его примеров с прецедентами, привычными обучаемому.

11. Обыкновенному        человеку        не         нужны        знания профессионального компьютерного программирования для решения подавляющего большинства его задач.12.  Перспективным подходом к расширению круга пользователей, не обладающих знаниями современного программирования, но программирующих задачи в человеко-компьютерных средах, является предоставление им эффективных инструментальных средств псевдопрограммирования.13. Для  расширения  круга  задач,  решение  которых  доступно псевдопрограммирующим пользователям, им необходимо предоставлять компьютерный инструментарий, помогающий в пошаговой детализации процесса решения (сложных) задач.14. Следует заметить, что у профессиональных    компьютерных программистов наблюдается опасный уход в операциональное мышление, уводящее их от понимания задач, приходящих из реального, а не компьютерного мира.15. Профессионального   компьютерного   программиста   следует считать профессиональным программистом только тогда, когда он способен решать задачи, встающие за пределами компьютерного мира.16.    «Истинный путь к овладению искусством проходит не через Инструменты, но через  Доказательства. И это нелепая манера учителей начинать с Инструментов, а не с Науки. Потому вместо мастерства ихученики     обучаются     только     трюкам,     подобно     фокусникам.И, несмотря на обучение, это приводит к потере драгоценного времени и превращению умов жаждущих и трудолюбивых в невежественные и    ленивые.      Использование      инструментов      действительно превосходно, если человек владеет истинным мастерством, но презренно, если это владение противопоставляется Искусству». У.Отред (изобретатель логарифмической линейки).