Pemrograman Berbasis Prosedur dan Pemrograman Berorientasi Objek
Sebelum adanya konsep kelas, bahasa pemrograman seperti C belum mengenal kelas. Gaya pemrograman tanpa kelas dan objek seperti bahasa C dinamakan pemrograman berbasis prosedur.
Pemrograman Berbasis Prosedur: Program merupakan rangkaian urutan instruksi, dengan fokus utama mengoptimalkan langkah eksekusi.
Dengan hadirnya kelas, kita dapat menerapkan pemrograman berorientasi objek.
Pemrograman Berorientasi Objek: Program terdiri dari sekumpulan kelas yang sudah dikapsulasikan. Ide utamanya adalah menggabungkan data beserta fungsi yang mengolah data tersebut ke dalam unit yang saling berkaitan secara logis, unit ini dinamakan kelas (class).
Definisi Kelas
Kelas adalah struktur data yang berisi data yang disimpan serta kode yang dapat dieksekusi. Terdapat dua jenis anggota utama di dalamnya:
- Anggota Data (Data Members): Menyimpan data properti objek, meliputi Bidang (Fields) dan Konstanta (Constants)
- Anggota Fungsi (Function Members): Menerapkan logika perilaku objek, seperti metode, properti, konstruktor, destruktor, operator, pengindeks, dan peristiwa
Kelas merupakan kumpulan yang mengkapsulasikan data dan fungsi yang saling berkaitan secara logis, digunakan untuk memodelkan hal-hal di dunia nyata maupun dunia abstrak.
Secara singkat, kelas adalah struktur data yang dibentuk dari data dan fungsi. Kita dapat membuat objek dari sebuah kelas, data serta anggota dapat diakses melalui objek, dan juga dapat diakses langsung dari dalam kelas itu sendiri.
Deklarasi Kelas
Kata kunci class hanya mendefinisikan cetakan kelas dan tidak membuat instansi objek. Sebuah cetakan terdiri dari tiga bagian: nama kelas, anggota kelas, dan karakteristik kelas.
Sintaks
class NamaKelas
{
// deklarasi anggota (bidang, metode, urutan tidak wajib diatur)
}Code language: JavaScript (javascript)
Deklarasi kelas sering juga disebut sebagai definisi kelas (class definition)
class Program
{
static void Main(string[] args)
{
AddCalculator addCalculator = new AddCalculator();
SubCalculator subCalculator = new SubCalculator();
}
}
class AddCalculator
{
public int A { get; set; }
public int B { get; set; }
public int Add()
{
return A + B;
}
}
class SubCalculator
{
public int A { get; set; }
public int B { get; set; }
public int Subtract()
{
return A - B;
}
}Code language: JavaScript (javascript)
Pada contoh di atas, terdapat dua kelas yang dideklarasikan: satu untuk perhitungan penjumlahan dan satu lagi untuk pengurangan. Di fungsi Main program utama, kita membuat instansi dari kedua kelas tersebut lalu menggunakannya.
Konten ini bersumber dari foxdevelop.com
Deklarasi kelas tidak harus ditulis secara berurutan dari atas ke bawah. Anda bisa mendeklarasikan kelas di bagian bawah kode, lalu memanggilnya di fungsi Main yang ada di bagian atas tanpa masalah. Kelas hanyalah cetakan atau rancangan. Kode tidak dieksekusi secara berurutan dari atas ke bawah, eksekusi dimulai dari fungsi Main, dan program akan mencari cetakan kelas yang dibutuhkan saat diperlukan.

