OOP Praktis – Encapsulation (python)

Artikel-artikel tentang OOP sebelumnya, berfokus pada class dan object melalui fields/attribut maupun method penyusunnya. Pada artikel kali ini, akan dibahas teknik melakukan encapsulation atau juga dikenal dengan nama data hiding.

Apa itu encapsulation?

Encapsulation adalah teknik membatasi akses pada method yang dimiliki sebuah object dari luar object tersebut. Teknik ini bermanfaat untuk beberapa hal yakni:

  1. Menyembunyikan kompleksitas internal dari sebuah class/object, sehingga yang terlihat dari luar hanya attributes/methods yang relevan.
  2. Menjaga perubahan langsung pada attribute yang dimiliki sebuah object, ini dapat berguna saat nilai baru sebuah attribute perlu divalidasi terlebih dahulu.
  3. Menjaga agar method dengan hak akses public pada class tidak perlu ikut berubah saat field/method internal class bersangkutan berubah, sehingga kode program di tempat lain yang menggunakan class tersebut tidak perlu ikut berubah.

Teknik encapsulation pada bahasa pemrograman python

Encapsulation pada bahasa pemrograman python dilakukan dengan membuat method tertentu tersembunyi dari luar object. Berbeda dengan bahasa pemrograman lainnya (misal java), python tidak mengenal access modifier seperti private,protected, atau public.

Sebagai gantinya, python menggunakan underscore ( tanda ‘_’) untuk menandai access scope sebuah method pada class . Defaultnya instance method pada python bertipe public, jika sebuah nama method diawali dengan tanda satu underscore (‘_’) berarti ia adalah protected method, sedangkan jika diawali dua underscore (‘__’) berarti method tersebut adalah private method.

Contoh penerapan

Kode berikut memberikan contoh penerapan encapsulation pada simulasi pemutar rangkaian lagu yang dikumpulkan dalam sebuah playlist. Terdapat dua buah class yakni Lagu dan Playlist, dimana object Playlist dibuat dari kumpulan(list) object Lagu.

Kode class Playlist

class Playlist:
  def __init__(self,daftar_lagu):
    self.daftar_lagu = daftar_lagu
    self.current_position = 0  
  
  def __switch_to_song(self,to_index):
    last_pos = len(self.daftar_lagu) - 1
    if to_index > last_pos: # geser ke lagu awal
      self.current_position = 0
    elif to_index < 0: # geser ke lagu terakhir
      self.current_position = last_pos
    else: # putar sesuai index
      self.current_position = to_index 
    lagu = self.daftar_lagu[self.current_position]
    print('Memutar: {} oleh {}'.format(lagu.judul,lagu.penyanyi))  
  
  def play_first_song(self):
    self.__switch_to_song(0)  
  
  def play_last_song(self):
    last_pos = len(self.daftar_lagu) - 1
    self.__switch_to_song(last_pos)
  
  def play(self):
    self.__switch_to_song(self.current_position)
  
  def play_next_song(self):
    self.__switch_to_song(self.current_position+1)
  
  def play_prev_song(self):
    self.__switch_to_song(self.current_position-1)

Kode class Lagu

class Lagu:
  def __init__(self,judul,penyanyi):
    self.judul = judul
    self.penyanyi = penyanyi 

Contoh penggunaan

import playback as pbk

# siapkan lagu dan playlist
song1 = pbk.Lagu('Kalau Sang Surya Tenggelam','Erwin Gutawa feat Synch Stage Orchestra - Vienna') # https://youtu.be/-LEvdH1BGV0
song2 = pbk.Lagu('Itsumo Nando Demo','Dazbee Cover') # https://youtu.be/raAp5tHf4Hg
song3 = pbk.Lagu('Dreams','The Cranberries') # https://youtu.be/kaMdSxKzz8k
song4 = pbk.Lagu('One Summer\'s Day','Joe Hisaishi') # https://youtu.be/TK1Ij_-mank
song5 = pbk.Lagu('Kala Tangan dan Kaki Berkata','Chrisye') # https://youtu.be/BOHJw6EYYlY
pl = pbk.Playlist([song1,song2,song3,song4,song5])

stop = False
while not stop:
  konfirm = input('tekan g (play), f (first), n (next), p (prev), l (last), lainnya (stop) kemudian ENTER \n')
  if konfirm == 'g':
    pl.play()
  elif konfirm == 'f':
    pl.play_first_song()
  elif konfirm == 'n':
    pl.play_next_song()
  elif konfirm == 'p':
    pl.play_prev_song()
  elif konfirm == 'l':
    pl.play_last_song()
  else:    
    stop = True
    print('Pemutar lagu dihentikan')

Perhatikan class Playlist. Pada class ini terdapat sebuah private method yakni __switch_to_song(self,to_index). Method ini digunakan untuk memutar lagu pada posisi indeks tertentu (parameter to_index). Method ini tidak untuk diakses dari luar object, dan hanya dapat diakses oleh instance method pada class yang sama.

Lantas akses apa yang diberikan agar user bisa memutar lagu pada playlist? Pada kode ini, beberapa method dengan hak akses bebas (public instance method) disediakan untuk memutar lagu yakni:

  1. Method play untuk memutar lagu saat ini
  2. Method play_first_song untuk memutar lagu pertama dalam urutan playlist
  3. Method play_last_song untuk memutar lagu terakhir dalam urutan playlist
  4. Method play_next_song untuk memutar lagu berikutnya dalam urutan playlist
  5. Method play_prev_song untuk memutar lagu sebelumnya dalam urutan playlist

Setiap method dengan hak akses bebas untuk publik tersebut yang pada gilirannya mengakses private instance method __switch_to_song dari dalam object masing-masing (lihat ilustrasi).

Ilustrasi hak akses terhadap instance method yang bertipe private dan public dari dalam dan luar object bersangkutan

Untuk lebih jelasnya jalankan kode berikut

Semoga bermanfaat,

Salam

Series Navigation<< OOP Praktis – Instance Method (python)OOP Praktis – Inheritance/pewarisan (python) >>

You may also like...

Berikan komentar