Inheritance
Dalam kehidupanan nyata banyak sekali objek yang memiliki sifat dan kebiasaan yang umum, misalnya mobil, motor, truk, bis, semuanya berfungsi sebagai kendaraan. dimana mereka memiliki ciri-ciri yang sama misalnya sama sama memiliki roda, ada mesinnya, ada pabrik yang membuat,..., bagaimana cara melakukan implementasi ke dalam program agar kode-kode program untuk objek yang memiliki kesamaan ini tidak perlu dibuat beberapa kali. sehingga lebih efektif dalam pengembangan, maintenance dan melakukan debugging.
- Dalam pemprograman berorientasi pada objek tentu pemikiran dalam membuat program harus terarah pada objek.
- dalam menganalisa hubungan antara objek terdapat hubungan "Inheritance/Turunan"
- contoh paling mudah adalah berikut:
- di bawah ini terdapat 3 Class yaitu Kendaraan, Mobil dan Motor
- Mobil dan Motor termasuk bagian dari Kendaraan, maka
- Kendaraan dapat disebut sebagai Parent
- Mobil dan Motor dapat disebut sebagai Child
- Hal yang perlu diperhatikan
- class Child (Mobil dan Motor) dapat menggunakan fasilitas yang dimiliki Parent (Kendaraan).
- Parent tidak dapat menggunakan fasilitas yang dimiliki child.
- keuntungan proses ini adalah kita tidak perlu menuliskan lagi program-program untuk child bila itu sudah ditulis di parentnya
Contoh Soal 1
class Persegipanjang def initialize(p,l) @panjang = p @lebar = l end def luas @panjang * @lebar end end class Balok < Persegipanjang def initialize (p,l,t) super p,l @tinggi = t end def volume @panjang * @lebar * @tinggi end end class Balokberwarna < Balok def initialize (p,l,t,w) super p,l,t @warna = w end def warnabalok @warna end end b1 = Balokberwarna.new(10,20,30,"Merah") puts b1.volume puts b1.warnabalok
- Penjelasan
- Pada program diatas terdapat tiga class yaitu
- Persegipanjang
- Balok (yang merupakan turunan dari Persegipanjang)
- Balokberwarna (yang merupakan turunan dari balok)
- karena konsep child dapat memanggil method yang dimiliki oleh parent, maka berarti objek dari Balok dapat memanggil method luas (yang dimiliki oleh Persegipanjang), objek Balokberwarna dapat memanggil method Volume yang dimiliki oleh Balok
- Perhatikan di dalam class Balok
- Saat membuat objek dari class balok maka secara otomatis objek balok ini juga memiliki @panjang dan @lebar, walaupun pada bagian initialize itu hanya ditulis @tinggi saja
- Perintah super artinya memanggil initialize yang dimiliki oleh parentnya dalam hal ini initialize milik Persegipanjang
- pada bagian paling bawah, kita membuat objek Balokberwarna dengan nama instance b1
- saat membuat objek kita memberi parameter 10,20,30 dan "merah"
- maka berarti p = 10, l = 20, t = 30, w = "merah"
- saat super p,l,t initialize milik balok dipanggil
- instance b1, bisa memanggil volume milik balok
Contoh Soal 2
class Kendaraan attr_reader :merek, :nama_model, :bahan_bakar def initialize merek,nama_model,jumlah_roda,bahan_bakar @merek = merek @nama_model = nama_model @jumlah_roda = jumlah_roda @bahan_bakar = bahan_bakar end def nama_kendaraan merek + " " + nama_model + " " + bahan_bakar end end class Mobil < Kendaraan def initialize merek,nama_model,jumlah_roda,bahan_bakar,jumlah_pintu super merek,nama_model,jumlah_roda,bahan_bakar @jumlah_pintu = jumlah_pintu end end class Motor < Kendaraan def initialize merek,nama_model,jumlah_roda,bahan_bakar,gandengan_samping super merek,nama_model,jumlah_roda,bahan_bakar @gandengan_samping = gandengan_samping end end
Keterangan untuk kode program diatas.
- Terdapat 3 class yaitu Kendaraan, Mobil dan Motor
- Class mobil merupakan turunan dari kendaraan, karena itu cara penulisannya
- class Motor < Kendaraan
- Semua kendaraan pasti memiliki merek,nama model, roda dan bahan bakar, karena itu pada initialize kendaraan menyertakan 4 nilai ini.
- pada mobil memiliki ciri khusus yang tidak di dapati pada motor yaitu jumlah pintu
- pada motor juga mimiliki ciri khusus tertentu yang tidak ada pada mobil yaitu motor dapat dipasang gandengan samping
- bila ingin melihat gambar gandengan samping dapat melihat pada link ini
- pada saat initialize Mobil , cukup memanggil fungsi init milik parent dengan kata-kata super
- baru yang tidak ada di parent, ditulis sendiri di bagian init Mobil.
- demikian pula yang terjadi dengan motor
- method nama_kendaraan yang ada di class Kendaraan bisa digunakan oleh class mobil dan motor
langkah untuk melakukan test pada program diatas.
- jalankan command prompt with ruby,
- buka folder ruby-1 dengan ketik: cd ruby-1
- jalankan program pry dengan mengetik: pry
- require "./inheritance.rb"
- mobil1 = Mobil.new("Suzuki","Ertiga",4,"Bensin",5)
- puts mobil1
- puts mobil1.nama_kendaraan
- bila sukses akan keluar tulisan Suzuki Ertiga Bensin