Назад | Содержание| Вперёд Глава 8 СТИЛЬ И МЕТОДЫ П...

Назад | Содержание| Вперёд

Глава 8

СТИЛЬ И МЕТОДЫ ПРОГРАММИРОВАНИЯ

В этой главе мы рассмотрим некоторые общиепринципы хорошего программирования и обсудим, вчастности. следующие вопросы: "Какпредставлять себе прологовские программы? Изкаких элементов складывается хороший стильпрограммирования на Прологе? Как отлаживатьпролог - программы? Как повысить их эффективность?"

8. 1.    Общие принципы хорошегопрограммирования

Главный вопрос, касающийся хорошегопрограммирования, - это вопрос о том, что такоехорошая программа. Ответ на этот вопрос нетривиален, поскольку существуют разные критериикачества программ.

Следующие критерии общеприняты:

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

Эффективность. Хорошая программа не должна попусту тратить компьютерное время и память.

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

Удобство модификации. Хорошая программа должна быть легко модифицируема и расширяема. Простота и модульная организация программы облегчают внесение в нее изменений.

Живучесть. Хорошая программа должна быть живучей. Она не должна сразу "ломаться", если пользователь введет в нее неправильные или непредусмотренные данные. В случае подобных ошибок программа должна сохранять работоспособность и вести себя разумно (сообщать об ошибках).

Документированность. Хорошая программа должна быть хорошо документирована. Минимальная документация - листинг с достаточно подробными комментариями.

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

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

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

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

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

Стратегия нисходящей пошаговой детализацииимеет следующие преимущества:

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

в терминах таких мощных понятий решение будет сжатым и простым, а потому скорее всего правильным;

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

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

Для того, чтобы удачно сформулировать решениена некотором уровне детализации и придуматьполезные понятия для следующего, более низкогоуровня, нужны идеи. Поэтому программирование -это творческий процесс, что верно в особенности,когда речь идет о начинающих программистах. Помере накопления опыта работа программистапостепенно становится все менее искусством и всеболее ремеслом. И все же главным остается вопрос:как возникают идеи? Большинство идей приходит изопыта, из тех задач, решения которых уже известны.Если мы не знаем прямого решения задачи, то намможет помочь уже решенная задача, похожая нанашу. Другим источником идей являетсяповседневная жизнь. Например, если необходимозапрограммировать сортировку списка, то можнодогадаться, как это сделать, если задать себевопрос: "А как бы я сам стал действовать, чтобырасположить экзаменационные листы студентов поих фамилиям в алфавитном порядке?"

Общие принципы, изложенные в данномразделе, известны также как составные части "структурного программирования";они, в основном, применимы и к программированиюна Прологе. В следующих разделах мы обсудим ихболее детально, обращая особое внимание наприменение этих принципов программирования кПрологу.

Назад | Содержание| Вперёд









Главная | В избранное | Наш E-MAIL | Добавить материал | Нашёл ошибку | Наверх