Evaluasi Tengah Semester

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

Postingan populer dari blog ini

The Busy Beaver Problem

Tugas 15 - Final Project

Church-Turing Thesis dan Kaitannya dengan Bahasa Pemrograman