5025231061_Nadin Nabil Hafizh Ayyasy_ETSPBO

Nama : Nadin Nabil Hafizh Ayyasy
NRP : 5025231061
Git : https://github.com/Happpizh/PBO/tree/main/5025231061_ETS

No 1

Inheritance (atau pewarisan) dalam Object-Oriented Programming (OOP) adalah mekanisme di mana sebuah kelas (kelas turunan) dapat mewarisi properti dan metode dari kelas lain (kelas induk). Dengan inheritance, kita dapat membuat kelas baru yang berbasis pada kelas yang sudah ada tanpa harus menulis ulang semua kode, melainkan hanya dengan menambahkan atau mengubah perilaku yang diperlukan.

contoh :

Misalkan kita memiliki kelas induk bernama Hewan yang memiliki properti dan metode umum untuk semua hewan. Lalu, kita membuat kelas turunan seperti Kucing dan Anjing yang mewarisi properti dan metode dari Hewan, tetapi juga dapat memiliki karakteristik khusus masing-masing.

// Kelas Induk (Super Class)
class Hewan {
    String nama;
    int umur;

    void bersuara() {
        System.out.println("Hewan ini bersuara");
    }
}

// Kelas Turunan (Sub Class)
class Kucing extends Hewan {
    // Override metode bersuara
    @Override
    void bersuara() {
        System.out.println("Kucing ini mengeong");
    }
}

class Anjing extends Hewan {
    // Override metode bersuara
    @Override
    void bersuara() {
        System.out.println("Anjing ini menggonggong");
    }
}

// Contoh penggunaan:
public class Main {
    public static void main(String[] args) {
        Kucing kucing = new Kucing();
        kucing.nama = "Mimi";
        kucing.umur = 2;
        kucing.bersuara(); // Output: Kucing ini mengeong

        Anjing anjing = new Anjing();
        anjing.nama = "Bobby";
        anjing.umur = 3;
        anjing.bersuara(); // Output: Anjing ini menggonggong
    }
}

Penjelasan:
1.Kelas Hewan adalah kelas induk yang memiliki properti umum nama dan umur, serta metode bersuara().
2.Kelas Kucing dan Anjing mewarisi properti dan metode dari kelas Hewan, tetapi mereka mengubah implementasi metode bersuara() agar sesuai dengan karakteristik mereka masing-masing.
3.Ketika objek Kucing dan Anjing dibuat, mereka dapat menggunakan properti dan metode dari kelas induk, tetapi dengan perilaku yang berbeda pada metode yang di-override.




No 2
Fungsi konstruktor dalam sebuah kelas atau objek adalah untuk menginisialisasi atribut-atribut dari objek saat pertama kali dibuat. Konstruktor biasanya berupa metode khusus yang dijalankan secara otomatis ketika sebuah objek dari kelas tersebut dibuat. Konstruktor bertanggung jawab untuk memberikan nilai awal pada atribut-atribut kelas.

contoh :
public class Book {
    // Atribut kelas
    private String judul;
    private String penulis;
    private int tahunTerbit;
    private String namaPenerbit;
    private String kategori;

    // Konstruktor untuk menginisialisasi atribut
    public Book(String judul, String penulis, int tahunTerbit,
                String namaPenerbit, String kategori) {
        this.judul = judul;
        this.penulis = penulis;
        this.tahunTerbit = tahunTerbit;
        this.namaPenerbit = namaPenerbit;
        this.kategori = kategori;
    }

    // Metode untuk mencetak detail buku
    public void printDetails() {
        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: " + kategori);
    }

    // Main method untuk contoh penggunaan
    public static void main(String[] args) {
        // Membuat objek Book
        Book buku1 = new Book("Belajar Java", "Jane Doe", 2020, "Penerbit B", "Pemrograman");
       
        // Memanggil metode printDetails untuk mencetak detail buku
        buku1.printDetails();
    }
}
Penjelasan:
1. Konstruktor Book digunakan untuk menginisialisasi atribut seperti judul, penulis, tahunTerbit, namaPenerbit, dan kategori.
2. Metode printDetails() digunakan untuk mencetak detail buku.
3. Di dalam metode main(), kita membuat objek Book bernama buku1 dan memanggil metode printDetails() untuk menampilkan informasi buku di konsol.



No 3
Membuat Program Parking Ticket Machine dimana akan mengeluarkan durasi jam parkir sesuai dengan saldo uang yang ada
public class ParkingTicketMachine {
    // Atribut
    private int balance; // Saldo yang dimasukkan oleh pengguna
    private int ticketPrice; // Harga tiket per jam
    private int ticketTime; // Waktu parkir yang dibeli dalam jam

    // Konstruktor
    public ParkingTicketMachine(int ticketPrice) {
        this.ticketPrice = ticketPrice;
        this.balance = 0;
        this.ticketTime = 0;
    }

    // Metode untuk menambahkan uang ke saldo
    public void insertMoney(int amount) {
        if (amount > 0) {
            balance += amount;
            System.out.println("Uang dimasukkan: Rp" + amount);
        } else {
            System.out.println("Nominal uang tidak valid.");
        }
    }

    // Metode untuk mengeluarkan tiket jika saldo mencukupi
    public void issueTicket() {
        if (balance >= ticketPrice) {
            ticketTime = balance / ticketPrice; // Menghitung berapa jam parkir yang bisa dibeli
            balance = balance % ticketPrice; // Sisakan sisa uang jika ada
            System.out.println("Tiket dikeluarkan untuk " + ticketTime + " jam.");
        } else {
            System.out.println("Saldo tidak mencukupi untuk membeli tiket.");
        }
    }

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

    // Metode untuk mendapatkan saldo saat ini
    public int getBalance() {
        return balance;
    }

    // Main method
    public static void main(String[] args) {
        ParkingTicketMachine machine = new ParkingTicketMachine(5000); // Harga tiket Rp5000 per jam
       
        machine.insertMoney(10000); // Masukkan uang Rp10.000
        machine.issueTicket(); // Keluarkan tiket berdasarkan saldo
       
        int timePurchased = machine.getTimePurchased(); // Ambil waktu parkir yang dibeli
        System.out.println("Waktu parkir yang dibeli: " + timePurchased + " jam.");
    }
}

Penjelasan:
1. Konstruktor: Menginisialisasi harga tiket dan saldo awal.
2. Metode insertMoney(int amount): Menambah saldo berdasarkan jumlah uang yang dimasukkan.
3. Metode issueTicket(): Mengeluarkan tiket jika saldo cukup untuk minimal 1 jam parkir.
4. Metode getTimePurchased(): Mengembalikan jumlah jam parkir yang dibeli.
5. Main Method: Menjalankan simulasi mesin tiket parkir dengan contoh penggunaan.

Hasil :





No 4

A. membuat gambar Class Diagramnya




Penjelasan :
1. MenuItem: Merepresentasikan setiap item menu dengan atribut name dan price.
2. FoodOrder: Menyimpan daftar MenuItem dan mengelola pesanan secara keseluruhan.

B. membuat Implementasi kode 

MenuItem.java
public class MenuItem {
    // Atribut
    private String name; // Nama item menu
    private double price; // Harga item menu

    // Konstruktor
    public MenuItem(String name, double price) {
        this.name = name;
        this.price = price;
    }

    // Metode untuk mendapatkan nama item
    public String getName() {
        return name;
    }

    // Metode untuk mendapatkan harga item
    public double getPrice() {
        return price;
    }
}


FoodOrder.java
import java.util.ArrayList;

public class FoodOrder {
    // Atribut
    private ArrayList<MenuItem> menuItems; // Daftar menu yang dipesan
    private double totalPrice; // Total harga pesanan
    private boolean isPaid; // Status pembayaran

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

    // Metode untuk menambahkan item ke pesanan
    public void addItem(MenuItem item) {
        menuItems.add(item);
        totalPrice += item.getPrice();
        System.out.println(item.getName() + " ditambahkan dengan harga Rp" + item.getPrice());
    }

    // Metode untuk menghapus item dari pesanan
    public void removeItem(MenuItem item) {
        if (menuItems.contains(item)) {
            menuItems.remove(item);
            totalPrice -= item.getPrice();
            System.out.println(item.getName() + " dihapus dengan harga Rp" + item.getPrice());
        } else {
            System.out.println(item.getName() + " tidak ditemukan dalam pesanan.");
        }
    }

    // Metode untuk mendapatkan total harga pesanan
    public double getTotalPrice() {
        return totalPrice;
    }

    // Metode untuk menandai pesanan sebagai sudah dibayar
    public void markAsPaid() {
        isPaid = true;
        System.out.println("Pesanan telah dibayar.");
    }

    // Metode untuk mengecek apakah pesanan sudah dibayar
    public boolean isOrderPaid() {
        return isPaid;
    }

    // Metode untuk menampilkan detail pesanan
    public void showOrderDetails() {
        System.out.println("Pesanan:");
        for (MenuItem item : menuItems) {
            System.out.println("- " + item.getName() + ": Rp" + item.getPrice());
        }
        System.out.println("Total harga: Rp" + totalPrice);
        System.out.println("Status dibayar: " + (isPaid ? "Sudah dibayar" : "Belum dibayar"));
    }

    // Main method untuk testing
    public static void main(String[] args) {
        // Membuat beberapa item menu
        MenuItem nasiGoreng = new MenuItem("Nasi Goreng", 25000);
        MenuItem esTeh = new MenuItem("Es Teh", 5000);
        MenuItem ayamBakar = new MenuItem("Ayam Bakar", 30000);

        // Membuat pesanan
        FoodOrder order = new FoodOrder();

        // Menambahkan item ke pesanan
        order.addItem(nasiGoreng);
        order.addItem(esTeh);
        order.addItem(ayamBakar);

        // Menampilkan detail pesanan
        order.showOrderDetails();

        // Menghapus salah satu item dari pesanan
        order.removeItem(esTeh);

        // Menampilkan total harga setelah penghapusan
        System.out.println("Total harga setelah penghapusan: Rp" + order.getTotalPrice());

        // Menandai pesanan sebagai sudah dibayar
        order.markAsPaid();

        // Menampilkan status pembayaran
        System.out.println("Status pembayaran: " + (order.isOrderPaid() ? "Sudah dibayar" : "Belum dibayar"));
    }
}

Penjelasan Kode:
1. Kelas MenuItem:
Menyimpan informasi tentang nama dan harga makanan.
Metode getName() dan getPrice() digunakan untuk mendapatkan data item.

2. Kelas FoodOrder:
Memiliki daftar menuItems yang sekarang berupa ArrayList<MenuItem>.
Semua metode seperti addItem(), removeItem(), dan showOrderDetails() sekarang berinteraksi dengan objek MenuItem.
Metode showOrderDetails() akan menampilkan rincian pesanan lengkap dengan nama makanan dan harganya.


Hasil dijalankan
 

Comments

Popular posts from this blog

Otomata Church Turing oleh Nadin Nabil Hafizh Ayyasy