Setiap object menyimpan dua hal: data dan kemampuan bertindak. Di dalam C#, data object disimpan dalam field, sedangkan tindakan didefinisikan sebagai method; keduanya disebut anggota (member) class. Bab ini membedah keduanya pada class RekeningBank: saldo adalah data yang dimiliki, sedangkan setor dan tarik adalah tindakan yang mengoperasikan data tersebut.
Field: Data Milik Object #
Field dideklarasikan di dalam badan class dengan pola: access modifier, tipe, lalu nama field. Posisi deklarasinya bebas, tetapi kebiasaan umum menempatkan semua field di bagian atas class agar mudah ditemukan.
public string Nomor; // identitas rekening
public string Pemilik; // nama pemilik rekening
public int Saldo; // saldo dalam rupiahField yang belum diisi tetap memiliki nilai, yaitu nilai bawaan (default value) sesuai tipenya: int bernilai 0, string bernilai null, dan bool bernilai false. Nilai bawaan ini berlaku sejak object dibuat, sehingga membaca Saldo sebelum penugasan mana pun menghasilkan 0. Nilai field juga melekat pada object: dua object dari class yang sama menyimpan salinan field yang berbeda.
Method: Perilaku Object #
Method dideklarasikan dengan pola: access modifier, return type, nama method, parameter di dalam tanda kurung, lalu badan method di dalam kurung kurawal. Return type void menyatakan method tidak mengembalikan nilai, seperti pada TampilkanInfo. Parameter memberi method data tambahan dari pemanggil: Setor(int jumlah) menerima satu nilai int yang menjadi bahan penambahan saldo. Method tanpa parameter seperti TampilkanInfo bekerja murni dari data object pemanggilnya. Nama method mengikuti konvensi PascalCase, dan setiap method membaca atau mengubah field milik object pemanggilnya tanpa perlu menerima data tersebut lewat parameter.
Contoh: Setor dan Tarik Saldo #
public class RekeningBank
{
public string Nomor;
public string Pemilik;
public int Saldo;
public void Setor(int jumlah)
{
Saldo += jumlah;
}
public void Tarik(int jumlah)
{
if (jumlah <= Saldo)
{
Saldo -= jumlah;
}
}
public void TampilkanInfo()
{
Console.WriteLine($"Rekening {Nomor} a.n. {Pemilik} - Saldo: Rp{Saldo}");
}
}
RekeningBank rekening = new RekeningBank();
Console.WriteLine($"Nilai awal Saldo: {rekening.Saldo}");
rekening.Nomor = "REK-3001";
rekening.Pemilik = "Budi";
rekening.Setor(500000);
rekening.Setor(150000);
rekening.Tarik(200000);
rekening.Tarik(1000000000);
rekening.TampilkanInfo();Output yang Dihasilkan:
Nilai awal Saldo: 0
Rekening REK-3001 a.n. Budi - Saldo: Rp450000Mari kita telaah baris demi baris:
Console.WriteLine($"Nilai awal Saldo: {rekening.Saldo}"): fieldSaldobelum diisi, sehingga nilainya tetap0sesuai nilai bawaanint.Setor(500000)laluSetor(150000): method menambahSaldoobject pemanggil, dari0menjadi500000kemudian650000.Tarik(200000): kondisijumlah <= Saldoterpenuhi, sehinggaSaldoberkurang menjadi450000.Tarik(1000000000): jumlah penarikan melebihi saldo sehingga kondisi tidak terpenuhi;Saldotidak berubah, karena aturan bisnis ditegakkan di dalam method, bukan oleh kode pemanggil.TampilkanInfo(): mencetak data akhir object, yaitu rekening milik Budi dengan saldoRp450000.
Perhatikan bahwa Setor dan Tarik menulis Saldo secara langsung, tanpa awalan nama object. Compiler mengetahui bahwa kedua method berjalan atas object tertentu; mekanisme rincinya dibahas pada bab This Keyword.