A. Abstraksi (Abstraction)
Abstraksi adalah proses menyembunyikan detail yang tidak penting dan hanya menampilkan fitur terpenting dari sebuah objek.
Abstraksi membantu programmer:
- Memahami objek tanpa detail berlebihan
- Fokus pada fungsi inti
- Mengurangi kerumitan sistem besar
Contoh dalam dunia nyata
Ketika kamu menggunakan ATM, kamu cukup:
- Masukkan kartu
- Pilih menu
- Masukkan PIN
Kamu tidak melihat proses di belakang:
- Query SQL
- Validasi server
- Enkripsi PIN
Ini adalah abstraksi.
Contoh dalam kode (Java)
public class Produk {private String nama;private double harga;// Constructorpublic Produk(String nama, double harga) {this.nama = nama;this.harga = harga;}// Method untuk menampilkan informasipublic void tampilInfo() {System.out.println(nama + " - Rp" + harga);}// Getter dan Setter (opsional)public String getNama() {return nama;}public void setNama(String nama) {this.nama = nama;}public double getHarga() {return harga;}public void setHarga(double harga) {this.harga = harga;}}
Yang ditampilkan pada user → nama dan harga saja.
Detail seperti:
- nomor batch
- berat bersih
- tanggal input database
tidak perlu ditampilkan → ini abstraksi.
B. Enkapsulasi (Encapsulation)
Enkapsulasi adalah pengamanan data dengan cara:
- Menyembunyikan data (private)
- Memberikan akses melalui method tertentu (getter/setter)
Tujuan:
- Data tidak bisa diubah sembarangan
- Struktur kode lebih rapi
- Terhindar dari error akibat perubahan data langsung
Contoh Kasus
Dalam sistem kasir:
- Harga produk tidak boleh diedit langsung oleh kasir
- Perubahan harga hanya boleh oleh admin
Karena itu, field harga harus private.
public class Produk {private String nama; // privateprivate double harga; // private// Constructorpublic Produk(String nama, double harga) {this.nama = nama;this.harga = harga;}// Getter untuk hargapublic double getHarga() {return harga;}// Setter untuk harga dengan validasipublic void setHarga(double hargaBaru) {if (hargaBaru > 0) {this.harga = hargaBaru;} else {System.out.println("Harga tidak valid!");}}// Getter dan Setter untuk nama (opsional)public String getNama() {return nama;}public void setNama(String nama) {this.nama = nama;}}
C. Inheritance (Pewarisan)
Inheritance adalah mekanisme me-warisi:
- atribut
- method
dari satu class ke class lain.
Class induk = parent
Class turunan = child
Manfaat besar:
- Mengurangi duplikasi kode
- Membuat struktur sistem lebih berjenjang
- Memudahkan pengembangan fitur baru
Contoh dalam dunia nyata
Jenis produk:
- Produk → induk
- ProdukMakanan → child
- ProdukElektronik → child
- ProdukAksesoris → child
Semua “produk” pasti punya:
- nama
- harga
- stok
Tetapi detail setiap jenis berbeda:
- ProdukMakanan → tanggal kadaluarsa
- Elektronik → garansi
Contoh Kode:
Class Produk (Indukclass)
public class Produk {protected String nama;protected double harga;// Constructorpublic Produk(String nama, double harga) {this.nama = nama;this.harga = harga;}public void tampilInfo() {System.out.println("Nama: " + nama);System.out.println("Harga: Rp" + harga);}}
Class ProdukMakanan (Subclass)
public class ProdukMakanan extends Produk {private String expirate;// Constructor subclass memakai super()public ProdukMakanan(String nama, double harga, String expirate) {super(nama, harga);this.expirate = expirate;}public String getExpirate() {return expirate;}public void tampilInfo() {super.tampilInfo(); // ambil tampilan dari ProdukSystem.out.println("Tanggal Expired: " + expirate);}}
Class Main
public class Main {public static void main(String[] args) {ProdukMakanan mie = new ProdukMakanan("Indomie", 3500, "10-12-2025");mie.tampilInfo();}}
D. Polimorfisme (Polymorphism)
Polimorfisme adalah kemampuan satu method memiliki banyak perilaku berbeda meskipun namanya sama.
Contoh sederhana
Method hitungDiskon():
- Pada ProdukMakanan → diskon 5%
Pada ProdukElektronik → diskon 10%
Pemanggilan sama → output berbeda.
Contoh kode:
Class Produk (Indukclass)
public class Produk {public double hitungDiskon() {return 0; // default tidak ada diskon}}
Class ProdukMakanan (Subclass)
public class ProdukMakanan extends Produk {@Overridepublic double hitungDiskon() {return 0.05; // diskon 5%}}
Class ProdukElektronik (Subclass)
public class ProdukElektronik extends Produk {@Overridepublic double hitungDiskon() {return 0.10; // diskon 10%}}
Main Class
public class Main {public static void main(String[] args) {Produk p1 = new Produk();Produk p2 = new ProdukMakanan();Produk p3 = new ProdukElektronik();System.out.println("Diskon Produk Umum : " + p1.hitungDiskon());System.out.println("Diskon Produk Makanan : " + p2.hitungDiskon());System.out.println("Diskon Produk Elektronik : " + p3.hitungDiskon());}}
E. Modularitas (Modularity)
Modularitas adalah kemampuan untuk membagi program menjadi modul atau bagian-bagian terpisah.
Manfaat:
- Lebih mudah membaca kode
- Lebih mudah mencari erro
- Kerjasama tim lebih mudah
- Sistem lebih scalable
Contoh modul dalam aplikasi kasir:
📦 src│├── Produk.java├── Transaksi.java├── Kasir.java└── Laporan.java
F. Reusability (Dapat Digunakan Ulang)
Reusability adalah kemampuan untuk menggunakan kembali class atau kode yang sama untuk proyek lain atau bagian lain dari aplikasi.
Contoh Nyata
Class
DatabaseConfig:- dipakai untuk sistem kasir
- dipakai untuk sistem absensi
- dipakai untuk sistem penjualan online
Dengan reusability:
- Pekerjaan lebih cepat
- Tidak perlu menulis dari awal
- Kode lebih stabil
G. Interaksi Antar Objek (Object Collaboration)
Dalam PBO, objek jarang berdiri sendiri. Semua saling berinteraksi.
Contoh dalam aplikasi kasir:
- Produk berinteraksi dengan Transaksi
- Transaksi berinteraksi dengan Kasir
- Struk berinteraksi dengan Printer
Objek bekerja seperti tim:
- masing-masing punya tugas
- saling memanggil method
Ini membuat program menjadi lebih realistis dan lebih mudah dipahami.
Tags
PBTGM