Apakah GO OOP ?

Banyak yang bertanya-tanya apakah golang itu termasuk bahasa yang bisa menerapkan paradigma Object-Oriented Programming? Yuk kita bahas disini.

Yuda Prasetiya
4 min readJul 19, 2022

--

Pertama-tama yang harus kita ketahui adalah apa yang dimaksud dengan Object-Oriented Programming, setelah itu kita akan mencoba menjawab pertanyaan apakah GO bisa menerapkan Object-Oriented Programming.

Object-Oriented Programming (OOP)

Secara definisi Pemograman Berorientasi Objek berarti paradigma ini berfokus kepada objek, objek dalam bahasa pemrograman terbuat dari class atau entity. Jadi secara definisi Object-Oriented Programming berarti paradigma yang berfokus pada objek atau class / entity

Secara konsep, paradigma Pemograman Berorientasi Objek memiliki empat konsep utama yaitu abstraction, encapsulation, inheritance, dan polymorphism.²

Apakah GO dapat menerapkan Object-Oriented Programming ?

Apakah GO dapat membuat objek dari class atau entity ? Coba kita buktikan

Jawabannya adalah ya, dalam GO kita dapat membuat Object dari class / entity, class dalam GO dinamakan struct atau disebut juga lightweight class.³
Secara definisi GO bisa menerapkan paradigma Object-Oriented Programming.

Bagaimana dengan konsep utama Object-Oriented Programming ?

Pertanyaan ini yang menyebabkan banyak perdebatan “GO bahasa yang bisa menerapkan Object-Oriented Programming atau tidak”. Yuk, kita bahas satu persatu konsepnya.

1. Abstraction

Abstraction adalah konsep yang membuat kita dapat menyembunyikan implementasi, dan hanya memberikan informasi yang dibutuhkan atau digunakan user.

Contohnya kita akan membuat dua abstraksi employee yang akan di gunakan oleh bagian payroll dan manager.

Pada bagian payroll hanya membutuhkan nama dan besaran gaji, jadi abstraksi employee di package payroll hanya berisikan fungsi GetName dan CalculateSalary yang mengembalikan berapa besarnya gaji yang akan dibayarkan. Kita menyembunyikan kerumitan menghitung gaji, menghitung bonus, dan bagaimana performa mempengaruhi bonus yang tidak dibutuhkan oleh payroll.

Begitu juga manager, hanya membutuhkan penilaian performa maka abstraksi employee pada manager hanya berisikan fungsi SetPerformance, tidak membutuhkan fungsi lainnya.

Pada employee kita menaruh implementasi dan semua kerumitan menghitung gaji dan bonus berada, tersembunyi dari package lain.

Pada package main kita dapat melihat bagaimana abstraksi yang telah kita buat bekerja.

Walaupun John, Jane dan Bane mempunyai gaji dasar yang berbeda tetapi karena bonus performa, pada akhirnya mereka mendapatkan gaji yang sama.

2. Encapsulation

Encapsulation adalah konsep bagaimana kita bisa melindungi data atau fungsi pada sebuah entity, sehingga menghindari penggunaan yang salah maupun perubahan data yang tidak diinginkan.

Menerapkan Encapsulation pada golang cukup mudah, penggunaan huruf kecil pada huruf pertama penamaan attribute dan method menandakan bahwa method dan attribute itu adalah private (tidak dapat diakses dari luar package).
Contohnya dapat kita lihat pada attribute performance (line 15) dan method calculateBonus (line 36) pada package employee.

3. Inheritance

Inheritance adalah konsep dimana kita dapat mewariskan method dan attribute dari class yang sudah ada (parent class) kepada class yang baru dibuat (child class).

GO tidak memiliki Inheritance, tapi bisa menggunakan Composition sebagai solusi walaupun tetap berbeda dari Inheritance, jika di Inheritance kita dapat memperlakukan child class sebagai parent class, sedangkan dengan Composition di GO kita harus membuat interface jika ingin menggunakan parent class dan child class ditempat yang sama.
WHY ??? Kalau penasaran kenapa, bisa baca tulisan bapaknya GO (Rob Pike) disini atau GO FAQ tetang inheritance disini.

Composition pada GO cukup mudah dilakukan, hanya tambahkan base struct (parent class) kedalam attribute struct yang baru dibuat. Contohnya pada line 4, kita menggabungkan struct Employee kedalam struct Supervisor.
Struct Supervisor
secara otomatis mendapatkan seluruh method dan attribute dari struct Employee.

Karena mendapatkan seluruh method dan attribute dari struct Employee, struct Supervisor bisa langsung digunakan pada interface EmployeeOnManager dan EmployeeOnPayroll.

4. Polymorphism

Polymorphism terdiri dari dua kata yaitu Poly yang berarti banyak dan Morp yang berarti bentuk, yang dapat memiliki banyak bentuk pada Object-Oriented Programming adalah method. Biasanya pada Object-Oriented Programming terdapat dua cara menerapkan Polymorphism yaitu Overloading dan Overriding.

Overloading memungkinkan class mempunyai method dengan nama yang sama tetapi memiliki parameter atau return parameter yang berbeda.

Overriding memungkinkan child class mempunyai method yang sama (nama, parameter dan return parameternya) dengan parent class tetapi dengan implementasi yang berbeda, saat method dipanggil maka implementasi dari child class yang akan digunakan.

GO dapat menerapkan overridding, tetapi tidak dapat menerapkan overloading. Kenapa ?? Bisa dilihat penjelasannya pada GO FAQ disini.

Penerapan overriding di GO serupa dengan Java atau Javascript. Setelah kita melakukan composition ke child class kita dapat membuat method pada child class dengan nama, parameter dan return parameter yang sama dengan method yang ingin kita override.

Contohnya pada method CalculateSalary pada struct Supervisor di line 9. Supervisor sebenarnya sudah mempunyai method CalculateSalary yang didapatkan dari struct Employee, tetapi kita harus melakukan overriding karena terdapat perbedaan cara menghitung.

Dengan overriding yang dilakukan, maka hasil perhitungan gaji Jane berubah dari 3000 menjadi 3500, karena ditambahkan SupervisorBonus kedalam gajinya.

Kesimpulan

Jadi apakah GO bahasa permrograman yang object-oriented ? saya akan mengutip dua versi jawaban.
Ya, GO adalah Object-Oriented, tetapi dengan cara yang tidak biasa.⁴
Ya dan Tidak, meskipun Go memiliki type dan method, dan memungkinkan “gaya” Object-Oriented Programming, tetapi GO tidak memiliki hierarki (inheritance). Konsep “interface” GO (karena menggunakan Composition, bukan Inheritance) memberikan pendekatan berbeda yang para pembuat GO yakini lebih mudah digunakan dalam hal-hal yang lebih umum.⁵

Daftar Pustaka

¹https://www.javatpoint.com/what-is-object-oriented-programming
²https://www.freecodecamp.org/news/object-oriented-programming-concepts-21bb035f7260/
³https://www.geeksforgeeks.org/structure-equality-in-golang/
https://talks.golang.org/2012/chat.slide#5
https://go.dev/doc/faq#Is_Go_an_object-oriented_language

Terima kasih sudah membaca, semoga bermanfaat untuk kita semua dan dapat bersama-sama belajar menjadi yang lebih baik.
Jika ada pertanyaan atau ingin sharing atau diskusi bisa melalui kolom komentar atau melalui kontak saya bawah 😁.

Source Code bisa diakses melalui https://github.com/yudaph/GO-OOP

Contact me

https://www.linkedin.com/in/yudaph/
https://github.com/yudaph

--

--