March 2017

Sunday, March 26, 2017

Penggunaan Library dan Dialog Box


Pada blog post saya berikut ini saya akan menunjukkan cara membuat program membaca input yang dimasukkan dari user program menggunakan Scanner dan cara membuat Dialog Box menggunakan Java. Saya akan menunjukkan program yang menggunakan perintah Scanner pada Java sebagai cara mengetahui input dari user, program yang menampilkan dialog box, dan program pertama yang dimodifikasi sehingga menggunakan dialog box sebagai GUI user untuk memasukkan data.

Program pertama adalah sebuah program yang menyimpan nilai saldo user. Program ini didesain untuk memiliki dua slot saldo, yaitu account1 dan account2. Program ini akan menerima input dari user berupa saldo yang akan ditambahkan oleh user. Kemudian data yang diinput akan ditambahkan ke saldo yang sudah direkam kedalam data.

Program ini menggunakan dua class, yaitu class Account dan AccountTest. Berikut ilustrasi class diagram dari class Account:


Pada class Account digunakan variabel balance untuk menyimpan nilai saldo. Method credit digunakan untuk menambah nilai yang diinputkan oleh user kedalam saldo awal. Kemudian hasil penjumlahan itu disimpan menjadi nilai saldo saat itu. Method getBalance berfungsi untuk mengembalikan nilai saldo yang tersimpan.

Class AccountTest berfungsi untuk menampung input dari user dan mengembalikan output nya. Metode input menggunakan Scanner. Dapat dilihat dari baris ke-8, kita harus memasukan java.util.Scanner terlebih dahulu untuk dapat menggunakan Scanner. Kemudian, Scanner harus dibuat. Caranya adalah dengan mengimpor library ‘Scanner input = new [nama_Scanner] (System.in);’. Kemudian, untuk mendeklarasikan input setelah membuat Prompt, buat perintah ‘[variable] = input.nextLine();’, ini untuk menginput apa yang diinputkan dalam satu baris pertama yang diinputkan user. nextLine bisa diganti dengan nextInt untuk variabel yang beratribut int, atau nextDouble untuk variable yang beratribut double. Setelah melakukan input, program akan mengeluarkan saldo yang sudah diubah. Proses input dan output ini berulang dua kali, pertama untuk modifikasi saldo account1, yang kedua untuk account2.

Berikut kode dari kedua class tersebut:

Dan berikut gambar input dan output dari program:
 
Program kedua mengajarkan cara membuat dialog box pada java. Pembuatan dialog box menggunakan Swing. Program ini hanya menggunakan satu class tunggal. Fungsi dari program ini cukup simpel, hanyalah membuat output berupa dialog box dengan satu kalimat.

Cara untuk dapat membuat dialog box adalah dengan mengimpor library JOptionPane, caranya dengan memasukkan perintah ‘import javax.swing.JOptionPane;’. Dengan begitu swing dapat digunakan. Kemudian, untuk memunculkan dialog box, masukkan perintah ‘JOptionPane.showMessageDialog’. Dalam kasus program ini, saya hanya memunculkan satu kalimat biasa yang berkata ‘Welcome to Java’.

Berikut kode dari class:

Berikut output dari program:

Dalam program kedua diajarkan cara membuat input dengan dialog box. Bukan hanya menampilkan kalimat saja, dialog box juga dapat digunakan sebagai sarana input dan output dari suatu program. Untuk melakukan input, pertama digunakan baris ‘[Atribut] [variable] = JOptionPane.showInputDialog (“[kalimat prompt]”);’. Ini akan menampilkan dialog box berupa pertanyaan/kalimat prompt dan sebuah kotak yang bisa diisi dibawahnya. Kemudian ada tombol ‘OK’ di bawahnya. Input dapat dilaksanakan. Data yang dimasukkan user akan menjadi nilai dari variable yang dideklarasikan dalam baris itu.

Berikut kode dari class tersebut:

Kemudian gambar input dan output dari dialog box:


