Archive

Posts Tagged ‘Programming’

Programming to Interface

July 18, 2010 2 comments

Baru saja selesai skimming buku Interface Oriented Design. Buku ini menuntas habis mengenai cara kita membuat sistem dengan interface.

Introduction

Di awal buku ini ada contoh mengenai Pizza Ordering. Skenarionya adalah kira2 sebagai berikut.

Kejadiannya ini karena malam2 lapar trus pengen pesan pizza favourite.
Nelepon deh..

Pizza guy : Yapz
Aku : Aku mw pesan pizza jumbo
Pizza : Toppings?
Aku : Pepperoni dan Mushrooms
PIzza : Alamat?
Aku : 1 Oak street
Pizza : 30 menit lagi akan diantar.

Nah.. kita coba bangun interface untuk PizzaOrdering tersebut. Hampir di setiap pemesanan pizza akan mendapati model percakapan seperti itu. Pemesanan pizza memiliki interface yg sama tetapi hanya implementasinya saja yg berbeda. Misalkan kita menelpon pizza yg lain maka yg kita hadapi kemungkinan besar adalah percakapan di atas.


public interface PizzaOrdering 
{
      void SetSize(Size size);
      void SetToppings(Toppings toppings);
      void SetAddress(Address address);
      DateTime GetTimeDelivered();
}

Nah.. sekarang kita udh punya interfacenya.. Trus bagaimana kita mendapatkan implementasi dari interface tersebut ? Kita tentu saja butuh Finder. Kita cari di buku telepon atau buku informasi mengenai toko pizza. Dari situ kita akan dapat memilih mana toko pizza yg akan kita hubungi. And then dial the number… Cara kita meng-order pizza tersebut sama tetapi perlakuan toko terhadap proses tersebut kemungkinan besar berbeda. Interfacenya sama tetapi implementasinya berbeda.
Read more…

Tell don’t Ask

February 5, 2009 5 comments

Object-oriented code lebih mudah dimengerti dan dimantain jka ditulis dengan menggunakan style “Tell, Don’t Ask”. Maksudnya ?? Object haruslah membuat keputusan hanya dengan menggunakan informasi yg dimiliki bukan berdasarkan informasi yg dimiliki oleh object lain. Tell itu command. Ask itu query.

Contohnya.

public class MyObject
{
     private OtherObject m_otherObj;
     .....
     public void MoveSomething()
     {
           boolean state = m_otherObj.IsOK; // ask / query
           if (state)
              m_otherObject.DoBadAction(); // command / tell
           else
              m_otherObject.DoGoodAction();
     }
}

akan lebih baik jika kita mengubahnya seperti ini :
Read more…

Thinking About Object

January 28, 2009 Leave a comment

Ketika kita mendesign sebuah kelas maka pikirkanlah object yg akan dibuat dari kelas tersebut. Pikirkanlah dua hal :

Apa yang diketahui oleh object tersebut
Apa yang dapat dilakukan oleh object tersebut

Sesuatu yg diketahui object disebut sebagai instance variable. Ini juga disebut sebagai state object dan direpresentasikan dengan data.
Read more…