🐍
📝 Bagian 3 (Jobsheet Praktikum Terstruktur) • Modul JS-05
100% Standar Industri & Vokasi
Jobsheet 05: Desain Berorientasi Objek (OOP)
Praktikum terstruktur: Merancang sistem rekening perbankan (Bank Account & Savings Account), enkapsulasi saldo privat, dan pewarisan fitur transaksi.
1. Kompetensi Dasar & Indikator
Tujuan Praktikum:
- Mampu merancang Class dengan atribut private dan method proteksi saldo.
- Menerapkan prinsip Pewarisan (Inheritance) dan pemanggilan
super().__init__(). - Menerapkan Method Overriding dan Dunder Method
__str__untuk representasi objek.
2. Aktivitas Terbimbing: Core Engine Rekening Tabungan & Deposito
Ketik dan jalankan file lab5_perbankan.py:
python (lab5_perbankan.py)
class Rekening:
def __init__(self, no_rek: str, nasabah: str, saldo_awal: float = 0.0):
self.no_rek = no_rek
self.nasabah = nasabah
self._saldo = saldo_awal # Protected Attribute
def setor(self, jumlah: float):
if jumlah > 0:
self._saldo += jumlah
print(f"[+] {self.no_rek}: Setor Rp {jumlah:,.0f} sukses.")
else:
print("[-] Jumlah setoran tidak valid!")
def tarik(self, jumlah: float) -> bool:
if 0 < jumlah <= self._saldo:
self._saldo -= jumlah
print(f"[-] {self.no_rek}: Tarik Rp {jumlah:,.0f} sukses.")
return True
print(f"[X] {self.no_rek}: Penarikan gagal (Saldo tidak mencukupi)!")
return False
def get_saldo(self) -> float:
return self._saldo
def __str__(self):
return f"Rekening #{self.no_rek} [{self.nasabah}] - Saldo: Rp {self._saldo:,.0f}"
# Class Turunan: Rekening Deposito (Bunga berjangka)
class Deposito(Rekening):
def __init__(self, no_rek: str, nasabah: str, pokok: float, bunga_persen: float = 6.0):
super().__init__(no_rek, nasabah, pokok)
self.bunga_persen = bunga_persen
def hitung_proyeksi_keuntungan(self, bulan: int) -> float:
bunga_bulanan = (self.bunga_persen / 100) / 12
return self._saldo * bunga_bulanan * bulan
# Uji Coba Objek
tabungan_budi = Rekening("TAB-001", "Budi Santoso", 500000)
deposito_budi = Deposito("DEP-888", "Budi Santoso", 10000000, 6.5)
tabungan_budi.setor(200000)
tabungan_budi.tarik(100000)
print(tabungan_budi)
profit_1th = deposito_budi.hitung_proyeksi_keuntungan(12)
print(f"\nProyeksi Bunga Deposito 1 Tahun ({deposito_budi.bunga_persen}%): Rp {profit_1th:,.0f}")
3. Tugas Mandiri: Sistem Manajemen Reservasi Hotel
Studi Kasus: Sistem Manajemen Kamar Hotel OOP
Rancang arsitektur kelas sistem hotel pada file hotel_manager.py:
Struktur Kelas yang Dibutuhkan:
Class Kamar: Atributno_kamar,tarif_per_malam,status_terisi(bool). Methodcheck_in(nama_tamu),check_out().Class KamarVIP(Kamar): MewarisiKamar, menambahkan fasilitas sarapan gratis dan diskon menginap > 3 malam.Class Hotel: Memiliki list koleksi objek kamar, methodtambah_kamar(kamar),tampilkan_kamar_kosong(), dantotal_pendapatan().
Kriteria Keberhasilan: Pengguna dapat melakukan check-in pada kamar yang masih kosong, dan sistem menolak check-in jika kamar sedang terisi.
4. Rubrik Evaluasi & Penilaian
| Aspek Penilaian | Bobot | Kriteria Sempurna |
|---|---|---|
| Desain Enkapsulasi & Konstruktor | 30% | Atribut terlindungi rapi, inisialisasi state objek presisi. |
| Inheritance & Pemanggilan super() | 30% | Class turunan memperluas fungsionalitas Parent tanpa merusak kode lama. |
| Implementasi Magic Method __str__ | 20% | Objek dapat dicetak langsung ke konsol dengan format yang bersih. |
| Validasi State (State Consistency) | 20% | Status kamar konsisten saat check-in dan check-out. |