Thursday, October 24, 2024

Evaluasi Tengah Semester - Pertemuan 9

Nama: Muhammad Risyad Himawan Putra

NRP: 5025231205

Kelas: Pemrograman Berbasis Obyek (G)



ETS


1. Apa yang dimaksud dengan inheritance/perwarisan dalam OOP? Berikan contoh penerapan pewarisan dengan menunjukkan hubungan antara kelas induk dan kelas turunan.

Inheritance atau pewarisan merupakan pilar fundamental OOP di java di mana suatu class diperbolehkan untuk mewariskan fitur-fitur (atribut dan metode) dari class yang lainnya. Ini memungkinkan kita untuk menggunakan ulang metode dan atribut dari class lainnya sehingga mempromosikan penggunaan ulang kode. Contoh penerapan inheritance:

class Inventory {
    protected String itemName;
    protected int itemCount;

    public Inventory(String itemName, int itemCount) {
        this.itemName = itemName;
        this.itemCount = itemCount;
    }

    public void displayItem() {
        System.out.println("Ammunition: " + itemName + ", Amount: " + itemCount);
    }
}

class WeaponInventory extends Inventory {
    private int durability;

    public WeaponInventory(String itemName, int itemCount, int durability) {
        super(itemName, itemCount);
        this.durability = durability;
    }

    @Override
    public void displayItem() {
        System.out.println("Weapon: " + itemName + ", Amount: " + itemCount
                           + ", Durability: " + durability);
    }
}

public class Main {
    public static void main(String[] args) {
        Inventory ammo = new Inventory("5.56x45mm NATO", 120);
        ammo.displayItem();

        WeaponInventory weapon = new WeaponInventory("Ruger AR-556", 3, 85);
        weapon.displayItem();
    }
}

Class WeaponInventory mewarisi atribut itemName dan itemCount dari kelas induk Inventory sehingga kita dapat membuat objek WeaponInventory dan menggunakan atribut dan method yang didefinisikan di Inventory.


2. Apakah fungsi konstruktor dalam sebuah kelas atau obyek? Buatlah kelas Book yang memiliki dua atribut, yaitu judul, penulisan tahun terbit, nama penerbit, kategori buku. Tambahkan konstruktor untuk menginisialisasi atribut tersebut dan tambahkan metode printDetails() untuk mencetak detail buku.

Sebuah konstruktor di Java berfungsi untuk menginisialisasi objek yang telah dibuat dari class. Konstruktor bisa digunakan untuk memberikan nilai awalan dari atribut sebuah objek. Berikut implementasinya di java.

class Book {
    private String judul;
    private int tahunTerbit;
    private String namaPenerbit;
    private String kategori;

    public Book(String judul, int tahunTerbit, String namaPenerbit, String kategori) {
        this.judul = judul;
        this.tahunTerbit = tahunTerbit;
        this.namaPenerbit = namaPenerbit;
        this.kategori = kategori;
    }

    public void printDetails() {
        System.out.println("Judul Buku: " + judul);
        System.out.println("Tahun Terbit: " + tahunTerbit);
        System.out.println("Penerbit: " + namaPenerbit);
        System.out.println("Kategori: " + kategori);
    }
}

public class Main {
    public static void main(String[] args) {
        Book buku1 = new Book("BlueJ Introduction", 2012, "Waterloo", "Teknologi");
        Book buku2 = new Book("10 Resep Wajib saat Lebaran", 2018, "Gramedia", "Masakan");

        buku1.printDetails();
        System.out.println();
        buku2.printDetails();
    }
}
Class Book memiliki 4 atribut yaitu judul, tahunTerbit, namaPenerbit, dan kategori. Lalu Konstruktor Book(String judul, int tahunTerbit, String namaPenerbit, String kategori) menginisialisasi atribut-atribut tersebut saat objek Book dibuat. Metode printDetails() akan mencetak detail buku ke terminal.


3. Studi kasus Parking Ticket Machine

Buatlah kelas bernama Parking Ticket Machine yang mensimulasikan mesin tiket parkir dengan fitur berikut:

Atribut:

  • balance (jumlah nominal uang yang dimasukkan / di tap oleh pengguna).
  • ticket Price (harga tiket parkir per jam, misalnya Rp5.000).
  • 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.

import java.util.Scanner;

class ParkingTicketMachine {
    private int balance;
    private int ticketPrice;
    private int ticketTime;

    public ParkingTicketMachine(int ticketPrice, int initialBalance) {
        this.ticketPrice = ticketPrice;
        this.balance = initialBalance;
        this.ticketTime = 0;
    }

    public void insertMoney(int amount) {
        if (amount > 0) {
            balance += amount;
        } else {
            System.out.println("Jumlah uang harus positif.");
        }
    }

    public void issueTicket() {
        if (balance >= ticketPrice) {
            //Menghitung lama waktu parkir
            ticketTime = balance / ticketPrice;
            //Menghitung sisa saldo anda
            balance = balance % ticketPrice;

            System.out.println("Sisa saldo anda Rp" + balance);
        } else {
            System.out.println("Saldo tidak cukup untuk membeli tiket parkir.");
        }
    }