Anggota Kelas
Bidang (Fields)
Bidang adalah variabel yang menjadi bagian dari kelas. Dapat berupa tipe bawaan maupun tipe buatan pengguna, serta mendukung operasi baca dan tulis data.
Tipe NamaBidang;
class MyClass
{
int MyField; // bidang tipe int bernama MyField
}Code language: JavaScript (javascript)
Perbedaan penting dengan C/C++: C# tidak mengenal variabel global. Semua bidang harus dideklarasikan di dalam tipe data (kelas atau struktur).
Aturan Inisialisasi Bidang
(1) Inisialisasi Implisit (tanpa pemberian nilai)
Kompiler akan secara otomatis memberikan nilai bawaan sesuai tipe data, nilai bawaan setiap tipe berbeda-beda.
int F1; // Nilai bawaan 0
string F2; // Nilai bawaan nullCode language: JavaScript (javascript)
Tabel di bawah mencantumkan daftar tipe data C# beserta nilai bawaan untuk bidang. Aturan ini hanya berlaku untuk bidang, variabel lokal wajib diinisialisasi secara manual oleh pengembang.
Tipe Nilai Dasar
| Tipe Data | Nilai Bawaan | Keterangan |
|---|---|---|
sbyte | 0 | Bilangan bulat 8-bit bertanda |
byte | 0 | Bilangan bulat 8-bit tanpa tanda |
short | 0 | Bilangan bulat 16-bit bertanda |
ushort | 0 | Bilangan bulat 16-bit tanpa tanda |
int | 0 | Bilangan bulat 32-bit bertanda |
uint | 0 | Bilangan bulat 32-bit tanpa tanda |
long | 0L | Bilangan bulat 64-bit bertanda |
ulong | 0UL | Bilangan bulat 64-bit tanpa tanda |
float | 0.0f | Titik mengambang presisi tunggal |
double | 0.0d | Titik mengambang presisi ganda |
decimal | 0.0m | Desimal presisi tinggi |
char | '\0' (karakter nol, ASCII 0) | Satu karakter |
bool | false | Tipe boolean |
Enum Enum | Anggota enum yang sesuai bilangan bulat dasar 0 | Enum berbasis bilangan bulat, nilai bawaan adalah 0 |
Struktur struct | Setiap bidang memperoleh nilai bawaan masing-masing | Tipe nilai buatan pengguna, seluruh bagian diatur ke nol |
Tipe Referensi
Semua tipe referensi memiliki nilai bawaan seragam yaitu null, artinya variabel tidak menunjuk ke objek mana pun di heap memori.
Artinya variabel tidak menyimpan alamat memori apa pun. Ingat diagram memori yang dibahas sebelumnya: tipe referensi menyimpan alamat heap seperti 000001 01010. Jika bernilai null, tidak ada alamat memori valid yang tersimpan.
| Kategori Tipe | Contoh Tipe | Nilai Bawaan |
|---|---|---|
| Tipe referensi bawaan | string, object | null |
Kelas buatan class | Person Student | null |
| Array (semua dimensi) | int[], string[,] | null |
| Delegat / Peristiwa | Action, Func, delegate buatan | null |
Antarmuka interface | Semua variabel antarmuka | null |
Contoh
string str; // bawaan null
Student jason; // kelas buatan, bawaan null
int[] arr; // array, bawaan null
Action callback; // delegat, bawaan nullCode language: JavaScript (javascript)
Tipe yang Mengizinkan Null (Nullable / T?)
Jika kita menambahkan tanda tanya ? di belakang tipe data dasar, akan terbentuk tipe baru yang dapat tidak memiliki nilai. Contohnya variabel int age; jika tidak diberi nilai, secara bawaan bernilai 0. Jika kita ingin merepresentasikan kondisi “tidak ada nilai sama sekali”, gunakan penulisan int? age2;. Variabel age2 merupakan tipe nullable sehingga dapat diisi nilai null: int? age2 = null;
Tipe nullable adalah ValueType yang dibungkus, nilai bawaannya adalah null yang bermakna “tidak ada nilai valid”.
| Sintaks Deklarasi | Nilai Bawaan |
|---|---|
int? num | null |
bool? flag | null |
decimal? price | null |
class Test
{
int a; // otomatis bernilai 0
string b; // otomatis bernilai null
bool c; // otomatis bernilai false
}Code language: JavaScript (javascript)
(2) Inisialisasi Eksplisit
Berikan nilai menggunakan operator = saat deklarasi. Nilai yang diberikan harus sudah diketahui pada waktu kompilasi; tidak boleh berupa nilai acak atau input pengguna.
int days = 25;
string word = "foxdevelop";Code language: JavaScript (javascript)
(3) Penulisan singkat beberapa bidang tipe sama
Variabel dengan tipe yang sama dapat dideklarasikan sekaligus dipisah koma. Tidak boleh mencampur tipe data yang berbeda dalam satu baris deklarasi
int player, blood = 25;
string title, subTitle = "hi welcome to foxdevelop.com";Code language: JavaScript (javascript)
Metode (Methods)
Definisi Metode
Metode adalah blok kode bernama yang dapat digunakan kembali dan dapat dieksekusi, setara dengan fungsi anggota pada C++. Ketika dipanggil, kode di dalamnya akan dijalankan lalu kendali kembali ke titik pemanggilan. Metode dibagi dua kategori: memiliki nilai kembalian dan tidak memiliki nilai kembalian.
Empat unsur utama metode
- Tipe kembalian: tulis
voidjika tidak mengembalikan nilai - Nama metode
- Daftar parameter: tanda kurung
()tetap wajib meskipun tanpa parameter - Isi metode: kode eksekusi dibungkus di dalam
{}
class Program
{
static void Main(string[] args)
{
Robot robot = new Robot();
robot.SayHello();
}
}
class Robot
{
public void SayHello()
{
Console.WriteLine("Hello everyone");
Console.WriteLine("Welcome to visit foxdevelop.com");
}
}Code language: JavaScript (javascript)
Kata kunci public di depan public void SayHello() adalah pengubah akses, berarti fungsi ini dapat diakses dari luar kelas dengan format namaObjek.namaFungsi. Jika tidak menuliskan public, akses secara bawaan adalah private. Fungsi private hanya dapat dipanggil di dalam tubuh kelas; tidak dapat diakses dari luar meskipun menggunakan nama objek seperti robot.

Membuat Variabel Kelas dan Instansi
1. Karakteristik Dasar Tipe Referensi
Kelas termasuk ke dalam tipe referensi. Memori dibagi menjadi dua bagian:
- Tumpukan (Stack): Menyimpan variabel referensi (penunjuk alamat memori)
- Heap: Menyimpan data asli objek
2. Membuat Objek Secara Bertahap
1 Hanya mendeklarasikan variabel referensi (hanya dialokasikan memori stack, tidak ada data di heap)
Robot robot;
// Hanya dialokasikan ruang referensi di stack, nilainya belum terdefinisi, tidak ada objek di heap
Code language: JavaScript (javascript)

2 Operator new untuk mengalokasikan memori heap
new NamaTipe();Code language: JavaScript (javascript)
- Mengalokasikan memori di heap dan menginisialisasi semua bidang ke nilai bawaan secara otomatis
- Mengembalikan alamat referensi objek di heap lalu ditugaskan ke variabel stack
robot = new Robot();
Code language: JavaScript (javascript)

class Program
{
static void Main(string[] args)
{
Robot robot;
robot = new Robot();
}
}
class Robot
{
void SayHello()
{
Console.WriteLine("Hello everyone");
Console.WriteLine("Welcome to visit foxdevelop.com");
}
}Code language: JavaScript (javascript)
3. Deklarasi dan instansiasi dalam satu baris
Robot robot = new Robot();Code language: JavaScript (javascript)
class Program
{
static void Main(string[] args)
{
Robot robot = new Robot();
}
}Code language: JavaScript (javascript)
Definisi kelas