Evaluasi Tengah Semester

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




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

Postingan populer dari blog ini

Tugas 14 - Pemrogramman GUI

Tugas 15 Final Project