> ## Documentation Index
> Fetch the complete documentation index at: https://v1-learn.neoartd.my.id/llms.txt
> Use this file to discover all available pages before exploring further.

# UTS B

# Soal 1 - Sekolah

<Tabs>
  <Tab title="Question">
    Di sebuah sekolah, terdapat **Siswa** dan **Guru**. Setiap siswa memiliki beberapa informasi pribadi seperti **nama**, **nomor induk siswa (NIS)**, dan **kelas** tempat mereka belajar. Sedangkan setiap guru memiliki beberapa informasi terkait identitas mereka, seperti **nama**, **ID guru**, dan **mata pelajaran yang diajarkan**.

    Tugas Anda adalah mendesain dua class, **Siswa** dan **Guru**, serta mengatur objek-objek tersebut di dalam class **MainSekolah**

    <AccordionGroup>
      <Accordion title="Daftar Class">
        <Steps>
          <Step title="Class Siswa">
            * Properti:
              * `nama` (String): Nama lengkap siswa.
              * `nis` (String): Nomor Induk Siswa.
              * `kelas` (String): Kelas tempat siswa belajar (misalnya "10A", "12B").
          </Step>

          <Step title="Class Guru">
            * Properti:
              * `nama` (String): Nama lengkap guru.
              * `idGuru` (String): ID unik untuk guru.
              * `mataPelajaran` (String): Mata pelajaran yang diajarkan oleh guru.
          </Step>
        </Steps>
      </Accordion>

      <Accordion title="Deskripsi Main Class: MainSekolah">
        Buatlah sebuah **Main Class** bernama `MainSekolah` yang akan mendemonstrasikan pembuatan dan penggunaan objek dari class **Siswa** dan **Guru**. Ikuti instruksi berikut:

        <Steps>
          <Step title="Membuat Objek Siswa">
            * Buat objek pertama dari class `Siswa` dan ubah properti sebagai berikut:
              * **Nama Siswa**: "Budi Santoso"
              * **NIS**: "S12345"
              * **Kelas**: "10A"
            * Buat objek kedua dari class `Siswa` dan ubah properti sebagai berikut:
              * **Nama Siswa**: "Ani Wijaya"
              * **NIS**: "S67890"
              * **Kelas**: "12B"
          </Step>

          <Step title="Membuat Objek Guru">
            * Buat objek pertama dari class `Guru` dan ubah properti sebagai berikut:
              * **Nama Guru**: "Pak Joko"
              * **ID Guru**: "G123"
              * **Mata Pelajaran**: "Matematika"
            * Buat objek kedua dari class `Guru` dan ubah properti sebagai berikut:
              * **Nama Guru**: "Bu Siti"
              * **ID Guru**: "G456"
              * **Mata Pelajaran**: "Bahasa Indonesia"
          </Step>

          <Step title="Menampilkan Informasi">
            * Setelah objek-objek tersebut dibuat dan propertinya diatur, tampilkan informasi dari masing-masing objek ke layar dengan format berikut:
              * Untuk setiap objek siswa, tampilkan:
                `Siswa [Nomor]: Nama: [nama], NIS: [nis], Kelas: [kelas]`
              * Untuk setiap objek guru, tampilkan:
                `Guru [Nomor]: Nama: [nama], ID Guru: [idGuru], Mata Pelajaran: [mataPelajaran]`
          </Step>
        </Steps>
      </Accordion>
    </AccordionGroup>

    ## Contoh Output yang Diharapkan:

    ```bash theme={null}
    Siswa 1: Nama: Budi Santoso, NIS: S12345, Kelas: 10A
    Siswa 2: Nama: Ani Wijaya, NIS: S67890, Kelas: 12B
    Guru 1: Nama: Pak Joko, ID Guru: G123, Mata Pelajaran: Matematika
    Guru 2: Nama: Bu Siti, ID Guru: G456, Mata Pelajaran: Bahasa Indonesia
    ```
  </Tab>

  <Tab title="Answer">
    <CodeGroup>
      ```java Siswa.java theme={null}
      public class Siswa {
          public String nama;
          public String nis;
          public String kelas;
      }
      ```

      ```java Guru.java theme={null}
      public class Guru {
          public String nama;
          public String idGuru;
          public String mataPelajaran;
      }
      ```

      ```java MainSekolah.java theme={null}
      public class MainSekolah {
          public static void main(String[] args) {
              Siswa siswa1 = new Siswa();
              siswa1.nama = "Budi Santoso";
              siswa1.nis = "S12345";
              siswa1.kelas = "10A";

              Siswa siswa2 = new Siswa();
              siswa2.nama = "Ani Wijaya";
              siswa2.nis = "S67890";
              siswa2.kelas = "12B";

              Guru guru1 = new Guru();
              guru1.nama = "Pak Joko";
              guru1.idGuru = "G123";
              guru1.mataPelajaran = "Matematika";

              Guru guru2 = new Guru();
              guru2.nama = "Bu Siti";
              guru2.idGuru = "G456";
              guru2.mataPelajaran = "Bahasa Indonesia";

              System.out.printf("Siswa 1: Nama: %s, NIS: %s, Kelas: %s\n", siswa1.nama, siswa1.nis, siswa1.kelas);
              System.out.printf("Siswa 2: Nama: %s, NIS: %s, Kelas: %s\n", siswa2.nama, siswa2.nis, siswa2.kelas);
              System.out.printf("Guru 1: Nama: %s, ID Guru: %s, Mata Pelajaran: %s\n", guru1.nama, guru1.idGuru, guru1.mataPelajaran);
              System.out.printf("Guru 2: Nama: %s, ID Guru: %s, Mata Pelajaran: %s\n", guru2.nama, guru2.idGuru, guru2.mataPelajaran);
          }
      }
      ```
    </CodeGroup>
  </Tab>
</Tabs>

# Soal 2 - Perpustakaan

<Tabs>
  <Tab title="Question">
    Di sebuah perpustakaan, terdapat buku yang memiliki informasi seperti **judul**, **penulis**, dan **harga**. Perpustakaan ingin menampilkan informasi buku serta menghitung durasi peminjaman berdasarkan jumlah hari.

    Tugas Anda adalah membuat class untuk buku tersebut, menambahkan constructor untuk inisialisasi objek, serta method untuk menampilkan informasi buku dan menghitung biaya peminjaman berdasarkan jumlah hari pinjam.

    <AccordionGroup>
      <Accordion title="Daftar Class">
        <Steps>
          <Step title="Class Buku">
            * Properti:
              * `judul` (String): Judul buku (misalnya "Harry Potter").
              * `penulis` (String): Penulis buku (misalnya "J.K. Rowling").
              * `harga` (double): Harga buku dalam satuan IDR (misalnya 100000).
            * Constructor:
              * Constructor untuk menginisialisasi semua properti objek (judul, penulis, harga).
            * Method:
              * `tampilkanInformasi()`: Menampilkan informasi lengkap tentang buku.
              * `hitungBiayaPeminjaman(int jumlahHari)`: Menghitung biaya peminjaman buku per hari berdasarkan harga buku (biaya per hari adalah 5% dari harga buku).
          </Step>
        </Steps>
      </Accordion>

      <Accordion title="Deskripsi Main Class: MainPerpustakaan">
        Buatlah sebuah **Main Class** bernama **MainPerpustakaan** yang akan mendemonstrasikan pembuatan objek dan penggunaan method dari class **BukuFiksi** dan **BukuNonFiksi**. Ikuti instruksi berikut:

        <Steps>
          <Step title="Membuat Objek Buku">
            * Buat objek pertama dari class `Buku` dengan informasi berikut:
              * **Judul**: "Harry Potter"
              * **Penulis**: "J.K. Rowling"
              * **Harga**: 150000
            * Buat objek kedua dari class `Buku` dengan informasi berikut:
              * **Judul**: "The Hobbit"
              * **Penulis**: "J.R.R. Tolkien"
              * **Harga**: 120000
          </Step>

          <Step title="Menggunakan Method">
            * Tampilkan informasi tentang setiap buku menggunakan method `tampilkanInformasi()`.
            * Hitung dan tampilkan biaya peminjaman untuk setiap buku berdasarkan jumlah hari peminjaman (misalnya pinjam selama 7 hari) menggunakan method `hitungBiayaPeminjaman(int jumlahHari)`
          </Step>
        </Steps>
      </Accordion>
    </AccordionGroup>

    ## Contoh Output yang Diharapkan:

    ```bash theme={null}
    Buku 1: Judul: Harry Potter, Penulis: J.K. Rowling, Harga: 150000
    Biaya peminjaman untuk 7 hari: 52500.0

    Buku 2: Judul: The Hobbit, Penulis: J.R.R. Tolkien, Harga: 120000
    Biaya peminjaman untuk 7 hari: 42000.0
    ```
  </Tab>

  <Tab title="Answer">
    <CodeGroup>
      ```java Buku.java theme={null}
      public class Buku {
          public String judul;
          public String penulis;
          public double harga;

          public Buku(String judul, String penulis, double harga) {
              this.judul = judul;
              this.penulis = penulis;
              this.harga = harga;
          }

          public void tampilkanInformasi() {
              System.out.printf("Judul: %s, Penulis: %s, Harga: %d\n", judul, penulis, (int) harga);
          }

          public void hitungBiayaPeminjaman(int jumlahHari) {
              double biayaPeminjaman = harga * 0.05 * jumlahHari;
              System.out.printf("Biaya peminjaman untuk %d hari: %.1f\n", jumlahHari, biayaPeminjaman);
          }
      }
      ```

      ```java MainPerpustakaan.java theme={null}
      public class MainPerpustakaan {
          public static void main(String[] args) {
              Buku buku1 = new Buku("Harry Potter", "J.K. Rowling", 150000);
              Buku buku2 = new Buku("The Lord of the Rings", "J.R.R. Tolkien", 120000);

              buku1.tampilkanInformasi();
              buku1.hitungBiayaPeminjaman(7);

              System.out.println();

              buku2.tampilkanInformasi();
              buku2.hitungBiayaPeminjaman(7);
          }
      }
      ```
    </CodeGroup>
  </Tab>
</Tabs>

# Soal 3 - Toko Online

<Tabs>
  <Tab title="Question">
    Di sebuah toko online, setiap produk yang dijual memiliki informasi dasar seperti **nama produk**, **harga**, dan **stok** yang tersedia. Sistem toko harus mampu mengelola produk dengan mengubah harga, menambah atau mengurangi stok, dan menampilkan informasi produk.

    1. Nama Produk: Nama produk yang dijual di toko.
    2. Harga Produk: Harga dari setiap produk yang dijual.
    3. Stok Produk: Jumlah stok yang tersedia untuk produk tersebut.

    Anda diminta untuk membuat class **Produk** dengan menggunakan **access modifiers** untuk melindungi data produk, dan menambahkan **getter** dan **setter** untuk mengakses dan mengubah informasi produk. Selain itu, sistem juga membutuhkan beberapa **method** untuk menghitung total harga berdasarkan jumlah produk yang dibeli serta menambah atau mengurangi stok produk.

    <AccordionGroup>
      <Accordion title="Daftar Class">
        <Steps>
          <Step title="Class Produk">
            * Properti:
              * `namaProduk` (String): Nama produk (misalnya ”Laptop”, ”Headphone”).
              * `harga` (double): Harga produk dalam rupiah (misalnya 1000000).
              * `stok` (int): Jumlah stok yang tersedia untuk produk
            * Constructor:
              * Constructor untuk menginisialisasi namaProduk, harga, dan stok saat objek dibuat.
            * Method:
              * `getNamaProduk()`: Menampilkan nama produk (getter).
              * `setNamaProduk(String namaProduk)`: Mengubah nama produk (setter).
              * `getHarga()`: Menampilkan harga produk (getter).
              * `setHarga(double harga)`: Mengubah harga produk (setter).
              * `getStok()`: Menampilkan jumlah stok produk (getter).
              * `setStok(int stok)`: Mengubah jumlah stok produk (setter).
              * `hitungTotalHarga(int jumlahProduk)`: Menghitung total harga untuk pembelian sejumlah produk berdasarkan harga satuan produk.
              * `tambahStok(int jumlah)`: Menambah jumlah stok produk.
              * `kurangiStok(int jumlah)`: Mengurangi jumlah stok produk jika jumlah stok yang tersedia cukup, jika tidak tampilkan pesan error
          </Step>
        </Steps>
      </Accordion>

      <Accordion title="Deskripsi Main Class: MainTokoOnline">
        Buatlah sebuah **Main Class** bernama `MainTokoOnline` yang akan mendemonstrasikan pembuatan objek **Produk** dan penggunaan method getter, setter, serta transaksi pembelian produk. Ikuti instruksi berikut:

        <Steps>
          <Step title="Membuat Objek Produk">
            * Buat objek pertama dari class Produk dengan informasi berikut:
              * **Nama Produk**: ”Laptop”
              * **Harga**: 1000000
              * **Stok**: 50
            * Buat objek kedua dari class Produk dengan informasi berikut:
              * **Nama Produk**: ”Headphone”
              * **Harga**: 200000
              * **Stok**: 100
          </Step>

          <Step title="Menggunakan Getter dan Setter">
            * Tampilkan **nama produk**, **harga**, dan **stok** untuk kedua produk menggunakan method getter.
            * Ubah **nama produk** untuk produk pertama menjadi ”Gaming Laptop” menggunakan method `setNamaProduk()`.
            * Ubah **harga** untuk produk kedua menjadi 180000 menggunakan method `setHarga()`.
            * Tampilkan kembali **nama produk**, **harga**, dan **stok** setelah perubahan.
          </Step>

          <Step title="Transaksi Pembelian dan Stok">
            * Hitung dan tampilkan **total harga** untuk membeli 3 produk ”Gaming Laptop” menggunakan method `hitungTotalHarga()`.
            * Tambahkan **stok** untuk produk pertama sebanyak 20 menggunakan method `tambahStok()`.
            * Kurangi **stok** untuk produk kedua sebanyak 5 menggunakan method `kurangiStok()`.
            * Tampilkan kembali **stok** setelah dilakukan penambahan dan pengurangan.
          </Step>
        </Steps>
      </Accordion>
    </AccordionGroup>

    ## Contoh Output yang Diharapkan:

    ```bash theme={null}
    Produk 1: Nama Produk: Laptop, Harga: 1000000, Stok: 50
    Produk 2: Nama Produk: Headphone, Harga: 200000, Stok: 100

    Setelah update nama dan harga:
    Produk 1: Nama Produk: Gaming Laptop, Harga: 1000000, Stok: 50
    Produk 2: Nama Produk: Headphone, Harga: 180000, Stok: 100

    Total harga untuk 3 unit Gaming Laptop: 3000000

    Setelah transaksi stok:
    Produk 1: Nama Produk: Gaming Laptop, Harga: 1000000, Stok: 70
    Produk 2: Nama Produk: Headphone, Harga: 180000, Stok: 95
    ```
  </Tab>

  <Tab title="Answer">
    <CodeGroup>
      ```java Produk.java theme={null}
      public class Produk {
          private String namaProduk;
          private double harga;
          private int stok;

          public Produk(String namaProduk, double harga, int stok) {
              this.namaProduk = namaProduk;
              this.harga = harga;
              this.stok = stok;
          }

          public String getNamaProduk() {
              return namaProduk;
          }

          public void setNamaProduk(String namaProduk) {
              this.namaProduk = namaProduk;
          }

          public double getHarga() {
              return harga;
          }

          public void setHarga(double harga) {
              this.harga = harga;
          }

          public int getStok() {
              return stok;
          }

          public void setStok(int stok) {
              this.stok = stok;
          }

          public double hitungTotalHarga(int jumlahProduk) {
              return harga * jumlahProduk;
          }

          public void tambahStok(int jumlah) {
              stok += jumlah;
          }

          public void kurangiStok(int jumlah) {
              if (stok >= jumlah) {
                  stok -= jumlah;
              } else {
                  System.out.println("Stok tidak cukup!");
              }
          }
      }
      ```

      ```java MainTokoOnline.java theme={null}
      public class MainTokoOnline {
          public static void main(String[] args) {
              Produk produk1 = new Produk("Laptop", 1000000, 50);
              Produk produk2 = new Produk("Headphone", 200000, 100);

              System.out.printf("Produk 1: Nama Produk: %s, Harga: %d, Stok: %d\n", produk1.getNamaProduk(), (int) produk1.getHarga(), produk1.getStok());
              System.out.printf("Produk 2: Nama Produk: %s, Harga: %d, Stok: %d\n", produk2.getNamaProduk(), (int) produk2.getHarga(), produk2.getStok());

              produk1.setNamaProduk("Gaming Laptop");
              produk2.setHarga(180000);

              System.out.println("\nSetelah update nama dan harga:");
              System.out.printf("Produk 1: Nama Produk: %s, Harga: %d, Stok: %d\n", produk1.getNamaProduk(), (int) produk1.getHarga(), produk1.getStok());
              System.out.printf("Produk 2: Nama Produk: %s, Harga: %d, Stok: %d\n", produk2.getNamaProduk(), (int) produk2.getHarga(), produk2.getStok());

              System.out.println("\nTotal harga untuk 3 unit Gaming Laptop: " + (int) produk1.hitungTotalHarga(3));

              produk1.tambahStok(20);
              produk2.kurangiStok(5);

              System.out.println("\nSetelah transaksi stok:");
              System.out.printf("Produk 1: Nama Produk: %s, Harga: %d, Stok: %d\n", produk1.getNamaProduk(), (int) produk1.getHarga(), produk1.getStok());
              System.out.printf("Produk 2: Nama Produk: %s, Harga: %d, Stok: %d\n", produk2.getNamaProduk(), (int) produk2.getHarga(), produk2.getStok());
          }
      }
      ```
    </CodeGroup>
  </Tab>
</Tabs>

# Soal 4 - Sistem Manajemen Perpustakaan

<Tabs>
  <Tab title="Question">
    Di sebuah perpustakaan, terdapat banyak koleksi buku yang perlu dikelola, di antaranya adalah **informasi buku**, **pengarang**, dan **kategori buku**. Setiap buku memiliki informasi seperti **judul**, **tahun terbit**, dan **status ketersediaan** (apakah buku tersedia atau dipinjam). Setiap pengarang dapat memiliki beberapa buku yang diterbitkan, dan setiap buku masuk dalam satu kategori tertentu (misalnya Fiksi, Non-Fiksi, Teknologi, dll.).

    Anda diminta untuk membuat sistem yang mengelola **Buku**, **Pengarang**, dan **Kategori Buku** dengan menggunakan konsep **Object Composition**, di mana setiap **Buku** akan memiliki referensi ke objek **Pengarang** dan objek **Kategori Buku**. Setiap **Pengarang** dapat memiliki banyak **Buku**, dan setiap **Kategori Buku** dapat berisi banyak **Buku**.

    <AccordionGroup>
      <Accordion title="Daftar Class">
        <Steps>
          <Step title="Class Pengarang">
            * Properti:
              * `namaPengarang` (String): Nama pengarang buku (misalnya "J.K. Rowling”).
              * `tahunLahir` (int): Tahun lahir pengarang (misalnya 1965).
              * `daftarBuku` (List): Daftar buku yang ditulis oleh pengarang ini.
            * Constructor:
              * Constructor untuk menginisialisasi **namaPengarang** dan **tahunLahir**, serta menginisialisasi daftar **daftarBuku**
            * Method:
              * `getNamaPengarang()`: Mengambil nama pengarang (getter).
              * `setNamaPengarang(String namaPengarang)`: Mengubah nama pengarang (setter).
              * `getTahunLahir()`: Mengambil tahun lahir pengarang (getter).
              * `setTahunLahir(int tahunLahir)`: Mengubah tahun lahir pengarang (setter).
              * `getDaftarBuku()`: Mengambil daftar buku yang ditulis pengarang ini.
              * `tambahBuku(Buku buku)`: Menambahkan buku baru yang ditulis oleh pengarang ini.
          </Step>

          <Step title="Class KategoriBuku">
            * Properti:
              * `namaKategori` (String): Nama kategori buku (misalnya ”Fiksi”, ”Non-Fiksi”).
              * `daftarBuku` (List): Daftar buku yang termasuk dalam kategori ini.
            * Constructor:
              * Constructor untuk menginisialisasi **namaKategori** dan **daftarBuku**.
            * Method:
              * `getNamaKategori()`: Mengambil nama kategori buku (getter).
              * `setNamaKategori(String namaKategori)`: Mengubah nama kategori buku (setter).
              * `getDaftarBuku()`: Mengambil daftar buku yang termasuk   dalam kategori ini.
              * `tambahBuku(Buku buku)`: Menambahkan buku baru ke dalam kategori ini.
          </Step>

          <Step title="Class Buku">
            * Properti:
              * `judul` (String): Judul buku (misalnya ”Harry Potter and the Sorcerer's Stone”).
              * `tahunTerbit` (int): Tahun penerbitan buku (misalnya 1997).
              * `statusTersedia` (boolean): Status ketersediaan buku (true jika buku tersedia, false jika dipinjam).
              * `pengarang` (Pengarang): Objek pengarang yang menulis buku ini.
              * `kategori` (KategoriBuku): Objek kategori buku yang terkait dengan buku ini.
            * Constructor:
              * Constructor untuk menginisialisasi **judul**, **tahunTerbit**, **statusTersedia**, **pengarang**, dan **kategori**.
            * Method:
              * `getJudul()`: Mengambil judul buku (getter).
              * `setJudul(String judul)`: Mengubah judul buku (setter).
              * `getTahunTerbit()`: Mengambil tahun terbit buku (getter).
              * `setTahunTerbit(int tahunTerbit)`: Mengubah tahun terbit buku (setter).
              * `getStatusTersedia()`: Mengambil status ketersediaan buku (getter).
              * `setStatusTersedia(boolean statusTersedia)`: Mengubah status ketersediaan buku (setter).
              * `getPengarang()`: Mengambil pengarang buku (getter).
              * `getKategori()`: Mengambil kategori buku (getter).
              * `pinjamBuku()`: Mengubah status buku menjadi tidak tersedia (dipinjam).
              * `kembalikanBuku()`: Mengubah status buku menjadi tersedia kembali.
          </Step>
        </Steps>
      </Accordion>

      <Accordion title="Deskripsi Main Class: MainSistemPerpustakaan">
        Buatlah sebuah **Main Class** bernama `MainSistemPerpustakaan` yang akan mendemonstrasikan pembuatan objek **Buku**, **Pengarang**, dan **KategoriBuku**, serta penggunaan method **Object Composition** untuk mengelola buku-buku yang ada di perpustakaan. Ikuti instruksi berikut:

        <Steps>
          <Step title="Membuat Objek Pengarang">
            * Buat objek **Pengarang** dengan informasi berikut:
              * **Nama Pengarang**: ”J.K. Rowling”
              * **Tahun Lahir**: 1965
          </Step>

          <Step title="Membuat Objek KategoriBuku">
            * Buat objek **KategoriBuku** dengan informasi berikut:
              * **Nama Kategori**: ”Fiksi”
            * Buat objek **KategoriBuku** lainnya dengan nama kategori ”NonFiksi”.
          </Step>

          <Step title="Membuat Objek Buku">
            * Buat beberapa objek Buku dengan informasi berikut:
              * Buku 1: Judul: ”Harry Potter and the Sorcerer’s Stone”, Tahun Terbit: 1997, Status: Tersedia, Pengarang: ”J.K. Rowling”, Kategori: ”Fiksi”
              * Buku 2: Judul: ”Harry Potter and the Chamber of Secrets”, Tahun Terbit: 1998, Status: Tersedia, Pengarang: ”J.K. Rowling”, Kategori: ”Fiksi”
              * Buku 3: Judul: ”The Intelligent Investor”, Tahun Terbit: 1949, Status: Tersedia, Pengarang: ”Benjamin Graham”, Kategori: ”Non-Fiksi”
          </Step>

          <Step title="Menambahkan Buku ke Pengarang dan Kategori">
            * Tambahkan Buku 1 dan Buku 2 ke dalam daftar buku pengarang ”J.K. Rowling”.
            * Tambahkan Buku 3 ke dalam daftar buku kategori ”Non-Fiksi”.
          </Step>

          <Step title="Menggunakan Method">
            * Tampilkan informasi tentang pengarang dan buku yang ditulis menggunakan method getter.
            * Tampilkan informasi tentang kategori dan daftar buku yang ada di kategori tersebut.
            * Lakukan peminjaman buku **Buku 1** dan **Buku 3**, kemudian tampilkan status ketersediaan buku setelah dipinjam.
            * Kembalikan **Buku 1** dan **Buku 3**, kemudian tampilkan status ketersediaan buku setelah dikembalikan.
          </Step>
        </Steps>
      </Accordion>
    </AccordionGroup>

    ## Contoh Output yang Diharapkan:

    ```bash theme={null}
    Pengarang: J.K. Rowling, Tahun Lahir: 1965
    Daftar Buku oleh J.K. Rowling:
    - Harry Potter and the Sorcerer's Stone (1997), Status: Tersedia
    - Harry Potter and the Chamber of Secrets (1998), Status: Tersedia

    Kategori: Fiksi
    Daftar Buku dalam Kategori Fiksi:
    - Harry Potter and the Sorcerer's Stone (1997)
    - Harry Potter and the Chamber of Secrets (1998)

    Kategori: Non-Fiksi
    Daftar Buku dalam Kategori Non-Fiksi:
    - The Intelligent Investor (1949)

    Peminjaman Buku:
    Buku 1 dipinjam (Status: Tidak Tersedia)
    Buku 3 dipinjam (Status: Tidak Tersedia)

    Setelah Dikembalikan:
    Buku 1 (Harry Potter and the Sorcerer's Stone) Status: Tersedia
    Buku 3 (The Intelligent Investor) Status: Tersedia
    ```
  </Tab>

  <Tab title="Answer">
    <CodeGroup>
      ```java Pengarang.java theme={null}
      import java.util.ArrayList;
      import java.util.List;

      public class Pengarang {
          private String namaPengarang;
          private int tahunLahir;
          private List<Buku> daftarBuku;

          public Pengarang(String namaPengarang, int tahunLahir) {
              this.namaPengarang = namaPengarang;
              this.tahunLahir = tahunLahir;
              this.daftarBuku = new ArrayList<>();
          }

          public String getNamaPengarang() {
              return namaPengarang;
          }

          public void setNamaPengarang(String namaPengarang) {
              this.namaPengarang = namaPengarang;
          }

          public int getTahunLahir() {
              return tahunLahir;
          }

          public void setTahunLahir(int tahunLahir) {
              this.tahunLahir = tahunLahir;
          }

          public List<Buku> getDaftarBuku() {
              return daftarBuku;
          }

          public void tambahBuku(Buku buku) {
              daftarBuku.add(buku);
          }
      }
      ```

      ```java KategoriBuku.java theme={null}
      import java.util.ArrayList;
      import java.util.List;

      public class KategoriBuku {
          private String namaKategori;
          private List<Buku> daftarBuku;

          public KategoriBuku(String namaKategori) {
              this.namaKategori = namaKategori;
              this.daftarBuku = new ArrayList<>();
          }

          public String getNamaKategori() {
              return namaKategori;
          }

          public void setNamaKategori(String namaKategori) {
              this.namaKategori = namaKategori;
          }

          public List<Buku> getDaftarBuku() {
              return daftarBuku;
          }

          public void tambahBuku(Buku buku) {
              daftarBuku.add(buku);
          }
      }
      ```

      ```java Buku.java theme={null}
      public class Buku {
          private String judul;
          private int tahunTerbit;
          private boolean statusTersedia;
          private Pengarang pengarang;
          private KategoriBuku kategori;

          public Buku(String judul, int tahunTerbit, boolean statusTersedia, Pengarang pengarang, KategoriBuku kategori) {
              this.judul = judul;
              this.tahunTerbit = tahunTerbit;
              this.statusTersedia = statusTersedia;
              this.pengarang = pengarang;
              this.kategori = kategori;
          }

          public String getJudul() {
              return judul;
          }

          public void setJudul(String judul) {
              this.judul = judul;
          }

          public int getTahunTerbit() {
              return tahunTerbit;
          }

          public void setTahunTerbit(int tahunTerbit) {
              this.tahunTerbit = tahunTerbit;
          }

          public boolean getStatusTersedia() {
              return statusTersedia;
          }

          public void setStatusTersedia(boolean statusTersedia) {
              this.statusTersedia = statusTersedia;
          }

          public Pengarang getPengarang() {
              return pengarang;
          }

          public KategoriBuku getKategori() {
              return kategori;
          }

          public void pinjamBuku() {
              statusTersedia = false;
          }

          public void kembalikanBuku() {
              statusTersedia = true;
          }
      }
      ```

      ```java MainSistemPerpustakaan.java theme={null}
      public class MainSistemPerpustakaan {
          public static void main(String[] args) {
              Pengarang pengarang = new Pengarang("J.K. Rowling", 1965);
              KategoriBuku kategoriFiksi = new KategoriBuku("Fiksi");
              KategoriBuku kategoriNonFiksi = new KategoriBuku("Non-Fiksi");

              Buku buku1 = new Buku("Harry Potter and the Sorcerer's Stone", 1997, true, pengarang, kategoriFiksi);
              Buku buku2 = new Buku("Harry Potter and the Chamber of Secrets", 1998, true, pengarang, kategoriFiksi);
              Buku buku3 = new Buku("The Intelligent Investor", 1949, true, new Pengarang("Benjamin Graham", 1894),
                      kategoriNonFiksi);

              pengarang.tambahBuku(buku1);
              pengarang.tambahBuku(buku2);
              kategoriNonFiksi.tambahBuku(buku3);

              System.out.printf("Pengarang: %s, Tahun Lahir: %d\n", pengarang.getNamaPengarang(), pengarang.getTahunLahir());
              System.out.println("Daftar Buku oleh " + pengarang.getNamaPengarang() + ":");
              for (Buku buku : pengarang.getDaftarBuku()) {
                  System.out.printf("- %s (%d), Status: %s\n", buku.getJudul(), buku.getTahunTerbit(),
                          buku.getStatusTersedia() ? "Tersedia" : "Tidak Tersedia");
              }

              kategoriFiksi.tambahBuku(buku1);
              kategoriFiksi.tambahBuku(buku2);

              System.out.printf("\nKategori: %s\n", kategoriFiksi.getNamaKategori());
              System.out.printf("Daftar Buku dalam Kategori %s\n", kategoriFiksi.getNamaKategori());
              for (Buku buku : kategoriFiksi.getDaftarBuku()) {
                  System.out.printf("- %s (%d)\n", buku.getJudul(), buku.getTahunTerbit());
              }

              System.out.printf("\nKategori: %s\n", kategoriNonFiksi.getNamaKategori());
              System.out.printf("Daftar Buku dalam Kategori %s\n", kategoriNonFiksi.getNamaKategori());
              for (Buku buku : kategoriNonFiksi.getDaftarBuku()) {
                  System.out.printf("- %s (%d)\n", buku.getJudul(), buku.getTahunTerbit());
              }

              System.out.println("\nPeminjaman Buku:");
              buku1.pinjamBuku();
              buku3.pinjamBuku();
              System.out.printf("Buku 1 dipinjam (Status: %s)\n", buku1.getStatusTersedia() ? "Tersedia" : "Tidak Tersedia");
              System.out.printf("Buku 3 dipinjam (Status: %s)\n", buku3.getStatusTersedia() ? "Tersedia" : "Tidak Tersedia");

              System.out.println("\nSetelah Dikembalikan:");
              buku1.kembalikanBuku();
              buku3.kembalikanBuku();
              System.out.printf("Buku 1 (%s) Status: %s\n", buku1.getJudul(),
                      buku1.getStatusTersedia() ? "Tersedia" : "Tidak Tersedia");
              System.out.printf("Buku 3 (%s) Status: %s\n", buku3.getJudul(),
                      buku3.getStatusTersedia() ? "Tersedia" : "Tidak Tersedia");
          }
      }
      ```
    </CodeGroup>
  </Tab>
</Tabs>

# Soal 5 - Sistem Manajemen Pegawai

<Tabs>
  <Tab title="Question">
    Di sebuah perusahaan, terdapat berbagai jenis pegawai dengan peran yang berbeda-beda, seperti **Manajer** dan **Karyawan**. Setiap pegawai memiliki informasi dasar seperti **nama**, **nomor induk karyawan (NIK)**, **jabatan**, dan **gaji pokok**. Namun, manajer memiliki atribut tambahan seperti **departemen** yang dipimpin dan **bonus**, sedangkan karyawan memiliki atribut tambahan seperti **jam lembur** yang mereka kerjakan.

    Anda diminta untuk membuat sistem manajemen pegawai yang menggunakan konsep **Inheritance**. Anda akan membuat class dasar **Pegawai**, yang memiliki atribut umum untuk semua pegawai, dan dua class turunan **Manajer** dan **Karyawan** yang menambahkan atribut khusus sesuai dengan jenis pegawai tersebut.

    <AccordionGroup>
      <Accordion title="Daftar Class">
        <Steps>
          <Step title="Class Pegawai (superclass)">
            * Properti:
              * `nama` (String): Nama pegawai (misalnya ”Budi”).
              * `nik` (String): Nomor induk karyawan (misalnya ”12345”).
              * `jabatan` (String): Jabatan pegawai (misalnya ”Manajer” atau ”Karyawan”).
              * `gajiPokok` (double): Gaji pokok pegawai (misalnya 5000000).
            * Constructor:
              * Constructor untuk menginisialisasi **nama**, **nik**, **jabatan**, dan **gajiPokok**.
            * Method:
              * `getNama()`: Mengambil nama pegawai (getter).
              * `setNama(String nama)`: Mengubah nama pegawai (setter).
              * `getNik()`: Mengambil nomor induk pegawai (getter).
              * `setNik(String nik)`: Mengubah nomor induk pegawai (setter).
              * `getJabatan()`: Mengambil jabatan pegawai (getter).
              * `setJabatan(String jabatan)`: Mengubah jabatan pegawai (setter).
              * `getGajiPokok()`: Mengambil gaji pokok pegawai (getter).
              * `setGajiPokok(double gajiPokok)`: Mengubah gaji pokok pegawai (setter).
              * `tampilkanInfo()`: Menampilkan informasi dasar pegawai (nama, NIK, jabatan, gaji pokok).
          </Step>

          <Step title="Class Manajer (subclass dari Pegawai)">
            * Properti:
              * `departemen` (String): Departemen yang dipimpin manajer (misalnya ”Keuangan” atau ”IT”).
              * `bonus` (double): Bonus yang diterima manajer (misalnya 2000000).
            * Constructor:
              * Constructor untuk menginisialisasi **nama**, **nik**, **jabatan**, **gajiPokok**, **departemen**, dan **bonus**.
            * Method:
              * `getDepartemen()`: Mengambil nama departemen yang dipimpin (getter).
              * `setDepartemen(String departemen)`: Mengubah nama departemen yang dipimpin (setter).
              * `getBonus()`: Mengambil bonus manajer (getter).
              * `setBonus(double bonus)`: Mengubah bonus manajer (setter).
              * `tampilkanInfo()`: Menampilkan informasi lengkap manajer, termasuk atribut dasar dari superclass **Pegawai** dan atribut tambahan manajer.
          </Step>

          <Step title="Class Karyawan (subclass dari Pegawai)">
            * Properti:
              * `jamLembur` (int): Jumlah jam lembur yang dikerjakan oleh karyawan (misalnya 10 jam).
            * Constructor:
              * Constructor untuk menginisialisasi **nama**, **nik**, **jabatan**, **gajiPokok**, dan **jamLembur**.
            * Method:
              * `getJamLembur()`: Mengambil jumlah jam lembur karyawan (getter).
              * `setJamLembur(int jamLembur)`: Mengubah jumlah jam lembur karyawan (setter).
              * `tampilkanInfo()`: Menampilkan informasi lengkap karyawan, termasuk atribut dasar dari superclass **Pegawai** dan atribut tambahan karyawan.
          </Step>
        </Steps>
      </Accordion>

      <Accordion title="Deskripsi Main Class: MainSistemManajemenPegawai">
        Buatlah sebuah **Main Class** bernama `MainSistemManajemenPegawai` yang akan mendemonstrasikan pembuatan objek **Pegawai**, **Manajer**, dan **Karyawan**, serta penggunaan konsep **Inheritance**. Ikuti instruksi berikut:

        <Steps>
          <Step title="Membuat Objek Pegawai">
            * Buat objek **Pegawai** dengan informasi berikut:
              * **Nama**: ”Rina”
              * **NIK**: ”12345”
              * **Jabatan**: ”Karyawan”
              * **Gaji Pokok**: 4500000
          </Step>

          <Step title="Membuat Objek Manajer">
            * Buat objek **Manajer** dengan informasi berikut:
              * **Nama**: ”Andi”
              * **NIK**: ”23456"
              * **Jabatan**: ”Manajer”
              * **Gaji Pokok**: 7000000
              * **Departemen**: ”Keuangan”
              * **Bonus**: 3000000
          </Step>

          <Step title="Membuat Objek Karyawan">
            * **Nama**: ”Siti”
            * **NIK**: ”34567”
            * **Jabatan**: ”Karyawan”
            * **Gaji Pokok**: 5000000
            * **Jam Lembur**: 15 jam
          </Step>

          <Step title="Menggunakan Method">
            * Tampilkan informasi dari objek **Pegawai**, **Manajer**, dan **Karyawan** menggunakan method `tampilkanInfo()`.
            * Ubah **jam lembur** dari objek **Karyawan** menjadi 20 jam dan tampilkan kembali informasi karyawan tersebut.
            * Ubah **bonus** dari objek **Manajer** menjadi 4000000 dan tampilkan kembali informasi manajer tersebut.
          </Step>
        </Steps>
      </Accordion>
    </AccordionGroup>

    ## Contoh Output yang Diharapkan:

    ```bash theme={null}
    Pegawai: Nama: Rina, NIK: 12345, Jabatan: Karyawan, Gaji Pokok: 4500000

    Manajer: Nama: Andi, NIK: 23456, Jabatan: Manajer, Gaji Pokok: 7000000, Departemen: Keuangan, Bonus: 3000000

    Karyawan: Nama: Siti, NIK: 34567, Jabatan: Karyawan, Gaji Pokok: 5000000, Jam Lembur: 15

    Setelah Perubahan:
    Karyawan Baru: Nama: Siti, NIK: 34567, Jabatan: Karyawan, Gaji Pokok: 5000000, Jam Lembur: 20

    Manajer Baru: Nama: Andi, NIK: 23456, Jabatan: Manajer, Gaji Pokok: 7000000, Departemen: Keuangan, Bonus: 4000000
    ```
  </Tab>

  <Tab title="Answer">
    <CodeGroup>
      ```java Pegawai.java theme={null}
      public class Pegawai {
          private String nama;
          private String nik;
          private String jabatan;
          private double gajiPokok;

          public Pegawai(String nama, String nik, String jabatan, double gajiPokok) {
              this.nama = nama;
              this.nik = nik;
              this.jabatan = jabatan;
              this.gajiPokok = gajiPokok;
          }

          public String getNama() {
              return nama;
          }

          public void setNama(String nama) {
              this.nama = nama;
          }

          public String getNik() {
              return nik;
          }

          public void setNik(String nik) {
              this.nik = nik;
          }

          public String getJabatan() {
              return jabatan;
          }

          public void setJabatan(String jabatan) {
              this.jabatan = jabatan;
          }

          public double getGajiPokok() {
              return gajiPokok;
          }

          public void setGajiPokok(double gajiPokok) {
              this.gajiPokok = gajiPokok;
          }

          public void tampilkanInfo() {
              System.out.printf("Nama: %s, NIK: %s, Jabatan: %s, Gaji Pokok: %.0f\n", nama, nik, jabatan,
                      gajiPokok);
          }
      }
      ```

      ```java Manajer.java theme={null}
      public class Manajer extends Pegawai {
          private String departemen;
          private double bonus;

          public Manajer(String nama, String nik, String jabatan, double gajiPokok, String departemen, double bonus) {
              super(nama, nik, jabatan, gajiPokok);
              this.departemen = departemen;
              this.bonus = bonus;
          }

          public String getDepartemen() {
              return departemen;
          }

          public void setDepartemen(String departemen) {
              this.departemen = departemen;
          }

          public double getBonus() {
              return bonus;
          }

          public void setBonus(double bonus) {
              this.bonus = bonus;
          }

          @Override
          public void tampilkanInfo() {
              System.out.printf("Nama: %s, NIK: %s, Jabatan: %s, Gaji Pokok: %.0f, Departemen: %s, Bonus: %.0f\n",
                      getNama(), getNik(), getJabatan(), getGajiPokok(), departemen, bonus);
          }
      }
      ```

      ```java Karyawan.java theme={null}
      public class Karyawan extends Pegawai {
          private int jamLembur;

          public Karyawan(String nama, String nik, String jabatan, double gajiPokok, int jamLembur) {
              super(nama, nik, jabatan, gajiPokok);
              this.jamLembur = jamLembur;
          }

          public int getJamLembur() {
              return jamLembur;
          }

          public void setJamLembur(int jamLembur) {
              this.jamLembur = jamLembur;
          }

          @Override
          public void tampilkanInfo() {
              System.out.printf("Nama: %s, NIK: %s, Jabatan: %s, Gaji Pokok: %.0f, Jam Lembur: %d\n", getNama(),
                      getNik(), getJabatan(), getGajiPokok(), jamLembur);
          }
      }
      ```

      ```java MainSistemManajemenPegawai.java theme={null}
      public class MainSistemManajemenPegawai {
          public static void main(String[] args) {
              Pegawai pegawai = new Pegawai("Rina", "12345", "Karyawan", 4500000);

              Manajer menajer = new Manajer("Andi", "23456", "Manajer", 7000000, "Keuangan", 3000000);

              Karyawan karyawan = new Karyawan("Siti", "34567", "Karyawan", 5000000, 15);

              System.out.print("Pegawai: ");
              pegawai.tampilkanInfo();

              System.out.print("\nManajer: ");
              menajer.tampilkanInfo();

              System.out.print("\nKaryawan: ");
              karyawan.tampilkanInfo();

              System.out.println("\nSetelah Peubahan:");
              karyawan.setJamLembur(20);
              System.out.print("Karyawan Baru: ");
              karyawan.tampilkanInfo();
              menajer.setBonus(4000000);
              System.out.print("\nManajer Baru: ");
              menajer.tampilkanInfo();
          }
      }
      ```
    </CodeGroup>
  </Tab>
</Tabs>

# Soal 6 - Sistem Pengiriman Barang

<Tabs>
  <Tab title="Question">
    Di sebuah perusahaan logistik, terdapat beberapa jenis layanan pengiriman barang, seperti **Pengiriman Ekspres** dan **Pengiriman Reguler**. Masing-masing layanan pengiriman memiliki cara menghitung biaya pengiriman yang berbeda, bergantung pada berat barang, jarak pengiriman, dan jenis layanan yang dipilih. Sistem ini akan mendemonstrasikan penggunaan **Polymorphism**, di mana method `hitungBiayaPengiriman()` akan di-*override* pada subclass yang berbeda.

    <AccordionGroup>
      <Accordion title="Daftar Class">
        <Steps>
          <Step title="Class Pengiriman (superclass)">
            * Properti:
              * `beratBarang` (double): Berat barang yang akan dikirim (misalnya 5.5 kg).
              * `jarak` (double): Jarak pengiriman dalam kilometer (misalnya 150 km).
            * Constructor:
              * Constructor untuk menginisialisasi **beratBarang** dan **jarak**.
            * Method:
              * `getBeratBarang()`: Mengambil berat barang (getter).
              * `setBeratBarang(double beratBarang)`: Mengubah berat barang (setter).
              * `getJarak()`: Mengambil jarak pengiriman (getter).
              * `setJarak(double jarak)`: Mengubah jarak pengiriman (setter).
              * `hitungBiayaPengiriman()`: Method umum untuk menghitung biaya pengiriman yang akan di-*override* pada subclass. Pada class ini, implementasinya kosong (akan di-override pada subclass).
          </Step>

          <Step title="Class PengirimanEkspres (subclass dari Pengiriman)">
            * Properti:
              * Tidak ada properti tambahan, cukup menggunakan properti yang diwarisi dari **Pengiriman**.
            * Constructor:
              * Constructor untuk menginisialisasi **beratBarang** dan **jarak**.
            * Method:
              * `hitungBiayaPengiriman()`: Implementasi spesifik untuk **Pengiriman Ekspres**: Menghitung biaya pengiriman dengan rumus: biaya = (beratBarang \* 2000) + (jarak \* 1000).
                * Contoh: Jika berat barang 5 kg dan jarak 150 km, maka biaya ekspres adalah (5 \* 2000) + (150 \* 1000) = 10000 + 150000 = 160000.
          </Step>

          <Step title="Class PengirimanReguler (subclass dari Pengiriman)">
            * Properti:
              * Tidak ada properti tambahan, cukup menggunakan properti yang diwarisi dari **Pengiriman**.
            * Constructor:
              * Constructor untuk menginisialisasi **beratBarang** dan **jarak**.
            * Method:
              * `hitungBiayaPengiriman()`: Implementasi spesifik untuk **Pengiriman Reguler**: Menghitung biaya pengiriman dengan rumus: biaya = (beratBarang \* 1000) + (jarak \* 500).
                * Contoh: Jika berat barang 5 kg dan jarak 150 km, maka biaya reguler adalah (5 \* 1000) + (150 \* 500) = 5000 + 75000 = 80000.
          </Step>
        </Steps>
      </Accordion>

      <Accordion title="Deskripsi Main Class: MainSistemPengiriman">
        Buatlah sebuah **Main Class** bernama **MainSistemPengiriman** yang akan mendemonstrasikan penggunaan **Polymorphism** dengan cara memanggil method `hitungBiayaPengiriman()` pada objek dari berbagai jenis pengiriman. Ikuti instruksi berikut:

        <Steps>
          <Step title="Membuat Objek Pengiriman Ekspres">
            * Buat objek **PengirimanEkspres** dengan informasi berikut:
              * **Berat Barang**: 10 kg
              * **Jarak**: 200 km.
          </Step>

          <Step title="Membuat Objek Pengiriman Reguler">
            * Buat objek **PengirimanReguler** dengan informasi berikut:
              * **Berat Barang**: 10 kg
              * **Jarak**: 200 km.
          </Step>

          <Step title="Menggunakan Polymorphism">
            * Tampilkan informasi dan panggil method `hitungBiayaPengiriman()` untuk masing-masing objek (**PengirimanEkspres** dan **PengirimanReguler**).
            * Demonstrasikan polymorphism dengan memanggil `hitungBiayaPengiriman()` pada objek **Pengiriman**, **PengirimanEkspres**, dan **PengirimanReguler** secara bergantian, meskipun mereka memiliki tipe yang berbeda.
          </Step>
        </Steps>
      </Accordion>
    </AccordionGroup>

    ## Contoh Output yang Diharapkan:

    ```bash theme={null}
    Pengiriman Ekspres: 
    Biaya pengiriman ekspres untuk barang dengan berat 10 kg dan jarak 200 km adalah: 220000

    Pengiriman Reguler:
    Biaya pengiriman reguler untuk barang dengan berat 10 kg dan jarak 200 km adalah: 110000
    ```
  </Tab>

  <Tab title="Answer">
    <CodeGroup>
      ```java Pengiriman.java theme={null}
      public class Pengiriman {
          private double beratBarang;
          private double jarak;

          public Pengiriman(double beratBarang, double jarak) {
              this.beratBarang = beratBarang;
              this.jarak = jarak;
          }

          public double getBeratBarang() {
              return beratBarang;
          }

          public void setBeratBarang(double beratBarang) {
              this.beratBarang = beratBarang;
          }

          public double getJarak() {
              return jarak;
          }

          public void setJarak(double jarak) {
              this.jarak = jarak;
          }

          public void hitungBiayaPengiriman() {
              // implementasi kosong, akan di-override pada subclass
          }
      }
      ```

      ```java PengirimanEkspres.java theme={null}
      public class PengirimanEkspres extends Pengiriman {
          public PengirimanEkspres(double beratBarang, double jarak) {
              super(beratBarang, jarak);
          }

          @Override
          public void hitungBiayaPengiriman() {
              double biaya = (getBeratBarang() * 2000) + (getJarak() * 1000);
              System.out.printf("Biaya pengiriman ekspres untuk barang dengan berat %.0f kg dan jarak %.0f km adalah: %.0f\n",
                      getBeratBarang(), getJarak(), biaya);
          }
      }
      ```

      ```java PengirimanReguler.java theme={null}
      public class PengirimanReguler extends Pengiriman {
          public PengirimanReguler(double beratBarang, double jarak) {
              super(beratBarang, jarak);
          }

          @Override
          public void hitungBiayaPengiriman() {
              double biaya = (getBeratBarang() * 1000) + (getJarak() * 500);
              System.out.printf("Biaya pengiriman reguler untuk barang dengan berat %.0f kg dan jarak %.0f km adalah: %.0f\n",
                      getBeratBarang(), getJarak(), biaya);
          }
      }
      ```

      ```java MainSistemPengiriman.java theme={null}
      public class MainSistemPengiriman {
          public static void main(String[] args) {
              PengirimanEkspres pengirimanEkspres = new PengirimanEkspres(10, 200);
              PengirimanReguler pengirimanReguler = new PengirimanReguler(10, 200);

              System.out.println("Pengiriman Ekspres: ");
              pengirimanEkspres.hitungBiayaPengiriman();

              System.out.println("\nPengiriman Reguler: ");
              pengirimanReguler.hitungBiayaPengiriman();

              System.out.println("\nDemonstrasi Polymorphism:");
              Pengiriman pengiriman = new PengirimanEkspres(10, 200);
              pengiriman.hitungBiayaPengiriman();

              pengiriman = new PengirimanReguler(10, 200);
              pengiriman.hitungBiayaPengiriman();
          }
      }
      ```
    </CodeGroup>
  </Tab>
</Tabs>
