Pendidikan
Contoh Soal OOP untuk SMK Kelas 11 Semester 2: Mengasah Logika Pemrograman Berorientasi Objek

Contoh Soal OOP untuk SMK Kelas 11 Semester 2: Mengasah Logika Pemrograman Berorientasi Objek

Pemrograman Berorientasi Objek (OOP) menjadi salah satu pilar penting dalam pengembangan perangkat lunak modern. Bagi siswa SMK kelas 11 semester 2 yang mempelajari OOP, pemahaman konsep dan kemampuan mengaplikasikannya dalam menyelesaikan masalah adalah kunci keberhasilan. Artikel ini akan menyajikan beberapa contoh soal OOP yang relevan dengan kurikulum SMK, dilengkapi dengan penjelasan rinci untuk membantu siswa memahami logika dan implementasi kode.

Mengapa OOP Penting?

Sebelum masuk ke contoh soal, mari kita pahami mengapa OOP begitu penting:

Contoh Soal OOP untuk SMK Kelas 11 Semester 2: Mengasah Logika Pemrograman Berorientasi Objek

  • Modularitas: OOP memungkinkan kita memecah program menjadi bagian-bagian kecil yang independen (objek), sehingga kode lebih mudah dikelola, dimodifikasi, dan dipahami.
  • Reusabilitas: Objek yang telah dibuat dapat digunakan kembali di berbagai bagian program atau bahkan di proyek lain, menghemat waktu dan usaha.
  • Enkapsulasi: Data dan metode yang bekerja pada data tersebut dibungkus menjadi satu dalam objek, melindungi data dari akses yang tidak sah dan memastikan integritas data.
  • Polimorfisme: Objek dapat memiliki banyak bentuk, memungkinkan kita menulis kode yang lebih fleksibel dan adaptif terhadap perubahan.
  • Abstraksi: OOP memungkinkan kita menyembunyikan detail implementasi yang kompleks dan hanya menampilkan informasi yang relevan bagi pengguna objek.

Contoh Soal dan Pembahasan:

Berikut adalah beberapa contoh soal OOP yang sering muncul dalam kurikulum SMK kelas 11 semester 2, beserta pembahasan yang mendalam:

Soal 1: Membuat Kelas Buku

Buatlah sebuah kelas bernama Buku yang memiliki atribut:

  • judul (String)
  • penulis (String)
  • penerbit (String)
  • tahunTerbit (Integer)
  • harga (Double)

Kelas Buku juga memiliki method:

  • tampilkanInfo(): Menampilkan informasi lengkap buku (judul, penulis, penerbit, tahun terbit, dan harga) ke layar.
  • diskon(double persentase): Menerapkan diskon pada harga buku berdasarkan persentase yang diberikan.

Pembahasan:

Soal ini menguji pemahaman dasar tentang pembuatan kelas, atribut, dan method dalam OOP. Berikut adalah contoh implementasi kode dalam bahasa Java:

public class Buku 
    private String judul;
    private String penulis;
    private String penerbit;
    private int tahunTerbit;
    private double harga;

    // Konstruktor
    public Buku(String judul, String penulis, String penerbit, int tahunTerbit, double harga) 
        this.judul = judul;
        this.penulis = penulis;
        this.penerbit = penerbit;
        this.tahunTerbit = tahunTerbit;
        this.harga = harga;
    

    // Method untuk menampilkan informasi buku
    public void tampilkanInfo() 
        System.out.println(" " + judul);
        System.out.println("Penulis: " + penulis);
        System.out.println("Penerbit: " + penerbit);
        System.out.println("Tahun Terbit: " + tahunTerbit);
        System.out.println("Harga: Rp" + harga);
    

    // Method untuk menerapkan diskon
    public void diskon(double persentase) 
        harga = harga - (harga * persentase / 100);
    

    public static void main(String[] args) 
        // Membuat objek Buku
        Buku buku1 = new Buku("Laskar Pelangi", "Andrea Hirata", "Bentang Pustaka", 2005, 80000.0);

        // Menampilkan informasi buku
        buku1.tampilkanInfo();

        // Menerapkan diskon 10%
        buku1.diskon(10);

        // Menampilkan informasi buku setelah diskon
        System.out.println("nHarga setelah diskon 10%:");
        buku1.tampilkanInfo();
    

