Class & Objek (Enkapsulasi)
Konsep OOP: class sebagai cetak biru, objek, field, constructor, this, modifier akses, getter/setter, static, dan toString.
Apa itu OOP?
Pemrograman Berorientasi Objek (OOP) memodelkan program sebagai kumpulan objek yang menyimpan data dan punya perilaku. Analogi: class adalah cetak biru rumah; objek adalah rumah nyata yang dibangun dari cetak biru itu. Satu class dapat melahirkan banyak objek, masing-masing punya datanya sendiri.
Empat pilar OOP: enkapsulasi, pewarisan, polimorfisme, dan abstraksi. Bab ini membahas dasar dan enkapsulasi; yang lain di bab berikutnya.
Membuat class
class Mahasiswa {
// field (data / atribut)
private String nama;
private String nim;
private double ipk;
// constructor
public Mahasiswa(String nama, String nim) {
this.nama = nama;
this.nim = nim;
this.ipk = 0.0;
}
// method (perilaku)
public String getNama() { return nama; }
public double getIpk() { return ipk; }
public void setIpk(double ipk) {
if (ipk < 0 || ipk > 4) {
throw new IllegalArgumentException("IPK harus 0-4");
}
this.ipk = ipk;
}
public void perkenalan() {
System.out.println("Saya " + nama + " (" + nim + ")");
}
}
Membuat dan memakai objek
public class Main {
public static void main(String[] args) {
Mahasiswa m1 = new Mahasiswa("Sari", "A001");
Mahasiswa m2 = new Mahasiswa("Budi", "A002");
m1.setIpk(3.8);
m1.perkenalan(); // Saya Sari (A001)
System.out.println(m2.getNama()); // Budi
}
}
Kata kunci new membuat objek di memori dan memanggil constructor. Variabel m1 menyimpan referensi (alamat) ke objek itu. Dua variabel bisa menunjuk objek yang sama.
Constructor
- Namanya sama persis dengan nama class dan tidak punya tipe kembalian.
- Dipanggil otomatis saat
new; tugasnya menyiapkan keadaan awal objek. - Jika kamu tidak menulis satu pun, Java memberi constructor kosong bawaan. Begitu kamu menulis sendiri, constructor bawaan hilang.
- Boleh banyak (overloading) dan saling memanggil lewat
this(...).
Kata kunci this
this menunjuk objek yang sedang bekerja. Paling sering dipakai untuk membedakan field dari parameter bernama sama: this.nama = nama; (field kiri, parameter kanan).
Enkapsulasi: modifier akses
| Modifier | Dapat diakses dari |
|---|---|
private | hanya di dalam class itu sendiri |
| (tanpa modifier) | class lain dalam package yang sama |
protected | package yang sama + subclass |
public | di mana saja |
Enkapsulasi = menyembunyikan data (private) dan hanya memberi akses terkontrol lewat method public (getter/setter). Keuntungannya: kamu bisa memvalidasi perubahan (IPK tidak boleh 5) dan mengubah implementasi dalam tanpa merusak kode luar.
static: milik class, bukan objek
class Penghitung {
private static int jumlahObjek = 0; // satu salinan dipakai bersama
Penghitung() { jumlahObjek++; }
static int getJumlahObjek() { return jumlahObjek; }
}
new Penghitung(); new Penghitung();
System.out.println(Penghitung.getJumlahObjek()); // 2
Member static dipanggil lewat nama class. Method static tidak bisa langsung memakai field non-static karena tidak ada objek terkait.
toString dan equals
Setiap class otomatis mewarisi Object. Override toString() agar objek tercetak rapi:
@Override
public String toString() {
return nama + " (" + nim + ")";
}
System.out.println(m1); // Sari (A001)
Null dan NullPointerException
Variabel referensi yang belum menunjuk objek bernilai null. Memanggil method lewat null melempar NullPointerException — error paling sering di Java. Pastikan objek sudah dibuat sebelum dipakai.
Satu berkas, beberapa class
Dalam satu berkas hanya satu class yang boleh public (namanya sama dengan berkas). Class lain boleh ditulis tanpa public di berkas yang sama — itu yang kita lakukan di latihan. Pada proyek nyata, tiap class biasanya punya berkasnya sendiri.