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 sajaattr_writer→ setter sajaattr_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.