Dokumen tersebut memberikan penjelasan mengenai konsep-konsep pemrograman berorientasi objek (OOP) dalam bahasa pemrograman Go, termasuk penjelasan mengenai struct, method, interface, embedding, encapsulation, dan abstraction."
2. Getting To Know The Object
Oriented Programming
Concept in Go
21 January 2023
3. βFirst solve the problem, then
write the codeβ
Speakers
Mochammad Hanif
// (C&D)
https://www.linkedin.com/in/hanifz/
Letakkan foto
4. Agenda
1. What is Object Oriented Programming?
2. OOP Concept (Globally)
3. OOP in Go
4. OOP Concept in Go
5. Similarities Differences of OOP in Go and other languages
6. Frequently asked questions
6. What is Object Oriented Programming?
Pemrograman Berorientasi Objek (PBO) adalah paradigma pemrograman yang
menekankan pada konsep-konsep objek dan interaksi antara objek-objek
tersebut dalam pembuatan aplikasi. Dalam OOP, sebuah objek didefinisikan
sebagai entitas yang memiliki atribut (properti) dan perilaku (behavior).
OOP menyediakan abstraksi data yang digunakan untuk menyembunyikan
implementasi detail dari sistem dan hanya menampilkan interface yang
diperlukan.
Secara umum OOP memberikan konsep yang lebih baik untuk menyelesaikan
masalah-masalah dalam pemrograman dan menyediakan cara yang lebih baik
untuk mengelola kompleksitas dalam sistem.
8. OOP Concept (Globally)
Konsep-konsep utama dalam OOP adalah:
1. Class: Merupakan suatu blueprint atau desain yang digunakan untuk membuat objek. Class
menentukan atribut dan perilaku dari objek yang dibuat dari class tersebut.
2. Object: Merupakan realisasi dari class. Setiap objek memiliki atribut dan perilaku yang ditentukan
oleh class yang digunakan untuk membuatnya.
3. Inheritance: Merupakan mekanisme dimana sebuah class dapat menurunkan sifat-sifat dari class
lain. Inheritance digunakan untuk mengoptimalkan kode dan mengurangi duplikasi kode.
4. Polymorphism: Merupakan mekanisme dimana sebuah method atau operator dapat memiliki
beberapa bentuk yang berbeda sesuai dengan class dari objek yang digunakan.
5. Encapsulation: Merupakan mekanisme dimana atribut dan perilaku dari sebuah objek
disembunyikan dari objek lain. Encapsulation digunakan untuk menjaga integritas dari objek dan
meningkatkan keamanan dari kode.
6. Abstraction: Merupakan mekanisme dimana hanya tampilan dari sebuah objek yang diperlihatkan,
sementara implementasi dari objek tersebut disembunyikan.
10. OOP in Go
Golang atau Go adalah bahasa pemrograman yang didesain untuk meningkatkan kecepatan, keamanan,
dan efisiensi dalam pengembangan aplikasi. Go memiliki dukungan untuk pemrograman berorientasi
objek, meskipun tidak selengkap bahasa pemrograman lain yang mengutamakan OOP seperti Java atau
C++.
Walaupun Go tidak memiliki fitur OOP yang selengkap bahasa pemrograman lain, namun dengan
menggabungkan struct, method, interface, embedding, encapsulation dan abstraction, kita dapat
menerapkan konsep-konsep OOP di Go dengan baik.
12. OOP Concept in Go
Konsep-konsep utama dalam OOP adalah:
1. Struct: Merupakan tipe data yang digunakan untuk menyimpan data yang berhubungan. Struct
dapat memiliki atribut dan method, sehingga dapat dianggap sebagai ganti dari class di bahasa
pemrograman lain.
2. Method: Merupakan fungsi yang didefinisikan pada struct. Method digunakan untuk menentukan
perilaku dari struct.
3. Interface: Merupakan kontrak yang menentukan method yang harus diterapkan oleh struct.
Interface digunakan untuk mengimplementasikan polimorfisme di Go.
4. Embedding: Merupakan mekanisme dimana struct dapat "menyembunyikan" struct lain.
Embedding digunakan untuk mengoptimalkan kode dan mengurangi duplikasi kode.
5. Encapsulation: Merupakan mekanisme dimana atribut dan perilaku dari sebuah struct
disembunyikan dari struct lain. Encapsulation diterapkan di Go dengan menggunakan konvensi
pembuatan nama method dan atribut dengan huruf kecil atau dengan menambahkan keyword
"private" pada nama method atau atribut.
6. Abstraction: Merupakan mekanisme dimana hanya tampilan dari sebuah struct yang diperlihatkan,
sementara implementasi dari struct tersebut disembunyikan.
13. Struct
Merupakan tipe data yang digunakan untuk menyimpan data yang berhubungan. Struct dapat memiliki
atribut dan method, sehingga dapat dianggap sebagai ganti dari class di bahasa pemrograman lain.
14. Method
β Merupakan fungsi yang didefinisikan pada
struct. Method digunakan untuk menentukan
perilaku dari struct.
β Pada contoh ini, kita membuat struct Car yang
memiliki 3 field: make, model, dan year. Kemudian
kita menambahkan 2 method pada struct Car yaitu
start() dan stop(). Pada method start() akan
menampilkan "Engine started" dan pada method
stop() akan menampilkan "Engine stopped".
β Secara umum, Go menyediakan fitur yang disebut
method dari struct yang dapat digunakan untuk
mengimplementasikan encapsulation dan
membuat class dengan method yang dapat
digunakan untuk mengolah data yang ada dalam
struct. Dengan menambahkan method pada struct
ini membuat struct tersebut dapat melakukan aksi
yang diinginkan.
15. Interface
β Merupakan kontrak yang menentukan method yang harus
diterapkan oleh struct. Interface digunakan untuk
mengimplementasikan polimorfisme di Go.
β Pada contoh ini, kita membuat interface Printer yang memiliki 1
method yaitu Print(). Kemudian kita membuat struct HP dan
Canon yang masing-masing memiliki method Print() yang
mengembalikan string yang berbeda. Kemudian kita membuat
variable printer dengan tipe Printer dan mengisi dengan variable
hp atau canon, kemudian memanggil method Print() dari
variable printer yang sesuai dengan struct yang diisi.
β Secara umum, Go menyediakan fitur yang disebut method dari
interface yang dapat digunakan untuk mengimplementasikan
polimorfisme, sehingga kita dapat membuat beberapa struct
yang masing-masing memiliki method yang sama namun
mengembalikan nilai yang berbeda.
16. Embedding
β Merupakan mekanisme dimana struct dapat "menyembunyikan"
struct lain. Embedding digunakan untuk mengoptimalkan kode dan
mengurangi duplikasi kode.
β Dalam contoh, struct Employee meng-embed struct Person sebagai
field. Ini berarti struct Employee akan memiliki semua field yang ada
pada struct Person, seperti Name dan Age. Hal ini memungkinkan
struct Employee untuk mengakses field pada struct Person tanpa harus
menuliskannya secara eksplisit.
β Kita juga menambahkan method Info() pada struct Employee untuk
menampilkan informasi dari struct Employee dan struct Person yang
diembed. Kemudian pada main function, struct Employee didefinisikan
dengan mengisikan struct Person yang diembed di dalamnya dan
menjalankan method Info() yang menampilkan informasi dari struct
Employee dan struct Person.
β Ini adalah contoh dari Embedding dimana struct Employee "meng-
embed" struct Person sebagai field dan memiliki akses ke semua field
yang ada pada struct Person yang di-embed.
17. Encapsulation
β Merupakan mekanisme dimana atribut dan perilaku dari sebuah
struct disembunyikan dari struct lain. Encapsulation diterapkan di
Go dengan menggunakan konvensi pembuatan nama method dan
atribut dengan huruf kecil atau dengan menambahkan keyword
"private" pada nama method atau atribut.
β Dalam contoh, struct Bank memiliki atribut nama dan saldo yang
digunakan untuk menyimpan data bank. Kemudian kita membuat method
SetSaldo(int) untuk mengubah nilai saldo dan method Saldo() untuk
mengambil nilai saldo.
β Method SetSaldo(int) digunakan untuk mengubah nilai saldo, tetapi
sebelum mengubah nilai saldo, method ini akan mengecek apakah nilai
saldo yang diberikan negatif atau tidak. Jika nilai saldo negatif, maka
method akan menampilkan pesan error dan tidak mengubah nilai saldo.
Ini adalah contoh dari encapsulation dimana kita menyembunyikan
implementasi dari method SetSaldo(int) dari pengguna dan hanya
memberikan akses kepada method Saldo() untuk mengambil nilai saldo.
18. Abstraction
β Merupakan mekanisme dimana hanya tampilan dari
sebuah struct yang diperlihatkan, sementara
implementasi dari struct tersebut disembunyikan.
β Pada contoh ini, kita membuat interface Payment yang
memiliki satu method yaitu processPayment(). Kemudian
kita membuat struct CreditCard dan PayPal yang
masing-masing memiliki method processPayment() yang
mengembalikan string yang berbeda. Kemudian kita
membuat method makePayment() yang menerima
parameter p dengan tipe Payment, kemudian memanggil
method processPayment() dari struct yang diterima
sebagai parameter.
β Secara umum, Go menyediakan fitur interface yang
dapat digunakan untuk mengabstraksikan comportment
yang diharapkan dari sebuah struct tanpa harus
menyediakan implementasi dari comportment tersebut.
20. Similarities of OOP in Go and other languages
1. Konsep class: Dalam Go, struct digunakan sebagai ganti dari class. Keduanya digunakan untuk
menyimpan data yang berhubungan dan memiliki method untuk menentukan perilaku dari objek.
2. Inheritance: Go tidak memiliki fitur inheritance secara eksplisit seperti bahasa pemrograman lain,
namun dapat digantikan dengan mekanisme embedding.
3. Polymorphism: Go menyediakan fitur interface yang dapat digunakan untuk
mengimplementasikan polimorfisme.
4. Encapsulation: Go menyediakan mekanisme encapsulation dengan konvensi pembuatan nama
method dan atribut dengan huruf kecil atau dengan menambahkan keyword "private" pada nama
method atau atribut.
5. Abstraction: Go menyediakan mekanisme abstraction dengan menyembunyikan implementasi dari
struct dan hanya menampilkan tampilan dari struct.
21. Differences of OOP in Go and other languages
1. Go tidak memiliki fitur inheritance seperti bahasa pemrograman lain, namun dapat digantikan
dengan mekanisme embedding.
2. Go tidak memiliki fitur overloading method seperti bahasa pemrograman lain
3. Go tidak memiliki fitur constructors dan destructors seperti bahasa pemrograman lain
4. Go tidak memiliki fitur exception handling seperti bahasa pemrograman lain
5. Go memiliki konvensi pembuatan nama method dan atribut dengan huruf kecil yang berbeda
dengan bahasa pemrograman lain yang mengutamakan pembuatan nama dengan huruf besar.
24. Frequently asked questions
1. Apa perbedaan antara struct dan class dalam Go?
2. Bagaimana cara mengimplementasikan inheritance di Go?
3. Bagaimana cara mengimplementasikan polymorphism di Go?
4. Bagaimana cara mengimplementasikan encapsulation di Go?
5. Apakah Go menyediakan fitur exception handling seperti bahasa pemrograman lain?
6. Bagaimana cara menambahkan method pada struct di Go?
7. Apakah Go menyediakan fitur constructors dan destructors seperti bahasa
pemrograman lain?
8. Bagaimana cara mengakses atribut pada struct di Go?
9. Apakah Go memiliki fitur overloading method seperti bahasa pemrograman lain?
10. Bagaimana cara mengimplementasikan abstraction di Go?
25. Apa perbedaan antara struct dan class dalam Go?
β Struct adalah tipe data yang digunakan untuk menyimpan data yang berhubungan,
sedangkan class adalah blueprint atau desain yang digunakan untuk membuat objek.
Dalam Go, struct digunakan sebagai ganti dari class. Keduanya memiliki atribut dan
method, namun Go tidak memiliki fitur inheritance, constructors, dan destructors
seperti yang dimiliki oleh class dalam bahasa pemrograman lain.
β Tipe data yang digunakan untuk mendefinisikan sekumpulan data yang terkait, seperti
variable, constant, atribut, dll.
β Struct di Go adalah tipe data yang dapat digunakan untuk membuat objek tanpa
inheritance dan polymorphism, tetapi dapat digunakan untuk encapsulation dan
composition.
26. Contoh
β Class di Go tidak ada, meskipun struct di Go dapat digunakan untuk melakukan hal
yang sama dengan class di bahasa pemrograman lain. Namun, Go tidak menyediakan
konsep inheritance dan polymorphism yang dapat dilakukan dengan class. Namun, Go
menyediakan konsep interface yang dapat digunakan untuk polymorphism.
β Perbedaan antara struct dan class di Go adalah struct tidak dapat diwariskan dan tidak
memiliki konsep polymorphism seperti class, tetapi struct dapat digunakan untuk
composition dan encapsulation.
27. Bagaimana cara mengimplementasikan inheritance di Go?
β Go tidak memiliki fitur inheritance secara eksplisit seperti bahasa pemrograman lain,
namun dapat digantikan dengan mekanisme embedding. Embedding memungkinkan
struct untuk "menyembunyikan" struct lain, sehingga struct dapat "menurunkan" atribut
dan method dari struct yang diembed.
β Konsep "embedded struct" yang dapat digunakan untuk mencapai hasil yang sama
dengan inheritance.
β Embedded struct adalah struct yang di-embed di dalam struct lain. Struct yang di-
embed akan memiliki semua atribut dan method yang dimiliki struct induknya.
28. Contoh
β Pada contoh, struct Car di-embed struct
Engine. Sehingga struct Car akan
memiliki semua atribut dan method yang
dimiliki struct Engine. Pada saat kita
memanggil method Start() pada struct
Car, struct Engine juga akan dijalankan.
β Secara umum embedded struct
digunakan untuk mencapai hasil yang
sama dengan inheritance, tanpa harus
menggunakan konsep inheritance.
Namun, embedded struct tidak dapat
digunakan untuk mencapai konsep
polymorphism seperti yang dapat
dilakukan dengan inheritance.
29. Bagaimana cara mengimplementasikan polymorphism di Go?
β Go menyediakan fitur interface yang dapat digunakan untuk mengimplementasikan
polimorfisme. Interface adalah kontrak yang menentukan method yang harus
diterapkan oleh struct. Struct dapat mengimplementasikan interface dengan meng-
override method yang ditentukan oleh interface tersebut.
30. Contoh
β Pada contoh, kita membuat interface Animal yang memiliki
method Speak(). Kemudian kita membuat struct Dog dan
Cat yang masing-masing mengimplementasikan method
Speak() yang didefinisikan pada interface Animal. Dengan
begitu, kita dapat membuat sebuah array dengan tipe data
Animal yang dapat menampung struct Dog dan Cat,
sehingga kita dapat memanggil method Speak() pada
masing-masing struct tanpa harus tahu tipe data
sebenarnya dari struct tersebut.
β Secara umum, konsep interface digunakan untuk
mengimplementasikan polymorphism di Go dengan cara
menyatakan bahwa struct atau tipe data lain memiliki
kompatibilitas dengan interface yang ditentukan. Dengan
ini, kita dapat membuat kode yang lebih fleksibel dan
dapat digunakan dengan berbagai tipe data yang memiliki
kompatibilitas dengan interface yang sama.
31. Bagaimana cara mengimplementasikan encapsulation di Go?
β Go menyediakan mekanisme encapsulation dengan konvensi pembuatan nama
method dan atribut dengan huruf kecil atau dengan menambahkan keyword "private"
pada nama method atau atribut. Method dan atribut dengan huruf kecil hanya dapat
diakses dari package yang sama, sedangkan method dan atribut dengan keyword
"private" hanya dapat diakses dari file yang sama.
32. Contoh
β Pada contoh, struct BankAccount memiliki variabel balance
dan owner yang dianggap private karena diawali dengan huruf
kecil. Method Deposit, Withdraw, dan Balance dianggap public
karena diawali dengan huruf besar. Method Deposit dan
Withdraw dapat mengubah nilai dari balance, sementara
method Balance hanya dapat mengambil nilai dari balance
tanpa mengubah nilainya. Hal ini menyediakan encapsulation
yang membatasi akses dan modifikasi pada variabel balance.
β Secara umum, Go menyediakan fitur private/public untuk
mengimplementasikan encapsulation dengan membatasi
akses dan modifikasi pada variabel atau method yang
dianggap private. Dengan ini, kita dapat menjaga integritas
data dan menyembunyikan implementasi detail dari sistem.
33. Apakah Go menyediakan fitur exception handling seperti bahasa
pemrograman lain?
β Tidak, Go tidak memiliki fitur exception handling yang sama dengan bahasa
pemrograman lain. Go lebih mengutamakan menangani error dengan mekanisme
error value dan error handling yang didefinisikan oleh pengguna.
β Go tidak memiliki fitur exception handling seperti try-catch atau throw. Namun, Go
menyediakan fitur error handling yang dapat digunakan untuk menangani kesalahan
yang terjadi pada saat pemrograman.
34. Contoh
β Pada contoh diatas, kita membuat fungsi
divide yang menerima 2 parameter integer
dan mengembalikan 2 nilai yaitu hasil
pembagian dan error. Pada saat bernilai 0,
kita mengembalikan error "cannot divide by
zero". Pada saat kita memanggil fungsi
divide, kita mengecek apakah error terjadi
atau tidak dan menampilkan pesan error
jika terjadi.
β Secara umum, Go menyediakan fitur error
handling yang dapat digunakan untuk
menangani kesalahan yang terjadi pada
saat pemrograman, tanpa menggunakan
fitur exception handling yang ada pada
bahasa pemrograman lain.
35. Bagaimana cara menambahkan method pada struct di Go?
β Method dapat ditambahkan pada struct dengan menambahkan definisi fungsi yang
diawali dengan receiver. Receiver adalah variabel yang digunakan untuk
mengindikasikan bahwa method tersebut akan dijalankan pada struct yang ditentukan.
β Untuk menambahkan method pada struct di Go, kita dapat menambahkan method di
luar struct yang akan mengambil receiver (atau pointer) dari struct tersebut sebagai
parameter. Receiver harus berupa pointer untuk dapat mengubah nilai dari struct.
36. Contoh
β Pada contoh, kita membuat struct Car yang memiliki 3 field
yaitu brand, model, dan year. Kemudian kita
menambahkan 2 method yang mengambil receiver dari
struct Car sebagai parameter yaitu StartEngine() dan
ChangeModel(). Method StartEngine() digunakan untuk
mencetak "Engine started" dan method ChangeModel()
digunakan untuk mengubah nilai dari field model dengan
parameter newModel yang diinputkan. Pada saat kita
memanggil method StartEngine() dan ChangeModel() pada
struct Car, Engine started akan dicetak dan field model
pada struct Car akan diubah menjadi "Corolla"
β Secara umum, menambahkan method pada struct di Go
dapat dilakukan dengan menambahkan method di luar
struct yang akan mengambil receiver dari struct tersebut
sebagai parameter. Method tersebut dapat digunakan
untuk melakukan operasi yang diinginkan pada struct.
37. Apakah Go menyediakan fitur constructors dan destructors seperti
bahasa pemrograman lain?
β Tidak, Go tidak memiliki fitur constructors dan destructors seperti bahasa
pemrograman lain. Pengguna dapat untuk menginisialisasi dan mengosongkan struct
secara manual. Namun, pengguna dapat menambahkan method init() pada struct
untuk digunakan sebagai constructor, dan method close() untuk digunakan sebagai
destructor.
β Go tidak secara eksplisit menyediakan fitur constructors dan destructors seperti
bahasa pemrograman lain. Namun, Go menyediakan fitur yang serupa melalui
kombinasi dari penggunaan fungsi, method, dan package level initialization.
β Untuk constructors, Go menyediakan fitur yang disebut factory function yang
digunakan untuk membuat objek dari struct dengan nilai yang diinginkan.
β Factory function dapat digunakan untuk mengatur nilai default dari struct, menvalidasi
input, atau melakukan operasi lain yang diperlukan sebelum objek dari struct dapat
digunakan.
38. Contoh
β Pada contoh, kita membuat factory function NewPoint() yang
digunakan untuk membuat objek dari struct Point dengan nilai yang
diinginkan. NewPoint() mengambil 2 parameter x dan y dan
mengecek apakah x dan y lebih kecil dari 0, jika iya maka x dan y
diubah menjadi 0. Kemudian factory function mengembalikan
pointer dari struct Point yang baru dibuat.
β Untuk destructors, Go menyediakan fitur garbage collection yang
digunakan untuk mengatur memory yang tidak digunakan lagi.
Garbage collection digunakan untuk mengambil alih tugas
mengelola memory yang dibutuhkan oleh objek, sehingga
developer tidak perlu khawatir dengan mengelola memory secara
manual.
β Secara umum, Go tidak menyediakan fitur constructors dan
destructors secara eksplisit seperti bahasa pemrograman lain,
namun Go menyediakan fitur yang serupa melalui kombinasi dari
penggunaan fungsi, method, dan package level initialization yang
digunakan untuk mengatur nilai default dari struct, menvalidasi
input, atau melakukan operasi lain yang diperlukan sebelum objek
dari struct dapat digunakan.
39. Bagaimana cara mengakses atribut pada struct di Go?
β Atribut pada struct dapat diakses dengan menggunakan operator titik (.). Contohnya,
jika struct Person memiliki atribut name, maka warna dapat diakses dengan
menuliskan "Person.name".
40. Contoh
β Pada contoh, kita membuat struct
Person dengan 2 field yaitu name dan
age. Kemudian kita membuat variable
person yang diisi dengan struct Person.
Setelah itu kita mengakses field name
dan age dengan menggunakan
operator titik.
β Secara umum, untuk mengakses
atribut pada struct di Go, kita dapat
menggunakan operator titik (.) setelah
nama variable struct yang digunakan.
Operator titik digunakan untuk
mengakses field atau method yang
didefinisikan dalam struct tersebut.
41. Apakah Go memiliki fitur overloading method seperti bahasa
pemrograman lain?
β Tidak, Go tidak memiliki fitur overloading method seperti bahasa pemrograman lain.
Pengguna harus menambahkan method dengan nama yang berbeda untuk
menangani kasus yang berbeda.
β Go hanya menyediakan fitur method dengan nama yang sama pada struct yang
berbeda. Namun Go menyediakan fitur yang disebut method dari interface yang dapat
digunakan untuk mengimplementasikan polimorfisme.
42. Contoh
β Pada contoh ini, kita membuat interface Printer yang
memiliki 1 method yaitu Print(). Kemudian kita membuat
struct HP dan Canon yang masing-masing memiliki method
Print() yang mengembalikan string yang berbeda. Kemudian
kita membuat variable printer dengan tipe Printer dan
mengisi dengan variable hp atau canon, kemudian
memanggil method Print() dari variable printer yang sesuai
dengan struct yang diisi.
β Secara umum, Go menyediakan fitur yang disebut method
dari interface yang dapat digunakan untuk
mengimplementasikan polimorfisme, sehingga kita dapat
membuat beberapa struct yang masing-masing memiliki
method yang sama namun mengembalikan nilai yang
berbeda.
43. Bagaimana cara mengimplementasikan abstraction di Go?
β Go menyediakan mekanisme abstraction dengan menyembunyikan implementasi dari
struct dan hanya menampilkan tampilan dari struct. Hal ini dapat dilakukan dengan
menyembunyikan atribut dan method dengan huruf kecil atau dengan menambahkan
keyword "private" pada nama method atau atribut. Pengguna juga dapat
menggunakan interface untuk menentukan method yang harus diimplementasikan
oleh struct tanpa menunjukkan implementasinya.
β Interface di Go adalah sekumpulan method tanpa implementasi yang didefinisikan
dalam sebuah struct. Interface digunakan untuk mengabstraksikan comportment yang
diharapkan dari sebuah struct tanpa harus menyediakan implementasi dari
comportment tersebut.
44. Contoh
β Pada contoh ini, kita membuat interface Payment yang
memiliki satu method yaitu processPayment().
Kemudian kita membuat struct CreditCard dan PayPal
yang masing-masing memiliki method
processPayment() yang mengembalikan string yang
berbeda. Kemudian kita membuat method
makePayment() yang menerima parameter p dengan
tipe Payment, kemudian memanggil method
processPayment() dari struct yang diterima sebagai
parameter.
β Secara umum, Go menyediakan fitur interface yang
dapat digunakan untuk mengabstraksikan
comportment yang diharapkan dari sebuah struct
tanpa harus menyediakan implementasi dari
comportment tersebut.