#210319 Today's Moku-Moku by Fujita 今日の始まり
https://gyazo.com/6da77952350b44e11d4ae0341c0d0c17
今日はp.35から!
テスト不足に気づいたら
第5章のツケを払う時がやってきた。
素早く進むために、コピペしてきたコードを綺麗にするときがやってきた。
第5章では、異なる通過間の足し算のテストを行った。
その時のクラス関係は以下の通り。
今回は、クラスを構成を変更してコードを綺麗にすることを検討する。
2つの案が考えられる。
Op.2:片方のクラスが片方のクラスを継承する案。この案はコードの削減に繋がらない。
Op.3:2つのクラスの共通の親クラスを作成する。この案で進める。
https://gyazo.com/22e66b7a9cb565c892d12e0e35d02859
空っぽのMoneyクラスを作った。
テストはグリーンであることを確認した。
code:Money.cs
using System;
namespace MoneyExample.Util
{
public class Money
{
public Money()
{
}
}
}
DollarがMoneyを継承するように変更する。
引き続きテストはグリーン。
code:Dollar.cs
public class Dollar : Money
{
private int amount;
public Dollar(int amount)
{
this.amount = amount;
}
public Dollar Times(int multiplier)
{
return new Dollar(amount * multiplier);
}
public override bool Equals(Object obj)
{
Dollar dollar = (Dollar)obj;
return amount == dollar.amount;
}
}
DollarクラスからMoneyクラスにaomountフィールドを移動する。
サブクラスから見えるようにするために、スコープをprotectedにした。
code:Money.cs
public class Money
{
protected int amount;
次に、equalsメソッドを親クラスに移動する「メソッドの引き上げ」を行う。
まずは、一時変数の型宣言をMoneyに変更する。
code:Dollar.cs
public override bool Equals(Object obj)
{
Money money = (Money)obj;
return amount == money.amount;
}
ふりかえり
ベロシティ:35 - 37. 2ページ