Belajar Ruby - OOP: Class, Object & Module
Episode 6 of 23

Belajar Ruby - OOP: Class, Object & Module

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.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

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.

Class dan Objek

initialize dan Accessor

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:

RubyClass dasar dengan 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.nama

Pengguna.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.

Instance Method dan Self

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 dan Class Method

Inheritance

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:

RubyPewarisan dan class method
class Admin < Pengguna
  def self.tipe
    "admin"
  end
 
  def sapa
    super + " (admin)"
  end
end
 
puts Admin.tipe
puts Admin.new("Budi", 25).sapa

Admin < 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.

Class Method dan Singleton

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: Mixin dan Namespace

include, extend, dan prepend

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):

RubyMixin dengan include
module BisaBerjalan
  def berjalan
    "berjalan dari #{self.class}"
  end
end
 
class Kucing
  include BisaBerjalan
end
 
puts Kucing.new.berjalan

include 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.

Namespace dan Modul Bawaan

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?:

RubyModul Comparable
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 < b

Dengan 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.

Method Visibility

public, protected, dan private

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:

RubyVisibility method
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.info

Semua 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.

Penutup

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.
  • Method berawalan 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.

Belajar Ruby - OOP: Class, Object & Module | Belajar Ruby