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:
- 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 bernamaBuku
.private String judul;
: Mendeklarasikan atributjudul
sebagaiprivate
, yang berarti hanya dapat diakses dari dalam kelasBuku
.public Buku(String judul, ...)
: Konstruktor adalah method khusus yang digunakan untuk membuat objekBuku
. Konstruktor ini menerima parameter untuk mengisi nilai atribut objek.this.judul = judul;
: Menggunakan kata kuncithis
untuk membedakan antara atribut kelas (this.judul
) dengan parameter method (judul
).public void tampilkanInfo()
: Method ini menampilkan informasi lengkap buku ke layar menggunakanSystem.out.println()
.public void diskon(double persentase)
: Method ini menghitung harga setelah diskon berdasarkan persentase yang diberikan.public static void main(String[] args)
: Methodmain
adalah titik awal eksekusi program. Di sini, kita membuat objekBuku
, 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 kelasMobil
mewarisi dari kelasKendaraan
.super(merk, warna);
: Memanggil konstruktor kelas induk (Kendaraan
) menggunakansuper()
untuk menginisialisasi atributmerk
danwarna
.- Kelas
Mobil
memiliki akses ke methodberjalan()
dari kelasKendaraan
.
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 methodbersuara()
di kelasAnjing
danKucing
meng-override methodbersuara()
dari kelasHewan
.- Ketika objek
hewanAnjing
(bertipeHewan
tapi sebenarnya objekAnjing
) memanggil methodbersuara()
, methodbersuara()
dari kelasAnjing
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 sebagaiprivate
, sehingga tidak dapat diakses langsung dari luar kelasRekeningBank
. - Method
getSaldo()
dansetSaldo()
menyediakan akses terkontrol ke atributsaldo
. - 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!