Source Code: https://github.com/rsthopaz/ETS-Pbo.git
Evaluasi Tengah Semester
Soal 1
Apa yang dimaksud dengan inheritance/ pewarisan dalam OOP? Berikan contoh penerapan pewarisan dengan menunjukkan hubungan antara kelas induk dan kelas turunan.
Jawaban:
Pewarisan (inheritance) adalah salah satu konsep dasar dalam pemrograman berorientasi objek (OOP) yang memungkinkan sebuah kelas (kelas turunan atau subclass) untuk mewarisi atribut dan metode dari kelas lain (kelas induk atau superclass). Dengan pewarisan, kita dapat menciptakan hierarki kelas yang lebih terstruktur dan meminimalkan pengulangan kode.
// Kelas induk
class Hewan {
public void suara() {
System.out.println("Hewan membuat suara");
}
}
// Kelas turunan
class Kucing extends Hewan {
public void suara() {
System.out.println("Kucing meow");
}
}
// Kelas utama untuk demonstrasi
public class No1 {
public static void main(String[] args) {
Hewan hewan = new Hewan();
hewan.suara(); // Output: Hewan membuat suara
Kucing kucing = new Kucing();
kucing.suara(); // Output: Kucing meow
// Menggunakan polymorphism
Hewan hewanKucing = new Kucing();
hewanKucing.suara(); // Output: Kucing meow
}
}
1). Kelas Induk (Hewan) = Kelas ini memiliki metode suara() yang mencetak "Hewan membuat suara".
2). Kelas Turunan atau Inheritance (Kucing) = Kelas ini mewarisi dari kelas Hewan dengan menggunakan kata kunci extends. Metode suara() di kelas Kucing dioverride untuk memberikan implementasi spesifik, mencetak "Kucing meow".
Soal 2
Apakah fungsi konstruktor dalam sebuah kelas atau obyek? Buatlah kelas Book yang memiliki dua atribut, yaitu judul, penulis, tahun terbit, nama penerbit, kategori buku. Tambahkan konstruktor untuk menginisialisasi atribut tersebut dan tambahkan metode printDetails() untuk mencetak detail buku
Jawaban:
Konstruktor adalah metode khusus dalam sebuah kelas yang dipanggil saat objek dibuat. Fungsi utama dari konstruktor adalah untuk menginisialisasi atribut atau properti objek dengan nilai yang sesuai. Konstruktor memiliki nama yang sama dengan nama kelas dan tidak memiliki tipe pengembalian.
class Book {
private String title;
private String author;
private int yearPublished;
private String publisher;
private String category;
// Konstruktor untuk menginisialisasi atribut
public Book(String title, String author, int yearPublished, String publisher, String category) {
this.title = title;
this.author = author;
this.yearPublished = yearPublished;
this.publisher = publisher;
this.category = category;
}
// Metode untuk mencetak detail buku
public void printDetails() {
System.out.println("Judul: " + title);
System.out.println("Penulis: " + author);
System.out.println("Tahun Terbit: " + yearPublished);
System.out.println("Penerbit: " + publisher);
System.out.println("Kategori: " + category);
}
// Kelas utama untuk demonstrasi
public static void main(String[] args) {
// Membuat objek Book
Book book = new Book("Belajar Java", "Thopaz", 2023, "Gramedia", "Teknologi");
// Mencetak detail buku
book.printDetails();
}
}
1). Atribut: Kelas Book memiliki lima atribut privat: title, author, yearPublished, publisher, dan category.
2). Konstruktor: Konstruktor public Book(String title, String author, int yearPublished, String publisher, String category) digunakan untuk menginisialisasi semua atribut saat objek Book dibuat.
Kata kunci this digunakan untuk membedakan antara parameter konstruktor dan atribut kelas.
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.
class ParkingTicketMachine {
private int balance; // Jumlah nominal uang yang dimasukkan
private final int ticketPrice = 5000; // Harga tiket parkir per jam
private int ticketTime; // Jumlah waktu parkir yang dibeli dalam jam
// Metode untuk menambahkan uang yang dimasukkan
public void insertMoney(int amount) {
if (amount > 0) {
balance += amount;
System.out.println("Uang yang dimasukkan: Rp" + amount);
System.out.println("Saldo saat ini: Rp" + balance);
} else {
System.out.println("Jumlah uang harus positif.");
}
}
// Metode untuk mengeluarkan tiket
public void issueTicket() {
if (balance >= ticketPrice) {
ticketTime = balance / ticketPrice; // Mengatur waktu parkir sesuai saldo
balance = 0; // Mengatur saldo ke 0 setelah mengeluarkan tiket
System.out.println("Tiket dikeluarkan! Waktu parkir: " + ticketTime + " jam.");
} else {
System.out.println("Saldo tidak cukup untuk mengeluarkan tiket.");
}
}
// Metode untuk mengembalikan jumlah jam parkir yang telah dibeli
public int getTimePurchased() {
return ticketTime;
}
// Kelas utama untuk demonstrasi
public static void main(String[] args) {
ParkingTicketMachine ticketMachine = new ParkingTicketMachine();
// Menambahkan uang
ticketMachine.insertMoney(20000); // Memasukkan Rp20.000
ticketMachine.issueTicket(); // Mengeluarkan tiket
// Mencetak waktu parkir yang telah dibeli
System.out.println("Jumlah jam parkir yang dibeli: " + ticketMachine.getTimePurchased() + " jam.");
}
}
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
b. Implementasikan kodenya
MenuItem:
public class MenuItem {
private String name;
private double price;
// Konstruktor
public MenuItem(String name, double price) {
this.name = name;
this.price = price;
}
// Getter untuk nama
public String getName() {
return name;
}
// Getter untuk harga
public double getPrice() {
return price;
}
}
TotalPrice:
public class TotalPrice {
private double total;
// Konstruktor
public TotalPrice() {
this.total = 0.0;
}
// Metode untuk menambahkan harga
public void add(double price) {
total += price;
}
// Metode untuk mendapatkan total harga
public double getTotal() {
return total;
}
}
IsPaid:
public class IsPaid {
private boolean paid;
// Konstruktor
public IsPaid() {
this.paid = false;
}
// Metode untuk menandai pembayaran
public void pay() {
paid = true;
}
// Metode untuk memeriksa status pembayaran
public boolean isPaid() {
return paid;
}
}
FoodOrder:
import java.util.ArrayList;
public class FoodOrder {
private ArrayList<MenuItem> menuItems; // Daftar item menu yang dipesan
private TotalPrice totalPrice; // Total harga pemesanan
private IsPaid isPaid; // Status pembayaran
// Konstruktor
public FoodOrder() {
this.menuItems = new ArrayList<>();
this.totalPrice = new TotalPrice();
this.isPaid = new IsPaid();
}
// Metode untuk menambahkan item menu
public void addMenuItem(String name, double price) {
MenuItem item = new MenuItem(name, price);
menuItems.add(item);
totalPrice.add(price); // Menambahkan harga item ke total
}
// Metode untuk membayar pesanan
public void pay() {
if (!isPaid.isPaid()) {
isPaid.pay(); // Menandai bahwa pesanan sudah dibayar
System.out.println("Pesanan telah dibayar.");
} else {
System.out.println("Pesanan sudah dibayar sebelumnya.");
}
}
// Metode untuk mendapatkan total harga
public double getTotalPrice() {
return totalPrice.getTotal();
}
// Metode untuk mendapatkan daftar menu
public ArrayList<MenuItem> getMenuItems() {
return menuItems;
}
// Metode untuk menampilkan rincian pesanan
public void displayOrderDetails() {
System.out.println("Daftar Pesanan:");
for (MenuItem item : menuItems) {
System.out.println("- " + item.getName() + ": " + item.getPrice());
}
System.out.println("Total Harga: " + getTotalPrice());
System.out.println("Status Pembayaran: " + (isPaid.isPaid() ? "Sudah Dibayar" : "Belum Dibayar"));
}
public static void main(String[] args) {
FoodOrder order = new FoodOrder();
order.addMenuItem("Nasi Goreng", 25000);
order.addMenuItem("Ayam Penyet", 30000);
order.addMenuItem("Teh Manis", 5000);
order.displayOrderDetails();
order.pay();
order.displayOrderDetails();
}
}
Komentar
Posting Komentar