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