Чтение онлайн

на главную - закладки

Жанры

Программист-прагматик. Путь от подмастерья к мастеру
Шрифт:

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

Упражнение 15 из раздела "Проектирование по контракту"

Ответ: Это неудачно. Математическое действие в индексном выражении (index-1) не будет работать с граничными условиями, подобными первой точке входа. Постусловие предполагает определенную реализацию; контракты должны быть более абстрактными по сравнению с указанным выше.

Упражнение 16 из раздела "Проектирование по контракту"

Ответ 16: Это удачный контракт, но неудачная реализация. Здесь высовывает свою уродливую голову ошибка типа "Heisenbug" [URL52]. Вероятно, программист допустил опечатку – набрал pop вместо top. Хотя это простой и надуманный пример, весьма трудно диагностировать побочные эффекты в утверждениях (или в любом, самом неожиданном месте в программе).

Упражнение 17 из раздела "Проектирование по контракту"

Ответ: Мы продемонстрируем функциональные сигнатуры на языке Java, обозначая предусловия и постусловия в соответствии с iContract. Сначала инвариант для класса:

/**

* @invariant getSpeed >0

* implies isFull // Не запускать пустое

* @invariant getSpeed>=0 &&

* getSpeed <10 // Проверка границ

*/

Затем предусловия и постусловия:

/**

* @pre Math.abs(getSpeed – х) <= 1 // Единственный выбор

* @рге х>= 0 && х > 10 // Проверка границ

* @post getSpeed == х // Проверка скорости

*/

public void setSpeed (final int x)

/**

* @pre !isFull // Heзаполнять дважды

* @post isFull // Убедитесь, что было выполнено

*/

void fill

/**

* @pre isFull // He очищатьдважды

* @post !isFull // Убедиться, что выполнено

*/

void empty

Упражнение 18 из раздела "Проектирование по контракту"

Ответ: В этом ряду содержится 21 число. Если вы ответили «20», то допустили так называемую ошибку "поста охраны".

Упражнение 19 из раздела "Программирование утверждений"

Ответ:

1. В сентябре 1752 г. было всего лишь 19 дней. Это было сделано с целью синхронизации при переходе с юлианского на григорианский календарь.

2. Каталог мог быть удален другим процессом, у вас нет прав доступа на его чтение, выражение &sb может быть недопустимым – вы все уловили.

3. Мы проявили малодушие, не указав типов а и b. Во время перегрузки операторов могло случиться так, что поведение знаков +, =, или != стало непредсказуемым. Кроме того, а и b могут быть псевдонимами одной и той же переменной, так что при втором присвоении произойдет перезапись значения, сохраненного во время первого.

4. В неевклидовой геометрии сумма углов треугольника не будет составлять 180°. Подумайте о треугольнике, отображаемом на поверхности сферы.

5. Минуты, приходящиеся на високосный год, могут состоять из 61 или 62 секунд.

6. Переполнение может оставить результат операции а+1 отрицательным (это также может произойти в языках С и С++).

Упражнение 20 из раздела "Программирование утверждений"

Ответ: Мы решили реализовать очень простой класс с единственным статическим методом TEST, который выводит на печать сообщение и след стека, если переданный параметр condition является ложным.

package com.pragprog.util;

import java.lang.System; //для exit

import java.lang.Thread; //для dumpStack

public class Assert {

/** Write a message, print a stack trace and exit if

* our parameter is false.

*/

public static void TEST(boolean condition) {

if (Icondition) {

System.out.println("==Assertion Failed==");

Thread.dumpStack;

System.exit(1);

}

}

// Testbed. If our argument is 'okay', try an assertion that

// succeeds, if 'fail' try one that fails

public static final void main(String args[]) {

if (args[0].compareTo("okay") == 0) {

TEST(1 == 1);

}

else if (args[0].compareTo("fail") == 0) {

TEST(1 == 2);

}

else {

throw new RuntimeException("Bad argument") ,

}

 }

}

Упражнение 21 из раздела "Случаи, когда используются исключения"

Ответ: Нехватка памяти является исключительным состоянием, поэтому мы полагаем, что в случае (1) должно возбуждаться исключение.

Невозможность отыскания точки входа – вполне нормальная ситуация. Приложение, которое вызывает наш класс-набор, может написать программу, которая проверяет наличие точки входа, перед тем как добавить потенциальный дубликат. Мы полагаем, что в случае (2) нужно просто осуществить возврат ошибки.

Случай (3) более проблематичен – если указатель null играет существенную роль в приложении, его добавление к контейнеру может быть оправдано. Но если для хранения пустых значений нет веских оснований, то, по всей вероятности, необходимо возбудить исключительную ситуацию.

Поделиться:
Популярные книги

Богам – божье, людям – людское

Красницкий Евгений Сергеевич
6. Отрок
Приключения:
исторические приключения
8.83
рейтинг книги
Богам – божье, людям – людское

На границе тучи ходят хмуро...

Кулаков Алексей Иванович
1. Александр Агренев
Фантастика:
альтернативная история
9.28
рейтинг книги
На границе тучи ходят хмуро...

Ваше Сиятельство 4т

Моури Эрли
4. Ваше Сиятельство
Любовные романы:
эро литература
5.00
рейтинг книги
Ваше Сиятельство 4т

Геном хищника. Книга девятая

Гарцевич Евгений Александрович
9. Я - Легенда!
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Геном хищника. Книга девятая

Серые сутки

Сай Ярослав
4. Медорфенов
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Серые сутки

Хозяин Теней 2

Петров Максим Николаевич
2. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней 2

Стеллар. Трибут

Прокофьев Роман Юрьевич
2. Стеллар
Фантастика:
боевая фантастика
рпг
8.75
рейтинг книги
Стеллар. Трибут

Азеф

Гуль Роман Борисович
Проза:
историческая проза
6.00
рейтинг книги
Азеф

Страж Кодекса. Книга V

Романов Илья Николаевич
5. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса. Книга V

Древесный маг Орловского княжества 5

Павлов Игорь Васильевич
5. Орловское княжество
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества 5

Жена по ошибке

Ардова Алиса
Любовные романы:
любовно-фантастические романы
7.71
рейтинг книги
Жена по ошибке

Кодекс Охотника. Книга X

Винокуров Юрий
10. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
6.25
рейтинг книги
Кодекс Охотника. Книга X

Барон

Первухин Андрей Евгеньевич
5. Ученик
Фантастика:
фэнтези
5.60
рейтинг книги
Барон

Третий. Том 3

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий. Том 3