Ruby Constructor, Proses Instantiasi Objek dan Template Pattern

Saya berasumsi bahwa kamu sudah pernah mengenal bahasa pemrograman berorientasi objek lainnya sebelum kenal Ruby. Pada bahasa lain, proses instantiasi suatu kelas menjadi objek adalah dengan menggunakan operator new seperti ini.

Di Ruby nyatanya tidak seperti itu, yang digunakan adalah class method bernama new seperti ini.

Bagi yang mempunyai modal OOP di bahasa lain maka mengetahui bentuk di Ruby yang seperti itu mungkin bisa menimbulkan sedikit keheranan. Ditambah lagi constructor di Ruby yang beda dibanding dengan yang lain. Di tempat lain, constructor biasanya memiliki nama yang sama dengan nama kelasnya, misalnya di C# serupa ini.

Di Ruby constructor adalah method yang bernama initialize

Ternyata eh ternyata, proses instantiasi objek di Ruby memanfaatkan salah satu jenis dari design pattern yang terkenal itu. Pattern yang digunakan saat sebuah kelas dibuatkan instance-nya adalah template pattern. Design pattern ini intinya adalah memiliki sebuah method yang mana di dalamnya memanggil serangkaian method lain yang harus dipenuhi. Dengan kata lain serangkaian method yang harus dipenuhi ini adalah template itu sendiri.

Supaya ada gambaran misal kita punya kode seperti ini.

Dari kode di atas berarti kelas Service ini memiliki template di method call yang mana di dalamnya dia memanggil berturut-turut prepare, perform dan after. Artinya adalah kelas ini nantinya akan dijadikan parent dari suatu kelas yang menggunakan template itu sehingga dia harus melakukan override terhadap 3 method yang ada. Contoh,

Kurang lebih seperti itu gambarannya dari template pattern. Lalu bagaimana hubungannya dengan proses instantiasi objek di Ruby ?

Proses instantiasi objek di Ruby adalah berbentuk template dengan urutan seperti ini

1. Membuat instance
2. Melakukan inisialisasi state / properti dari instance
3. Mengembalikan / me-return instance tadi

Mari kita coba buat method kita sendiri untuk melakukan instantiasi objek supaya paham bagaimana proses yang sebenarnya dilakukan oleh Ruby. Pertama adalah membuat kelas method bernama my_new.

Oke sudah, selanjutnya adalah mulai menerapkan kode untuk langkah 1-3 di atas tadi. Untuk langkah pertama, Ruby menyediakan method bernama allocate untuk menciptakan objek dari kelas yang bersangkutan.

Langkah kedua adalah menginisialisasi state yang dimiliki. Untuk saat ini kita ambil gampang dulu seperti berikut ya dengan anggapan ada 2 state yang dimiliki. Di sini kita juga mengubah my_new menjadi menerima parameter.

Dan langkah terakhir adalah mengembalikan instance yang bersangkutan.

Sampai sini kita sudah bisa membuat method sendiri untuk melakukan instantiasi objek sekaligus memberikan nilai awal. Akan tetapi, pada langkah kedua ada kode yang tidak fleksibel

Dengan bentuk yang seperti itu kita tidak bisa membuat sembarang instance variabel karena letaknya yang ada di dalam method new (dalam contoh kita berarti method my_new) yang mana kita tidak bisa sembarangan mengeditnya. Dari situ lah digunakan template pattern.

Dengan pendekatan baru ini maka proses inisiasi state dilakukan pada method yang berbeda, sebut saja namanya initialize atau di contoh yang kita buat berarti my_initialize.

Dari kode di atas sudah terlihat adanya template kan?, yaitu pemanggilan my_initialize yang mana isinya mesti kita buat sendiri.

Sampai sini masih belum clear karena coba lihat potongan kode di bawah ini.

Kode di atas berarti menganggap akan selalu ada 2 buah parameter yang diberikan di my_new untuk menginisialisasi state. Kenyataannya kita tidak tahu akan ada berapa parameter yang diberikan dan karena kita tidak punya kuasa terhadap method new atau my_new ini maka cara statis seperti ini tidak bisa digunakan.

Lalu bagaimana solusinya?

Gunakan splat!

Dengan begini berapapun instance variabel yang kita miliki akan bisa diberikan nilai awal menggunakan my_initialize karena sudah menggunakan splat serta kita punya kuasa sesukanya terhadap my_initialize.

Facebook Comments
 

Agung Setiawan

Agung Setiawan adalah software engineer di BukaLapak.com, penulis sekaligus pecinta sastra, dan pembaca buku

 
Halo, perkenalkan saya Agung Setiawan.
Saya Software Engineer di BukaLapak.
Simak pemikian saya soal dunia Software Engineering via Twitter di @agungsetiawanmu dan facebook
Blog ini saya update seminggu sekali jadi sering-sering saja mampir
Mau belajar Vim bareng saya?
Belajar ngoding dari nol menggunakan PHP

Leave a Reply

Your email address will not be published. Required fields are marked *