Object Oriented Programming | Week 11: Aplikasi Rental Kendaraan
PBO-A 2025
Pada pertemuan kali ini dibahas mengenai penerapan konsep inheritance (pewarisan) dalam pemrograman berorientasi objek, yang bertujuan untuk memperbaiki struktur kode agar lebih efisien, mudah dipahami, dan mudah dikembangkan. Dengan menggunakan inheritance, kita dapat membuat sebuah class induk (superclass) yang menyimpan atribut serta perilaku umum, kemudian menurunkannya ke class turunan (subclass) yang memiliki karakteristik lebih spesifik.
Dalam contoh aplikasi rental kendaraan, terdapat beberapa class yang memiliki peran berbeda namun saling berkaitan.
- Class Kendaraan berfungsi sebagai class induk yang menjadi dasar bagi class turunan lainnya dan menyimpan atribut umum seperti merk, model, dan tahun produksi.
- Class Mobil merupakan turunan dari Kendaraan yang mewakili kendaraan jenis mobil dengan tambahan atribut jumlah roda.
- Class Motor juga turunan dari Kendaraan yang menyimpan informasi kendaraan roda dua beserta jumlah rodanya.
- Class Sepeda merupakan turunan lain dari Kendaraan yang memiliki atribut khusus, yaitu jenis sepeda (misalnya sepeda gunung atau sepeda balap).
- Class Penyewaan bertugas mencatat data penyewa, termasuk nama penyewa dan kendaraan yang disewa.
- Class Main berperan sebagai titik awal program, di mana objek-objek kendaraan dibuat, daftar penyewa ditambahkan, serta menampilkan daftar kendaraan yang tersedia dan detail penyewaan yang sedang berlangsung.
Berikut ini merupakan tampilan hasil keluaran (output) dari program rental kendaraan yang telah dibuat. Pada hasil ini, program menampilkan daftar lengkap kendaraan yang tersedia di sistem, mulai dari mobil, motor, hingga sepeda, beserta detail atribut masing-masing seperti merk, model, tahun produksi, dan keterangan tambahan sesuai jenis kendaraannya. Selain itu, juga ditampilkan daftar penyewa lengkap dengan informasi kendaraan yang mereka sewa. Tampilan ini menggambarkan bagaimana setiap objek dari class turunan dapat berinteraksi dengan baik melalui konsep inheritance yang telah diterapkan.
Berikut merupakan potongan kode dari setiap class yang digunakan dalam aplikasi rental kendaraan. Masing-masing class memiliki fungsi dan tanggung jawab yang berbeda namun saling berhubungan melalui konsep inheritance. Class Kendaraan berperan sebagai class induk yang menyimpan atribut umum, sedangkan Mobil, Motor, dan Sepeda merupakan class turunan dengan atribut khusus sesuai jenis kendaraannya. Class Penyewaan digunakan untuk mencatat data penyewa dan kendaraan yang disewa, sementara class Main berfungsi sebagai pusat eksekusi program untuk membuat objek, mengelola data penyewaan, dan menampilkan informasi kendaraan secara keseluruhan.
Class Kendaraan.java:
/** * Write a description of class Kendaraan here. * * @author Muhammad Zaky Zein * @version 2025.11.11 */ public class Kendaraan { protected String merk; protected String model; protected int tahunProduksi; public Kendaraan(String merk, String model, int tahunProduksi) { this.merk = merk; this.model = model; this.tahunProduksi = tahunProduksi; } public String showInfo() { return merk + " " + model + " (" + tahunProduksi + ")"; } }
/**
* Write a description of class Mobil here.
*
* @author Muhammad Zaky Zein
* @version 2025.11.11
*/
public class Mobil extends Kendaraan
{
private int jumlahRoda;
public Mobil(String merk, String model, int tahunProduksi, int jumlahRoda) {
super(merk, model, tahunProduksi);
this.jumlahRoda = jumlahRoda;
}
@Override
public String showInfo() {
return "Mobil: " + super.showInfo() + ", " + jumlahRoda + " roda";
}
}Class Motor.java:
/**
* Write a description of class Motor here.
*
* @author Muhammad Zaky Zein
* @version 2025.11.11
*/
public class Motor extends Kendaraan
{
private int jumlahRoda;
public Motor(String merk, String model, int tahunProduksi, int jumlahRoda) {
super(merk, model, tahunProduksi);
this.jumlahRoda = jumlahRoda;
}
@Override
public String showInfo() {
return "Motor: " + super.showInfo() + ", " + jumlahRoda + " roda";
}
}Class Sepeda.java:
/**
* Write a description of class Sepeda here.
*
* @author Muhammad Zaky Zein
* @version 2025.11.11
*/
public class Sepeda extends Kendaraan
{
private String jenisSepeda;
public Sepeda(String merk, String model, int tahunProduksi, String jenisSepeda) {
super(merk, model, tahunProduksi);
this.jenisSepeda = jenisSepeda;
}
@Override
public String showInfo() {
return "Sepeda: " + super.showInfo() + ", jenis: " + jenisSepeda;
}
}Class Penyewa.java:
/**
* Write a description of class Penyewa here.
*
* @author Muhammad Zaky Zein
* @version 2025.11.11
*/
public class Penyewa
{
private String nama;
private Kendaraan kendaraan;
public Penyewa(String nama, Kendaraan kendaraan) {
this.nama = nama;
this.kendaraan = kendaraan;
}
public String showInfo() {
return "Penyewa: " + nama + " [ Kendaraan: " + kendaraan.showInfo() + " ]";
}
}Class Main.java:
/**
* Write a description of class Main here.
*
* @author Muhammad Zaky Zein
* @version 2025.11.11
*/
import java.util.ArrayList;
public class Main
{
public static void main(String[] args) {
ArrayList<Kendaraan> listKendaraan = new ArrayList<>();
listKendaraan.add(new Mobil("Toyota", "Supra MK4", 1998, 4));
listKendaraan.add(new Mobil("Nissan", "Skyline GT-R R34", 1999, 4));
listKendaraan.add(new Mobil("Mazda", "RX-7 Veilside", 2002, 4));
listKendaraan.add(new Motor("Ducati", "Panigale V4", 2021, 2));
listKendaraan.add(new Motor("Yamaha", "R1M", 2020, 2));
listKendaraan.add(new Sepeda("Trek", "Madone SLR", 2023, "Balap"));
listKendaraan.add(new Sepeda("Specialized", "Rockhopper", 2022, "Gunung"));
System.out.println("<==Daftar Kendaraan==>");
for(Kendaraan k: listKendaraan) {
System.out.println(k.showInfo());
}
ArrayList<Penyewa> daftarPenyewa = new ArrayList<>();
daftarPenyewa.add(new Penyewa("TungTungSahur", listKendaraan.get(0)));
daftarPenyewa.add(new Penyewa("John Doe", listKendaraan.get(3)));
daftarPenyewa.add(new Penyewa("Oiia oiia", listKendaraan.get(5)));
System.out.println("\n<==Daftar Penyewa==>");
for (Penyewa p : daftarPenyewa) {
System.out.println(p.showInfo());
}
}
}Muhammad Zaky Zein
5025241148

Comments
Post a Comment