OOP Praktis – Encapsulation (python)
- OOP Praktis – Class & Object (python)
- OOP Praktis – Instance Method (python)
- OOP Praktis – Encapsulation (python)
- OOP Praktis – Inheritance/pewarisan (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:
- Menyembunyikan kompleksitas internal dari sebuah class/object, sehingga yang terlihat dari luar hanya attributes/methods yang relevan.
- Menjaga perubahan langsung pada attribute yang dimiliki sebuah object, ini dapat berguna saat nilai baru sebuah attribute perlu divalidasi terlebih dahulu.
- 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:
- Method play untuk memutar lagu saat ini
- Method play_first_song untuk memutar lagu pertama dalam urutan playlist
- Method play_last_song untuk memutar lagu terakhir dalam urutan playlist
- Method play_next_song untuk memutar lagu berikutnya dalam urutan playlist
- 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).

Untuk lebih jelasnya jalankan kode berikut
Semoga bermanfaat,
Salam