Object-Oriented Programming (OOP)

Nim mendukung multi paradigma seperti fungsional dan OOP. Object-oriented programming atau dalam bahasa indonesia pemrograman berorientasi objek adalah pola pemrograman yang mengabungkan record dan fungsi menjadi kedalam satu ikatan yang disebut objek.

Objek juga termasuk kedalam bentuk tipe data buatan, setiap deklarasi dan isinya kita yang menentukanya. Objek dibuat dengan adanya kelas (class), kelas berisi deklarasi fungsi (disebut metod) dan variabel dari field record (disebut attribut) yang akan digunakan untuk digunakan oleh objek.

  • Record biasa

    type
      <nama record> = object
        <nama field>:<tipe data field>
        ....
    
  • Sebuah definisi record dengan objek

    type
      <nama objek> = object
        <nama atribut>:<tipe data field>
        ....
    
    proc <nama metod> : (this: <nama objek>) =
      <baris kode metod>
    

Contohnya seperti ini :

type 
  Orang = object
    nama: string
    umur: int

proc echo(this: Orang) =
  echo this.nama
  echo this.umur

proc siapaYangLebihTua(this: Orang, lain: Orang) =
  if this.umur > lain.umur:
    echo this.nama & " lebih tua dari " & lain.nama
  else:
    echo lain.nama & " lebih tua dari " & this.nama

Contoh diatas sebuah kelas Orang memiliki atribut nama danumur lalu metod bernama echo dan siapaYangLebitTua.

Bukanya ini hanya Record dan Procedure/Fungsi biasa ? Benar begitu lah cara melakukan OOP di Nim, berikut ini cara pakainya:

let anya = Orang(nama: "Anya", umur: 21)
let elsa = Orang(nama: "Elsa", umur: 18)

anya.echo()
elsa.echo()

anya.siapaYangLebihTua(elsa)

Jadi tidak ada istilah khusus yang digunakan untuk membuat kelas di Nim, cukup dengan sebuah Record dan Sub-program yang menjadikan tipe data record tersebut sebagai parametenrnya.

Fun-fact: Record dikenal dengan object di Nim dan bisa disebut sebagai object tanpa kelas.