Pseudo OOP

Golang bukan merupakan bahasa pemrograman yang berorientasi objek. Tapi golang memiliki fitur seperti type, struct, method, reference dan interface yang memungkinkan untuk melakukan pemrograman yang mirip dengan OOP.

struct

  • sebuah tipe data abstract

  • berisi dari kumpulan dari berbagai type

  • struct bisa digunakan dalam konsep class

type User struct {
    ID uint64
    Name string    
}

func main() {
    var user User
    user.ID = 1
    user.Name = "Jacky"
    fmt.Printf("%v\n", user)
    println(user.Name)

    user2 := User{ID: 2, Name: "JetLee"}
    fmt.Printf("%v\n", user2)
    println(user2.Name)
}

Method

  • Kita bisa mendefiniskan suatu method pada sebuah type.

  • Method adalah fungsi yang mempunyai argumen khusus receiver berupa type.

  • Type yang bisa dibuatkan method adalah type local, yaitu type yang ada dalam paket yang sama dengan method yang dibuat.

  • Receiver bisa berupa pointer

Interface

  • Interface berisi kumpulan yang berisi method yang abstract

  • Type lain akan mengimplementasikan method dalam interface

  • Tidak ada perintah implement, suatu interface akan dipenuhi secara implisit begitu ada yang mengimplementasikannya

  • Jika suatu interface diinisiasi tapi tidak ada yang mengimplementasikannya akan terjadi error nil pointer dereference

  • Isi interface dapat dibayangkan sebagai sebuah pasangan nilai dan sebuah tipe: (nilai, type)

Interface Kosong

  • Interface kosong merupakan interface yang tidak memiliki method

  • Untuk mengklaim nilai interface harus dilakukan type asserting

  • Penggunaan switch type dalam melakukan asserting

Pseudo Object

  • tidak ada class dalam go, tapi kita bisa menggunakan type

  • variable class diganti dengan type struct

  • method class diganti dengan method dengan pointer reference

  • gunakan kata kunci new() untuk membuat object

Method Overloading

  • Method overloading dimungkinkan dengan reference yang berbeda

Encapsulation

  • Encapsulasi terjadi di level paket.

  • Kita bisa memilih kode (type, variabel, fungsi dll) yang hendak diexport ke luar paket dan mana yang hanya bisa diakses dalam paket yang sama.

  • Penamaan kode yang bersifat publik diawali dengan huruf besar.

  • Penamaan kode yang bersifat privat diawali dengan huruf kecil.

Inheritance

  • Go memungkinkan inheritance melalui embedded berupa field anonim

  • Tapi banyak programmer golang yang tidak menyarankan untuk melakukan inheritance. Melainkan melakukan pendekatan object composition.

Object Composition

  • Daripada melakukan pseudo inheritance melalui embedded, disarankan untuk melakukan object composition

Polymorphism

Last updated

Was this helpful?