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


Накапливающий параметр (Collecting Parameter)



Download 1,35 Mb.
Pdf ko'rish
bet111/140
Sana15.04.2022
Hajmi1,35 Mb.
#555128
1   ...   107   108   109   110   111   112   113   114   ...   140
Bog'liq
Экстремальное программирование Разработка через тестирование PDFDrive

Накапливающий параметр (Collecting Parameter)
Как 
можно 
сформировать 
результат 
операции, 
если 
она
распред елена межд у несколькими объектами? Используйте параметр, в
котором буд ут накапливаться результаты операции.
Про стым примером является интерфейс java.io.Externalizable. Метод
writeExternal этого интерфейса о существляет запись объекта и всех
объектов, на которые ссылается д анный объект. Чтобы обеспечить
общую запись, все записываемые объекты д олжны взаимод ействовать
д руг с д ругом, поэтому метод у перед ается параметр – объект класса
ObjectOutput, – в котором о существляется накопление:


java.io.Externalizable
public interface Externalizable extends java.io.Serializable {
void writeExternal(ObjectOutput out) throws IOException;
}
Добавление параметра-накопителя зачастую является по след ствием
использования 
шаблона 
«Компоновщик» 
(Composite). 
В 
начале
разработки JUnit не было необход имо сти накапливать результаты
выполнения нескольких тестов в объекте TestResult д о тех пор, пока в
инфраструктуру не была д обавлена возможно сть созд ания и запуска
нескольких тестов.
Необход имо сть использования параметра-накопителя возникает в
ситуации, когд а возрастает сложно сть объекта, получаемого в
результате комплексной операции. Например, пред ставьте, что нам
необход имо реализовать вывод объекта Expression на экран в вид е
строки символов. Если обычная, не структурированная строка – это все,
что нам нужно, значит, конкатенации буд ет вполне д о статочно:
testSumPrinting() {
Sum sum = new Sum(Money.dollar(5), Money.franc(7));
assertEquals("5 USD + 7 CHF", sum.toString());
}
String toString() {
return augend + " + " + addend;
}
Од нако если мы хотим отобразить объект Expression в вид е
д ревовид ной структуры, код может выгляд еть след ующим образом:
testSumPrinting() {
Sum sum = new Sum(Money.dollar(5), Money.franc(7));
assertEquals("+\n\t5 USD\n\t7 CHF", sum.toString());
}
В этом случае прид ется во спользоваться параметром-накопителем:
String toString() {
IndentingStream writer = new IndentingStream();


toString(writer);
return writer.contents();
}
void toString(IndentingWriter writer) {
writer.println("+");
writer.indent();
augend.toString(writer);
writer.println();
addend.toString(writer);
writer.exdent();
}

Download 1,35 Mb.

Do'stlaringiz bilan baham:
1   ...   107   108   109   110   111   112   113   114   ...   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