Экстремальное программирование. Разработка через тестирование



Download 1,35 Mb.
Pdf ko'rish
bet14/140
Sana15.04.2022
Hajmi1,35 Mb.
#555128
1   ...   10   11   12   13   14   15   16   17   ...   140
Bog'liq
Экстремальное программирование Разработка через тестирование PDFDrive

equals()
hashCode()
Кроме того, если использовать Dollar в качестве ключа хеш-
таблицы, вместе с equals() прид ется реализовать и hashCode(). Добавим
этот пункт в список зад ач и вернемся к нему, когд а это буд ет
необход имо.
Вы вед ь не собираетесь немед ленно приступать к реализации
метод а equals()? Отлично, я тоже об этом не д умаю. Уд арив себя
линейкой по руке, я стал размышлять над тем, как протестировать
равенство. Для начала $5 д олжны быть равны $5:
public void testEquality() {
assertTrue(new Dollar(5). equals(new Dollar(5)));
}
Поло ска окрасилась красным. Под д ельная реализация могла бы
про сто вернуть значение true:
Dollar
public boolean equals(Object object) {
return true;
}
Конечно, мы с вами знаем, что на самом д еле true – это «5 == 5»,
что, в свою очеред ь, означает «amount == 5», что соответствует «amount
== dollar.amount». Но если бы я сразу про след ил все эти шаги, я не смог
бы прод емонстрировать третью и наиболее консервативную метод ику
реализации – триангуляцию.
Если д ве станции слежения, наход ящиеся на известном расстоянии


д руг от д руга, смогут измерить азимут некоторого источника
рад ио сигнала (взять пеленг), этого вполне д о статочно, чтобы
вычислить местоположение источника рад ио сигнала (как вы помните из
курса тригонометрии, в отличие от меня). Это вычисление и называется
триангуляцией.
По аналогии, используя метод триангуляции, мы обобщаем код
только в том случае, когд а у нас д ва примера или больше. При этом мы
ненад олго игнорируем д ублирование межд у тестом и самим код ом
(приложения). Когд а второй пример потребует более общего решения,
тогд а и только тогд а мы выполним обобщение.
Итак, д ля триангуляции нам понад обится второй пример. Как насчет
того, чтобы проверить $5!= $6?
public void testEquality() {
assertTrue(new Dollar(5). equals(new Dollar(5)));
assertFalse(new Dollar(5). equals(new Dollar(6)));
}
Теперь необход имо обобщить равенство (equality):
Dollar
public boolean equals(Object object) {
Dollar dollar = (Dollar)object;
return amount == dollar.amount;
}
$5 + 1 °CHF = $10, если курс обмена 2:1
$5 * 2 = $10
Сд елать переменную amount закрытым членом класса
Побочные эффекты в классе Dollar?
Округление д енежных величин?
equals()
hashCode()
Мы могли бы использовать триангуляцию и д ля управления
обобщением метод а times(). Если бы у нас были примеры $5 * 2 = $10 и
$5 * 3 = $15, нам не смогли бы про сто возвращать константу.
Думаю, триангуляция – д овольно интересная вещь. Я использую ее
в случае, если не знаю, как выполнять рефакторинг. Если же я
пред ставляю, как устранить д ублирование межд у код ом и тестами и


созд ать более общее решение, я про сто созд аю его. С какой стати я
д олжен созд авать еще од ин тест, если сразу могу выполнить
обобщение?
Од нако когд а когд а в голову не приход ит ничего умного,
триангуляция д ает шанс по смотреть на проблему с д ругой стороны.
Сколько степеней свобод ы вы хотите под д ерживать в вашем
приложении (какую степень универсально сти, д ругими словами)?
Про сто попробуйте ввести некоторые из них, и, возможно, ответ станет
очевид нее.
$5 + 1 °CHF = $10, если курс обмена 2:1
$5 * 2 = $10
Сд елать переменную amount закрытым членом класса
Побочные эффекты в классе Dollar?
Округление д енежных величин?
equals()
hashCode()
Равенство значению null
Равенство объектов
Итак, сейчас операция проверки равенства реализована полно стью.
Но как учесть сравнение со значением null и сравнение c д ругими
объектами? Это часто используемые операции, пока они нам еще не
нужны, поэтому мы про сто д обавим их в список зад ач.
Теперь, когд а у нас есть операция проверки равенства, можно
напрямую сравнивать объекты Dollar. Это позволит нам сд елать
переменную amount закрытой, какой и д олжна быть д обропоряд очная
переменная экземпляра. Резюмируем все вышесказанное:
• поняли, что д ля использования шаблона проектирования «Объект-
значение» необход имо реализовать операцию проверки равенства;
• созд али тест д ля этой операции;
• реализовали ее про стейшим спо собом;
• прод олжили тестирование (вместо того, чтобы сразу приступить к
рефакторингу);
• выполнили рефакторинг так, чтобы охватить оба теста сразу.



Download 1,35 Mb.

Do'stlaringiz bilan baham:
1   ...   10   11   12   13   14   15   16   17   ...   140




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish