Untuk membuat aplikasi yang menarik, kita tidak bisa membuat aplikasi dengan membuat satu objek yang bekerja sendiri. Melainkan, kita sebaiknya membuat aplikasi dengan beberapa objek dan mengatur method-method yang ada untuk memanggil method yang lain untuk bekerja bersama dan mencapai tujuan sebuah program.
Dalam proyek ini kita akan menggunakan aplikasi jam digital sebagai contoh interaksi antar objek. Output yang dikeluarkan akan menunjukkan jam dan menit, terpisahkan oleh tanda titik dua (:). Jam akan ditunjukkan dengan format 24-jam, yang berarti menunjukkan waktu dari 00:00 (tengah malam) hingga 23:59 (1 menit sebelum tengah malam).
Aplikasi jam ini mungkin bisa ditulis dengan satu class saja. Namun, program-program makin lama akan semakin kompleks. Aplikasi jam ini masih dibilang sederhana, namun untuk aplikasi yang benar-benar dibutuhkan khalayak luas, pastilah jauh lebih rumit dari ini. Semakin besar permasalahan yang ingin dipecahkan suatu program, akan menjadi lebih komplekslah sebuah program.
Untuk mengatasi masalah kompleksitas ini digunakanlah abstraksi. Kita memecah masalah menjadi sub-masalah, lagi menjadi sub-sub-masalah, dan seterusnya, hingga permasalahan itu menjadi masalah individual yang mudah untuk diatasi. Setelah menyelesaikan satu sub-masalah itu, kita tidak memikirkan apa-apa lagi mengenai detail bagian itu, melainkan tinggal menganggapnya sebagai satu bagian fungsional untuk masalah selanjutnya, atau program keseluruhan yang sudah bisa langsung digunakan. Teknik seperti ini biasanya disebut divide and conquer.
Program ini akan menggunakan tiga class, class pertama adalah class NumberDisplay, kemudian ClockDisplay, dan Clock. Class NumberDisplay akan menunjukkan angka digital yang dapat menampung nilai dari nol ke batas yang ditentukan. Batasnya dapat dibuat saat membuat tampilannya. Jika digunakan, misal, untuk detik dalam jam digital, limitnya akan menjadi 60, menampilkan angka dengan angka 0 sampai 59. Saat angka dinaikkan, tampilan angka menjadi kembali ke 0 jika batas dicapai.
Class NumberDisplay:
Didalam method setValue, sebelum angka diterima, angka harus dicek apakah bernilai legal atau tidak. Jarak legalitas angka adalah 0 menuju 1 dibawah limit. Digunakan pernyataan if untuk memeriksa legalitas angka. Didalam pernyataan if digunakan simbol “&&” yang berarti operator logika “dan”. Ini membuat sebuah kondisi didalam if bernilai benar jika kondisi di kedua sisi simbol “&&” bernilai benar.
Method getDisplayValue mengembalikan nilai display, namun dalam format yang berbeda. Ini karena kita ingin output berupa string dua digit. Jadi, jika waktu sekarang 2:05, kita menginginkan tampilan output program 02:05, bukan 2:5. Agar output dapat menjadi dua digit meskipun nilai angka hanya satu digit, digunakan pernyataan if. Jika nilai angka dibawah 10, maka akan ditambahkan nol sebelum angka. Untuk menambah angka 0 digunakan cara concatenation, yaitu dengan menulis [“karakter” + value].
Method terakhir dalam NumberDisplay yang akan kita bahas adalah increment. Method ini berfungsi menambah nilai dalam angka sebanyak satu, dan mengembalikan nilai angka menjadi 0 jika limit dicapai. Untuk mengembalikan angka menjadi 0 saat nilai angka mencapai limit, digunakan operator modulo (%). Operator modulo menghitung sisa dari sebuah pembagian. Jadi jika nilai angka detik 3, 3 dibagi 60 akan bersisa 3, namun jika nilai angka sudah mencapai 60, 60 dibagi 60 akan menjadi tidak bersisa, yang berarti nilai hasil modulo adalah 0. Dengan ini nilai angka berhasil dikembalikan menjadi nol.
Class ClockDisplay:
Kelas kedua yang digunakan dalam program ini adalah ClockDisplay. Kelas ini berfungsi membuat dua tampilan angka untuk membuat tampilan waktu sepenuhnya. Kelas ini akan menampilkan tampilan jam Eropa berformat 24 jam. Jarak waktu yang ditampilkan adalah antara 00:00 (tengah malam) dan 23:59 (satu menit sebelum tengah malam). Tampilan pada jam menerima “detik” (melalui method timeTick) setiap menitnya dan bereaksi dengan menambah nilai angka pada tampilan. Jika nilai angka menit mencapai limit dan kembali ke nol, nilai angka jam akan bertambah.
Field displayString digunakan untuk mensimulasikan tampilan jam. String ini akan dibuat sebagai simulasi software untuk tampilan jam. GUI untuk menampilkan jam akan menggunakan string ini, namun cara pembuatannya tidak akan saya bahas (karena masih belum bisa).
Saat kita ingin merubah tampilan dari jam, kita harus memanggil method internal updateDisplay. Didalam program ini, method ini akan mengganti display string. Didalam jam asli, method ini juga ada, method ini akan merubah tampilan pada jam.
Selain display string, class ClockDisplay mempunyai dua field lainnya: hours dan minutes. Setiap field dapat menampung sebuah objek dengan tipe NumberDisplay. Cara penggunaan field hours dan minutes menggunakan classes define types.
Untuk menampilkan kedua objek angka dalam jam, tentu saja kedua objek itu harus dibuat terlebih dahulu. Caranya adalah dengan menulis kode didalam konstruktor ClockDisplay yang membuat dan menyimpan dua objek NumberDisplay. Karena konstruktor dieksekusi secara otomatis saat objek ClockDisplay dibuat, objek NumberDisplay akan dibuat secara otomatis juga dalam waktu yang bersamaan.
Didalam kode class ClockDisplay pasti kita sadari bahwa ada dua konstruktor yang melakukan hal yang nyaris sama. Yang membedakan mereka adalah cara yang berbeda untuk menginisialisasi objek ClockDisplay. Jika objek tanpa parameter yang digunakan, maka waktu awal jam adalah 00:00. Namun, jika kita ingin memulai jam dari waktu yang berbeda, kita bisa atur menggunakan konstruktor kedua. Cara seperti ini bernama overloading, dan dapat dilakukan baik pada konstruktor maupun method.
Didalam class ClockDisplay digunakan dua cara method calls. Yang pertama adalah internal method calls, kemudian external method calls. Internal method calls adalah sebuah cara pemanggilan method dimana letak method berada di class yang sama. Sedangkan untuk eksternal letak method yang ingin dipanggil berada di class yang berbeda.
Method timeTick berfungsi untuuk menambah value dalam jam, dengan memanggil method increment dari class NumberDisplay. Ini adalah salah satu contoh dari external method calls. Method timeTick juga memiliki pernyataan if untuk memeriksa apakah nilai jam juga harus ditambah atau tidak. Didalam fungsi if, juga dipanggil method lain dari class lain : getValue. Method ini mengembalikan nilai minutes. Jika nilainya nol, berarti itu waktunya untuk nilai hour ditambah.
Untuk output jam, saya menggunakan kode yang saya temukan di internet. Kode ini menampilkan jam dalam bentuk GUI yang sudah jadi. Didalam GUI ini waktu tick akan dipercepat menjadi 3 menit per detik, untuk mempercepat jalannya waktu, dan mempermudah testing program.
Class Clock:
Berikut adalah contoh output program: