ETS PBO - G

Nama : Rafaela Shyra Ashma' Ramadhani

NRP : 5025231217

Kelas : PBO - G


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

Jawaban :

Dalam OOP (Object-Oriented Programming), inheritance atau pewarisan adalah konsep di mana sebuah kelas baru (disebut subclass atau kelas turunan) mewarisi atribut dan metode dari kelas yang sudah ada (disebut superclass atau kelas induk). Dengan pewarisan, kita dapat membuat kelas yang lebih khusus berdasarkan kelas yang lebih umum, tanpa harus menulis ulang kode yang sama.

Keuntungan dari Pewarisan:
1. Reusability: Kode yang sudah ada dapat digunakan kembali.
2. Extensibility: Kelas turunan dapat menambahkan fitur baru ke kelas induk.
3. Polimorfisme: Kelas turunan dapat mengubah atau menimpa metode yang diwarisi untuk memberikan perilaku khusus.

Contoh Pewarisan dalam Java

```java
// Kelas Induk
class Hewan {
    String nama;
    int umur;

    // Konstruktor Kelas Induk
    public Hewan(String nama, int umur) {
        this.nama = nama;
        this.umur = umur;
    }

    // Metode yang dapat diwariskan
    public void bergerak() {
        System.out.println(nama + " sedang bergerak.");
    }

    public void info() {
        System.out.println("Nama: " + nama + ", Umur: " + umur + " tahun.");
    }
}

// Kelas Turunan dari Hewan
class Anjing extends Hewan {
    String jenis;

    // Konstruktor Kelas Turunan
    public Anjing(String nama, int umur, String jenis) {
        // Memanggil konstruktor dari kelas induk
        super(nama, umur);
        this.jenis = jenis;
    }

    // Override metode bergerak
    @Override
    public void bergerak() {
        System.out.println(nama + " sedang berlari.");
    }

    // Menambah perilaku tambahan di info
    @Override
    public void info() {
        super.info();
        System.out.println("Jenis: " + jenis);
    }
}

// Kelas Turunan dari Hewan
class Kucing extends Hewan {
    String warnaBulu;

    // Konstruktor Kelas Turunan
    public Kucing(String nama, int umur, String warnaBulu) {
        // Memanggil konstruktor dari kelas induk
        super(nama, umur);
        this.warnaBulu = warnaBulu;
    }

    // Override metode bergerak
    @Override
    public void bergerak() {
        System.out.println(nama + " sedang melompat.");
    }

    // Menambah perilaku tambahan di info
    @Override
    public void info() {
        super.info();
        System.out.println("Warna Bulu: " + warnaBulu);
    }
}

// Contoh Penggunaan Pewarisan
public class Main {
    public static void main(String[] args) {
        Hewan hewan1 = new Hewan("Makhluk A", 2);
        hewan1.bergerak();   // Output: Makhluk A sedang bergerak.
        hewan1.info();       // Output: Nama: Makhluk A, Umur: 2 tahun.

        Anjing anjing1 = new Anjing("Max", 3, "Golden Retriever");
        anjing1.bergerak();  // Output: Max sedang berlari.
        anjing1.info();      // Output: Nama: Max, Umur: 3 tahun. Jenis: Golden Retriever.

        Kucing kucing1 = new Kucing("Milo", 1, "Putih");
        kucing1.bergerak();  // Output: Milo sedang melompat.
        kucing1.info();      // Output: Nama: Milo, Umur: 1 tahun. Warna Bulu: Putih.
    }
}
```
Penjelasan:
1. Kelas Hewan adalah kelas induk yang memiliki atribut `nama` dan `umur`, serta metode `bergerak` dan `info`.
2. Kelas Anjing dan Kelas Kucing adalah kelas turunan yang mewarisi atribut dan metode dari kelas Hewan, tetapi mereka juga menambahkan atribut dan metode mereka sendiri, seperti `jenis` untuk Anjing dan `warnaBulu` untuk Kucing.
3. Keduanya menggunakan keyword `super()` untuk memanggil constructor atau metode dari kelas induk.
4. Kelas turunan dapat meng-override metode dari kelas induk, seperti `bergerak()` dan `info()`.

Dengan konsep inheritance ini, kita bisa membuat kode yang lebih modular dan terstruktur tanpa duplikasi.

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 : 

Fungsi Konstruktor dalam Sebuah Kelas atau Objek
Konstruktor berfungsi untuk menginisialisasi atribut-atribut dari sebuah objek ketika objek tersebut dibuat. Dengan konstruktor, kita dapat memberikan nilai awal (initial state) pada atribut dari sebuah kelas tanpa harus memanggil metode tambahan setelah pembuatan objek. Konstruktor dipanggil secara otomatis saat objek dibuat, dan biasanya digunakan untuk memastikan objek siap digunakan dengan nilai-nilai atribut yang diharapkan.

Implementasi Kelas `Book` dengan Konstruktor dan Metode `printDetails()`
Berikut adalah contoh kelas `Book` yang memiliki atribut-atribut seperti judul, penulis, tahun terbit, penerbit, dan kategori buku, serta konstruktor dan metode `printDetails()`.

Kode dan penjelasannya : Github

Berikut ini adalah contoh kode Java untuk kelas `Book` dan `Main`:

Kelas Book

```java
public class Book {
    // Atribut kelas Book
    private String judul;
    private String penulis;
    private int tahunTerbit;
    private String namaPenerbit;
    private String kategoriBuku;

    // Konstruktor untuk menginisialisasi atribut
    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("Judul: " + judul);
        System.out.println("Penulis: " + penulis);
        System.out.println("Tahun Terbit: " + tahunTerbit);
        System.out.println("Nama Penerbit: " + namaPenerbit);
        System.out.println("Kategori Buku: " + kategoriBuku);
    }
}
```

Kelas Main

```java
public class Main {
    public static void main(String[] args) {
        // Membuat objek Book menggunakan konstruktor
        Book buku1 = new Book("Sang Pemimpi", "Andrea Hirata", 2006, "Bentang Pustaka", "Novel");

        // Memanggil metode untuk mencetak detail buku
        buku1.printDetails();
    }
}
```

Output yang Diharapkan:
```
Judul: Sang Pemimpi
Penulis: Andrea Hirata
Tahun Terbit: 2006
Nama Penerbit: Bentang Pustaka
Kategori Buku: Novel

```

Diagram class :


 

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 Gumlah 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 :  

Kode dan penjelasannya : Github

Output :





Diagram Class :



4.  Buatlah Desain kelas untuk aplikasi FoodOrder yang menyimpan data pemesanan makanan dì 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

Jawaban : 

a. Diagram class

 



b. Implementasi kode

Kode dan penjelasannya : Github

Output : 









Komentar

Postingan populer dari blog ini

Web Pendaftaran Siswa Baru - CRUD dengan PHP dan MySQL

Final Project PBO - G

Tech Support System Menggunakan Java