Наука — Школе |
1 Начинать проектировать модуль с интерфейсов процедур и формулировки того, что предполагается о состоянии вычислительного процесса при входе в процедуру, и что ожидается на выходе из нее (пред- и пост-условия). |
2 Каждое уточнение модуля должно быть небольшим и обозримым. |
3 Каждое уточнение должно приводить к синтаксически правильной программе. |
4 После каждого уточнения программа должна быть семантически правильной в той степени, в какой это требуется на данном шаге уточнения. |
5 Почаще нажимать Ctrl+K! |
Пункты 2-4 составляют фундаментальный метод разработки программ, известный как пошаговое уточнение — step-wise refinement (см. статью Вирта в Comm. ACM, Vol. 14, No. 4, April 1971; статья доступна здесь).
Пункт 1 является исходной точкой для пошагового уточнения. Здесь еще говорят о проектировании, управляемом интерфейсами (interface-driven design), а также о проектировании по контрактам (design by contract). Создание программы должно начинаться с задания интерфейсов процедур (прежде всего экспортируемых) и пред- и пост-условий — точно так же как решение любой задачи начинается с ее постановки. Проектирование интерфейсов и задание пред- и пост-условий — ключевой элемент постановки задачи в программировании.
Выполнение пунктов 2-4 позволяет сохранять интеллектуальный контроль за правильностью создаваемой программы, помогая устранять ошибки (как синтаксические огрехи вроде опечаток — п.3, так и смысловые — п.4) на возможно более ранней стадии.
Рекомендация пункта 5 имеет смысл только в контексте пп.2-4: она бессмыссленна, если процесс разработки не удовлетворяет требованиям пп.2-4 (а также при работе с медленными компиляторами для сложных языков). Здесь — одно из важнейших преимуществ, доставляемое минимализмом языка Оберон/Компонентный Паскаль и четкостью его дизайна, обеспечивающего исключительную быстроту компилятора. Быстрый компилятор подобного типа был впервые построен Виртом для предшественника Оберона — языка Модула-2 с систематическим применением принципа пошагового уточнения; см. здесь.
Правило 5 означает, в частности, что если компилятор обнаружил несколько ошибок, то устранять их нужно, как правило, по одной (обычно начиная с первой), каждый раз повторяя компиляцию (см. также здесь).
Пошаговое уточнение считается самым полезным приемом систематического создания программ (Э.Дейкстра. Дисциплина программирования. М., Мир, 1978, с. 274). Весьма популярные в последнее время "гибкие" методологии (Extreme Programming и т.п.) во многом являются организационным воплощением идеи пошагового уточнения на уровне больших программных проектов.
Чтобы методы типа пошагового уточнения требуется известная дисциплина со стороны программистов — отсюда необходимость систематического "правильного" обучения. Однако в настоящее время признано, что резкое повышение эффективности программирования при использовании методов этой категории более чем окупает усилия, необходимые для их освоения.
Наука — Школе |