TDD_I_07: Jablka a hrušky
$5 + 10 CHF = $10 je-li kurz 2:1
$5 * 2 = $10
Převést položku mnozstvi na soukromou
Vedlejší účinky třídy Dolar?
Zaokrouhlování peněz?
Metoda equals()
Metoda hashCode()
Rovnost s null
Rovnost objektů
5 CHF * 2 = 10 CHF
Dolar / Frank duplicita
Společná metoda equals()
Společné násobení
Porovnání franků a dolarů
Jako blesk z čistého nebe nás na konci šesté kapitoly zasáhla myšlenka: co se asi stane porovnáme-li franky a dolary? Zodpovědně jsme proměnili naši dotěrnou myšlenku na položku na našem seznamu úkolů, ale nelze se ji jen tak zbavit. Tak co se sakra stane?
public void testRovnosti() { assertTrue(new Dolar(5).equals(new Dolar(5))); assertFalse(new Dolar(5).equals(new Dolar(6))); assertTrue(new Frank(5).equals(new Frank(5))); assertFalse(new Frank(5).equals(new Frank(6))); assertFalse(new Frank(5).equals(new Dolar(5))); }
Pokazí se to. Dolary jsou franky. Než švýcaští obchodníci vyskočí vzrušením, pokusme se kód opravit. Kód pro porovnání musí zajistit, že se neporovnávají dolary a franky. Můžeme to udělat hned teď porovnáním třídy dvou objektů - dva objekty Penize se rovnají pouze tehdy, jestliže jsou stjené jejich třídy i množství.
Penize
public boolean equals(Object object) { Penize penize = (Penize)object; return mnozstvi == penize.mnozstvi && getClass().equals(penize.getClass()); }
Použití tříd v modelovém kódu tímto způsobem trošku smrdí. Rádi bychom použili kritérium, které dává smysl v prostředí financí a ne v prostředí objektů Javy. Ale v této chvíli nemáme nic takového jako je měna a ani není důvod nějakou měnu zavádět, takže nám to pro tuhle chvíli bude stačit.
$5 + 10 CHF = $10 je-li kurz 2:1
$5 * 2 = $10
Převést položku mnozstvi na soukromou
Vedlejší účinky třídy Dolar?
Zaokrouhlování peněz?
Metoda equals()
Metoda hashCode()
Rovnost s null
Rovnost objektů
5 CHF * 2 = 10 CHF
Dolar / Frank duplicita
Společná metoda equals()
Společné násobení
Porovnání franků a dolarů
Měna?
Teď se vážně musíme zbavit společného kódu metody krat(), abychom se dostali k výpočtům s několika měnami. Dříve než to však uděláme, zopakujme si, čeho jsme v této kapitole dosáhli:
- Přijali jsme námitku která nás trápila a proměnili jsme ji v test.
- Zprovoznili jsme test rozumným, nikoli však příliš dokonalým způsobem - pomocí metody getClass()
- Rozhodli jsme se nezavásět další návrh dokud nebudeme lépe motivováni.
Vývoj řízený testy, Kapitola 6 | Dr3dweRkZ | Vývoj řízený testy, Kapitola 8