Bangun Aplikasi Kasir, Kuasai Pemrograman Berorientasi Objek.
Media belajar interaktif untuk mata pelajaran PBO Kelas XII RPL. Kamu akan berperan sebagai tim developer yang membangun SIKASIR — sistem kasir digital untuk toko kelontong — sambil menguasai konsep Class, Object, Encapsulation, Inheritance, Polymorphism, dan Interface.
Jelajahi Konsol Belajar
Materi OOP
Penjelasan, analogi, dan contoh kode untuk 4 pilar pemrograman berorientasi objek.
Studi Kasus SIKASIR
Diagram class interaktif dari toko kelontong Sumber Rejeki — klik tiap kelas untuk detail.
Sprint Proyek
Checklist tugas 3 sprint: analisis, coding, hingga testing — progresmu tersimpan otomatis.
Kuis Interaktif
Uji pemahamanmu dan dapatkan "struk hasil belajar" di akhir kuis.
Empat Pilar Pemrograman Berorientasi Objek
Setiap konsep dijelaskan dengan analogi dunia toko kelontong, contoh kode Java, dan satu pertanyaan cek pemahaman.
Class = Cetakan, Object = Barang Nyata
Class adalah cetakan atau blueprint yang mendefinisikan atribut (field) dan perilaku (method) yang akan dimiliki setiap object. Object adalah hasil nyata dari cetakan itu — instansiasi dari class menggunakan kata kunci new.
Barang ibarat kartu stok kosong yang formatnya sama untuk semua produk. Object adalah barang nyata di rak: "Indomie Goreng", "Beras 5kg", "Minyak Goreng 1L" — masing-masing punya nilai berbeda tapi struktur data yang sama.public class Barang { private String kodeBarang; private String namaBarang; private double harga; private int stok; public Barang(String kode, String nama, double harga, int stok) { this.kodeBarang = kode; this.namaBarang = nama; this.harga = harga; this.stok = stok; } public double getHarga() { return harga; } } // membuat OBJECT dari class Barang Barang indomie = new Barang( "B001", "Indomie Goreng", 3500, 100 );
Manakah pernyataan yang benar mengenai hubungan Class dan Object?
Melindungi Data dengan Encapsulation
Encapsulation berarti menyembunyikan field di balik akses private, lalu menyediakan method publik (getter/setter atau method khusus) untuk mengaksesnya secara terkendali — termasuk menambahkan validasi.
public class Barang { public int stok; // field terbuka, bebas diubah } // di bagian lain program — siapapun bisa menulis ini: barangIndomie.stok = -50; // BUG: stok jadi negatif, tidak ada yang mencegah!
public class Barang { private int stok; // disembunyikan public void kurangiStok(int jumlah) { if (jumlah > stok) { throw new IllegalArgumentException( "Stok tidak cukup"); } stok -= jumlah; // aman, sudah tervalidasi } public int getStok() { return stok; } }
Mengapa field stok sebaiknya dibuat private dan diubah lewat method seperti kurangiStok()?
Mewariskan & Menyesuaikan Perilaku
Inheritance memungkinkan sebuah class (subclass) mewarisi field/method dari class lain (superclass). Polymorphism memungkinkan subclass punya implementasi method yang berbeda meski nama methodnya sama (override).
Pelanggan), tapi cara menghitung diskon berbeda: pelanggan umum tidak dapat diskon, sedangkan member dapat diskon 10%.public abstract class Pelanggan { protected String nama; public abstract double hitungDiskon(double total); } public class PelangganUmum extends Pelanggan { public double hitungDiskon(double total) { return 0; // tidak ada diskon } } public class PelangganMember extends Pelanggan { public double hitungDiskon(double total) { return total * 0.1; // member diskon 10% } }
PelangganUmum dan PelangganMember sama-sama punya method hitungDiskon() dengan hasil berbeda. Konsep OOP apa yang ditunjukkan ini?
Kontrak Perilaku dengan Interface
Interface mendefinisikan "kontrak" method apa saja yang wajib dimiliki sebuah class, tanpa menentukan bagaimana cara kerjanya. Setiap class yang implements interface wajib menyediakan implementasinya sendiri.
proses() — entah itu Tunai, QRIS, atau Kartu Debit, cara kerja di baliknya bisa berbeda-beda.public interface MetodePembayaran { boolean proses(double jumlah); } public class Tunai implements MetodePembayaran { public boolean proses(double jumlah) { // hitung kembalian tunai return true; } } public class QRIS implements MetodePembayaran { public boolean proses(double jumlah) { // panggil layanan QRIS eksternal return true; } }
Apa keuntungan utama menggunakan interface MetodePembayaran di aplikasi SIKASIR?
Toko Kelontong "Sumber Rejeki"
Bu Retno, pemilik toko kelontong Sumber Rejeki, selama ini mencatat transaksi di buku tulis. Tim developer (kelompokmu) ditugaskan membangun SIKASIR agar pencatatan lebih cepat dan akurat. Klik salah satu class pada diagram untuk melihat rancangan field dan method-nya.
Pilih sebuah class →
Klik salah satu kotak class pada diagram di sebelah kiri untuk melihat rancangan atribut dan method-nya secara detail.
Sprint Proyek SIKASIR
Centang setiap tugas yang sudah kelompokmu selesaikan. Progres tersimpan otomatis di perangkatmu, dan turut menambah progres belajar keseluruhan.
Kuis Interaktif PBO
10 soal pilihan ganda merangkum seluruh materi. Di akhir kuis, kamu akan mendapatkan "struk hasil belajar".
Rubrik Penilaian Proyek
Penilaian tidak hanya menilai apakah aplikasi berjalan, tapi juga kerapihan struktur OOP dan kemampuan problem-solving.
| Aspek | Sangat Baik (4) | Baik (3) | Cukup (2) | Perlu Bimbingan (1) |
|---|---|---|---|---|
| Fungsionalitas Aplikasi (25%) | Semua fitur berjalan sempurna tanpa error. | Sebagian besar fitur berjalan baik, kekurangan minor. | Fitur inti berjalan, sebagian fungsi tidak lengkap. | Aplikasi tidak berjalan / fitur utama tidak berfungsi. |
| Struktur OOP & Clean Code (30%) | Encapsulation, inheritance/polymorphism diterapkan tepat; penamaan jelas & konsisten. | Encapsulation baik; inheritance/polymorphism kurang optimal. | Encapsulation belum konsisten; struktur kurang terorganisir. | Tidak mencerminkan struktur OOP; penamaan tidak jelas. |
| Problem-Solving & Debugging (25%) | Mengidentifikasi akar masalah mandiri, dokumentasi jelas, solusi tepat. | Menemukan & memperbaiki sebagian besar bug dengan sedikit bantuan. | Bug ditemukan namun perbaikan cenderung coba-coba. | Tidak mampu menemukan/memperbaiki bug meski dibimbing. |
| Kolaborasi & Presentasi (20%) | Pembagian tugas jelas & merata; presentasi runtut & percaya diri. | Kerja sama cukup baik; presentasi cukup jelas. | Kontribusi tidak merata; presentasi kurang runtut. | Tidak ada pembagian tugas jelas; presentasi tidak menjelaskan proses. |
Petunjuk Penggunaan Media
Halaman ini menjelaskan cara mengakses media, peta menu yang tersedia, alur belajar yang disarankan, serta catatan teknis bagi guru maupun peserta didik.
Cara Mengakses
1. Ekstrak Berkas
Ekstrak folder media pembelajaran ini terlebih dahulu jika diterima dalam bentuk .zip.
2. Buka index.html
Klik dua kali file index.html untuk membuka media langsung di browser (Chrome, Edge, atau Firefox).
3. Berjalan Offline
Media dapat digunakan tanpa koneksi internet setelah berkas tersimpan di perangkat.
Peta Menu
Alur Belajar yang Disarankan
Baca Beranda & pertanyaan pemantik
Pahami konteks proyek dan tujuan belajar sebelum masuk ke materi.
Pelajari keempat tab Materi OOP secara berurutan
Kerjakan "Cek Pemahaman" di setiap tab sebelum lanjut ke tab berikutnya.
Jelajahi Studi Kasus
Klik seluruh 6 class pada diagram untuk memahami rancangan SIKASIR secara utuh.
Kerjakan proyek sambil mencentang Sprint Proyek
Gunakan checklist ini berdampingan dengan LKPD cetak saat kelompok bekerja.
Tutup dengan Kuis Interaktif
Simpan atau tunjukkan struk hasil belajar kepada guru sebagai bukti pemahaman mandiri.
Catatan untuk Guru
js/data.js sehingga guru dapat menyesuaikan tema studi kasus tanpa perlu mengubah kode tampilan.