Program yang kita tulis sejauh ini tersusun dari variabel dan perintah yang berdiri sendiri di dalam Program.cs. Pola tersebut bekerja untuk program kecil, tetapi sulit diatur ketika data yang dikelola makin banyak. Aplikasi bank, misalnya, menyimpan nomor, pemilik, dan saldo untuk setiap rekening; jika ketiganya ditulis sebagai variabel terpisah, jumlah variabel akan bertambah cepat dan keterkaitan antar data tidak terlihat di dalam kode. Pemrograman berorientasi objek (object-oriented programming, OOP) menjawab persoalan tersebut dengan menyatukan data dan perilaku yang berkaitan ke dalam satu unit bernama class.

Masalah yang Dipecahkan oleh OOP #

Tanpa class, satu rekening bank membutuhkan tiga variabel lepas: satu untuk nomor, satu untuk pemilik, dan satu untuk saldo. Dua rekening membutuhkan enam variabel, dan compiler tidak mengetahui bahwa variabel-variabel tersebut saling terkait; kita sendirilah yang harus mengingat keterkaitan itu di sepanjang program. Kesalahan kecil seperti mengisi saldo ke variabel rekening yang salah tidak terdeteksi compiler, karena tipe datanya sama-sama cocok.

OOP menawarkan pendekatan sebaliknya. Kita mendefinisikan satu class RekeningBank yang mendeskripsikan data apa saja yang dimiliki sebuah rekening dan tindakan apa saja yang dapat dilakukan atas rekening tersebut. Data dan tindakan itu kemudian dijalankan melalui object, yaitu salinan class yang tersimpan di memori saat program berjalan.

Pilar Utama OOP #

Konsep OOP di C# bertumpu pada beberapa pilar yang dibahas berurutan pada section ini:

  • Class dan object: unit dasar OOP; class adalah definisinya, object adalah salinan yang berjalan.
  • Encapsulation: menyembunyikan data internal object dan membuka akses hanya melalui method yang disediakan.
  • Inheritance: class baru mewarisi anggota dari class yang sudah ada.
  • Polymorphism: perintah yang sama menghasilkan perilaku berbeda sesuai object yang menjalankannya.

Encapsulation, inheritance, dan polymorphism membutuhkan pemahaman atas class, object, constructor, dan method terlebih dahulu, sehingga bab-bab pada bagian ini disusun secara bertahap.

Contoh Mini: Dua Object dari Satu Class #

Contoh berikut mendefinisikan class RekeningBank dengan tiga field dan satu method, lalu membuat dua object dari class tersebut:

csharp
public class RekeningBank
{
    public string Nomor;
    public string Pemilik;
    public int Saldo;

    public void TampilkanInfo()
    {
        Console.WriteLine($"Rekening {Nomor} a.n. {Pemilik} - Saldo: Rp{Saldo}");
    }
}

RekeningBank rekeningBudi = new RekeningBank();
rekeningBudi.Nomor = "REK-1001";
rekeningBudi.Pemilik = "Budi";
rekeningBudi.Saldo = 500000;

RekeningBank rekeningSiti = new RekeningBank();
rekeningSiti.Nomor = "REK-1002";
rekeningSiti.Pemilik = "Siti";
rekeningSiti.Saldo = 1200000;

rekeningBudi.TampilkanInfo();
rekeningSiti.TampilkanInfo();

Output yang Dihasilkan:

text
Rekening REK-1001 a.n. Budi - Saldo: Rp500000
Rekening REK-1002 a.n. Siti - Saldo: Rp1200000

Mari kita telaah baris demi baris:

  1. Definisi class RekeningBank: tiga field menyimpan data rekening, sedangkan method TampilkanInfo mencetak isinya ke terminal.
  2. new RekeningBank(): runtime membuat object baru di memori dan mengembalikan referensinya; variabel rekeningBudi menyimpan referensi tersebut.
  3. rekeningSiti: object kedua dibuat dari class yang sama, dan setiap object menyimpan salinan datanya sendiri.
  4. Dua pemanggilan TampilkanInfo(): method yang sama menghasilkan keluaran berbeda karena method membaca data milik object yang memanggilnya.