7. Яблоки и апельсины
$5 + 1 °CHF = $10, если курс обмена 2:1
$5 * 2 = $10
Сд елать переменную amount закрытым (private) членом
Побочные эффекты в классе Dollar?
Округление д енежных величин?
equals()
hashCode()
Равенство значению null
Равенство объектов
5 CHF * 2 = 1 °CHF
Дублирование Dollar/Franc
Общие операции equals()
Общие операции times()
Сравнение франков (Franc) и долларов (Dollar)
В конце главы 6 перед нами встал интересный вопро с: что буд ет,
если мы сравним франки и д оллары? Мы немед ленно д обавили
соответствующий пункт в список пред стоящих зад ач. Нам никак не
избавиться от этой мысли. И в самом д еле, что произойд ет?
public void testEquality() {
assertTrue(new Dollar(5). equals(new Dollar(5)));
assertFalse(new Dollar(5). equals(new Dollar(6)));
assertTrue(new Franc(5). equals(new Franc(5)));
assertFalse(new Franc(5). equals(new Franc(6)));
assertFalse(new Franc(5). equals(new Dollar(5)));
}
Тест завершается неуд ачей. С точки зрения написанного код а
д оллары – это франки. Прежд е чем у наших швейцарских клиентов глаза
вылезут на лоб, д авайте попробуем исправить код . Код сравнения д вух
д енежных значений д олжен убед иться в том, что он не сравнивает
д оллары с франками. Для этого мы д олжны проверить классы
сравниваемых объектов – д ва объекта класса Money считаются равными
только в том случае, если у них равны значения amount и классы.
public boolean equals(Object object) {
Money money = (Money) object;
return amount == money.amount
&& getClass(). equals(money.getClass());
}
Под обное использование классов, по правд е сказать, отд ает
неприятным запашком. Пред почтительнее было бы использовать
критерий из области финансов, а не из области объектов языка Java.
Од нако на текущий момент в нашей программе еще нет ничего, что
соответствовало бы финансовому понятию «валюта», и пока я не вижу
д о статочно весомой причины, чтобы ввод ить в программу под обное
понятие. Поэтому пока о ставим код таким, какой он есть.
$5 + 1 °CHF = $10, если курс обмена 2:1
$5 * 2 = $10
Сд елать переменную amount закрытым (private) членом
Побочные эффекты в классе Dollar?
Округление д енежных величин?
equals()
hashCode()
Равенство значению null
Равенство объектов
5 CHF * 2 = 1 °CHF
Дублирование Dollar/Franc
Общие операции equals()
Общие операции times()
Сравнение франков (Franc) и д олларов (Dollar)
Валюта?
Теперь пришла пора избавиться от д ублирующего ся код а в метод ах
times(), по сле этого мы сможем перейти к реализации смешанной
валютной арифметики. Од нако прежд е, чем д винуться д альше,
под вед ем итоги д анной главы:
• мы превратили мучающее нас сомнение в тест;
• д обились успешного выполнения теста приемлемым, но не
ид еальным спо собом – getClass();
• решили не д обавлять в программу д ополнительной логики, пока у
нас не появится более весомая мотивация.
Do'stlaringiz bilan baham: |