- •4.9.1. Изменяемость
- •4.9.2. Классы операций
- •98 Глава 4
- •4.9.3. Полнота
- •100 Глава 4
- •4.9.5. Операции egual, similar и copy
- •102 Глава 4
- •104 Глава 4
- •5. Исключительные ситуации
- •108 Глава 5
- •110 Глава 5
- •6.2.1. Сигнализация об исключительных ситуациях
- •5.2.2. Обработка исключительных ситуаций
- •112 Глава 5
- •5.2.3. Предложение resignal
- •6.2.4. Необрабатываемые исключительные ситуации
- •114 Глава 5
- •6.2.3. Предложение resignal
- •5.2.4. Необрабатываемые исключительные ситуации
- •116 Глава 5
- •118 Глава 5
- •118 Глава 5
- •120 Глава 5
- •122 Глава 5
- •124 Глава 5
- •128 Глава 6
- •130 Глава 6
- •6.2.1. Реализация итераторов
- •6.2.2. Использование итераторов
- •132 Глава 6
- •134 Глава 6
- •136 Глава 6
- •138 Глава 6
- •140 Глава 7
- •142 Глава 7
- •7.2. Абстракция данных
- •144 Глава 7
- •146 Глава 7
- •148 Глава 7
- •150 Глава 7
- •7.4. Генераторы
- •162 Глава 7
- •154 Глава 7
- •156 Глава 7
- •162 Глава 8
- •164 Глава 8
- •166 Глава 8
- •168 Глава 8
- •170 Глава 9
- •172 Глава 9
- •174 Глава 9
- •176 Глава 9
- •9.1.3. Пример
- •178 Глава 9
- •180 Глава 9
- •182 Глава 9
- •184 Глава 9
- •186 Глава 9
- •188 Глава 9
- •190 Глава 9
- •192 Глава. 9
- •194 Глава 9
166 Глава 8
ния задачи является наиболее важным результатом данной ра-_ боты.
Цель состоит в написании спецификаций, которые являются одновременно достаточно полными и достаточно ограниченными. Таким образом, мы удаляем должное внимание поставленным требованиям, исключительным ситуациям и граничным условиям. Этот процесс предполагает постановку ряда вопросов относительно поведения абстракций, подобных тому, как поступать с индексами, если строка пуста. Смысл состоит в том, что постановка и ответ на такие вопросы заставляет нас более тщательно анализировать абстракцию и ее предполагаемое назначение.
Создание спецификации концентрирует внимание на том, какой должна быть сама программа. Она служит как бы механизмом генерации вопросов, ответ на которые должен быть дан в результате консультации с пользователями, а не с разработчиками. Обусловливая постановку этих вопросов на ранних стадиях разработки системы, спецификация позволяет нам улучшить понимание требований к системе и проекту до начала их реализации.
Как это будет показано в гл. 12 и 13, спецификации можно начать составлять сразу же после того, как будут приняты описываемые в них решения. Поскольку спецификации теряют значимость только в том случае, если становятся устаревшими соответствующие абстракции, то они эволюционируют до тех пор, пока эволюционирует сама программа. Серьезная ошибка считать, что процесс написания спецификаций является отдельной фазой создания программного обеспечения.
Однажды написанные, спецификации могут служить различным целям. Они одинаково полезны проектировщикам, разработчикам и лицам, сопровождающим математическое обеспечение. В течение фазы реализации программного обеспечения наличие хорошей спецификации помогает как реализующим заданный модуль, так и тем, кто использует затем этот модуль. Как уже говорилось, хорошая^^спецификация поддерживает баланс между ограниченностью и обобщенностью. Она сообщает разработчику, какие функции необходимо реализовать, однако не накладывает излишних ограничений на способ их реализации. Это дает разработчику максимальную свободу в написании модулей, согласованную в то же время с требованиями пользователей. Разумеется, спецификации существенны и для пользователей, которым не на что больше положиться при реализации своих модулей. Кроме спецификаций имеются только лишь тексты программ, а на текущий момент обычно неизвестно, какая часть программы претерпела изменения. В процессе тестирования спецификации предоставляют информацию, которая может быть использована для генерации тестировочных данных и построения заглушек, имитирующих работу данного модуля. (Мы обсудим это приме-
Смцификации
нение спецификации в гл. 9.) На этапе компоновки системы наличие хороших спецификаций позволяет сократить число и серьезность проблем, связанных с интерфейсами, за счет уменьшения числа различных неявных предположений об этих интерфейсах. При обнаружении ошибки спецификации позволяют выявить' их местоположение. Более того, они определяют ограничения, которые необходимо соблюсти при исправлении ошибки, что помогает избежать новых ошибок в процессе исправления старых.
Наконец, спецификация весьма полезна в процессе сопровождения программного обеспечения. Существование ясной и аккуратной документации является необходимым условием для успешного и эффективного сопровождения. Нам необходимо знать, что делает каждый модуль, а если он достаточно сложен, знать также то, как он это делает. Зачастую эти два аспекта документации сильно взаимосвязаны. Использование спецификации в качестве документации позволяет нам разделить эти две стороны, что облегчает анализ и возможные модификации. Например, модификация, при которой требуется только заново реализовать единственную абстракцию без изменения ее спецификации, гораздо легче реализуема, чем модификация, предполагающая изменение спецификации.
8.4. Заключение
В данной главе были рассмотрены спецификации и предложены критерии, используемые при их создании. Мы определяем смысл спецификации через набор программных модулей, ей удовлетворяющий. Такое определение учитывает интуитивное назначение спецификации, а именно: утверждает, что общего имеют между собой все допустимые реализации абстракции. Такая спецификация сообщает пользователям то, из чего они могут исходить, а проектировщикам — то, что они должны реализовать.
Хорошие спецификации должны быть ограниченными, обобщенными и простыми. Ограниченность и обобщенность предполагает наличие набора модулей, удовлетворяющих спецификации: не допускаются реализации, неприемлемые для пользователей абстракции, а предпочтительные реализации (например, более эффективные) должны быть выделены. Обобщенность гораздо легче реализовать в том случае, если спецификации написаны с использованием дефинитивного подхода, который только задает свойства набора спецификаторов. Операционный подход, объясняющий способ реализации абстракции, дает слишком ограниченные спецификации.
Простота подразумевает легкость понимания спецификации пользователями. При этом в начале работы над спецификацией
