Uts Pbo
Uts Pbo
Untuk Memenuhi ujian tengah semester pada mata kuliah pemograman beriorientasi object
Disusun oleh :
Ruby Khairi Zaky (2430511049)
Wangsa Muhamad Rafi (2430511064)
Kemal Ahmad Rabbani (2430511057)
Muhamad Syahdan Abdurohman (2430511071)
BAB 1.....................................................................................................................................................1
PENDAHULUAN.................................................................................................................................1
Latar Belakang....................................................................................................................................1
Tujuan Praktikum................................................................................................................................1
BAB II....................................................................................................................................................2
DASAR TEORI.....................................................................................................................................2
Enkapsulasi.........................................................................................................................................2
Inherintance.........................................................................................................................................3
BAB III.................................................................................................................................................5
Metode Praktikum.............................................................................................................................5
Alat dan Bahan.................................................................................................................................5
BAB IV...................................................................................................................................................6
HASIL DAN PEMBAHASAN.............................................................................................................6
Hasil Implementasi Inheritance.....................................................................................................6
PEMBAHASAN............................................................................................................................10
BAB V..................................................................................................................................................14
KESIMPULAN DAN SARAN...........................................................................................................14
Kesimpulan.......................................................................................................................................14
Saran..................................................................................................................................................14
DAFTAR PUSTAKA......................................................................................................................14
LAMPIRAN......................................................................................................................................16
2
3
BAB 1
PENDAHULUAN
Latar Belakang
Salah satu konsep dasar dalam PBO adalah instansiasi objek, yaitu proses pembuatan objek nyata
berdasarkan cetak biru yang disebut kelas. konsep enkapsulasi, yaitu mekanisme penyembunyian data agar
atribut pada suatu objek tidak dapat diakses sembarangan dari luar kelas.
Konsep penting lainnya adalah inheritance (pewarisan), yaitu kemampuan suatu kelas untuk mewarisi
atribut dan metode dari kelas lain. Melalui inheritance, pengembang dapat membangun hierarki kelas yang lebih
terstruktur, menghindari duplikasi kode, serta memungkinkan pengembangan fitur baru secara lebih cepat dan
efisien.
Tujuan Praktikum
1
BAB II
DASAR TEORI
Pemrograman Berorientasi Objek (PBO) adalah paradigma pemrograman yang memodelkan suatu
sistem ke dalam objek-objek yang merepresentasikan entitas dunia nyata. Konsep dasarnya dimulai
dari kelas, yaitu cetak biru yang berisi atribut dan method, lalu objek sebagai hasil instansiasi dari
kelas tersebut yang dapat digunakan dalam program.
Enkapsulasi
konsep dasar dalam Pemrograman Berorientasi Objek (PBO) yang digunakan untuk membungkus
data (atribut) dan perilaku (method) ke dalam satu kesatuan, yaitu class. Prinsip ini membatasi akses
langsung terhadap atribut agar tidak dapat diubah secara bebas dari luar kelas. Untuk menjaga
keamanan data, atribut biasanya dibuat private, sedangkan akses dan pengubahan nilai dilakukan
melalui method getter dan setter yang telah disediakan. Dengan cara ini, setiap perubahan nilai dapat
dikontrol dan divalidasi, sehingga memastikan integritas data tetap terjaga. Enkapsulasi tidak hanya
meningkatkan keamanan, tetapi juga membuat struktur program lebih terorganisir dan mudah dikelola.
Inherintance
Inheritance (pewarisan) adalah salah satu konsep utama dalam Pemrograman Berorientasi Objek
(PBO) yang memungkinkan sebuah kelas mewarisi atribut dan method dari kelas lain. Kelas yang
mewariskan disebut kelas induk (parent class / superclass), sedangkan kelas yang menerima warisan
disebut kelas turunan (child class / subclass).
Jenis-Jenis Inheritance:
1. Single Inheritance
Merupakan pewarisan di mana satu kelas turunan hanya memiliki satu kelas induk. Hubungan
pewarisan terjadi secara langsung antara satu induk dan satu anak.
2. Multilevel Inheritance
Pewarisan yang terjadi secara berlapis atau berantai. Sebuah kelas turunan dapat menjadi induk
bagi kelas lain, sehingga terbentuk struktur bertingkat.
3. Multiple Inheritance
Sebuah kelas turunan mewarisi atribut dan method dari lebih dari satu kelas induk. Jenis ini
memungkinkan penggabungan karakteristik dari beberapa induk sekaligus.
4. Hierarchical Inheritance
Dalam jenis ini, satu kelas induk diwarisi oleh dua atau lebih kelas turunan. Semua kelas
turunan memperoleh fitur yang berasal dari satu induk yang sama.
5. Hybrid Inheritance
Merupakan kombinasi dari dua atau lebih jenis inheritance sebelumnya. Hybrid inheritance
dapat menggabungkan pola hierarchical, multilevel, atau multiple inheritance dalam satu
struktur pewarisan.
4
BAB III
Metode Praktikum
Laptop
Bahasa Pemrograman (Python, dan Thonny)
Bahan Praktikum (Script Program Python yang terdiri dari kelas induk Laundry, Amang
laundry sebagai studi kasus)
Langkah kerja (Persiapan lingkungan kerja, Instalasi Python dan IDE, Pembuatan Kelas
induk Laundry, Definisikan Atribut Private, Buat method, Pembuatan kelas, Inheritance.
Tambahkan Atribut baru,
5
BAB IV
# KELAS INDUK
class Laundry:
def _init_(self, nama_pelanggan, jenis_layanan, berat, harga_per_kg, status):
# Enkapsulasi (atribut privat)
self._nama_pelanggan = nama_pelanggan
self.__jenis_layanan = jenis_layanan
self.__berat = berat
self. _harga_per_kg = harga_per_kg
self.__status = status
def get_nama(self):
return self.__nama_pelanggan
def hitung_total(self):
return self._berat * self._harga_per_kg
def tampilkan_info(self):
return (
f"Nama Pelanggan : {self.__nama_pelanggan}\n"
f"Jenis Layanan : {self.__jenis_layanan}\n"
f"Berat Cucian : {self.__berat} kg\n"
f"Harga per Kg : Rp{self.__harga_per_kg:,}\n"
f"Status : {self.__status}\n"
f"Total Bayar : Rp{self.hitung_total():,}\n"
)
# KELAS TURUNAN
class LaundryKiloan(Laundry):
def _init_(self, nama_pelanggan, jenis_layanan, berat, harga_per_kg, status, parfum,
express):
super()._init_(nama_pelanggan, jenis_layanan, berat, harga_per_kg, status)
self.__parfum = parfum
self.__express = express
6
self.__diskon = 0
self.__catatan = ""
self.__pembayaran = "Belum Bayar"
def hitung_total(self):
total = super().hitung_total()
if self.__express:
total += 5000
if self.__diskon > 0:
total -= total * (self.__diskon / 100)
return total
def tampilkan_info(self):
return (
super().tampilkan_info() +
f"Parfum : {self.__parfum}\n"
f"Express : {'Ya' if self.__express else 'Tidak'}\n"
f"Diskon : {self.__diskon}%\n"
f"Catatan : {self.__catatan}\n"
f"Status Bayar : {self.__pembayaran}\n"
f"Total Akhir : Rp{self.hitung_total():,}\n"
f"{'-'*45}\n"
)
# APLIKASI GUI
class LaundryApp:
def _init_(self, root):
[Link] = root
[Link](">>Amang Loundry<<")
[Link]("640x580")
[Link](False, False)
[Link](bg="#1A001F") # warna latar belakang ungu tua
self.daftar_laundry = []
7
# Judul
[Link](root, text="💠 AMANG LAUNDRY 💠", font=("Orbitron", 18, "bold"),
foreground="#C77DFF", background="#1A001F").pack(pady=10)
[Link](root, text=" Pakaian Bersih Kembali - Terima Antar Jemput ", font=("Consolas",
10), foreground="#E0B3FF", background="#1A001F").pack()
# Frame Input
frame = [Link](root, padding=10, style="TFrame")
[Link](pady=10)
labels = [
"Nama Pelanggan:", "Jenis Layanan:", "Berat (kg):",
"Parfum:", "Express (ya/tidak):", "Status:", "Diskon (%):"
]
[Link] = {}
# Tombol
btn_frame = [Link](root, style="TFrame")
btn_frame.pack(pady=10)
[Link](btn_frame, text="💾 Tambah Data", command=self.tambah_data).grid(row=0,
column=0, padx=5)
[Link](btn_frame, text="📋 Tampilkan Semua",
command=self.tampilkan_semua).grid(row=0, column=1, padx=5)
[Link](btn_frame, text="🚀 Keluar", command=[Link]).grid(row=0, column=2,
padx=5)
# Output area
self.text_output = [Link](root, width=72, height=15, bg="#2D004D", fg="#E0B3FF",
insertbackground="white", relief="flat", font=("Consolas", 10))
self.text_output.pack(pady=10)
self.text_output.config(state="disabled")
# Footer
[Link](root, text="CyberLaundry © 2089 | by Syahdan", font=("Consolas", 9),
foreground="#A566FF", background="#1A001F").pack(side="bottom", pady=5)
# -------------------------------------------------
def tambah_data(self):
nama = [Link]["Nama Pelanggan:"].get()
layanan = [Link]["Jenis Layanan:"].get()
berat = [Link]["Berat (kg):"].get()
8
parfum = [Link]["Parfum:"].get()
express = [Link]["Express (ya/tidak):"].get().lower() == "ya"
status = [Link]["Status:"].get()
diskon = [Link]["Diskon (%):"].get()
try:
berat = float(berat)
diskon = float(diskon) if diskon else 0
except ValueError:
[Link]("❌ Error", "Berat dan diskon harus berupa angka!")
return
self.daftar_laundry.append(laundry)
[Link]("✅ Sukses", f"Data laundry '{nama}' berhasil ditambahkan!")
self.clear_input()
# -------------------------------------------------
def tampilkan_semua(self):
self.text_output.config(state="normal")
self.text_output.delete(1.0, "end")
if not self.daftar_laundry:
self.text_output.insert("end", "💤 Belum ada data laundry.\n")
else:
for data in self.daftar_laundry:
self.text_output.insert("end", data.tampilkan_info())
self.text_output.config(state="disabled")
# -------------------------------------------------
def clear_input(self):
for entry in [Link]():
if isinstance(entry, [Link]):
[Link]("")
else:
[Link](0, "end")
# MAIN PROGRAM
if _name_ == "_main_":
root = [Link]()
app = LaundryApp(root)
[Link]()
PEMBAHASAN
9
# KELAS INDUK
class Laundry:
def__init_(self, nama_pelanggan, jenis_layanan, berat, harga_per_kg, status):
# Enkapsulasi (atribut privat)
self.__nama_pelanggan = nama_pelanggan
self.__jenis_layanan = jenis_layanan
self.__berat = berat
self.__harga_per_kg = harga_per_kg
self.__status = status
Class laundry ini dirancang untuk merepresentasikan data dasar layanan laundry dengan
menerapkan konsep OOP (Object-Oriented Programming), khususnya enkapsulasi melalui
penggunaan atribut privat. Di dalam metode konstruktor terdapat lima atribut privat yang
masing-masing berfungsi menyimpan informasi penting tentang transaksi laundry konstruktor
yang dipanggil secara otomatis setiap kali objek baru dari kelas dibuat. Tujuannya adalah
menginisialisasi semua atribut sejak awal sehingga objek yang dihasilkan memiliki data lengkap
dan siap digunakan untuk proses selanjutnya, seperti perhitungan harga, perubahan status, atau
sebagai dasar bagi kelas turunan melalui mekanisme pewarisan (inheritance).
def get_nama(self):
return self.__nama_pelanggan
def hitung_total(self):
return self._berat * self._harga_per_kg
def tampilkan_info(self):
return (
f"Nama Pelanggan : {self.__nama_pelanggan}\n"
f"Jenis Layanan : {self.__jenis_layanan}\n"
f"Berat Cucian : {self.__berat} kg\n"
1
0
f"Harga per Kg : Rp{self.__harga_per_kg:,}\n"
f"Status : {self.__status}\n"
f"Total Bayar : Rp{self.hitung_total():,}\n"
)
Kode di atas merupakan bagian dari sebuah kelas dalam python yang mempresentasikan
objek laundry(pelanggan). Di dalam nya terdapat beberapa metode yang digunakan untuk
mengakses dan memodifikasi data(getter dan setter), serta menampilkan informasi tentang nama
pelanggan.
def get_nama(self): berfungsi Mengambil dan mengembalikan nilai nama pelanggan dari
atribut privat __nama_pelanggan.
def set_status(self, status):berfungsi Mengubah atau memperbarui status cucian.
def hitung_total(self):berfungsi Menghitung total biaya laundry berdasarkan rumus:
total = berat × harga_per_kg
def ubah_harga(self, harga_baru): berfungsi Mengubah nilai harga per kilogram menjadi
harga baru.
def tampilkan_info(self): berfungsi untuk Menyusun dan mengembalikan informasi
lengkap mengenai pesanan laundry, yaitu: Nama pelanggan, Jenis layanan Berat cucian,
Harga per kg Status cucian, Total biaya (menggunakan hitung_total()
# KELAS TURUNAN
class LaundryKiloan(Laundry):
def _init_(self, nama_pelanggan, jenis_layanan, berat, harga_per_kg, status, parfum,
express):
super()._init_(nama_pelanggan, jenis_layanan, berat, harga_per_kg, status)
self.__parfum = parfum
self.__express = express
self.__diskon = 0
self.__catatan = ""
self.__pembayaran = "Belum Bayar"
def hitung_total(self):
total = super().hitung_total()
if self.__express:
total += 5000
if self.__diskon > 0:
total -= total * (self.__diskon / 100)
return total
def tampilkan_info(self):
return (
super().tampilkan_info() +
1
1
f"Parfum : {self.__parfum}\n"
f"Express : {'Ya' if self.__express else 'Tidak'}\n"
f"Diskon : {self.__diskon}%\n"
f"Catatan : {self.__catatan}\n"
f"Status Bayar : {self.__pembayaran}\n"
f"Total Akhir : Rp{self.hitung_total():,}\n"
f"{'-'*45}\n"
)
Kode diatas merupakan objek dari class laundry dengan nama mamang laundry pada objek
Laundry yang terdapat parameter dengan nilai nilai atribut sebagai berikut
Nama_pelanggan sebagai nama pelanggan dari objek laundry
Layanan_laundry sebagai layanan pada laundry
Berat_perkg sebagai penghitung berapa banyak baju
Parfum_wangi sebagai pewangi untuk mencuci
Express_laundry sebagai pengantaran setelah selesai dan dikirimkan
Status_laundry sebagai info sudah selesai atau belum nya
Diskon_laundry sebagai potongan pada event tertentu
1
2
Selanjutnya, terdapat kode atau method untuk memanggil dan menampilkan fungsi dengan
menambahkan [Link](). Pada kode diatas yang ditampilkan adalah info_laundry() untuk
menampilkan informasi terkait laundry pada mamang laundry. Selanjutnya menampilkan
infromasi tentang laundry. Nama_pelanggan untuk menampilkan seseorang yang sedang
menghantarkan cucian nya.
BAB V
Saran
Untuk pengembangan aplikasi dan pemahaman OOP menjadi lebih optimal, terdapat
beberapa saran yang dapat dijadikan bahan pengembangan ke depan, Sebaiknya penulisan
konstruktor pada seluruh kelas disempurnakan menggunakan __init__ agar program berjalan
tanpa error. Perlu ditambahkan validasi input yang lebih ketat agar aplikasi lebih robust,
misalnya mencegah pengguna memasukkan data kosong atau format yang tidak sesuai.
Penggunaan messagebox dapat diperluas untuk memberi notifikasi status pembayaran atau
proses laundry secara lebih informatif. Program dapat dikembangkan lebih lanjut dengan
menambahkan fitur seperti sistem penyimpanan data menggunakan database atau file, sehingga
data tetap tersimpan meskipun aplikasi ditutup. Tampilan GUI masih bisa ditingkatkan agar
lebih responsif dan modern, misalnya menambahkan tombol edit, hapus, atau pencarian data
pelanggan. Selain itu, penggunaan konsep OOP lain seperti polymorphism atau composition
juga dapat dijadikan studi lanjutan untuk memperkaya fungsionalitas program.
Dengan melakukan pengembangan dan evaluasi secara berkala, aplikasi laundry ini dapat
menjadi sistem yang lebih lengkap, lebih efisien, dan lebih bermanfaat dalam mendukung
otomatisasi layanan laundry berbasis teknologi
DAFTAR PUSTAKA
1
5
LAMPIRAN
1
6