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



Download 1,35 Mb.
Pdf ko'rish
bet31/140
Sana15.04.2022
Hajmi1,35 Mb.
#555128
1   ...   27   28   29   30   31   32   33   34   ...   140
Bog'liq
Экстремальное программирование Разработка через тестирование PDFDrive

12. Сложение, наконец-то 
$5 + 1 °CHF = $10, если курс обмена 2:1
Наступил новый д ень, и я заметил, что список зад ач переполнен
вычеркнутыми пунктами. Лучше всего переписать о ставшиеся не
зачеркнутыми пункты в новый свежий список. (Я люблю физически
копировать пункты из старого списка в новый список. Если в старом
списке много мелких нед од еланных зад ач, вместо того, чтобы
копировать их в новый список, я про сто д обавляю в программу
соответствующий код . В результате из-за моей лени куча мелочей,
которая могла бы расти со временем, про сто исчезает. Используйте свои
слабо сти.)
$5 + 1 °CHF = $10, если курс обмена 2:1
$5 + $5 = $10
Пока что я не пред ставляю себе, как можно реализовать смешанное
сложение д олларов и франков, поэтому пред лагаю начать с более
про стой зад ачи: $5 + $5 = $10.
public void testSimpleAddition() {
Money sum = Money.dollar(5). plus(Money.dollar(5));
assertEquals(Money.dollar(10), sum);
}
Мы могли бы под д елать реализацию, про сто вернув значение
Money.dollar(10), од нако в д анном случае реализация кажется очевид ной.
Давайте попробуем:
Money
Money plus(Money addend) {
return new Money(amount + addend.amount, currency);
}
(Далее я буд у ускорять процесс разработки, чтобы сэкономить
бумагу и сохранить ваш интерес. Там, гд е д изайн не очевид ен, я буд у


под д елывать реализацию и выполнять рефакторинг. Я над еюсь, что
благод аря этому вы увид ите, каким образом в TDD выполняется
контроль над величиной шагов.)
Сказав, что планирую увеличить скоро сть, я немед ленно замед ляю
процесс разработки. Од нако я не планирую замед лять процесс написания
код а, который обеспечивает успешное тестирование. Я планирую
замед лить процесс написания самих тестов. Некоторые ситуации и
некоторые тесты требуют тщательного обд умывания. Каким образом
мы планируем пред ставить арифметику со смешанными валютами? Это
как раз тот случай, когд а требуется тщательное обд умывание.
Наиболее важное и сложное ограничение, с которым нам
приход ится иметь д ело, заключается в том, что мы не хотим, чтобы код
нашей системы знал о существовании каких-либо валют. Нам хотело сь
бы, чтобы система имела д ело с д еньгами и не зависела от того, в какой
валюте они пред ставлены. Возможная стратегия со стоит в том, чтобы
немед ленно преобразовывать любые д енежные значения в некоторую
ед иную валюту (попробуйте угад ать, какая валюта является самой
любимой у американских программистов). Од нако под обное решение не
позволит нам с легко стью варьировать соотношения (курсы обмена)
межд у различными валютами.
Вместо этого мы хотели бы найти решение, которое позволило бы
нам в уд обной форме реализовать механизм обменных курсов и при этом
обеспечить запись арифметических выражений в форме, близкой к
станд артной арифметической записи.
Решение о сновано на объектах. Если имеющийся объект вед ет себя
не так, как нам хотело сь бы, мы созд аем еще од ин объект, облад ающий
точно таким же внешним протоколом, но отличающейся внутренней
реализацией. Этот шаблон называется «Самозванец» (Imposter).
Возможно, многим это покажется хиромантией. Каким образом в
д анной ситуации можно использовать шаблон «Самозванец»? Од нако я
не собираюсь шутить над вами – не существует формулы, позволяющей
генерировать гениальные д изайнерские решения. Решение проблемы
было прид умано Уорд ом Каннигемом д есятилетие назад . Я еще не
встречал человека, который независимо от Уорд а прид умал бы нечто
под обное. К сожалению, метод ика TDD не гарантирует генерацию
гениальных ид ей. Вместе с тем благод аря TDD вы имеете тесты,
формирующие вашу уверенно сть в код е, а также тщательно вылизанный
код , – все это является хорошей почвой д ля возникновения ид еи и ее
воплощения в реально сть.


Итак, что же является решением в нашем случае? Пред лагается
созд ать объект, который вед ет себя как объект Money, од нако
соответствует сумме д вух объектов Money. Чтобы объяснить эту ид ею,
я пробовал использовать несколько разных метафор. Например, можно
рассматривать сумму различных д енежных величин как 

Download 1,35 Mb.

Do'stlaringiz bilan baham:
1   ...   27   28   29   30   31   32   33   34   ...   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