OOP Praktis – Inheritance/pewarisan (python)

Teknik berikutnya dalam paradigma pemrograman berorientasi objek adalah inheritance atau pewarisan.

Inheritance, sesuai dengan namanya mengenalkan hubungan hirarkis antara parent class (induk) dan child class (anak), dimana child class dapat mewarisi attributes dan methods yang dimiliki oleh parent class.

cat: Parent class dikenal juga dengan istilah superclass, child class dikenal juga dengan istilah subclass

Dengan menggunakan inheritance, kita mendapatkan mendapatkan manfaat berupa dimungkinkannya code reuse (kode tidak perlu ditulis ulang) dan tersedianya informasi struktur klasifikasi hierarkis antar class.

Konsep

Untuk memahami konsep inheritance dengan lebih jelas, perhatikan ilustrasi berikut.

Ilustrasi di atas adalah ilustrasi beberapa class yang digunakan untuk merepresentasikan produk komponen komputer yang dijual pada sebuah toko komputer (disederhanakan).

Seluruh produk komponen yang dijual, apapun jenisnya, memiliki beberapa informasi yang seragam yakni : nama produk, pabrikan(merk), dan harga. Informasi yang seragam ini kemudian dijadikan fields untuk membuat sebuah struktur sebuah parent class yakni ComputerParts.

Informasi yang secara unik melekat pada suatu tipe komponen tertentu kemudian dijadikan fields pada masing-masing child class yang merepresentasikan satu kelompok tipe komponen bersangkutan. Pada ilustrasi, child class yang ada antara lain Processor, Random Access Memory (RAM), dan Harddisk bertipe SATA. Masing-masing child class tersebut memiliki karakteristik berbeda yang diperlihatkan dari field yang menyusunnya.

Kode program

Jika disusun dalam kode, maka masing-masing class dan cara penggunaannya dapat dibuat seperti pada contoh berikut:

Kode

class ComputerPart:
  def __init__(self,pabrikan,nama,jenis,harga):
    self.pabrikan = pabrikan
    self.nama = nama
    self.jenis = jenis
    self.harga = harga
    
class Processor(ComputerPart):
  def __init__(self,pabrikan,nama,harga,jumlah_core,speed):
    super().__init__(pabrikan,nama,'processor',harga)
    self.jumlah_core = jumlah_core
    self.speed = speed

class RandomAccessMemory(ComputerPart):
  def __init__(self,pabrikan,nama,harga,kapasitas):
    super().__init__(pabrikan,nama,'RAM',harga)
    self.kapasitas = kapasitas

class HardDiskSATA(ComputerPart):
  def __init__(self,pabrikan,nama,harga,kapasitas,rpm):
    super().__init__(pabrikan,nama,'SATA',harga)
    self.kapasitas = kapasitas
    self.rpm = rpm

Penjelasan

Pada kode di samping diperlihatkan susunan kode ComputerPart sebagai superclass. ComputerPart memiliki empat buat attribute yakni pabrikan,nama,jenis, dan harga.

Berikutnya diperlihatkan kode untuk ketiga subclass yakni Processor, RandomAccessMemory, dan HardDiskSATA.

Penanda bahwa masing-masing class tersebut adalah subclass dari ComputerPart adalah nama superclass yang diletakkan setelah nama subclass di dalam tanda kurung dengan sintaks class Anak(Induk): seperti yang diperlihatkan pada baris 8, 14, 19.

Perhatikan juga bahwa pada constructor setiap subclass terdapat pemanggilan constructor dari superclass-nya dengan kata kunci super() yakni pada baris 10, 16, dan 21.

Cara menggunakan

Berikut adalah potongan kode yang mendemonstrasikan inisialisasi object menggunakan ketiga subclass yang ada dan sekaligus menunjukkan bahwa setiap object pada class tersebut memiliki attribute jenis, nama, dan pabrikan yang diwarisi dari superclassnya.

p = Processor('Intel','Core i7 7740X',4350000,4,'4.3GHz')  
m = RandomAccessMemory('V-Gen','DDR4 SODimm PC19200/2400MHz',328000,'4GB')
hdd = HardDiskSATA('Seagate','HDD 2.5 inch',295000,'500GB',7200)

parts = [p,m,hdd]
for part in parts:
  print('{} {} produksi {}'.format(part.jenis,part.nama,part.pabrikan))

Output dari kode program di samping adalah:

Processor Core i7 7740X produksi Intel
RAM DDR4 SODimm PC19200/2400MHz produksi V-Gen
SATA HDD 2.5 inch produksi Seagate

Kode utuh

Jalankan kode di bawah ini untuk lebih jelasnya:

Sekian, semoga bermanfaat

Salam

Series Navigation<< OOP Praktis – Encapsulation (python)

You may also like...

Berikan komentar