OOP dalam Ruby: Class, Inheritance, dan Module

| Ruby | ruby, tutorial, oop, class, inheritance, module

OOP dalam Ruby: Class, Inheritance, dan Module

Ruby adalah bahasa pure OOP — semuanya adalah objek. Memahami OOP di Ruby berarti memahami cara kerja bahasa ini secara menyeluruh.

1. Class — Blueprint Object

Class adalah cetakan untuk membuat object. Di dalam class, Anda definisi attribute (data) dan method (behavior).

class Animal
  def initialize(nama, suara)
    @nama = nama
    @suara = suara
  end

  def tampilkan
    puts "Nama: #{@nama}, Suara: #{@suara}"
  end
end

Membuat Object

kucing = Animal.new("Kitty", "Meong")
anjing = Animal.new("Buddy", "Guk guk")

kucing.tampilkan  # Nama: Kitty, Suara: Meong
anjing.tampilkan  # Nama: Buddy, Suara: Guk guk

2. Attribute — Getter & Setter

Getter

class User
  def initialize(nama)
    @nama = nama
  end

  def nama
    @nama
  end
end

user = User.new("Andika")
puts user.nama  # Andika

Setter

class User
  def initialize(nama)
    @nama = nama
  end

  def nama=(baru)
    @nama = baru
  end
end

user = User.new("Andika")
user.nama = "Budi"
puts user.nama  # Budi

Shortcut: attr_accessor

class User
  attr_accessor :nama, :email
end

user = User.new
user.nama = "Andika"
user.email = "[email protected]"
puts user.nama    # Andika
puts user.email   # [email protected]
  • attr_reader → getter saja
  • attr_writer → setter saja
  • attr_accessor → keduanya

3. Inheritance — Pewarisan

Class bisa mewarisi attribute dan method dari class lain (parent).

class Animal
  def initialize(nama)
    @nama = nama
  end

  def tampilkan
    puts "Nama: #{@nama}"
  end
end

class Kucing < Animal
  def mengeong
    puts "Meong!"
  end
end

Penggunaan

kucing = Kucing.new("Kitty")
kucing.tampilkan   # Nama: Kitty (dari parent)
kucing.mengeong    # Meong! (dari child)

Override Method

class Animal
  def suara
    puts "..."
  end
end

class Kucing < Animal
  def suara
    puts "Meong!"
  end
end

Kucing.new.suara  # Meong!

super — Panggil Method Parent

class Animal
  def initialize(nama)
    @nama = nama
  end
end

class Kucing < Animal
  def initialize(nama, warna)
    super(nama)
    @warna = warna
  end

  def tampilkan
    puts "#{@nama} berwarna #{@warna}"
  end
end

kucing = Kucing.new("Kitty", "Putih")
kucing.tampilkan  # Kitty berwarna Putih

4. Module — Namespace & Mixin

Module mirip class, tapi tidak bisa diinstansiasi (tidak ada .new).

Sebagai Namespace

module Keuangan
  PAJAK = 0.11

  def self.hitung_pajak(harga)
    harga * PAJAK
  end
end

puts Keuangan::PAJAK            # 0.11
puts Keuangan.hitung_pajak(100000)  # 11000

Sebagai Mixin

module Printable
  def cetak
    puts "Mencetak: #{self.to_s}"
  end
end

class Buku
  include Printable

  def initialize(judul)
    @judul = judul
  end

  def to_s
    @judul
  end
end

Buku.new("Ruby 101").cetak  # Mencetak: Ruby 101

5. Class vs Module

Aspek Class Module
Instance Bisa (.new) Tidak
Inheritance < (single) include (multiple)
Fungsi Blueprint object Namespace + Mixin
Multi-inherit Tidak Ya (via mixin)

6. Visibility

Public (Default)

class User
  def nama
    @nama
  end
end

Private

class User
  def initialize(nama, password)
    @nama = nama
    @password = password
  end

  def nama
    @nama
  end

  private

  def valid_password?(input)
    input == @password
  end
end

user = User.new("Andika", "rahasia")
puts user.nama           # Andika
# user.valid_password?("rahasia")  # Error: private method

Protected

class Angka
  def initialize(n)
    @n = n
  end

  protected

  def n
    @n
  end
end

a = Angka.new(10)
b = Angka.new(20)
# a.n    # Error (protected)

7. Ringkasan

Konsep Fungsi Contoh
class Blueprint object class User ... end
initialize Constructor def initialize(nama)
@variable Instance variable @nama
attr_accessor Getter + setter attr_accessor :nama
< Inheritance class Kucing < Animal
module Namespace + Mixin module Keuangan
include Mixin module include Printable
private Sembunyikan method private

Penutup

OOP dalam Ruby memungkinkan Anda menulis kode yang terorganisir dan reusable. Gunakan class untuk blueprint, inheritance untuk hierarki, dan module untuk shared behavior.

Di artikel selanjutnya, kita akan bahas Error Handling dalam Ruby — cara menangani error dengan rescue, ensure, dan custom exception.


Mail Facebook Twitter Whatsapp