Proyek ini adalah simulasi sistem perbankan sederhana berbasis teks (CLI) yang dirancang untuk mendemonstrasikan penerapan prinsip-prinsip Pemrograman Berorientasi Objek (OOP) secara mendalam di bahasa Java. Arsitektur kode mengikuti prinsip Separation of Concerns (SoC) dengan memisahkan logika bisnis dari tampilan antarmuka (Input/Output).
Berikut adalah rincian materi Java dan OOP yang telah diterapkan dalam kode ini:
Seluruh sistem ini dibangun menggunakan objek yang saling berinteraksi.
- Class: Terlihat pada semua file
.java, contohnyaTabungan.javadanBankService.java. - Object: Instansiasi objek dilakukan di
BankService.java(saat seeding data) danMain.java(saat pendaftaran nasabah baru). - Method: Digunakan untuk perilaku objek, seperti
tambahSaldo()dantarikUang()diTabungan.java.
- Method & Parameter: Digunakan secara intensif di
Main.java(sepertimenuRead,menuCreate) danBankService.java. - Conditional (if-else, switch): Digunakan untuk alur menu di
Main.java(baris 35-47) dan validasi jenis tabungan (baris 81-90). - Looping & ArrayList: Iterasi data nasabah menggunakan
for-eachdiMain.java(baris 59-62) untuk menampilkan data dariArrayListyang ada diBankService.java.
Prinsip penyembunyian data diterapkan untuk melindungi integritas atribut.
- Private Access: Atribut seperti
nomorRekeningdannamaNasabahdiTabungan.javabersifat private. - Getter & Setter: Digunakan untuk mengakses atribut private tersebut secara aman (lihat
Tabungan.javabaris 10-34). - Protected Access: Atribut
saldodiTabungan.javamenggunakan modifier protected agar bisa diakses langsung oleh subclassnya.
Subclass mewarisi atribut dan method dari superclass.
- Superclass:
Tabungan.javamenjadi induk dari semua jenis tabungan. - Subclass:
TabunganRupiah.javadanTabunganValas.javamenggunakan keywordextendsuntuk mewarisi sifat dariTabungan.
Kemampuan objek untuk mengambil banyak bentuk.
- Method Overriding: Method
hitungBunga()dangetJenisTabungan()diimplementasikan secara berbeda diTabunganRupiah.javadanTabunganValas.java. - Dynamic Method Binding: Di
Main.javabaris 59, variabel bertipeTabunganbisa berisi objekTabunganRupiahatauTabunganValas, dan akan memanggil method yang sesuai saat runtime.
- Abstract Class:
Tabungan.javadideklarasikan sebagai abstract karena bersifat umum dan memiliki abstract method yang wajib diisi oleh subclass. - Interface:
LayananDigital.javadigunakan sebagai kontrak untuk fitur tambahan. HanyaTabunganRupiahyang mengimplementasikannya untuk fitur transfer.
Penanganan kesalahan agar program tidak berhenti tiba-tiba saat terjadi error input atau logika.
- Custom Exception:
SaldoTidakCukupException.javadanNasabahNotFoundException.java. - Try-Catch Block: Diterapkan di
Main.javauntuk menangani input user yang salah (misal input huruf saat diminta angka di baris 25-33) serta menangani error transaksi (baris 162-175).
Main.java: Berisi logika tampilan, menu, dan interaksi user (Scanner).BankService.java: Pusat penyimpanan data (ArrayList) dan logika CRUD nasabah.Tabungan.java: Kerangka utama data rekening (Abstract).TabunganRupiah.java&TabunganValas.java: Spesialisasi jenis tabungan.LayananDigital.java: Kontrak untuk transaksi digital (Transfer).Exception Files: Berisi definisi error kustom untuk validasi sistem.
- Pastikan Java JDK sudah terinstall.
- Compile semua file di folder
src:javac src/*.java - Jalankan program utama:
java -cp src Main