В.Г. Абрамов, Н.П. Трифонов, Г.Н. Трифонова - Введение в язык Паскаль (1107618), страница 26
Текст из файла (страница 26)
При этом необходимо помнить, что после внесения в программулюбого изменения необходимо убедиться в правильности скорректированной схемы программы, потому что изменения, сделанные в одной частипрограммы, иногда могут повлиять на правильность других ее частей..После того, как проверена правильность сделанного изменения, следуетповторно выполнить те последующие шаги детализации, которые оказалисьзатронутыми этим изменением.Заметим, что если на каждом шаге детализации будут использоватьсяпринципы структурного программирования, то это обеспечивает хорошуюстуктурированность и программы в целом.При практическом использовании метода пошаговой детализации возникает естественный вопрос о том, насколько далеко следует продвигатьсяна каждом очередном шаге детализации.
На этот вопрос довольно труднодать однозначный ответ. С одной стороны, чем больше мы будем продвигаться на каждом очередном шаге, тем быстрее достигнем требуемогоконечного уровня детализации алгоритма в целом. С другой стороны,7. В.Г. Абрамов97чем меньше это продвижение, тети меньше решений придется принимать,а значит — легче осуществлять проверку принятых решений, что уменьшаетвероятность незамеченных во-время ошибок. Поэтому каждый программист решает этот вопрос, исходя из своей квалификации, практическогоопыта, стиля работы и меры ответственности за надежность изготовляемойпрограммы.
Начинающему программисту можно порекомендовать продвигаться вперед небольшими шагами, чтобы облегчить довольно труднуюработу по проверке правильности программ — тем более, что в этот периодему еще не приходится иметь дело с очень сложными программами и потомупроцесс пошаговой детализации даже в этом случае достаточно быстроприводит к цели.Проектирование программы, вообще говоря, не связано с тем языком,на котором будет записываться окончательный текст программы — дляэтого достаточно иметь лишь представление о степени требуемой детализации, определяемой этим языком. Это обстоятельство и позволяет осуществлять разделение труда по разработке программы и ее кодированию.Приступать к кодированию (к записи текста программы на том илиином алгоритмическом языке) имеет смысл лишь после того, как завершена разработка программы — даже в том случае, если эти два этапа работвыполняются одним и тем же программистом. При наличии разработанногопроекта программист может все свое внимание сосредоточить уже направильности записи текста программы с соблюдением всех требований,предъявляемых данным языком.
При этом должна вступить в силу жесткаяисполнительская дисциплина: в программе должен реализовываться именноразработанный и проверенный ранее алгоритм, а не какой-либо иной.Любые попытки вносить в алгоритм изменения по существу чреваты весьмасерьезными последствиями, поскольку очень трудно (а в случае сложныхпрограмм — практически невозможно) предсказать, к а к скажутся этиизменения на программу в целом.
Если же на этом этапе у программиставозникают серьезные сомнения в каких-то частях алгоритма, то необходимо вернуться к этапу проектирования на соответствующий уровень егодетализации, убедиться в обоснованности возникшего сомнения и внестинеобходимые изменения в проект с обязательной их проверкой. Нетруднопредставить себе, насколько усложняется проблема последующего понимания и модификации программы, если она не соответствует своемупроекту.В завершение обсуждения вопроса о разработке программ отметим,что по ходу выполнения этой разработки надо все время как-то фиксировать результаты проделанной работы.
Значит, нужно иметь средствофиксации схемы программы на каждом уровне ее детализации. Очевидно,что алгоритмический язык не приспособлен для этой цели, посколькуон подразумевает вполне определенный уровень детализации, до которогомы доходим лишь на заключительном этапе разработки программы.Для указанной цели часто используются уже знакомые нам блок-схемы.Основное достоинство блок-схем состоит в том, что они не требуют какойлибо определенной детализации алгоритма и потому могут использоватьсяна любых этапах разработки программы. Содержание отдельных блоковможет записываться любым удобным для человека способом. Крометого, блок-схемы обеспечивают хорошую наглядность структуры алгорит-ма. Недостаток блок-схем состоит в том, что при достаточно большойстепени детализации они становятся громоздкими и теряют свое основноедостоинство — наглядность структуры алгоритма.
Кроме того, они требуютмного времени на их вычерчивание, а также неудобны для публикаций.В последнее время вместо блок-схем все чаще используется специальныйязык, называемый псевдокодом, который близок к языку Паскаль: в немиспользуются те же самые управляющие структуры и зарезервированныеслова, однако запись правил обработки данных и условий не формализована, так что эти правила и условия могут формулироваться любым удобнымдля человека способом — например в виде фраз естественного языка:begini-fнаибольшая компонента вектора отрицательнаthenвсе отрицательные компоненты заменить их квадратамиel seвсе компоненты вектора уменьшить на 0.5end;whi leтребуемая точность не достигнутаdoвычислить и учесть очередное слагаемое ряда, с помочь»которого вычисляется sin(x);В связи с этим можно не вводить в употребление какого-то специальногоязыка проектирования программ, а использовать для этой цели сампаскаль, задавая содержание еще недостаточно детализированных блоковпрограммы в виде комментариев паскаля.
Заметим, что этот прием позволяет в итоге получить и хорошо прокомментированную программу.5.3. Оформление программКак мы уже знаем, сам язык паскаль предусматривает определенныесредства написания хорошо структурированных и потому удобных длячтения и понимания программ. Наряду с этим для повышения наглядностипрограммы обычно используются и другие, внеязыковые средства.Одним из таких средств, позволяющих легко выявлять вложенностьуправляющих структур друг в друга и тем самым облегчить ориентациюв программе, является расположение текста отдельных операторов по листубумаги.
А именно, служебные слова, которыми начинается и заканчиваетсятот или иной оператор, следует записывать на одной вертикали, а все вложенные в него операторы записывать с некоторым отступом вправо. С этойцелью иногда бывает удобно объединять в составной оператор и такуюпоследовательность операторов, где по синтаксису можно обойтись и безсоставного оператора. В приводимых ранее примерах паскаль-программмы широко пользовались этим приемом. Надеемся, что читатель из рассмот7*99рения этих примеров убедился, что такой способ записи текста программдействительно облегчает их понимание.Пожалуй, наиболее эффективным средством облегчения пониманияпрограммы является ее комментирование. Такая возможность предусматривается практически во всех языках программирования, в том числе ив паскале.
Однако программисты — особенно те, кому не приходилосьпроверять или модифицировать чужие программы — часто избегают комментирования своей программы с целью экономии времени при их написании. К сожалению, к этой категории относится и большинство учащихся —к сожалению потому, что этот дурной стиль программирования входиту них в привычку, от которой впоследствии бывает трудно избавиться.Нередко программист намеревается снабдить свою программу комментариями позднее, на последнем этапе ее изготовления. Однако эти намерения обычно не реализуются, потому что по окончании работы по составлению и отладке программы работа по комментированию кажется ему ужеизлишней — тем более, что специально для этой работы времени обычноуже не находится.
Бывает и так, что спустя некоторое время автор программы и сам уже забыл многие ее детали. Поэтому для последующегокомментирования ему самому приходится вспоминать структуру программы и логику ее работы. А поскольку в программе не было комментариев,то это бывает трудно сделать даже автору программы и в итоге программаостается непрокомментированной. "Некомментируемая программа — это,вероятно, наихудшая ошибка, которую может сделать программист, атакже свидетельство дилетантского подхода (пусть даже программистимеет десятилетний опыт работы); более того, это веская причина дляувольнения программиста".
(Ван Тассел Д. Стиль, разработка, эффективность, отладка и испытание программ. Пер. с англ. под ред. Э.А. Трахтенгерца.-М.: Мир, 1981.-319с.).Так что учащимся следует с самого начала своей программистскойдеятельности вырабатывать привычку комментировать программы походу их разработки и написания, тем более, что для хорошего комментирования нужны определенные практические навыки, которые вырабатываются лишь с течением времени.
Действительно, мало что говорящие инеудачно расположенные комментарии только загромождают текст программы и мало способствуют ее пониманию. Можно считать, что программапрокомментирована удачно, если при первом знакомстве с нею можнопонять структуру программы, ее суть и логику ее работы, если просматривать только содержащиеся в ней управляющие структуры и читать комментарии, не анализируя подробно входящие в нее операторы, задающиеправила обработки данных. Изучение таких операторов, вообще говоря,нужно лишь для уточнения деталей, что необходимо, например, длятщательной проверки программы.Следует обратить внимание на то, что метод пошаговой детализациикак раз и способствует хорошему комментированию программы. Действительно, на достаточно ранних шагах детализации назначение каждого вновьвыделяемого блока программы обычно записывается словами.
Если этасловесная формулировка достаточно четкая и понятная, то она можетслужить готовым и естественным комментарием к соответствующемублоку окончательно написанной программы.До сих пор мы имели в виду "заголовки" и "построчные" комментарии.Заголовки служат для выделения и объяснения назначения основныхблоков программы. Желательно, чтобы комментарии этого типа отражалирезультаты проделанной ранее работы по пошаговой детализации алгоритма. Построчные комментарии относятся к достаточно мелким фрагментампрограммы (операторам, описаниям).Обычно каждая программа снабжается еще "вводными" комментариями, которые помещаются в начале текста программы.
С их помощью задается общая информация о данной программе. Эта информация обычносодержит в себе следующие пункты:1. Назначение программы.2. Сведения об авторе программы.3. Организация, в которой изготовлена программа.4. Дата написания программы.5. Используемый метод решения задачи (если таковой имеется).6. Указания по вводу и выводу.Для программ производственного характера этот перечень обычносодержит пункты, которые могут быть существенными при подготовкезадания для операционной системы:7. Время, требуемое на выполнение программы.8. Требуемый объем памяти.9.