Saturday, April 17, 2010

Pemrograman Generik pada C++

Pemrograman Generik pada C++
 
Sebelumnya nih, karena kebetulan teman saya Syahrizal Andhika sudah membahas tentang pemrograman generik pada java, maka saya buat penjabaran tentang kerabatnya yaitu Pemrograman C++.
Tidak seperti Smalltalk (salah satu bahasa pemrograman berorientasi objek pertama), C++ adalah bahasa pemrograman dengan tipe kuat, bahkan lebih kuat dari Java. Setiap variabel memiliki tipe, dan hanya bisa menampung tipe data itu saja. Artinya pemrograman generik seperti pada Smalltalk tidak mungkin diterapkan.
Lebih Jauh, C++ tidak memiliki sesuatu yang mirip dengan kelas Object pada Java. Artinya, tidak ada kelas yang merupakan kelas super dari semua kelas. Artinya C++ tidak bisa menggunakan pemrograman generik seperti Java.

Akan tetapi, C++ memiliki sistem pemrograman geneik yang canggih dan fleksibel, yaitu yang disebut template. Dalam C++, kita tidak membuat subrutin pengurutan yang berbeda untuk setiap tipe data. Akan tetapi kita bisa mmebuat template subrutin. Template ini bukan subrutin; akan tetapi mirip seperti pabrik pembuat subrutin. Kita lihat contoh berikutnya, karena sintaks C++ mirip dengan Java :

 Dalam kode di atas, kita mendefinisikan template subrutin. Jika kita menghapus baris pertama, yaitu template<class TipeItem>", dan mengganti kata "TipeItem" dengan "int", pada semua isi template, maka kita bisa mendapatkan subrutin untuk mengurut array int. (Meskipun kita tulis seperti "class TipeItem", kita bisa menggantinya dengan tipe apapun, termasuk tipe primitif). Jika kita mengganti "TipeItem" dengan string, maka kita bisa mendapatkan subrutin untuk mengurut array string. Ini yang sebenarnya dilakukan oleh compiler.
Jika program kita menyebut "urut(list,10)" di mana list adalah array int, maka kompiler menggunakan template ini untuk membuat subrutin untuk mengurut array int. Jika kita sebut "urut(kartu,10)" di mana kartu adalah array objek bertipe Kartu, maka kompiler akan membuat subrutin untuk mengurutkan array Kartu.
Template di atas menggunakan operator ">" untuk membandingkan nilai. Jika operator ini didefinisikan untuk nilai bertipe Kartu, maka kompiler akan menggunakan template dengan sukses. Jika ">" tidak didefinisikan untuk kelas Kartu, maka kompiler akan gagal, akan tetapi ini akan terjadi pada saat program dikompilasi bukan seperi Smalltalk di mana program akan crash pada saat dijalankan.
C++ juga memiliki template untuk membuat kelas. Jika kita menulis template untuk pohon biner, kita bisa menggunakan template itu untuk membuat kelas pohon biner int, pohon biner string, pohon biner tanggal, dan seterusnya -- semua dari satu template. Versi paling baru C++ memiliki template bawaan yang cukup komplit yang disebut dengan Pustaka Template Standar (Standard Template Library atau STL). STL sendiri cukup kompleks, dan bahkan beberapa orang mengatakan sangat amat kompleks. Akan tetapi ini juga fitur paling menarik dari C++

No comments:

Post a Comment