    public int getTimePurchased() {
        return ticketTime;
    }

    public int getBalance() {
        return balance;
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("\n----Selamat datang di Mesin Tiket Parkir!----\n\n");
        System.out.print("Silahkan masukkan saldo anda (Rp): ");
        int initialBalance = scanner.nextInt();
        System.out.print("\n");

        ParkingTicketMachine machine = new ParkingTicketMachine(5000, initialBalance);
       
        boolean issued = false;
        while (!issued) {
            machine.issueTicket();
            //Cek apakah saldo cukup untuk membeli tiket minimal 1 jam, jika tidak cukup maka
            //user disuruh untuk menginput lagi.
            if (machine.getTimePurchased() == 0) {
                System.out.print("Silahkan tambahkan saldo (Rp): ");
                int additionalAmount = scanner.nextInt();
                machine.insertMoney(additionalAmount);
            } else {
                issued = true;
                System.out.println("Anda telah mendapatkan waktu parkir selama " + machine.getTimePurchased() + " jam.");
                System.out.println("\n----Terima Kasih!----\n");
            }
        }
       
        scanner.close();
    }
}
Class ini mensimulasikan jalan program pembelian tiket parkir. Memiliki metode insertMoney untuk menghitung jumlah uang yang diinput. Metode IssueTicket menghitung lama waktu parkir berdasarkan saldo dan menghitung sisa jumlah saldo setelah membeli tiket parkir. Class main berisi alur dari program ParkingTicketMachine sendiri.

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

Main.java

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        FoodOrder order = new FoodOrder();

        MenuItem[] menuItems = {
            new MenuItem("Nasi Ayam Geprek", 15000),
            new MenuItem("Nasi Ayam Bakar", 30000),
            new MenuItem("Nasi Ayam Goreng", 27000),
            new MenuItem("Es Teh Manis", 4000),
            new MenuItem("Es Jeruk", 6000)
        };


        System.out.println("\n+++ Selamat Datang di Warung Ayam! +++\n");
        System.out.println("----Daftar Menu----");
        for (int i = 0; i < menuItems.length; i++) {
            System.out.println((i + 1) + ". " + menuItems[i].getName() + " - Rp" + menuItems[i].getPrice());
        }

        while (true) {
            System.out.print("Pilih nomor menu (0 untuk selesai): ");
            int choice = scanner.nextInt();

            if (choice == 0) {
                break;
            } else if (choice > 0 && choice <= menuItems.length) {
                MenuItem selectedItem = menuItems[choice - 1];
                order.addMenuItem(selectedItem);
                System.out.println("Anda telah menambahkan " + selectedItem.getName() + " ke pesanan Anda.");
            } else {
                System.out.println("Pilihan tidak valid.");
            }
        }
        scanner.nextLine();  // Tambahkan ini untuk membersihkan sisa newline gara gara nextInt tadi.
        order.displayOrder();
        while (true) {
            System.out.print("\nApakah pesanan sudah sesuai? (bayar/batal): ");
            String choice = scanner.nextLine();
       
            if (choice.equals("bayar")) {
                order.markAsPaid();
                break;
            } else if (choice.equals("batal")) {
                System.out.println("Pesanan dibatalkan.");
                break;
            } else {
                System.out.println("Pilihan tidak valid. Coba lagi.");
            }
        }
        scanner.close();
    }
}
Class ini berfungsi sebagai class utama yang mengatur alur dari jalan program FoodOrder.

FoodOrder.java

import java.util.ArrayList;

public class FoodOrder {
    private ArrayList<MenuItem> menuItems;
    private int totalPrice;
    private boolean isPaid;

    public FoodOrder() {
        menuItems = new ArrayList<>();
        totalPrice = 0;
        isPaid = false;
    }

    public void addMenuItem(MenuItem item) {
        menuItems.add(item);
        totalPrice += item.getPrice();
    }

    public void displayOrder() {
        System.out.println("----Pesanan Anda----");
        for (MenuItem item : menuItems) {
            System.out.println(item.getName() + " - Rp" + item.getPrice());
        }
        System.out.println("Total Harga: Rp" + totalPrice);
    }

    public void markAsPaid() {
        isPaid = true;
        System.out.println("Pesanan telah dibayar.");
    }

    public boolean isPaid() {
        return isPaid;
    }

    public int getTotalPrice() {
        return totalPrice;
    }
}
Class ini yang menyimpan menu menu item di ArrayList dan class ini juga berisi metode metode untuk mendisplay pesanan, menandai apakah pembayaran sudah dilakukan, menghitung harga, dan menambah item ke pesanan.

MenuItem.java

public class MenuItem {
    private String name;
    private int price;

    public MenuItem(String name, int price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public int getPrice() {
        return price;
    }
}

Class ini yang menginisialisasi atribut atribut lalu mereturn sesuai data atribut tersebut (constructor).
























No comments:

Post a Comment

PPB EAS - Aplikasi Member Timezone

Manajemen Keanggotaan & Loyalty Program Timezone dengan Room Database dan Jetpack Compose Aryaka Leorgi Epridaka - 5025231117 Muhammad ...