Penjelasan:

  • public class Buku: Mendeklarasikan kelas bernama Buku.
  • private String judul;: Mendeklarasikan atribut judul sebagai private, yang berarti hanya dapat diakses dari dalam kelas Buku.
  • public Buku(String judul, ...): Konstruktor adalah method khusus yang digunakan untuk membuat objek Buku. Konstruktor ini menerima parameter untuk mengisi nilai atribut objek.
  • this.judul = judul;: Menggunakan kata kunci this untuk membedakan antara atribut kelas (this.judul) dengan parameter method (judul).
  • public void tampilkanInfo(): Method ini menampilkan informasi lengkap buku ke layar menggunakan System.out.println().
  • public void diskon(double persentase): Method ini menghitung harga setelah diskon berdasarkan persentase yang diberikan.
  • public static void main(String[] args): Method main adalah titik awal eksekusi program. Di sini, kita membuat objek Buku, menampilkan informasinya, menerapkan diskon, dan menampilkan informasi setelah diskon.

Soal 2: Inheritance (Pewarisan)

Buatlah kelas Kendaraan dengan atribut:

  • merk (String)
  • warna (String)

Kelas Kendaraan memiliki method:

  • berjalan(): Menampilkan pesan "Kendaraan sedang berjalan."

Kemudian, buatlah kelas Mobil yang mewarisi dari kelas Kendaraan dan menambahkan atribut:

  • jumlahPintu (Integer)

Kelas Mobil memiliki method:

  • klakson(): Menampilkan pesan "Mobil membunyikan klakson."

Pembahasan:

Soal ini menguji pemahaman tentang inheritance, yaitu kemampuan sebuah kelas (kelas anak/subkelas) untuk mewarisi atribut dan method dari kelas lain (kelas induk/superkelas).

class Kendaraan 
    protected String merk;
    protected String warna;

    public Kendaraan(String merk, String warna) 
        this.merk = merk;
        this.warna = warna;
    

    public void berjalan() 
        System.out.println("Kendaraan sedang berjalan.");
    


class Mobil extends Kendaraan 
    private int jumlahPintu;

    public Mobil(String merk, String warna, int jumlahPintu) 
        super(merk, warna); // Memanggil konstruktor kelas induk
        this.jumlahPintu = jumlahPintu;
    

    public void klakson() 
        System.out.println("Mobil membunyikan klakson.");
    

    public static void main(String[] args) 
        Mobil mobil1 = new Mobil("Toyota", "Merah", 4);
        mobil1.berjalan(); // Memanggil method dari kelas Kendaraan
        mobil1.klakson();
    

Penjelasan:

  • class Mobil extends Kendaraan: Mendeklarasikan bahwa kelas Mobil mewarisi dari kelas Kendaraan.
  • super(merk, warna);: Memanggil konstruktor kelas induk (Kendaraan) menggunakan super() untuk menginisialisasi atribut merk dan warna.
  • Kelas Mobil memiliki akses ke method berjalan() dari kelas Kendaraan.

Soal 3: Polymorphism (Polimorfisme)

Buatlah kelas Hewan dengan method:

  • bersuara(): Menampilkan pesan "Hewan bersuara."

Kemudian, buatlah kelas Anjing dan Kucing yang mewarisi dari kelas Hewan dan meng-override method bersuara():

  • Anjing.bersuara(): Menampilkan pesan "Guk guk!"
  • Kucing.bersuara(): Menampilkan pesan "Meow!"

Pembahasan:

Soal ini menguji pemahaman tentang polimorfisme, yaitu kemampuan objek untuk memiliki banyak bentuk. Dalam contoh ini, objek Anjing dan Kucing memiliki method bersuara() yang berbeda meskipun mereka berasal dari kelas induk yang sama.

class Hewan 
    public void bersuara() 
        System.out.println("Hewan bersuara.");
    


class Anjing extends Hewan 
    @Override
    public void bersuara() 
        System.out.println("Guk guk!");
    


class Kucing extends Hewan 
    @Override
    public void bersuara() 
        System.out.println("Meow!");
    


public class Main 
    public static void main(String[] args) 
        Hewan hewan = new Hewan();
        Anjing anjing = new Anjing();
        Kucing kucing = new Kucing();

        hewan.bersuara(); // Output: Hewan bersuara.
        anjing.bersuara(); // Output: Guk guk!
        kucing.bersuara(); // Output: Meow!

        // Contoh polimorfisme
        Hewan hewanAnjing = new Anjing();
        Hewan hewanKucing = new Kucing();

        hewanAnjing.bersuara(); // Output: Guk guk!
        hewanKucing.bersuara(); // Output: Meow!
    

Penjelasan:

  • @Override: Anotasi ini menunjukkan bahwa method bersuara() di kelas Anjing dan Kucing meng-override method bersuara() dari kelas Hewan.
  • Ketika objek hewanAnjing (bertipe Hewan tapi sebenarnya objek Anjing) memanggil method bersuara(), method bersuara() dari kelas Anjing yang dieksekusi. Ini adalah contoh polimorfisme.

Soal 4: Enkapsulasi

Buatlah kelas RekeningBank dengan atribut:

  • nomorRekening (String)
  • namaPemilik (String)
  • saldo (Double)

Enkapsulasi atribut saldo dengan membuat method getSaldo() untuk mendapatkan nilai saldo dan method setSaldo() untuk mengubah nilai saldo (dengan validasi bahwa saldo tidak boleh negatif).

Pembahasan:

Soal ini menguji pemahaman tentang enkapsulasi, yaitu menyembunyikan detail implementasi internal dan hanya menyediakan akses terkontrol melalui method getter dan setter.

public class RekeningBank 
    private String nomorRekening;
    private String namaPemilik;
    private double saldo;

    public RekeningBank(String nomorRekening, String namaPemilik, double saldoAwal) 
        this.nomorRekening = nomorRekening;
        this.namaPemilik = namaPemilik;
        this.saldo = saldoAwal;
    

    public double getSaldo() 
        return saldo;
    

    public void setSaldo(double saldoBaru) 
        if (saldoBaru >= 0) 
            this.saldo = saldoBaru;
         else 
            System.out.println("Saldo tidak boleh negatif.");
        
    

    public static void main(String[] args) 
        RekeningBank rekening1 = new RekeningBank("1234567890", "John Doe", 100000.0);

        System.out.println("Saldo awal: Rp" + rekening1.getSaldo());

        rekening1.setSaldo(150000.0);
        System.out.println("Saldo setelah deposit: Rp" + rekening1.getSaldo());

        rekening1.setSaldo(-50000.0); // Akan menampilkan pesan "Saldo tidak boleh negatif."
        System.out.println("Saldo setelah mencoba penarikan ilegal: Rp" + rekening1.getSaldo());
    

Penjelasan:

  • Atribut saldo dideklarasikan sebagai private, sehingga tidak dapat diakses langsung dari luar kelas RekeningBank.
  • Method getSaldo() dan setSaldo() menyediakan akses terkontrol ke atribut saldo.
  • Method setSaldo() melakukan validasi untuk memastikan bahwa saldo tidak boleh negatif.

Kesimpulan:

Contoh soal di atas hanyalah sebagian kecil dari berbagai macam soal OOP yang mungkin muncul dalam kurikulum SMK kelas 11 semester 2. Dengan memahami konsep dasar OOP dan berlatih mengerjakan berbagai soal, siswa akan semakin mahir dalam pemrograman berorientasi objek dan siap menghadapi tantangan di dunia pengembangan perangkat lunak. Penting untuk terus berlatih dan mengeksplorasi berbagai contoh kode untuk memperdalam pemahaman dan kemampuan implementasi. Selain itu, jangan ragu untuk bertanya kepada guru atau teman jika mengalami kesulitan. Selamat belajar!

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *