186 Глава 11. Основы строительства
сующие нас результаты. В объектно-ориентированном языке программиро-
вания для тех же целей мы определяем класс или классы, позволяющие
создавать объекты со структурой, хранящей данные, и поведением, кото-
рое проявляется в умении объекта обрабатывать эти данные, тем самым
решая стоящие перед нами задачи. В отличие от процедурного языка, здесь
данные и программы, обрабатывающие эти данные, существуют в рамках
одного объекта.
Сам процесс разработки класса носит итеративный, а не строго после-
довательный характер. Такой характер программирования отвергает неко-
торые распространенные методологии разработки программ. Например, в
процедурных языках часто используют каскадный подход. Программа пол-
ностью проектируется сверху вниз, а затем реализуется по восходящей —
снизу вверх. При этом предполагается, что одна фаза процесса проектиро-
вания или разработки завершается прежде, чем начинается следующая. Для
такого подхода есть серьезные основания — очень дорого стоит исправле-
ние допущенной ошибки.
Приемы, полезные при каскадном подходе, не могут использоваться при
итеративной разработке, поскольку в этом случае периоды анализа решае-
мой задачи могут сопровождаться периодами проектирования, которые, в
свою очередь, могут сопровождаться созданием некоторого кода, прежде
чем будет предпринято дальнейшее проектирование или работа по анализу
ситуации. По этому итеративная разработка (или, как часто говорят, быст-
рое прототипирование) является специфической возможностью программи-
рования на объектно-ориентированном языке и, как показывает практика,
позволяет создавать работающие программы значительно быстрее, чем на
любом процедурном языке программирования.
Еще одно преимущество языка Смолток состоит в возможности много-
кратного применения созданного ранее кода из уже существующей иерар-
хии классов. Поэтому, создавая новый класс, надо помнить, что он созда-
ется не на пустом месте, а в рамках уже существующей системы, и опре-
делять классы, совместимые с существующей библиотекой классов, тем
самым, расширяя возможности системы.
Когда разрабатывается программа на процедурном языке, обычно зада-
ются вопросы, подобные следующим: «Какие процедуры нужны?», «Что
они должны возвращать?», «Что должно передаваться в качестве парамет-
ра?». Когда разрабатываются новые классы, дополнительно надо задать и
такие вопросы: «В каком классе должен быть этот метод?», «Нужно ли
создать подкласс или разумнее все ре ализовать в одном классе?», «Какое
место должен занимать создаваемый класс в иерархии?». Отвечая на эти и
многие другие вопросы, надо придерживаться указанных ниже правил.