558
их обработки, поощряет использование только таких методов, которые согла-
суются с таким разделением (примером может служить метод конечных авто-
матов — см. § 10.1). Но разработчик остается свободным: стили, которым он
следует при реализации и генерации, и обработки, могут выбираться, исходя
из соображений, не связанных с программированием от событий. Более то-
го, он свободен даже выбрать метод, отнюдь не поощряемый стилем, и затем
гордиться тем, как он виртуозно преодолел возникшие трудности (слишком
часто героизм оказывается следствием ранее допущенных просчетов).
Наиболее естественная языковая поддержка метода достигается в язы-
ке соответствующего стиля. Но это не значит, что использование метода в
других языках невозможно. Напротив, типична ситуация, когда приходится
моделировать стиль: если непосредственное применение метода недостижи-
мо, программист подменяет его прямую реализацию тем, что предлагается в
языке. Показать такие приемы программирования — еще одна задача, решае-
мая в данной части. Но далеко не всегда моделирование метода, тяготеющего
к определенному стилю, средствами другого стиля оказывается продуктив-
ным, и именно в подобных случаях мы говорим о несовместимости стилей.
Следует заметить, что стили, альтернативные структурному программирова-
нию, традиционно противопоставлялись ему — рассматривались как вред-
ные. Наша цель в связи с этим — выявить действительный и мнимый анта-
гонизм стилей, и тем самым дать практикующему программисту методи-
ческую базу для принятия решений о том, стоит ли в конкретной ситуации
пользоваться методами разных стилей, и как это безболезненно делать.
Мы стремимся показать не просто сегодняшнее (не дошедшее до уровня
зрелости практически ни в одной из областей программирования и инфор-
матики) состояние, а пути, которыми развивались принятые решения, что-
бы увидеть побудительные причины развития (либо не развития)языковых
средств поддержки методов. В некоторых случаях подобные средства дей-
ствительно появляются, в других — они пока что остаются на уровне кон-
цепций и академических экспериментов, в третьих — они появлялись, были
отброшены и преданы анафеме,но, согласно законам развития,к ним придет-
ся вернуться на новом витке в новом виде. Квалифицированному програм-
мисту очень важно уметь различать такие случаи, а также понимать, почему
то или иное средство применяется или не применяется в конкретном языке
и в конкретной методике программирования.
Мы почти совсем не рассматриваем стиль объектно-ориентированного
программирования. Этот стиль и связанные с ним методы программирова-
ния и проектирования заслуживают специального изучения, выходящего за