Kemudian program terakhir, adalah menggabungkan apa yang didapatkan dari ketiga program diatas. Tujuannya adalah memodifikasi class AccountTest agar input dan output dapat menggunakan dialog box sepenuhnya, tanpa harus membuka konsol. Akibatnya, bukannya modifikasi, lebih seperti membuat baru, karena cara Scanner tidak digunakan jika input digunakan menggunakan dialog box, jika caranya seperti yang diajarkan pada project sebelumnya. Maka dari itu, dibuatlah sebuah class baru, bernama AccountGUI, yang berfungsi menjalankan project seperti AccountTest, namun dengan interface dialog box.

Cara input yang dilakukan juga agak sulit, karena data yang dimasukkan harus berupa double, bukan String biasa. Maka dari itu, setelah input dilakukan, hasil input langsung diubah menjadi double, dan dapat dimasukkan ke dalam method credit. Kemudian, hasil perhitungan dikeluarkan melalui dialog box juga.

Berikut kode dari class AccountGUI:

Berikut input dan output dari dialog box:



Monday, March 20, 2017

Menghitung Luas dan Keliling


Berikut adalah program yang berfungsi untuk menghitung luas dan keliling dari bangun lingkaran dan bangun persegi/persegi panjang. Ada dua program yang saya buat, pertama untuk lingkaran (Circle), yang kedua untuk persegi panjang (Rectangle).

Didalam kedua program format input dan outputnya nyaris sama. Pada program lingkaran, yang perlu dimasukkan adalah panjang jari-jari lingkaran dan warna dari lingkaran, sedangkan pada program persegi panjang yang perlu dimasukkan adalah panjang, lebar, dan warna dari persegi panjang. Output dari kedua program adalah data dan warna dari lingkaran atau persegi panjang, dan luas dan keliling dari bangun tersebut.

Pada waktu memasukkan data, jika warna dari bentuk dimasukkan, data lain yang diisi haruslah lengkap. Namun, jika tidak ingin memasukkan warna, itu bisa dilakukan selama data yang lain diisi dengan lengkap. Program juga dapat berjalan jika program dijalankan tanpa melakukan input apapun.

Berikut adalah visualisasi class dari program Circle.


Class Circle menggunakan dua variabel, radius untuk jari-jari dan color untuk warna. Method getArea berfungsi untuk menghitung luas lingkaran. Method getCircumference berfungsi untuk menghitung keliling dari lingkaran. Method setColor dan setRadius masing-masing berfungsi untuk mengatur warna dan jari-jari dari lingkaran, kemudian method getColor dan getRadius digunakan untuk memberikan data warna dan jari-jari dari lingkaran. Method toString digunakan untuk memberi output mengenai data lingkaran, dengan menampilkan warna dan jari-jari dari lingkaran.

Berikut coding dari class Circle dan class Main untuk program Circle.

Class Circle:


Class Main:

Berikut adalah visualisasi class Rectangle milik program Rectangle.











Variabel yang digunakan dalam class ini adalah color, length, dan width. Method getArea dan getCircumference masing-masing digunakan untuk mencari luas dan keliling dari persegi panjang. Method getColor, getLength, dan getWidth digunakan untuk menampilkan data warna, panjang, dan lebar dari persegi panjang. Method yang terakhir, toString, berfungsi untuk menampilkan data dari persegi panjang, berisikan panjang, lebar, dan warna dari persegi panjang tersebut.

Berikut adalah kode dari kedua class dalam program Rectangle, class Rectangle dan class Main.

Class Rectangle:


Class Main:

Sunday, March 12, 2017

PBO - Membuat Tampilan Jam Digital 24-jam


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:

Monday, March 6, 2017

PBO - Komposisi, Enumerasi, dan Static Field


Sebuah kelas dapat memiliki beberapa reference ke class lain sebagai anggota class nya. Ini dapat disebut sebagai komposisi dan dapat disebut memiliki hubungan has-a relationship. Contohnya adalah, misal ada sebuah objek jam alarm. Jam alarm harus mengetahui waktu saat itu dan waktu dimana ia harus membunyikan alarmnya. Jadi didalam object JamAlarm akan ada dua reference ke objek Waktu, dimana yang satu adalah waktu saat itu, dan yang satu lagi waktu dimana alarm akan berbunyi.

Contoh komposisi dibawah ini memiliki 3 class, Date, Employee, dan EmployeeTest.

Class Date mendeklarasikan variabel month, day, dan year untuk merepresentasikan sebuah tanggal. Konstruktor mendapatkan 3 parameter int. Method checkMonth digunakan untuk memvalidasi bulan. Jika bulan lebih dari 12, yang berarti out of range, method akan mengeluarkan exception. checkDay berfungsi hampir sama dengan checkMonth, namun ia memeriksa validasi dari tanggal, berdasarkan bulan dan tahun didalam tanggal tersebut. Namun, jika semisal tanggal tidak valid, akan diperiksa terlebih dahulu apakah bulan yang dimasukkan adalah Februari atau tahun itu adalah kabisat, namun jika masih salah akan dikeluarkan exception.

Class Employee memiliki instance variable firstName, lastName, birthDate dan hireDate. birthDate dan hireDate adalah referensi ke object Date. Dengan menggunakan Date sebagai parameter birthDate dan hireDate dapat menjadi instance variable yang mereferensi objek dari class lain. Constructor Employee mengambil 4 parameter - first, last, dateOfBirth dan dateOfHire. Saat method toString dipanggil, ia akan return sebuah String yang berisi nama pegawai dan representasi String dari kedua objek Date. Setiap String ini didapatkan dengan panggilan implisit dari method toString menuju class Date.

Class EmployeeTest membuat dua objek Date untuk mewakili tanggal ulang tahun dan tanggal diterimanya pegawai itu. Kemudian instance variable Employee dibuat dengan passing constructor dua objek String dan dua objek Date. Seteah itu method toString milik class Employee dipanggil secara implisit untuk output.

Berikut adalah kode ketiga class:

Class Date:


Class Employee:


Class EmployeeTest:


Berikut adalah hasil output:



Enumerations

Didalam program ini, akan dibahas tentang hubungan antara enum dan class. Enum dideklarasikan dengan enum declaration, yang berisi konstanta enum yang diurutkan dengan koma. Deklarasi ini bisa berisi komponen lain dari class, seperti constructor, field atau method. Didalam program ini akan ada dua class, yaitu Book dan EnumTest.

Didalam class book ditunjukkan bagaimana cara mendeklarasika instance variable, constructor, dan method didalam enum. Deklarasi enum berisi dua bagian, bagian konstanta enum dan bagian enum lainnya. Masing-masing bagian dapat diikuti argumen yang berlanjut ke enum constructor.
Berikut adalah contoh kedua class:

Class Book:


Class EnumTest:


Berikut adalah output dari program:
 


Static Class Members

Setiap objek pasti memiliki instance variable yang sama di tiap class. Namun dalam beberapa kasus, hanya ada satu variable tertentu yang harus dibagikan oleh semua objek didalam class. Dalam kasus seperti demikian, static field digunakan. Variabel static menunjukkan classwide information - semua objek didalam class menggunakan data yang sama. Deklarasi variabel static dimulai dengan keyword static.

Didalam program dibawah ini akan dideklarasikan dua buah class - Employee dan EmployeeTest. Class Employee mendeklarasikan variabel count static dan method static getCount. Variabel count static dinisialisasi dari 0. Jika variabel static tidak diinisialisasi, compiler akan menggunakan nilai default - dalam kasus ini 0, sebagai nilai default untuk tipe int. Variabel count menghitung jumlah objek yang class Employee telah buat.

Berikut adalah contoh kedua class:

Class  Employee:


Class EmployeeTest:

Contoh output: