ETS PBO G

Nama: Valensio Arvin Putra Setiawan
NRP: 5025231273
Kelas: PBO G

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

  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.

  3. Studi kasus Parking Ticket Machine

    Buatlah kelas bernama ParkingTicketMachine yang mensimulasikan mesin tiket parkir dengan fitur berikut:

    • Atribut:
      • balance (jumlah nominal uang yang dimasukkan/ditap oleh pengguna).
      • ticketPrice (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.
  4. Buatlah Desain kelas untuk aplikasi FoodOrder yang menyimpan data pemesanan makanan di sebuah restoran. Setiap pesanan memiliki atribut menuItems (daftar menu), totalPrice, dan isPaid. Implementasikan perilaku berikut: (Gunakan library java.util, ArrayList)

    • a. Gambarkan Class Diagramnya.
    • b. Implementasikan kodenya.
Jawaban:

1. Inheritance atau pewarisan dalam OOP (Object-Oriented Programming) adalah konsep di mana suatu kelas (child class atau subclass) dapat mewarisi sifat atau perilaku (atribut dan metode) dari kelas lain (parent class atau superclass). Ini memungkinkan penggunaan kembali kode serta mendukung konsep modularitas dan hierarki dalam pemrograman. Contoh Penerapan:

// Kelas induk (superclass)
class Animal {
    public void eat() {
        System.out.println("Animal is eating");
    }
}

// Kelas turunan (subclass)
class Dog extends Animal {
    public void bark() {
        System.out.println("Dog is barking");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.eat();  // Memanggil metode dari kelas induk
        dog.bark(); // Memanggil metode dari kelas turunan
    }
}

Penjelasan:

  • Kelas Animal adalah kelas induk yang memiliki metode eat().
  • Kelas Dog adalah kelas turunan yang mewarisi metode eat() dari Animal dan juga menambahkan metode baru, yaitu bark().
  • Di dalam main(), objek Dog dapat menggunakan metode eat() yang diwarisi dari Animal.

2. Konstruktor adalah metode khusus dalam sebuah kelas yang dipanggil secara otomatis ketika objek dari kelas tersebut dibuat. Fungsinya adalah untuk menginisialisasi atribut atau variabel anggota dari objek tersebut. Konstruktor biasanya memiliki nama yang sama dengan nama kelas dan tidak memiliki tipe kembalian (return type). Kode:
class Book {
    // Atribut
    private String title;
    private String author;
    private int year;
    private String publisher;
    private String category;

    // Konstruktor untuk menginisialisasi atribut
    public Book(String title, String author, int year, String publisher, String category) {
        this.title = title;
        this.author = author;
        this.year = year;
        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: " + year);
        System.out.println("Penerbit: " + publisher);
        System.out.println("Kategori: " + category);
    }
   
    // Main method for testing
    public static void main(String[] args) {
        // Membuat objek buku menggunakan konstruktor
        Book book = new Book("Pemrograman Java", "John Doe", 2020, "Penerbit A", "Teknologi");
        // Mencetak detail buku
        book.printDetails();
    }
}

Penjelasan:

  • Kelas Book memiliki atribut seperti title, author, year, publisher, dan category.
  • Konstruktor digunakan untuk menginisialisasi nilai atribut-atribut tersebut saat objek Book dibuat.
  • Metode printDetails() digunakan untuk menampilkan detail informasi buku.

3.  Kode Studi Kasus Parking Ticket Machine:
public class ParkingTicketMachine {
    // Atribut
    private double balance;
    private double ticketPrice;
    private int ticketTime;

    // Konstruktor
    public ParkingTicketMachine(double ticketPrice) {
        this.ticketPrice = ticketPrice; // harga per jam parkir
        this.balance = 0;
        this.ticketTime = 0;
    }

    // Metode untuk menambahkan uang
    public void insertMoney(double amount) {
        balance += amount;
    }

    // Metode untuk mengeluarkan tiket parkir
    public void issueTicket() {
        if (balance >= ticketPrice) {
            ticketTime = (int)(balance / ticketPrice); // Mengatur waktu parkir sesuai saldo
            balance -= ticketPrice * ticketTime; // Mengurangi saldo
            System.out.println("Tiket dikeluarkan: " + ticketTime + " jam.");
        } else {
            System.out.println("Saldo tidak cukup untuk mengeluarkan tiket.");
        }
    }

    // Metode untuk mengembalikan jumlah waktu parkir
    public int getTimePurchased() {
        return ticketTime;
    }

    // Metode untuk mencetak detail
    public void printDetails() {
        System.out.println("Saldo saat ini: Rp " + balance);
        System.out.println("Harga tiket parkir per jam: Rp " + ticketPrice);
        System.out.println("Waktu parkir yang telah dibeli: " + ticketTime + " jam");
    }
   
    // Main method for testing
    public static void main(String[] args) {
        ParkingTicketMachine machine = new ParkingTicketMachine(5000); // Harga per jam Rp 5000
        machine.insertMoney(15000); // Memasukkan uang Rp 15000
        machine.issueTicket(); // Mengeluarkan tiket
        machine.printDetails(); // Mencetak detail
    }
}


4. 
A. Class Diagram FoodOrder

B. Implementasi Kode:

import java.util.ArrayList;

class FoodOrder {
    // Atribut
    private ArrayList<String> menuItems;
    private double totalPrice;
    private boolean isPaid;

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

    // Metode untuk menambahkan item menu
    public void addMenuItem(String itemName, double itemPrice) {
        menuItems.add(itemName);
        totalPrice += itemPrice;
    }

    // Metode untuk mengatur status pembayaran
    public void pay() {
        isPaid = true;
    }

    // Metode untuk mencetak detail pesanan
    public void printOrderDetails() {
        System.out.println("Pesanan: " + menuItems);
        System.out.println("Total Harga: Rp " + totalPrice);
        System.out.println("Status Pembayaran: " + (isPaid ? "Sudah Dibayar" : "Belum Dibayar"));
    }

    // Main method for testing
    public static void main(String[] args) {
        FoodOrder order = new FoodOrder();
        order.addMenuItem("Nasi Goreng", 25000);
        order.addMenuItem("Es Teh", 5000);
        order.printOrderDetails(); // Cetak detail pesanan
        order.pay(); // Pembayaran
        order.printOrderDetails(); // Cetak detail setelah pembayaran
    }
}



Comments

Popular posts from this blog

Implementasi Rental Kendaraan

Latihan Ticket Machine