- Mahasiswa mampu menyembunyikan atau mengekspos atribut menggunakan konvensi Python (
_atribut
untuk private,property
untuk getter/setter). - Mahasiswa mampu menggunakan mekanisme public dan private sesuai kebutuhan.
- Mahasiswa mampu menjaga integritas objek dengan melakukan validasi pada property maupun method.
- Platform: Python 3.10+
- Bahasa: Python
- Editor/IDE yang disarankan:
- VS Code + Python Extension
- Terminal
-
Clone repositori project
oop-encapsulation-python
ke direktori lokal Anda:git clone https://github.com/USERNAME/oop-encapsulation-python.git cd oop-encapsulation-python
-
Buat dan aktifkan virtual environment:
python -m venv .venv source .venv/bin/activate # Linux/macOS .venv\Scripts\activate # Windows
-
Install dependensi:
pip install -r requirements.txt
-
Jalankan unit test:
pytest
PERINGATAN: Lakukan push ke remote repository hanya jika seluruh unit test telah berhasil dijalankan (semua hijau).
Implementasi di file src/invoicing/invoice.py
.
Buatlah kelas Invoice
untuk merepresentasikan faktur barang. Kelas ini memiliki empat atribut privat: _part_number
(string), _part_description
(string), _quantity
(int), dan _price
(float).
Sediakan property publik part_number
, part_description
, quantity
, dan price
.
- Setter
quantity
: jika nilai < 0, set ke 0. - Setter
price
: jika nilai < 0, set ke 0.0.
Buat konstruktor __init__
yang menginisialisasi keempat atribut dengan validasi sesuai aturan di atas.
Tambahkan metode get_invoice_amount(self) -> float
yang menghitung jumlah faktur (quantity * price
).
Tambahkan blok demo if __name__ == "__main__":
yang membuat objek Invoice
dan menampilkan hasil pemanggilan get_invoice_amount
.
Implementasi di file src/employment/employee.py
.
Buat kelas Employee
dengan tiga atribut privat: _first_name
, _last_name
, _monthly_salary
.
-
Property
first_name
,last_name
, danmonthly_salary
. -
Konstruktor memvalidasi:
first_name
danlast_name
tidak boleh kosong; jika kosong →"Unknown"
.monthly_salary
harus ≥ 0, jika < 0 → set ke 0.0.
Metode:
raise_salary(self, raise_percentage: int)
→ menaikkan gaji bulanan maksimal 20%. Jika lebih, abaikan.get_yearly_salary(self) -> float
→ mengembalikan gaji tahunan.
Tambahkan blok demo if __name__ == "__main__":
yang membuat dua objek Employee
, menampilkan gaji tahunan, menaikkan gaji 10%, lalu menampilkan kembali.
Implementasi di file src/mycalendar/date.py
.
Buat kelas Date
dengan tiga atribut: _month
, _day
, _year
. Gunakan property dengan getter
publik dan setter
privat (gunakan Python @property
untuk getter dan validasi di konstruktor).
Validasi konstruktor:
month
harus 1–12,day
harus 1–31. Jika invalid, set default1/1/1970
.
Metode:
display_date(self) -> str
→ menampilkan tanggal dalam formatMM/DD/YYYY
.
Tambahkan blok demo if __name__ == "__main__":
.
Implementasi di file src/banking/bank_account.py
.
Buat kelas BankAccount
dengan tiga atribut privat: _account_number
, _account_holder
, _balance
.
-
Validasi konstruktor:
account_number
&account_holder
tidak boleh kosong → jika kosong set"Unknown"
.balance
awal harus ≥ 0 → jika negatif set 0.0.
Metode:
deposit(self, amount: float)
→ tambah saldo, abaikan jika amount < 0.withdraw(self, amount: float)
→ kurangi saldo jika amount ≥ 0 dan tidak melebihi saldo.get_balance(self) -> float
→ mengembalikan saldo saat ini.
Tambahkan blok demo if __name__ == "__main__":
yang mendemonstrasikan deposit, withdraw, dan menampilkan saldo akhir.
Buat soal dan solusi buatan Anda sendiri di file src/extra/extra.py
.
Spesifikasi soal harus memuat:
- Nama kelas dan kegunaannya.
- Atribut dan property yang harus ada.
- Metode yang dibutuhkan.
- Validasi atau aturan khusus.
Tambahkan blok demo if __name__ == "__main__":
untuk menjalankan contoh.