Studi Kasus: Ratusan(14)

Ratusan

Object ratusan

Ekspresi ratusan (200)

121

100+100

100 + 20 +1

100-20+1-10

Eksepsi jika tidak ada ekspresi yang bersesuaian

Ratusan adalah komposisi puluhan, tunggal dan ratusan itu sendiri.

Gambar. Komposisi Ratusan.

Untuk membentuk ratusan, terlebih dahulu kita harus membangun komposisi puluhan. Berikut ini adalah test untuk membentuk komposisi ratusan.

[Test] 
public void MembuatKomposisiRatusan() 
{ 
	IExpression dua=Number.CreateNewNumber("2"); 
	IExpression nol=Number.CreateNewNumber("0"); 
	IExpression duaNol=new Puluhan(dua,nol); 
	IExpression nol2=Number.CreateNewNumber("0"); 
	IExpression ratusan=new Ratusan(duanol,nol2); 
	Assert.AreEqual("200",ratusan.Expression); 
}

Mencontek puluhan kita bisa mendapatkan calss Ratusan,

public class Ratusan:IExpression 
{ 
	private IExpression m_puluhan; 
	private IExpression m_ratusan; 
	public Ratusan(IExpression ratusan, IExpression puluhan) 
	{ 
		this.m_puluhan=puluhan; 
		this.m_ratusan=ratusan; 
	} 
	public string Expression{ 
		get{ 
			return this.m_ratusan.Expression + this.m_puluhan.Expression; 
		} 
	} 
	public object Value { 
		get { 
			return (int)this.m_ratusan.Value * 100 + (int)this.m_puluhan.Value; 
		} 
	}
}

Tidak memerlukan red, implementasi ini langsung membuat test kita menjadi hijau.

Berikutnya kita buat test untuk ekspresi,

[Test] 
public void Konversi121KeRatusan() 
{ 
	string input="121"; 
	IExpressionConverter exConverter=new ExpressionConverter(); 
	IExpression ex=exConverter.Convert(input); 
	Assert.AreEqual("121",ex.Expression); 
	Assert.AreEqual(121,ex.Value); 
}

Pesan dari test: Expression 121 not supported.

Seperti dapat diduga kita belum mensupport ratusan didalam method Number.CreateNewNumber. Untuk itu method ini kita ubah menjadi,

public static IExpression CreateNewNumber(string ekspresi) 
{ 
	if(ekspresi.Length==1) 
		return createSingleNumber(ekspresi); 
	else if(ekspresi.Length==2) 
		return createPuluhan(ekspresi); 
	else if(ekspresi.Length==3) 
		return createRatusan(ekspresi); 
	else 
		throw new ApplicationException(String.Format("Expression {0} not supported",ekspresi)); 
		 
}

Jadi kita tambahkan blok if ketiga untuk menghandle string yang panjangnya 3 karakter. Kemudian method createRatusan kita definisikan sebagai berikut:

private static IExpression createRatusan(string ekspresi) 
{ 
	char[] exs=ekspresi.ToCharArray(); 
	IExpression ratusan=Number.CreateNewNumber(exs[0].ToString()); 
	IExpression puluhan=createPuluhan(String.Format("{0}{1}",exs[1],exs[2])); 
	return new Ratusan(ratusan,puluhan); 
}

Yaitu cukup dengan mengambil karakter pertama sebagai ratusan dan karakter sisanya sebagai puluhan. Impelementasi ini cukup membuat test kita memberi warna hijau, sehingga kita bisa melangkah menuju test selanjutnya.

Berikutnya adalah test penjumlahan 100 + 100,

[Test] 
public void Penjumlahan100dengan100() 
{ 
	string input="100 + 100"; 
	IExpressionConverter exConverter=new ExpressionConverter(); 
	IExpression ex=exConverter.Convert(input); 
	Assert.AreEqual("100 + 100",ex.Expression); 
	Assert.AreEqual(200,ex.Value); 
}

Test ini juga lewat.

Beriktunya test penjumlahan 100 + 20 + 1,

[Test] 
public void Penjumlahan100dengan20dengan1() 
{ 
	string input="100 + 20 + 1"; 
	IExpressionConverter exConverter=new ExpressionConverter(); 
	IExpression ex=exConverter.Convert(input); 
	Assert.AreEqual("100 + 20 + 1",ex.Expression); 
	Assert.AreEqual(121,ex.Value); 
}
	<p>Test ini juga lewat.</p>
	<p>Berikutnya test penjumlahan dan pengurangan 100-20+1-10,</p>

[Test] 
public void PenjumlahanDanPengurangan100dengan20dengan1() 
{ 
	string input="100 - 20 + 1 - 10"; 
	IExpressionConverter exConverter=new ExpressionConverter(); 
	IExpression ex=exConverter.Convert(input); 
	Assert.AreEqual("100 - 20 + 1 - 10",ex.Expression); 
	Assert.AreEqual(71,ex.Value); 
}

Ini juga lewat.

Object ratusan

Ekspresi ratusan (200)

121

100+100

100 + 20 +1

100-20+1-10

Eksepsi jika tidak ada ekspresi yang bersesuaian

Iklan

There are no comments on this post.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: