Episode ini membedah Object-Oriented Programming Ruby: class, initialize, method instance dan class method, attr_accessor, pewarisan, modul dengan include, extend, dan prepend, modul Comparable dan Enumerable, serta visibility method.

Di episode 2 kita menyebut bahwa Ruby menganut everything is object. Sekarang saatnya menggunakan paradigma itu secara penuh: memodelkan dunia nyata ke dalam class, objek, dan modul. OOP adalah cara Ruby mengorganisasi kode — state disimpan di objek, perilaku didefinisikan di kelas, dan modul menyediakan perilaku yang bisa dibagikan.
Episode 6 ini membedah empat pilar OOP Ruby: pembuatan class dengan initialize dan accessor, pewarisan dan class method, penggunaan modul sebagai mixin dan namespace, serta visibility public, protected, dan private. Semua konsep ini akan menjadi bahan dasar saat kalian membaca kode Rails yang penuh class dan module.
Sebuah class di Ruby diawali kata kunci class dan ditutup end. Method initialize adalah constructor yang dipanggil saat new. Untuk membuka dan menulis instance variable dari luar, Ruby menyediakan attr_accessor:
class Pengguna
attr_accessor :nama, :umur
def initialize(nama, umur)
@nama = nama
@umur = umur
end
def sapa
"Halo, saya #{@nama}"
end
end
pengguna = Pengguna.new("Arman", 30)
puts pengguna.sapa
puts pengguna.nama
pengguna.nama = "Ruby"
puts pengguna.namaPengguna.new("Arman", 30) membuat objek baru dan memanggil initialize. attr_accessor :nama, :umur otomatis membuat method nama, nama=, umur, dan umur=. Jika hanya butuh baca saja, gunakan attr_reader; jika hanya tulis, attr_writer.
Method yang didefinisikan di dalam class adalah instance method — hanya bisa dipanggil oleh objek dari class tersebut. Kata kunci self merujuk ke objek yang sedang mengeksekusi method. self.class mengembalikan kelas objek tersebut, yang berguna untuk inspeksi dinamis.
Pewarisan menggunakan simbol <. Subclass mewarisi seluruh method dan accessor dari superclass, dan bisa menimpa (override) method dengan nama yang sama. Kata kunci super memanggil versi superclass:
class Admin < Pengguna
def self.tipe
"admin"
end
def sapa
super + " (admin)"
end
end
puts Admin.tipe
puts Admin.new("Budi", 25).sapaAdmin < Pengguna menjadikan Admin subclass Pengguna. super di dalam sapa memanggil sapa milik Pengguna lalu menambahkan akhiran. Class Admin otomatis memiliki nama, umur, dan seluruh perilaku Pengguna.
Method yang diawali self. (seperti self.tipe) adalah class method — dipanggil langsung dari class, bukan dari objek. Contoh umumnya adalah factory methods seperti Pengguna.by_id(3). Di balik layar, class method disimpan di singleton class, konsisten dengan penjelasan episode 2 tentang objek kelas.
Module adalah kumpulan method yang tidak bisa di-instantiate, tetapi bisa disisipkan ke class. include menjadikan method modul sebagai instance method, extend menjadikannya class method, dan prepend menyisipkan method ke posisi lebih tinggi dalam rantai pencarian (sebelum method class itu sendiri):
module BisaBerjalan
def berjalan
"berjalan dari #{self.class}"
end
end
class Kucing
include BisaBerjalan
end
puts Kucing.new.berjalaninclude BisaBerjalan memberi setiap objek Kucing method berjalan. Inilah yang disebut mixin — cara Ruby berbagi perilaku tanpa pewarisan ganda yang rumit. prepend dipakai untuk mengubah perilaku tanpa mengubah kode class asli, misalnya menambahkan logging.
Module juga berfungsi sebagai namespace untuk mengelompokkan class terkait, misalnya API::Klien dan API::Server. Ruby menyertakan modul bawaan yang sangat berguna, terutama Comparable dan Enumerable. Dengan include Comparable, class cukup mendefinisikan <=> dan otomatis mendapat <, >, <=, >=, dan between?:
class Suhu
include Comparable
def initialize(derajat)
@derajat = derajat
end
def <=>(lain)
@derajat <=> lain.derajat
end
attr_reader :derajat
end
a = Suhu.new(30)
b = Suhu.new(40)
puts a < bDengan hanya mendefinisikan <=> (spaceship yang kita pelajari di episode 4), class Suhu langsung mendukung perbandingan. a < b menghasilkan true karena 30 lebih kecil dari 40. Begitu pula include Enumerable memberi seluruh koleksi method map, select, dan reduce dari episode 5.
Ruby memiliki tiga tingkat visibilitas method. Secara default semua method bersifat public (bisa dipanggil dari mana saja). private membatasi panggilan hanya dari dalam objek yang sama tanpa receiver eksplisit, dan protected mengizinkan pemanggilan antar objek dari class yang sama:
class Rekening
def initialize(saldo)
@saldo = saldo
end
def info
"Saldo #{@saldo}"
end
private
def validasi
@saldo > 0
end
end
rekening = Rekening.new(500)
puts rekening.infoSemua method setelah kata kunci private (yaitu validasi) tidak bisa dipanggil dari luar: rekening.validasi akan memicu NoMethodError. Method info tetap public. Aturan private ini banyak dipakai untuk menyembunyikan detail internal dan menjaga antarmuka class tetap bersih.
Tip
Di Rails, model ActiveRecord memakai pola OOP ini secara ekstensif: attr_accessor untuk field virtual, modul untuk shared behavior, dan private untuk helper method internal. Memahami episode ini akan membuat kode Rails jauh lebih mudah dibaca.
Episode 6 membekali kalian dengan OOP Ruby: class dengan initialize dan attr_accessor, instance method dan class method, pewarisan dengan super, modul sebagai mixin dan namespace, modul bawaan Comparable dan Enumerable, serta kontrol visibilitas method.
Inti yang harus dibawa pulang:
attr_reader, attr_writer, dan attr_accessor mengontrol akses instance variable.super memanggil method superclass yang di-override.self. adalah class method yang dipanggil dari class.include menjadikan method modul sebagai instance method; extend sebagai class method.include Comparable cukup butuh method <=> untuk mendapat semua operator perbandingan.private method tidak bisa dipanggil dari luar objek.Di episode 7 selanjutnya kita akan membahas error handling, debugging, dan warnings — exception dengan begin, rescue, ensure, dan raise, kelas exception seperti StandardError dan ArgumentError, custom exception, debugging dengan binding.irb dan gem debug, backtrace, serta menjalankan kode dengan flag -w untuk melihat deprecation warnings. Ini keterampilan bertahan hidup di production.