Nama : Alif Nurrohman
NRP : 5025231057
Source Code : https://github.com/alifnurrohmans/ets-pbo
link demo : https://youtu.be/aOsZdMcXKXU
Soal 1 :
Apa yang dimaksud dengan inheritance / pewarisan dalam OOP? Berikan contoh penerapan pewarisan dengan menunjukan hubungan antara kelas induk dan kelas turunan
Jawaban :
Pewarisan (Inheritance) dalam Object-Oriented Programming (OOP) adalah konsep di mana sebuah kelas dapat mewarisi atribut dan metode dari kelas lain. Kelas yang mewarisi disebut kelas turunan (subclass), sedangkan kelas yang diwarisi disebut kelas induk (superclass). Dengan pewarisan, kelas turunan mendapatkan kembali atribut dan metode dari kelas induk, tetapi juga dapat menambahkan atribut atau metode baru, atau menimpa (override) metode yang sudah ada.
# Contoh Kasus (Class Kendaraan "superclass" dan Class Mobil "subclass"):
Misalkan kita punya kelas induk bernama Kendaraan, dan kelas turunan bernama Mobil. Semua Mobil adalah Kendaraan, sehingga Mobil mewarisi sifat umum dari Kendaraan, tetapi juga dapat memiliki atribut atau perilaku spesifiknya sendiri.
# Hierarki Kelas:
1. Kendaraan (Kelas Induk)
Atribut: jumlah roda, jenis bahan bakar
Metode: bergerak()
2. Mobil (Kelas Turunan)
Atribut: tipe mobil (sedan, SUV)
Metode: membukaBagasi()
// Kelas Induk (SuperClass)
class Kendaraan {
int jumlahRoda;
String bahanBakar;
// Constructor
public Kendaraan(int jumlahRoda, String bahanBakar) {
this.jumlahRoda = jumlahRoda;
this.bahanBakar = bahanBakar;
}
// Metode yang dimiliki oleh semua kendaraan
public void bergerak() {
System.out.println("Kendaraan bergerak dengan " + jumlahRoda +
" roda menggunakan " + bahanBakar);
}
}
// Kelas Turunan (SubClass) yang mewarisi dari Kendaraan
class Mobil extends Kendaraan {
String tipeMobil;
// Constructor untuk kelas turunan
public Mobil(int jumlahRoda, String bahanBakar, String tipeMobil) {
// Memanggil constructor kelas induk
super(jumlahRoda, bahanBakar);
this.tipeMobil = tipeMobil;
}
// Metode tambahan untuk Mobil
public void membukaBagasi() {
System.out.println("Bagasi mobil " + tipeMobil + " dibuka.");
}
}
public class Main {
public static void main(String[] args) {
// Membuat objek dari kelas Mobil
Mobil mobilBaru = new Mobil(4, "Bensin", "SUV");
// Memanggil metode dari kelas induk
mobilBaru.bergerak();
// Memanggil metode khusus dari kelas turunan
mobilBaru.membukaBagasi();
}
}
#Keterangan :
Kendaraan sebagai kelas induk yang akan mewariskan ke kelas turunannya yaitu Mobil sehingga Class
Mobil akan dapat atribut dan properti yang sudah dibuat di kelas Kendaraan , seperti properti : jumlah roda, bahan bakar dan method : bergerak().
Soal 2 :
Apakah fungsi kontruktor dalam sebuah kelas atau objek? Buatlah kelas Book yang memiliki 2 atribut, yaitu judul, penulis, tahun terbit, nama penerbit, kategori buku. Tambahkan konstruktor untuk menginisiali atribut tersebut dan tambahkan metode printDetails() untuk mencetak detail buku
Jawaban 2 :
Konstruktor dalam sebuah kelas berfungsi untuk menginisialisasi objek yang dibuat dari kelas tersebut. Dengan kata lain, konstruktor digunakan untuk memberikan nilai awal kepada properti atau atribut sebuah objek saat objek tersebut dibuat. Konstruktor dipanggil secara otomatis ketika kita membuat instance (objek) dari sebuah kelas.
Konstruktor memiliki nama yang sama dengan nama kelas dan tidak memiliki tipe pengembalian (return type), bahkan void sekalipun.
Contoh Kelas Book dalam Java
Kita akan membuat kelas Book dengan atribut: judul, penulis, tahunTerbit, namaPenerbit, dan kategoriBuku. Konstruktor akan digunakan untuk menginisialisasi atribut-atribut tersebut, dan metode printDetails() akan mencetak detail informasi tentang buku.
class Book {
// Atribut dari kelas Book
String judul;
String penulis;
int tahunTerbit;
String namaPenerbit;
String kategoriBuku;
// Konstruktor untuk menginisialisasi atribut Book
public Book(String judul, String penulis, int tahunTerbit,
String namaPenerbit, String kategoriBuku) {
this.judul = judul;
this.penulis = penulis;
this.tahunTerbit = tahunTerbit;
this.namaPenerbit = namaPenerbit;
this.kategoriBuku = kategoriBuku;
}
// Metode untuk mencetak detail buku
public void printDetails() {
System.out.println("Detail Buku:");
System.out.println("Judul: " + judul);
System.out.println("Penulis: " + penulis);
System.out.println("Tahun Terbit: " + tahunTerbit);
System.out.println("Penerbit: " + namaPenerbit);
System.out.println("Kategori: " + kategoriBuku);
}
// Main method untuk menjalankan program
public static void main(String[] args) {
// Membuat objek Book
Book buku = new Book("Pemrograman Java", "John Doe",
2021, "Penerbit Teknologi", "Pemrograman");
// Memanggil metode untuk mencetak detail buku
buku.printDetails();
}
}
Soal 3 : Studi kasus Parking Ticket Machine
Buatlah kelas bernama Parking TicketMachine yang mensimulasikan mesin tiket parkir dengan fitur berikut:
# Atribut:
> balance (jumlah nominal uang yang dimasukkan/di tap oleh pengguna).
> ticketPrice (harga tiket parkir per jam, misalnya Rp5.000).
> 0 ticketTime (jumlah waktu parkir yang dibeli dalam jam).
#Metode:
> insertMoney(int amount): Menambahkan uang yang dimasukkan.
> issueTicket(): Mengeluarkan tiket berdasarkan uang yang dimasukkan (jika saldo cukup) dan mengatur waktu parkir sesuai dengan saldo.
> getTimePurchased(): Mengembalikan jumlah jam parkir yang telah
dibeli.
Jawaban 3 :
import java.util.Scanner;
class ParkingTicketMachine {
// Atribut dari kelas ParkingTicketMachine
private int balance; // Jumlah uang yang dimasukkan
private int ticketPrice; // Harga tiket parkir per jam
private int ticketTime; // Jumlah waktu parkir yang dibeli (dalam jam)
// Konstruktor untuk menginisialisasi harga tiket
public ParkingTicketMachine(int ticketPrice) {
this.ticketPrice = ticketPrice;
this.balance = 0;
this.ticketTime = 0;
}
// Metode untuk menambahkan uang yang dimasukkan pengguna
public void insertMoney(int amount) {
if (amount > 0) {
balance += amount;
System.out.println("Anda telah memasukkan uang: Rp" + amount);
} else {
System.out.println("Jumlah uang yang dimasukkan harus positif!");
}
}
// Metode untuk mengeluarkan tiket parkir jika saldo cukup
public void issueTicket() {
if (balance >= ticketPrice) {
ticketTime = balance / ticketPrice; // Hitung waktu parkir dibeli
balance = balance % ticketPrice; // Sisa uang setelah pembelian tiket
System.out.println("Tiket berhasil dikeluarkan. Anda telah membeli " +
ticketTime + " jam parkir.");
if (balance > 0) {
System.out.println("Sisa saldo Anda: Rp" + balance);
}
} else {
System.out.println("Saldo tidak mencukupi. Masukkan uang tambahan.");
}
}
// Metode untuk mengembalikan jumlah jam parkir yang telah dibeli
public int getTimePurchased() {
return ticketTime;
}
// Main method untuk menjalankan program
public static void main(String[] args) {
// Membuat objek Scanner untuk input dari pengguna
Scanner scanner = new Scanner(System.in);
// Memasukkan harga tiket per jam dari pengguna
System.out.print("Masukkan harga tiket parkir per jam: Rp");
int hargaTiket = scanner.nextInt();
// Membuat objek ParkingTicketMachine dengan harga tiket dimasukkan pengguna
ParkingTicketMachine machine = new ParkingTicketMachine(hargaTiket);
// Melakukan input uang secara dinamis
System.out.print("Masukkan jumlah uang yang ingin Anda masukkan: Rp");
int uang = scanner.nextInt();
machine.insertMoney(uang);
// Mengeluarkan tiket parkir
machine.issueTicket();
// Menampilkan jumlah jam yang telah dibeli
System.out.println("Jumlah jam parkir yang telah dibeli: " +
machine.getTimePurchased() + " jam");
// Menutup Scanner untuk mencegah kebocoran resource
scanner.close();
}
}
Penjelasan Nomor 3 :
Diberikan studi kasus untuk membuat Parking Tiket Machine, pertama saya buat sebuah Class bernama ParkingTiketMachine yang mempunyai atribut balance, ticketPrice dan ticketTime.
Lalu, saya punya beberapa method seperti insertMoney untuk memasukan uang, issueTicket() untuk output pembelian tiket dan getTimePurchased() untuk output jumlah jam parkir yang dibeli, disini saya menggunakan inputan dinamis sehingga perlu import java.util.Scanner;
Soal 4 : Buatlah Desain kelas untuk aplikasi FoodOrder yang menyimpan data pemesanan makanan di sebuah restoran. Setiap pesanan memiliki atribut menultems (daftar menu), totalPrice, dan isPaid. Implementasikan perilaku berikut: (Gunakan library java util, arraylist)
a. Gambarkan Class Diagramnya
.png)
b. Implementasikan kodenya
1. Main.java
public class Main {
public static void main(String[] args) {
// Membuat sistem pemesanan
FoodOrderSystem foodOrderSystem = new FoodOrderSystem();
// Membuat beberapa item menu
MenuItem burger = new MenuItem("Burger", 20000);
MenuItem pizza = new MenuItem("Pizza", 100000);
MenuItem fries = new MenuItem("Kebab", 15000);
// Membuat pesanan baru
Order order1 = new Order();
order1.addItem(burger);
order1.addItem(fries);
// Menambahkan pesanan ke sistem
foodOrderSystem.addOrder(order1);
// Melakukan pembayaran
order1.payOrder();
// Menampilkan semua pesanan yang ada
for (Order order : foodOrderSystem.getOrders()) {
System.out.println(order);
}
}
}
2. MenuItem.java
public class MenuItem {
private String name;
private double price;
public MenuItem(String name, double price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
@Override
public String toString() {
return name + ": Rp. " + price;
}
}
3. Order.java
import java.util.ArrayList;
public class Order {
private ArrayList<MenuItem> menuItems;
private double totalPrice;
private boolean isPaid;
public Order() {
menuItems = new ArrayList<>();
totalPrice = 0;
isPaid = false;
}
public void addItem(MenuItem item) {
menuItems.add(item);
calculateTotalPrice(); // Hitung ulang total harga
}
private void calculateTotalPrice() {
totalPrice = 0;
for (MenuItem item : menuItems) {
totalPrice += item.getPrice();
}
}
public void payOrder() {
isPaid = true;
}
public boolean isPaid() {
return isPaid;
}
public double getTotalPrice() {
return totalPrice;
}
@Override
public String toString() {
return "Order: " + menuItems.toString() + ", Total Price: Rp. " + totalPrice + ", Paid: " + isPaid;
}
}
4. FoodOrderSystem.java
import java.util.ArrayList;
public class FoodOrderSystem {
private ArrayList<Order> orders;
public FoodOrderSystem() {
orders = new ArrayList<>();
}
public void addOrder(Order order) {
orders.add(order);
}
public ArrayList<Order> getOrders() {
return orders;
}
}
Komentar
Posting Komentar