Studi Kasus: Penjumlahan dalam komposisi (6)

Penjumlahan dalam Komposisi.

5+2+4-3+10-2=?

Konversi string 1 ke object Satu.

Konversi string 2 ke object Dua.

Konversi string 3 ke object Tiga.

…dst sampai Sembilan.

Object puluhan

Value dalam komposisi puluhan

Object ratusan

Object penjumlahan

Eksepsi jika tidak ada ekspresi yang bersesuaian

Kita telah membuat object puluhan, yang merupakan komposisi dua buah Number yang satu sebagai puluhan dan yang satu sebagai satuan. Ekspresi puluhan juga telah kita dapatkan. Sekarang, apakah nilai dari puluhan benar-benar puluhan. Apakah ekspresi “20” benar-benar int 20? Puluhan yang kita buat adalah dengan ide komposisi yang kalau kita value-kan akan seperti ini: “20”==”2” * 10 + “0”. atau “21”==”2” *10 + 1. Atau dengan kata lain ekspresi “2” dikali 10 ditambah ekspresi “1”.

Ekspresi “2” dan ekspresi “1” masing-masing tentunya memiliki value atau nilai int 2 dan int 1. Karena itu sebelum kita melangkah lebih jauh kedalam value dari puluhan kita harus menguji dulu value dari number. Sehingga test number kita menjadi,

[Test] 
public void NumberTest() 
{ 
	IExpression ex=Number.CreateNewNumber("1"); 
	Assert.AreEqual("1",ex.Expression); 
	Assert.AreEqual(1,ex.Value); 
}

Kita perkenalkan method Value kedalam interface IExpression. Sehingga semua implementor IExpression harus mengimplementasikan Value. Karena implementasinay sederhana untuk Number, maka saya akan memilih melakukan implementasi langsung,

public interface IExpression 
{ 
	string Expression {get;} 
	object Value {get;} 
}

Value adalah property bertipe object. Untuk saat ini saya berani memastikan tipe apa yang tepat.

Dan untuk class Number, cukup mereturn data number,

public class Number:IExpression 
{ 
	private int m_number; 
	...
	public object Value { 
		get { 
			return this.m_number; 
		} 
	}
	...
}

untuk puluhan sementara Value kita return 0.

Dengan implementasi ini test kita green.

Setelah selesai membuat Value untuk number, sekarang kita buat Value untuk puluhan. Berikut adalah test untuk puluhan,

[Test] 
public void NilaiDalamKomposisiPuluhan() 
{ 
	IExpression dua=Number.CreateNewNumber("2"); 
	IExpression nol=Number.CreateNewNumber("0"); 
	 
	IExpression duaNol=new Puluhan(dua,nol); 
	Assert.AreEqual(20,duaNol.Value); 
}

Karena kita masih mereturn 0 untuk Value puluhan, output dari test ini adalah red. Impelementasi termudah agar test menjadi green adalah seperti berikut ini,

public class Puluhan:IExpression 
{ 
	...
	public object Value { 
		get { 
			return (int)this.m_puluhan.Value * 10 + (int)this.m_satuan.Value; 
		} 
	} 
}

Persis sama dengan yang kita inginkan sebelumnya.

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: