bab ii
TRANSCRIPT
2. TINJAUAN PUSTAKA
2.1. Pengantar Ilmu Kriptografi
Ilmu kriptografi adalah ilmu yang mempelajari tentang penyembunyian
huruf atau tulisan sehingga membuat tulisan tersebut tidak dapat dibaca orang
yang tidak berkepentingan. Kriptografi sudah dipakai sejak zaman Julius Caesar
dimana akan mengirimkan pesan kepada panglimanya tetapi tidak mempercayai
kurir pembawa pesan tersebut.
Kriptografi mempunyai 2 (dua) bagian yang penting, yaitu enkripsi dan
dekripsi. Enkripsi adalah proses dari penyandian pesan asli menjadi pesan yang
tidak dapat diartikan seperti aslinya. dekripsi sendiri berarti merubah pesan yang
sudah disandikan menjadi pesan aslinya. Pesan asli biasanya disebut plaintext,
sedangkan pesan yang sudah disandikan disebut ciphertext..
Pada gambar 2.1 dapat dilihat bahwa masukan berupa plaintext, akan
masuk kedalam blok enkipsi dan keluarnya akan berupa ciphertext, kemudian
ciphertext akan masuk kedalam blok dekrripsi dan keluarnya akan kembali
menjadi plaintext semula.
Gambar 2.1 Proses Enkripsi dan Dekripsi
Ada 2 (dua) model algoritma enkripsi yang menggunakan kunci, yaitu
kunci simetrik dan kunci asimetrik.
Enkripsi kunci simetrik yang biasanya disebut enkripsi konvensial adalah
enkripsi yang menggunakan kunci yang sama untuk enkripsi maupun dekripsi,
dari Gambar 2.2 terlihat bahwa untuk mengenkripsi maupun mendekripsi pesan
hanya menggunakan satu buah kunci (K) saja.
Kunci K
5
DekripsiEnkripsi
ChipertextPlaintext Plaintext
Gambar 2.2 Proses Enkripsi Kunci Simetrik
Penggunaan metode ini membutuhkan persetujuan antara pengirim dan
penerima tentang kunci sebelum mereka saling mengirim pesan. Keamana dari
kunci simetrik tergantung pada kerahasiaan kunci, apabila seorang penyusup
dapat menemukan kunci dengan mudah dapat membaca pesan yang sudah
dienkripsi.
Enkripsi kunci simetrik dapat dibagi kedalam 2 (dua) kelompok yaitu
metode stream cipher dan metode block ciphertext .
Enkripsi kunci asimetrik (biasa disebut enkripsi kunci publik) dibuat
sedemikian rupa sehingga kunci yang dipakai untuk enkripsi berbeda dengan
kunci yang dipakai untuk dekripsi. Enkripsi kunci publik disebut demikian karena
kunci untuk enkripsi boleh disebarluaskan kepada umum sedangkan kunci untuk
mendekripsi hanya disimpan oleh orang yang bersangkutan. Enkripsi asimetrik
dapat ditulis sebagai berikut :
Ek (P) = C
Dk (C) = P
Contohnya seperti pada Gambar 2.3 bila seseorang ingin mengirim pesan
kepada orang lain maka orang tersebut menggunakan kunci publik orang tersebut
untuk mengenkripsi pesan yang kita kirim kepadanya lalu orang tersebut akan
mendekripsi pesan tersebut dengan kunci privat miliknya.
Kunci Publik Kunci Privat
6
DekripsiEnkripsi
ChipertextPlaintext Plaintext
Gambar 2.3 Enkripsi Kunci Asimetrik
2.2. Tujuan dari Kriptografi
Seperti juga perkembangan ilmu kriptografi, tujuan-tujuan dari kriptografi
teruslah berkembang. Bila pertama kali dibuat hanya untuk keamanan data saja,
tetapi sekarang semakin banyak tujuan-tujuan yang ingin dicapai, yaitu :
1. Privasi, Musuh tidak dapat membongkar tulisan yang kita kirim.
2. Autentikasi, Penerima pesan dapat meyakinkan dirinya bahwa pesan
yang diterima tidak terjadi perubahan dan berasal dari orang yang
diinginkan.
3. Tanda tangan, penerima pesan dapat meyakinkan pihak ketiga bahwa
pesan yang diterima berasal dari orang yang diinginkan .
4. Minimal, tidak ada yang dapat berkomunikasi dengan pihak lain
kecuali berkominakasi dengan pihak yang diinginkan.
5. Pertukaran bersama, suatu nilai (misalnya tanda tangan sebuah
kontrak) tidak akan dikeluarkan sebelum nilai lainnya (misalnya tanda
tangan pihak lain) diterima.
6. Koordinasi, didalam komunikasi dengan banyak pihak, setiap pihak
dapat berkomunikasi untuk tujuan yang sama walaupun terdapat
kehadiran musuh.
2.3. Sekilas Mengenai GPRS
7
DekripsiEnkripsi
ChipertextPlaintext Plaintext
GPRS merupakan sistem transmisi berbasis paket untuk GSM yang
menggunakan prinsip 'tunnelling'. Ia menawarkan laju data yang lebih tinggi. Laju
datanya secara kasar sampai 160 kbps dibandingkan dengan 9,6 kbps yang dapat
disediakan oleh rangkaian tersakelar GSM. Kanal-kanal radio ganda dapat
dialokasikan bagi seorang pengguna dan kanal yang sama dapat pula digunakan
dengan berbagi antar pengguna sehingga menjadi sangat efisien. Dari segi biaya,
harga mengacu pada volume penggunaan. Penggunanya ditarik biaya dalam
kaitannya dengan banyaknya byte yang dikirim atau diterima, tanpa
memperdulikan panggilan, dengan demikian dimungkinkan GPRS akan menjadi
lebih cenderung dipilih oleh pelanggan untuk mengaksesnya daripada layanan-
layanan IP.
GPRS merupakan teknologi baru yang memungkinkan para operator
jaringan komunikasi bergerak menawarkan layanan data dengan laju bit yang
lebih tinggi dengan tarif rendah, sehingga membuat layanan data menjadi menarik
bagi pasar massal. Para operator jaringan komunikasi bergerak di luar negeri kini
melihat GPRS sebagai kunci untuk mengembangkan pasar komunikasi bergerak
menjadi pesaing baru di lahan yang pernah menjadi milik jaringan kabel, yakni
layanan internet. Kondisi ini dimungkinkan karena ledakan penggunaan internet
melalui jaringan kabel (telepon) dapat pula dilakukan melalui jaringan bergerak.
Layanan bergerak yang kini sukses di pasar adalah, laporan cuaca, pemesanan
makanan, berita olah raga sampai ke berita-berita penting harian. Dari
perkembangan tersebut, dapat dirasakan dampaknya pada kemunculan berbeagai
provider HP yang bersaing menawarkan tarif GPRS yang semakin terjangkau.
Dalam teorinya GPRS menjanjikan kecepatan mulai dari 56 kbps sampai
115 kbps, sehingga memungkinkan akses internet, pengiriman data multimedia ke
komputer, [[notebook]] dan [[handheld computer]]. Namun, dalam
implementasinya, hal tersebut sangat tergantung faktor-faktor sebagai berikut:
1. Konfigurasi dan alokasi time slot pada level BTS.
2. Software yang dipergunakan.
3. Dukungan fitur dan aplikasi ponsel yang digunakan
8
Ini menjelaskan mengapa pada saat-saat tertentu dan di lokasi tertentu
akses GPRS terasa lambat, bahkan lebih lambat dari akses CSD yang memiliki
kecepatan 9,6 kbps.
2.4. Skema Transmisi Data
Gambar 2.4 Komponen Dasar Jaringan GPRS
“User sessions” terhubung dari mobile station (MS) ke Base Transceiver
Station (BTS), yang juga terhubung ke Base Station Controller (BSC).
Kombinasi fungsi dari BTS dan BSC sering dikenal sebagai Base Station
Subsystem (BSS). Dari sini, SGSN menyediakan akses ke GGSN, yang berperan
sebagai gateway ke “data network”. Kumpulan SGSNs dan GGSNs dalam
jaringan GPRS dikenal sebagai GPRS Support Nodes (GSNs). Koneksi antara
SGSN dan GGSN menggunakan protokol yang disebut “GPRS Tunneling
Protocol (GTP)”. Koneksi antara GGSN dan PDN menggunakan Internet
Protocol (IP). Untuk memberikan “mobile sessions”
sebuah IP address, GGSN menggunakan Dynamic Host Configuration Protocol
(DHCP). GGSN juga menggunakan server Remote Dial-In User Service
(RADIUS) untuk “authorisasi dan authentikasi “remote users”. Servis DHCP dan
9
RADIUS dapat dibuat di “global configuration level” (GPRS DHCP & RADIUS
commands).
2.5. Pemrograman Java
Java adalah bahasa pemrograman serbaguna. Java dapat digunakan untuk
membuat suatu program sebagaimana membuat program dengan bahasa
pemrograman seperti Pascal atau C++. Java juga mendukung sumber daya
internet, yaitu World Wide Web. Java juga mendukung aplikasi client-server, baik
dalam jaringan lokal (LAN) maupun jaringan berskala luas (WAN).
Java dikembangkan oleh Sun Microsystems pada Agustus 1991, dengan
nama semula Oak. Konon Oak adalah pohon semacam jati yang terlihat dari
jendela tempat pembuatnya, James Glosing. Ada yang mengatakan bahwa Oak
adalah singkatan dari “Object Application Kernel”, tetapi ada yang menyatakan
hal itu muncul setelah nama Oak diberikan. Pada 1995, karena nama Oak
dianggap kurang komersial, maka diganti menjadi Java.
Platform Java memiliki tiga buah edisi yang berbeda, yaitu Java2 Standard
Edition (J2SE), Java2 Enterprise Edition (J2EE), dan Java2 Micro Edition
(J2ME). Masing-masing diarahkan untuk tujuan tertentu dan untuk lingkungan
komputasi yang berbeda.
Java2 Enterprise Edition (J2EE) : J2EE merupakan kelompok dari
beberapa API dari Java dan teknologi selain Java. J2EE digunakan pada
perangkat keras yang mempunyai spesifikasi dan memory yang besar seperti
pada komputer server.
Java2 Standard Edition (J2SE) : J2SE merupakan lingkungan dasar
dari Java yang merupakan inti dari bahasa pemrograman Java. J2SE
didesain untuk dapat berjalan pada komputer desktop dan komputer
workstations.
Java2 Micro Edition (J2ME) : J2ME didesain untuk piranti dengan
memori kecil, layar display terbatas dan power pemrosesan yang juga
terbatas seperti ponsel, pager atau PDA.
10
2.5.1. Tipe Data Primitif
Java memiliki delapan tipe data primitif, meliputi 3 tipe untuk bilangan
bulat, 2 tipe untuk bilangan titik mengambang, dan sisanya untuk karakter dan
boolean.
Gambar 2.5 Tipe Data Primitif pada Java
2.5.1.1. Tipe Bilangan Bulat
Ada empat macam tipe bilangan bulat. Perbedaan masing-masing tipe
data terletak pada jangkauan nilai yang dicakup. Tabel 2.1 memperlihatkan
perbedaan keempat tipe bilangan bulat.
Tabel 2.1 Tipe Data Bilangan Bulat
Tipe Ukuran Jangkauan Nilai
byte 8 bit -128 s/d 127
short 16 bit -32.768 s/d 32.767
int 32 bit -2.147.483.648 s/d 2.147.483.647
long 64 bit -9.232.372.036.854.775.808 s/d
9.232.372.036.854.775.807
2.5.1.2. Tipe Bilangan Titik Mengambang
11
Dua tipe data yang berkaitan dengan bilangan titik mengambang adalah
float dan double. Perbedaan kedua tipe ini diperlihatkan pada Tabel 2.2.
Tabel 2.2 Tipe Data Bilangan Titik Mengambang
Tipe Ukuran Jangkauan Nilai
float 32 bit, presisi 6-7 digit -3.4E38 s/d +3.4E38
double 64 bit, presisi 15-15 digit -1.7E308 s/d 1.7E308
2.5.1.3. Tipe Data Karakter
Tipe data char adalah tipe untuk menyatakan sebuah karakter. Dalam hal
ini dapat berupa kerakter apa saja (yang tercakup dalam himpunan kode Unicode).
2.5.1.4. Tipe Data Boolean
Tipe data boolean digunakan untuk menangani keadaan logika atau
keadaan dua kemungkinan nilai. Nilai yang dapat digunakan adalah true (berarti
benar) dan false (berarti salah).
2.5.2. Literal
Literal adalah suatu nilai yang ditulisakn pada kode sumber Java. Setiap
literal mempresentasikan nilai suatu tipe, dimana tipe itu sendiri menjelaskan
bagaimana sifat nilai tersebut dan bagaimana penyimpanannya. Literal pada Java
antara lain:
literal bilangan,
literal karakter,
literal boolean, dan
literal string.
2.5.2.1. Literal Bilangan
Literal bilangan bulat tergolong sebagai long. Simbol L atau l (huruf l)
dapat ditambahkan di belakang bilangan. Contoh :
Tabel 2.3 Literal Bilangan
12
Literal Keterangan
4L Bilangan 4 bertipe long
-4L Bilangan -4 bertipe long
2.5.2.2. Literal Karakter
Literal karakter digunakan untuk menyatakan sebuah karakter. Karakter
ditulis dalam tanda petik tunggal Contoh :
Tabel 2.4 Literal Karakter
Literal Keterangan
‘a’ Karakter huruf a
‘#’ Karakter simbol #
‘8’ Karakter angka 8
Sebagaimana halnya pada C atau C++, pada Java terdapat istilah kode
escape. Kode escape adalah kode karakter yang penulisannya diawali dengan
simbol “\”. Tabel 2.5 memperlihatkan sejumlah karakter yang penulisannya
diawali dengan simbol “\”.
Tabel 2.5 Karakter Escape
Kode Keterangan
\b Backspace
\f Formfeed
\n Newline
\r Carriage return
\t Tab
\’ Petik tunggal
\” Petik ganda
\ddd Oktal (dd = 0 s/d 377)
\xdd Hexadesimal (dd = 0 s/d FF atau ff)
2.5.2.3. Literal Boolean
13
Literal boolean adalah literal yang hanya dapat berupa kata kunci true
atau false.
true berarti benar, dan
false berarti salah.
2.5.2.4. Literal String
String berarti deretan atau kombinasi sejumlah karakter. String pada
Java bukanlah sebagai tipe data primitif, melainkan sebagai instan kelas bernama
String. Suatu string tidak selamanya mengandung banyak karakter. Suatu string
juga bisa tidak memiliki karakter satupun. String seperti ini disebut string kosong.
Penulisannya berupa tanda petik ganda dan kemudian langsung diikuti dengan
petik ganda (tak ada spasi di antara kedua tanda petik ganda tersebut). Literal
string dapat pula mengandung karakter seperti newline, tab, dan sebagainya.
Bahkan bisa pula mengandung tanda petik ganda.
2.5.2.5. Definisi Konstanta
Java memungkinkan pendefinisian konstanta melalui kata kunci final.
Contoh :
final double PI = 3.14;
Menyatakan bahwa PI adalah konstanta bertipe double dengan nilai 3,14. Kata
kunci final menyatakan bahwa PI tak dapat diubah setelah didefinisikan.
2.5.3. Variabel
Variabel adalah satuan dasar penyimpanan dalam program Java. Suatu
variabel didefinisikan dengan kombinasi identifier, tipe, dan cakupan. Variabel
dapat bersifat lokal atau sementara, misalnya di dalam perulangan for, atau dapat
juga berupa variabel instans yang dapat diakses oleh semua method dalam class.
Variabel yang digunakan dalam program Java perlu dideklarasikan. Dalam
pendeklarasian, tipe dan nama variabel disebutkan, contoh:
String kalimat; atau int angka;
14
Setelah variabel dideklarasikan, variabel dapat diberi nilai. Caranya adalah
dengan menggunakan operator sama dengan (=), contoh:
kalimat = “Hello...”; atau angka = 5;
atau dapat pula memberikan nilai saat mendeklarasikan variabel, contoh:
String kalimat = “Hello..”;
2.5.4. Ekspresi
Ekspresi atau ungkapan adalah suatu bentuk yang menghasilkan suatu
nilai. Dalam bentuk yang sederhana, ekspresi berupa sebuah literal atau variabel.
Dalam bentuk yang lebih kompleks, suatu ekspresi melibatkan operator dan
operand. Salah satu pemakaian ekspresi adalah pada pernyataan yang
menggunakan statement println(). Contoh :
System.out.println(1 + 2 * 3);
akan menampilkan hasil ekspresi 1 + 2 * 3 ke layar.
2.5.5. Operator
Operator adalah simbol atau karakter khusus yang digunakan dalam suatu
ekspresi untuk menghasilkan suatu nilai. Menurut jumlah operand yang
dilibatkan, operator diklasifikasikan menjadi:
Operator Unary, yaitu operator yang hanya melibatkan satu operand.
Operator Binary, yaitu operator yang melibatkan dua buah operand.
Operator Tertiary, yaitu operator yang melibatkan tiga buah operand.
2.5.5.1. Operator Matematika
Tabel 2.6 Operator Matematika
Operator Keterangan
+Penjumlahan
Tanda plus
-Pengurangan
Tanda minus
* Perkalian
15
/ Pembagian
Semua operator matematika di atas melibatkan dua buah operand,
kecuali operator + yang berkedudukan sebagai tanda plus dan operator – yang
berkedudukan sebagai tanda minus. Operator + dan – sebagai tanda positif atau
tanda negatif hanya melibatkan satu operand.
Sebenarnya ada cara singkat untuk menggunakan operasi aritmatik binary
dalam suatu tugas. Misalnya :
x += 4;
adalah sama dengan
x = x + 4;
Operator *, /, dan % mempunyai prioritas yang sama, tetapi lebih tinggi
daripada + atau – yang berkedudukan sebagai operator binary. Sebagai contoh,
jika terdapat ekspresi seperti berikut :
1 + 2 * 3
maka 2 * 3 akan dikerjakan terlebih dahulu. Dengan demikian hasil ekspresi 1 +
2 * 3 adalah 7 bukan 9.
2.5.5.2. Operator Penambahan dan Pengurangan
Pada Java, seperti halnya pada C/ C++, memiliki operator increment dan
decrement, yaitu x++, yang berarti menambahkan satu kepada nilai yang terdapat
pada variabel x, dan x--, yang berarti mengurangi satu dari nilai variabel x.
Ekspresi x++ dan ++x mempunyai makna yang berbeda. Ekspresi x++
akan menghasilkan nilai sebesar nilai x, tetapi selanjutnya x akan dinaikkan
sebesar satu. Perbedaannya terlihat pada tabel 2.7 di bawah ini.
Tabel 2.7 Operator Penambah dan Pengurang
x semula Pernyataan Hasil y Hasil x
5 y = x++; 5 6
5 y = ++x; 6 6
5 y = x--; 5 4
5 y = --x; 4 4
16
2.5.5.3. Operator Penggabungan
Pada Java, operator + juga dapat digunakan pada string. Gunanya adalah
untuk menggabungkan dua buah string menjadi sebuah string baru. Contoh,
perhatikan pernyataan berikut:
System.out.println(“Selamat belajar” + “ Java”);
sama dengan “Selamat belajar Java”
2.5.5.4. Operator Penugasan
Operator penugasan berguna untuk memberikan nilai ke suatu variabel.
Tabel 2.8 dan Tabel 2.9 memperlihatkan sejumlah operator yang tergolong dalam
kategori sebagai operator penugasan.
Tabel 2.8 Operator Penugasan
Operator Keterangan
= Pemberian nilai
+ = Penambahan bilangan
- = Pengurangan bilangan
* = Perkalian bilangan
/ = Pembagian bilangan
% = Pemerolehan sisa bagi
Tabel 2.9 Operator Penugasan yang Berkaitan dengan Operasi Bit
Operator Keterangan
& = a &= x identik dengan a = a & x
^ = a ^= x identik dengan a = a ^ x
| = a |= x identik dengan a = a | x
<< = a <<= x identik dengan a = a << x
>> = a >>= x identik dengan a = a >> x
17
>>> = a >>>= x identik dengan a = a >>> x
2.5.5.5. Operator Pembanding
Operator pembanding atau disebut juga operator relasional berguna
untuk melakukan perbandingan. Operator relasional dapat dilihat pada tabel 2.10
berikut:
Tabel 2.10 Operator Relasional untuk Bilangan
Operator Makna Contoh
= = Kesamaan a = = b
! = Ketidaksamaan a != b
> Lebih dari a > b
< Kurang dari a < b
> = Lebih dari atau sama dengan a >= b
< = Kurang dari atau sama dengan a <= b
Ekspresi yang menggunakan operator relasional akan menghasilkan nilai
benar (true) atau salah (false). Operator relasional hanya berlaku untuk
membandingkan tipe data primitif (string tidak berlaku).
2.5.5.6. Operator Logika
Operator logika biasa digunakan untuk membentuk suatu keadaan logika
(boolean) berdasarkan sebuah atau dua buah ekspresi kondisi (tergantung operator
logika yang digunakan). Java menyediakan 3 buah operator logika, yaitu :
a. Operator && (dan)
Bentuk pemakaian operator &&:
operand_1 && operand_2
Hasil ekspresi benar jika kedua operand bernilai benar.
b. Operator || (atau)
Bentuk pemakaian operator ||:
operand_1 || operand_2
18
Hasil ekspresi akan bernilai benar jika terdapat operand yang bernilai
benar.
c. Operator ! (bukan)
Operator ini berguna untuk membalikkan logika. Hasil bernilai benar jika
ekspresi_kondisi bernilai salah, dan jika ekspresi_kondisi bernilai benar maka
hasilnya akan bernilai salah. Bentuk pemakaiannya:
! ekspresi_kondisi
2.5.6. Pernyataan Berkondisi
Pada Java terdapat dua buah pernyataan yang digunakan untuk melakukan
seleksi terhadap suatu kondisi, yaitu pernyataan if dan pernyataan switch.
2.5.6.1. Pernyataan if
Pernyataan if merupakan salah satu bentuk pernyataan berkondisi yang
berguna untuk pengambilan keputusan terhadap dua buah kemungkinan.
Pernyataan if sendiri pada dasarnya memiliki dua buah bentuk, yaitu yang tidak
mengandung else dan yang mengandung else.
a. Pernyataan if Sederhana
Bentuk tersederhana if berupa:
if (kondisi) {
// blok pernyataan yang dijalankan jika kondisi
bernilai benar
}
b. Pernyataan if-else
Bentuk kedua pernyataan if berupa :
if (kondisi) {
// blok pernyataan yang dijalankan jika kondisi
bernilai benar
} else {
19
// blok pernyataan yang dijalankan jika kondisi
bernilai salah
}
c. Pernyataan if Bersarang
Suatu pernyataan if dapat berada di dalam pernyataan if juga. Pernyataan
if seperti ini disebut if bersarang (nested if).
2.5.6.2. Pernyataan switch
Pernyataan switch memungkinkan untuk melakukan sejumlah tindakan
berbeda terhadap sejumlah kemungkinan nilai. Bentuk perintah ini:
switch (ekspresi) {
case nilaiSatu:
pernyataan_1;
break;
case nilaiDua:
pernyataan_2;
break;
....
[default: pernyataan_n;]
}
2.5.7. Perulangan Proses
Untuk menangani perulangan terhadap suatu proses, Java menyediakan
beberapa pernyataan, antara lain while, do .. while, dan for.
2.5.7.1. Pernyataan while
Pernyataan while berguna untuk melakukan proses yang berulang.
Bentuk pernyataannya sebagai berikut:
while (kondisi) {
// blok pernyataan; }
Dalam hal ini blok pernyataan akan dijalankan secara terus menerus
selama kondisi bernilai benar (true).
20
2.5.7.2. Pernyataan do..while
Pernyataan do..while menyerupai pernyataan while. Bentuk
pernyataannya adalah sebagai berikut:
do {
// blok pernyataan;
} while (kondisi);
Pada pernyataan ini, blok pernyataan yang terdapat dalam do..while paling
tidak dieksekusi sekali.
2.5.7.3. Pernyataan for
Pernyataan for juga berfungsi untuk menangani perulangan. Bentuk
pemakaiannya sebagai berikut:
for (inisialisasi; kondisi; kenaikan_penurunan) {
// blok pernyataan; }
2.5.8. Array
Array pada Java adalah objek yang dapat digunakan untuk menyimpan
sejumlah data yang sejenis. Elemen yang disimpan pada array dapat berupa tipe
primitif (misalnya int) ataupun instant kelas (objek).
Pada bagian pendeklarasian, array memiliki dua bentuk, yaitu:
tipePrimitif namaVariabelArray[];
atau
namaKelas namVariabelArray[];
Contoh:
String kota[];
int nilai[];
Sedangkan pada bagian penciptaan objek array dan penugasan objek ke
variabel array dilakukan dengan menggunakan kata kunci new. Bentuknya adalah
sebagai berikut:
namaKelas namaVariabel = new namaKelas[jumlahElemen];
atau
tipePrimitif namaVariabel = new tipePrimitif[jumlahElemen];
Contoh:
21
kota = new String[5];
nilai = new int[3];
Kemudian elemen array diakses melalui notasi:
namaVariabelArray[subskrip]
Subskrip berupa nomor elemen. Dalam hal ini elemen pertama memiliki
subskrip berupa nol, elemen kedua mempunyai subskrip 1, dan seterusnya.
Contoh:
kota[0] = “Jakarta”;
2.5.9. Objek dan Kelas
Java merupakan bahasa pemrograman yang berorientasi pada objek
(Object Oriented Programming / OOP) yang menjadikan objek sebagai
komponen utama dalam program. Objek menggabungkan data dan fungsi sebagai
satu kesatuan, sedankan pada pemrograman yang tidak berorientasi objek,
fungsilah ayng menjadi perhatian utama. Pendekatan pemrograman berorientasi
objek membuat pengembanagn program dapat dilakukan dengan lebih mudah,
mengurangai duplikasi kode, dan mengurangi kesalahan.
Pada pemrograman berorientasi objek, terdapat dua istilah yang sangat
terkenal yaitu kelas dan objek. Kedua istilah ini sering tertukar. Maka untuk
membedakannya dapat dianalogikan sebagai berikut:
Kelas itu seperti cetakan kue.
Kelas adalah cetakan untuk objek.
Objek dibuat dengan mula-mula membuat variabel yang kelak merujuk ke
objek. Variabel ini disebut variabel objek (object variable). Lalu objek diciptakan
melalui new dan hasilnya ditugaskan ke variabel objek. Contoh:
Date waktu;
waktu = new Date();
atau dapat langsung ditulis sebagai berikut:
Date waktu = new Date();
22
Kelas dalam Java didefinisikan dengan menggunakan kata kuci class.
Contoh sederhana dari penciptaan kelas:
class Mobil {
String warna;
int tahunProduksi; }
Pada contoh di atas, kelas yang dibuat bernama Mobil, lalu warna dan
tahunProduksi disebut variabel instan. Kemudian untuk menggunakan kelas
Mobil tadi dapat dilakukan dengan cara membuat sebuah objek dari kelas Mobil.
Contoh:
Mobil mobilku = new Mobil();
Mobilku.warna = “Merah”;
2.5.10. Konstruktor
Metode konstruktor atau biasa disebut konstruktor saja adalah metode
yang dapat digunakan untuk memberikan nilai awal saat objek diciptakan. Metode
ini akan dipanggil secara otomatis oleh Java ketika new dipakai untuk
menciptakan kelas instan. Konstruktor memiliki nama yang sama dengan kelas
dan tidak memiliki nilai balik (termasuk tidak boleh terdapat kata kunci void).
Contoh:
class Mobil {
String warna;
int tahunProduksi;
public Mobil() {
warana = “Merah”;
tahunProduksi = 2004;
} }
2.5.11. Pewarisan
Pewarisan merupakan konsep dalam pemrograman berorientasi objek yang
memungkinkan untuk membuat suatu kelas dengan didasarkan pada kelas yang
sudah mewarisi semua metode dan variabelnya. Untuk mewariskan dapat dibuat
dengan menggunakan bentuk:
class KelasTurunan extends KelasDasar {
// blok tubuh kelas; }
23
Pada bentuk diatas,
KelasTurunan menyatakan kelas turunan yang akan dibuat berdasarkan
sebuah kelas dasar.
KelasDasar yang terletak sesudah kata kunci extends menyatakan super
kelas.
2.5.12. Penanganan Eksepsi
Eksepsi adalah keadaan tidak normal yang muncul pada suatu bagian
program pada saat dijalankan. Penanganan eksepsi pada Java membawa
pengelolaan kesalahan program saat dijalankan ke dalam orientasi objek. Sistem
Java akan melontarkan suatu eksepsi apabila terdapat suatu kesalahan sewaktu
program dijalankan.
Penanganan eksepsi pada java diatur dengan lima kata kunci: try, catch,
throw, throws, dan finally. Berikut ini bentuk dasar bagian penanganan eksepsi:
try {
// Blok Pernyataan;
catch (exception e){
// Penanganan Eksepsi; }
Bentuk throws:
public tipe1 NamaMetode (tipe2 x, tipe3 y) throws
JenisEksepsi {
..... ; }
2.5.13. Utilitas pada Java
Ada beberapa jenis utilitas pada java yang terdapat pada paket java util,
namun pada penulisan ilmiah ini penulis hanya menggunakan dua buah utilitas,
yaitu Random dan ArrayList.
Kelas Random merupakan kelas yang memungkinkan melakukan
pembentukkan bilangan secara acak. Konstruktor pada kelas ini ada dua macam:
Random() dan Random(long seed).
Tabel 2.11 Konstruktor Random
Kosntruktor Random
24
Random()
Merandom berdasarkan waktu
Random(long seed)
Merandom berdasarkan satuan seed yang ditentukan pemrogram
ArrayList adalah kelas suatu senarai (List) yang memungkinkan
pembuatan objek array yang ukurannya dapat diubah sewaktu-waktu. Konstruktor
kelas ini berbentuk seperti berikut:
Tabel 2.12 Konstruktor ArrayList
Kosntruktor Random
ArrayList()
Kapasitas senarai diatur sebesar 10
ArrayList(int kapasitasAwal)
Kapasitas senarai ditentukan oleh kapasitas awal
2.5.14. Pemrograman AWT
Paket Java AWT (Abstract Window Toolkit) menggunakan sistem
penjendelaan pada komputer lokal. Dengan demikian akan terdapat tampilan
window yang berbeda antara sistem operasi Windows dengan Linux atau MacOS.
Segala tampilan pada sistem window sebenarnya didasarkan pada kelas
Component. Contoh sebagian hirarki kelas pada AWT adalah seperti berikut:
Gambar 2.6 Hirarki Kelas dalam AWT
25
Tabel berikut memberikan gambaran singkat tentang sejumlah komponen
dalam paket java.awt.
Tabel 2.13 Komponen dalam Paket AWT
Metode Keterangan
Component Kelas dasar untuk semua komponen yang menyusun sistem
penjendelaan. Kelas ini memiliki metode yang berfungsi untuk
memproses kejadian masukan dari pemakai.
Container Kelas yang berfungsi sebagai wadah bagi sejumlah komponen
yang akan dikelompokkan. Komponen ini tidak terlihat secara
fisik. Metode yang sering dilibatkan adalah add(). Metode ini
dapat digunakan untuk meletakkan komponen yang akan
diletakkan pada wadah ini ataupun untuk menentukan posisi
Container relatif terhadap jendela.
Panel Merupakan subkelas dari Container. Digunakan sebagai wadah
untuk sejumlah komponen yang saling terkait. Panel merupakan
ruang kecil yang biasanya berada dalam sebuah objek Frame.
Window Merupakan jendela kosong yang tidak memiliki tepi ataupun
batang menu (menu bar). Dapat digunakan untuk mewujudkan
menu pop-up. Biasanya kelas ini jarang digunakan, mengingat
dua subkelasnya (yaitu Frame dan Dialog) lebih bermanfaat.
Frame Merupakan subkelas dari Window. Memungkinkan untuk
membuat jendela yang dilangkapi dengan judul.
Dialog Merupakan kelas untuk membuat jendela yang bersifat pop-up
yang memungkinkan pemakai mengetikkan sebaris teks. Yang
lebih menarik, terdapat subkelas bernama FileDialog yang dapat
menampilkan daftar berkas yang dapat dipilih oleh pemakai.
Kelas Dialog memungkinkan untuk membuat jendela yang
bersifat modal ataupun modeless.
Applet Merupakan subkelas dari Panel. Bermanfaat untuk menangani
aplikasi yang berjalan pada Web browser.
26
2.5.14.1. Menangani Kejadian
Penanganan kejadian yang lain dilakukan dengan menggunakan kelas-
kelas yang terdapat pada paket java.awt.event. Cara ini mulai diperkenalkan pada
JDK 1.1. Dalam hal ini objek yang ingin menangani kejadian dinamakan
pendengar (listener). Untuk menjadi pendengar, objek perlu memanggil metode
“add listener”. Bentuk metode “add listener” sendiri bergantung pada komponen
yang akan memantau kejadian.
2.5.14.2. Kotak Dialog Pesan Kesalahan
Sebagaimana telah diketahui, Dialog adalah subkelas dari kelas Window
yang berguna untuk membuat kotak dialog. Kotak dialog biasa digunakan untuk
membuat jendela pemasukan data, menyediakan pilihan Ya atau Tidak, ataupun
hanya untuk menampilkan pesan kesalahan.
2.5.14.3. Set Layout
Kelas Container mendefinisikan metode bernama setLayout() yang
ditujukan untuk mengatur tata letak komponen-komponen. Bentuk deklarasi
metode ini adalah seperti berikut :
setLayout (LayoutManager mgr);
Terlihat bahwa pada pemanggilan metode setLayout() diperlukan
argumen yang merupakan implementasi dari LayoutManager. LayoutManager
sebenarnya adalah suatu interface. Interface ini menentukan bagaimana
komponen-komponen dalam Container ataupun turunannya (misalnya Panel)
secara dinamis diatur.
2.5.14.4. Komponen Antarmuka Grafis
a. Button
27
Button merupakan kelas yang berguna untuk mewujudkan tombol dalam
suatu jendela. Untuk membuat objek berkelas Button, bisa dilakukan dengan cara
sebagai berikut :
new Button(“judul”)
Dua buah metode penting yang terdapat pada kelas Button :
setLabel(), yang berfungsi untuk mengubah judul pada tombol. Argumen
berupa string yang menyatakan judul baru.
getLabel(), yang berfungsi untuk memperoleh judul pada tombol.
b. Label
Label merupakan komponen yang umum digunakan dalam antarmuka
grafis untuk menampilkan suatu string satu baris pada suatu wadah (Container
ataupun kelas-kelasnya) dan umumnya bersifat tidak untuk diubah. Tiga
konstruktor kelas ini dapat dilihat pada tabel berikut:
Tabel 2.14 Konstruktor pada Kelas Label
Konstruktor Keterangan
Label() Menciptakan objek Label dengan teks berupa string
kosong dan menggunakan perataan kiri.
Label(String teks) Menciptakan objek Label dengan tulisan sesuai dengan
teks dan menggunakan perataan kiri.
Label(String teks,
Int perataan)
Menciptakan objek Label dengan tulisan sesuai dengan
teks diletakkan sesuai dengan nilai perataan. Nilai untuk
argumen kedua dapat berupa :
o LEFT : perataan kiri
o CENTER : perataan tengah
o RIGHT : perataan kanan
Beberapa metode yang terdapat pada kelas Label dapat dilihat pada tabel
berikut:
Tabel 2.15 Method pada Label
Method Keterangan
28
setText(String teks) Mengganti teks pada Label sesuai dengan argumen teks.
getText() Menghasilkan string yang menyatakan teks pada Label.
c. TextField
TextField adalah kelas yang berguna untuk menciptakan objek yang
ditujukan untuk memasukkan data satu baris. Tabel berikut memperlihatkan tiga
macam konstruktornya.
Tabel 2.16 Konstruktor pada TextField
Konstruktor Keterangan
TextField() Membuat objek TextField dengan nilai awal sama string
kosong.
TextField(String teks) Membuat objek TextField dengan nilai awal sama string
teks
TextField(String teks,
Int kolom)
Membuat objek TextField dengan nilai awal sama string
teks dan jumlah kolom sebanyak kolom.
Tabel 2.17 Method pada TextField
Method Keterangan
setText(String t) Menentukan teks yang ditampilkan pada TextField.
getText() Memperoleh teks pada TextField.
addActionListener(
ActionListener t)
Memasang penangan kejadian.
d. Checkbox
Checkbox adalah komponen yang biasa digunakan untuk memilih salah
satu pilihan di antara dua kemungkinan. Konstruktor kelas ini dapat dilihat pada
tabel berikut:
Tabel 2.18 Konstruktor Kelas Checkbox
Konstruktor Keterangan
29
Checkbox() Menciptakan objek Checkbox tanpa label dan nilai
keadaan kotak cek diisi dengan false.
Checkbox (String teks) Menciptakan objek Checkbox dengan label berupa
teks dan nilai keadaan kotak cek diisi dengan false.
Checkbox (String teks,
Boolean keadaan)
Menciptakan objek Checkbox dengan label berupa
teks dan nilai keadaan kotak cek diisi dengan nilai
pada keadaan.
Checkbox (String teks,
Boolean keadaan,
CheckboxGroup grup)
Menciptakan objek Checkbox dengan label berupa
teks dan nilai keadaan kotak cek diisi dengan nilai
pada keadaan. Selain itu, kotak cek akan diletakkan
pada grup kotak cek grup.
Checkbox (String teks,
CheckboxGroup grup,
Boolean keadaan)
Serupa dengan konstruktor di atas, tetapi biasa
digunakan untuk membentuk tombol radio.
Beberapa metode yang tersedia pada kelas Checkbox dapat dilihat pada
tabel berikut:
Tabel 2.19 Method pada Checkbox
Method Keterangan
setLabel(String teks) Mengubah Label
setCheckboxGroup(Ch
eckboxGroup g)
Mengatur kotak cek ini agar menjadi bagian dari grup
kotak cek g.
addItemListener(Item
Listener)
Menambahkan penangan kejadian.
e. CheckboxGroup
CheckboxGroup adalah wadah yang mengelompokkan sejumlah kotak
cek yang mempunyai sifat hanya satu kotak cek yang dalam keadaan terpilih.
Konstruktornya berbentuk seperti berikut :
CheckboxGroup();
30
Beberapa metode penting yang dimiliki oleh CheckboxGroupdapat dilihat pada
tabel berikut:
Tabel 2.20 Method pada CheckboxGroup
Method Keterangan
getSelectedCheckbox() Menghasilkan objek berkelas Checkbox yang
menyatakan kotak cek yang sedang dipilih.
setSelectedCheckbox
(Checkbox cb)
Mengatur keadaan kotak cek cb menjadi tercentang
sedangkan yang lain menjadi tidak terpilih.
2.5.15. Pemrograman Swing
Swing merupakan cara lain selain AWT untuk mengimplementasikan
pemrograman window selain menggunakan AWT. Swing dikemas dalam paket
bernama javax.swing.
2.5.15.1. JLabel
JLabel merupakan komponen yang digunakan untuk menampilkan teks
yang pendek atau gambar atau keduanya. Komponen Label memiliki konstruktor
sebagai berikut:
Tabel 2.21 Konstruktor JLabel
Konstruktor
JLabel()
Menciptakan objek JLabel tanpa gambar dan tanpa teks
JLabel(Icon gbr)
Menciptakan objek JLabel dengan gambar tetapi tanpa teks
JLabel(String str)
Menciptakan objek JLabel dengan teks tetapi tanpa gambar
JLabel(String str, Icon gbr, int pengaturanHorizontal)
Menciptakan objek JLabel dengan gambar dan teks serta diatur dengan
31
pengaturan horizontal
JLabel(String str, Icon gbr, int pengaturanVertikal)
Menciptakan objek JLabel dengan gambar dan teks serta diatur dengan
pengaturan vertikal
2.5.15.2. JButton
Kelas JButton berguna untuk membuat objek tombol yang dapat
dilengkapi dengan judul tombol dan gambar, selain itu JButton merupakan
komponen yang dapat menghasilkan suatu event jika tombol diklik oleh user.
Komponen JButton memiliki konstruktor sebagai berikut:
Tabel 2.22 Konstruktor JButton
Konstruktor
JButton()
Menciptakan objek JButton tanpa gambar dan tanpa teks
JButton(Icon gbr)
Menciptakan objek JButton dengan gambar tetapi tanpa teks
JButton(String str)
Menciptakan objek JButton dengan teks tetapi tanpa gambar
JButton(String str, Icon gbr)
Menciptakan objek JLabel dengan gambar dan teks
2.5.15.3. JTextField
JTextField merupakan objek yang berguna untuk memasukkan suatu
nilai atau mengedit data satu baris. Komponen JTextField memiliki konstruktor
sebagai berikut:
Tabel 2.23 Konstruktor JTextField
Konstruktor
JTextField()
Menciptakan objek JTextField baru tanpa nilai awal String
JTextField(String str)
Menciptakan objek JButton dengan gambar tetapi tanpa teks
32
JTextField(String str,int Kolom)
Menciptakan objek JButton dengan teks tetapi tanpa gambar
JTextField( int Kolom)
Menciptakan objek JLabel dengan gambar dan teks
JTextField(Document doc, String str, int Kolom)
Menciptakan objek JButton dengan teks tetapi tanpa gambar
2.5.15.4. JTextArea
JTextArea adalah kelas yang memungkunkan menyajikan teks yang
terdiri dari beberapa baris. Tabel 2.24 memperlihatkan beberapa konstruktornya.
Tabel 2.24 Konstruktor JTextArea
Konstruktor
JTextArea()
Menciptakan objek JTextArea dengan nilai awal string kosong
JTextArea(String teks)
Menciptakan objek JTextArea dengan nilai awal string teks
JTextArea(String teks, int baris, int kolom)
Menciptakan objek JTextArea dengan nilai awal string teks, jumlah
kolom sebanyak kolom, dan baris sebanyak baris
JTextArea(int baris, int kolom)
JTextArea dengan nilai awal string kosong, jumlah kolom sebanyak
kolom, dan baris sebanyak baris
2.5.15.5. JRadioButton
RadioButton adalah suatu komponen pada swing yang digunakan untuk
membuat suatu pilihan, dan JRadioButton ini harus disatukan dalam ButtonGroup
dengan metode add().Contoh :
JRadioButton but1=new JRadioButton(“satu”);
JRadioButton but1=new JRadioButton(“satu”);
ButtonGroup bg=new ButtonGroup(“satu”);
bg.add(but1);
bg.add(but2);
JRadioButton disatukan dengan ButtonGroup agar user hanya dapat memilih satu
33
dari beberapa pilihan.
Tabel 2.25 Konstruktor JRadioButton
Konstruktor
JRadioButton()
Menciptakan objek JRadioButton baru tidak terpilih, tanpa teks dan gambar
JRadioButton (Icon ikon)
Menciptakan objek JRadioButton baru tidak terpilih dengan gambar dan
tanpa teks
JRadioButton (Icon ikon, boolean kepilih)
Menciptakan objek JRadioButton baru dengan menetapkan kondisi terpilih
atau tidak dengan gambar tetapi tanpa teks
JRadioButton ( String str)
Menciptakan objek JRadioButtonl baru tidak terpilih dengan teks dan tanpa
gambar
JRadioButton (String str, boolean kepilih)
Menciptakan objek JRadioButton dengan teks tetapi tanpa gambar dan
dengan menetapkan kondisi terpilih atau tidak
JRadioButton (String str, icon ikon)
Menciptakan objek JRadioButton dengan teks dan gambar tetapi tidak
terpilih
JRadioButton (String str, icon ikon, boolean kepilih)
JRadioButton dengan teks gambar dan dengan menetapkan kondisi
2.5.15.6. JOptionPane
JOptionPane berguna pada untuk menampilkan suatu kotak dialog
kepada user, baik itu berupa pesan, konfirmasi ataupun meminta suatu input
kepada user. Untuk menggunakan JOptionPane tidak perlu memanggil
konstruktornya, cukup dengan pemanggilan metodenya saja.
2.6. J2ME
J2ME merupakan lingkungan pengembangan yang didesain untuk
meletakkan perangkat lunak Java pada barang elektronik beserta pendukungnya.
34
Pada J2ME, jika perangkat lunak berfungsi baik pada perangkat tertentu maka
belum tentu juga berfungsi baik pada perangkat lainnya. J2ME biasa digunakan
pada telepon selular, pager, personal digital assistant (PDA) dan sejenisnya.
J2ME adalah bagian dari J2SE, karena itu tidak semua library yang ada
pada J2SE dapat digunakan pada J2ME. Tetapi J2ME mempunyai beberapa
library khusus yang tidak dimiliki oleh J2SE.
Teknologi J2ME juga memiliki beberapa keterbatasan, terutama jika
diaplikasikan pada perangkat selular. J2ME sangat tergantung pada perangkat
yang digunakan, bisa dari segi merk ponsel maupun dari kemampuan ponsel, dan
dukungannya terhadap teknologi J2ME.
2.6.1. Konfigurasi J2ME
Konfigurasi merupakan Java library minimum dan kapabilitas yang
dipunyai para pengembang J2ME, yang maksudnya sebuah mobile device dengan
kemampuan java akan dioptimalkan untuk memiliki konfigurasi yang sesuai.
Konfigurasi hanyalah mengatur hal-hal tentang kesamaan sehingga dapat
dijadikan ukuran kesesuaian antar device. Misalnya sebuah lampu sepeda
dirancang sedemikian rupa sehingga dapat digunakan oleh berbagai jenis sepeda.
J2ME configuration mendefinisikan lingkungan kerja aplikasi. Oleh karena setiap
perangkat memiliki fitur dan spesifikasi yang berbeda-beda, maka diperlukan
J2ME configuration yang menyediakan pustaka standar dari sebuah perangkat.
Dengan konfigurasi kita dapat menentukan beberapa hal yang perlu diperhatikan
dalam pengembangan aplikasi yang berjalan di perangkat mobile (ponsel, PDA,
dll), misalnya memori, paparan (display), konektifitas jaringan dan kemampuan
pemrosesannya. Dalam J2ME telah didefinisikan dua buah konfigurasi yaitu
CLDC (Connected Limited Device Configuration) untuk perangkat kecil dan CDC
(Connected Device Configuration) untuk perangkat yang lebih besar.
2.6.2. Profil J2ME
Profil berbeda dengan konfigurasi, profil membahas sesuatu yang spesifik
untuk sebuah perangkat. Sebagai contoh misalnya, sebuah sepeda dengan merk
35
tertentu tentu mempunyai ciri spesifik dengan sepeda lainnya. Profil merupakan
ekstensi dari konfigurasi. Profil menyediakan kepustakaan untuk pengembang
yang digunakan untuk menulis aplikasi untuk jenis piranti tertentu yang dituju.
Profil merupakan bagian perluasan dari konfigurasi. Artinya, selain sekumpulan
kelas yang terdapat pada konfigurasi, terdapat juga kelas-kelas spesifik yang
didefinisikan lagi di dalam profil. Dengan kata lain, profil akan membantu secara
fungsional yaitu dengan menyediakan kelas-kelas yang tidak terdapat di level
konfigurasi. Dalam J2ME terdapat dua buah profil yaitu MIDP dan Foundation
Profile. Sebagai contoh, Mobile Information Device Profile (MIDP)
mendefinisikan SPI untuk komponen antarmuka pengguna, input dan event
handling, persistent storage, ukuran layar, dan keterbatasan memori.
MIDP atau Mobile Information Device Profile adalah spesifikasi untuk
sebuah profil J2ME. MIDP memiliki lapisan diatas CLDC seperti digambarkan
pada gambar diatas. MIDP juga memiliki API tambahan untuk daur hidup
aplikasi, antarmuka, jaringan, dan penyimpanan persistent. Pada saat ini terdapat
MIDP 1.0 dan MIDP 2.0. Fitur tambahan MIDP 2.0 dibandingkan MIDP 1.0
adalah API untuk multimedia. Pada MIDP 2.0 terdapat dukungan memainkan
tone, tone sequence, dan file WAV walaupun tanpa adanya Mobile Media API
(MMAPI). Perbandingan antara MIDP 1.0 dan MIDP 2.0 dapat dilihat pada tabel
2.2 dibawah ini.
2.7. GUI (Graphical User Interface) pada J2ME
GUI (Graphical User Interface) merupakan sebutan untuk antarmuka
aplikasi. Untuk selanjutnya disini, GUI hanya akan disebut dengan ‘user
interface’ atau UI. Kebutuhan user interface untuk aplikasi yang berada dalam
peralatan-peralatan kecil seperti telepon selular, PDA, maupun pager tentu akan
berbeda dengan kebutuhan pada saat kita membuat aplikasi desktop (aplikasi
untuk PC). Sebagai contoh, pada aplikasi alat kita tidak melihat adanya mouse
yang digunakan sebagai media untuk melakukan input, namun posisinya telah
digantikan oleh keypad (tombol-tombol yang terdapat pada HP, PDA ataupun
pager).
36
Kelas-kelas dasar untuk kebutuhan tersebut disimpan di dalam konfigurasi
CLDC, yang harus dilengkapi di bagian profil. Jadi CLDC sendiri sebenarnya
tidak mendefinisikan kelas-kelas yang dibutuhkan untuk fungsional GUI. Adapun
kelas-kelas resmi yang diperlukan untuk pembuatan GUI dalam platform J2ME
tersebut dikembangkan oleh sebuah komunitas yang dinamakan JCP (Java
Community Process) dan telah dimasukkan ke dalam bagian profil, seperti MIDP.
Jadi kelas-kelas yang terdapat pada sebuah profil bukan didasarkan pada AWT
(Abstract Window Toolkit).
Semua kelas-kelas GUI yang terdapat dalam MIDP tersimpan dalam suatu
paket yang dinamakan dengan lcdui (javax.microedition.lcdui). dengan
mengimpor paket tersebut, maka para programmer MIDlet dapat
mengembangkan aplikasi-aplikasi secara lebih mudah dan cepat.
2.7.1. Struktur GUI di dalam MIDP
Struktur GUI di dalam MIDP dikelompokkan menjadi dua bagian, yaitu
highlevel API (didasarkan pada pembentukan window/widget) dan low-level API
(didasarkan pada pembentukan canvas dan pixel). Penggunaan model high-level
tentu jauh lebih mudah dan cepat bila dibandingkan dengan model low-level.
MIDP User Interface API memiliki API level tinggi dan level rendah. API
level rendah berbasiskan penggunaan dari kelas abstrak Canvas, sedangkan kelas
API level tinggi antara lain Alert, Form, List, dan TextBox yang merupakan
ekstensi dari kelas abstrak Screen. Arsitektur user interface MIDP dapat dilihat
pada gambar 2.5 dibawah ini.
37
Gambar 2.7 Arsitektur User Interface MIDP
2.7.2. Paket javax.microdediton.lcdui
Semua kelas-kelas yang ada pada GUI di dalam MIDP tersimpan dalam
paket lcdui. Maka untuk menggunakan kelas-kelas tersebut kita harus mengimpor
paket lcdui ke dalam aplikasi yang kita buat, yaitu dengan menggunakan sintax
berikut :
import javax.microedition.lcdui.*;
Paket lcdui itu sendiri terdiri dari beberapa buah interface dan kelas.
Berikut ini tabel-tabel yang akan menunjukkan daftar interface dan kelas yang
dimaksud.
Tabel 2.26 Daftar interface di dalam Paket lcdui
Interface Keterangan
Choice Mendefinisikan API untuk komponen user interface
yang mengimplementasikan pemilihan dari sejumlah
pilihan yang didefinisikan.
CommandListener Digunakan oleh aplikasi yang perlu menerima event-
event level tinggi.
ItemStateListener Digunakan oleh aplikasi yang perlu menerima event
38
yang mengindikasikan perubahan keadaan (state) dari
item yang terdapat pada objek Form.
Tabel 2.27 Daftar Kelas di dalam Paket lcdui
Kelas Keterangan
Alert Layar yang menampilkan data kepada
user dan menunggu untuk periode
waktu tertentu sebelum kembali ke
layar sebelumnya.
AlertType Mengindikasikan tipe-tipe dari objek
Alert yang akan ditampilkan.
Canvas Kelas dasar yang digunakan oleh
aplikasi-aplikasi yang membutuhkan
event-event level rendah maupun untuk
proses penggambaran.
ChoiceGroup Sekumpulan elemen pemilihan yang
ditempatkan dalam form.
Command Konstruksi yang membungkus
informasi-informasi tentang aksi yang
dilakukan oleh user.
CustomItem Digunakan untuk membuat element user
interface baru yang akan ditempatkan
pada sebuah form.
DataField Komponen yang digunakan untuk
mempresentasikan tanggal dan waktu.
Display Merepresentasikan manager tampilan.
Displayable Objek yang memiliki kemampuan untuk
ditempatkan pada layar tampilan.
Font Merepresentasikan format huruf yang
akan ditampikan ke layar.
Form Objek layar yang ditempati oleh item-
39
item lain.
Gauge Mengimplementasikan tampilan grafis
yang menunjukkan nilai tertentu dan
ditempatkan di dalam sebuah form.
Graphics Menyediakan kemampuan
penggambaran pada objek Canvas.
Image Menyimpan data gambar.
ImageItem Menyediakan control layout pada
gambar-gambar yang ditempatkan
dalam sebuah form.
Item Kelas dasar untuk komponen-komponen
yang dapat ditempatkan ke dalam
sebuah form.
List Layar yang berisi daftar pilihan.
Screen Kelas dasar dari semua komponen-
komponen layar dalam user interface
level tinggi.
StringItem Item yang berisi string untuk kemudian
ditempatkan di atas form.
TextBox Layar yang mengizinkan user untuk
menyunting atau memanipulasi teks.
TextField Komponen untuk memasukkan atau
menyunting teks dan ditempatkan di
atas form.
Ticker Bagian teks yang berjalan secara terus-
menerus pada layar tampilan. Setiap
tipe layar dapat disertai dengan objek
Ticker, kecuali Canvas.
2.8. MIDlet
40
MIDlet adalah aplikasi yang ditulis unutk MIDP. Aplikasi MIDlet adalah
bagian dari kelas javax.microedition.midlet.MIDlet yang didefinisikan pada
MIDP. MIDlet berupa sebuah kelas abstrak yang merupakan sub kelas dari bentuk
dasar aplikasi sehingga antarmuka antara aplikasi J2ME dan aplikasi manajemen
pada perangkat dapat terbentuk.
2.8.1. Daur Hidup (LifeCycle) MIDlet
MIDlet terdiri dari beberapa metode yang harus ada yaitu constructor (),
protected void startApp () throws MIDletStateChangeException, protected void
pauseApp (), protected void destroyApp (Boolean unconditional) throws
MIDletStateChangeException. Daur hidup (Lifecycle) MIDlet dapat dilihat pada
gambar 2.6 dibawah ini.
Gambar 2.8 Daur Hidup (Lifecycle) dari Sebuah MIDlet
Penjelasan dari daur hidup MIDlet tersebuat adalah sebagai berikut:
Ketika MIDlet dijalankan maka akan diinisialisasikan dengan kondisi pause
dan menjalankan method pauseApp().
Apabila terjadi kesalahan selama konstruksi MIDlet, MIDlet akan berpindah
ke state “Destroy”, dan MIDlet batal diciptakan dengan jalan menjalankan
method destroyApp().
41
Kondisi berikutnya adalah fungsi MIDlet dijalankan, yaitu pada startApp().
Metode yang ada tersebut diimplementasikan sebagai protected, hal ni
dimaksudkan agar MIDlet lain tidak dapat memanggil metode tersebut.
Pada saat user keluar dari MIDlet, maka metode destroyApp() akan
dijalankan sebelum MIDlet benar-benar tidak berjalan lagi, destroyApp()
akan dipanggil notifyDestroyed(), dan notifyDestroyed() akan memberitahu
platform untuk menterminasi MIDlet dan membersihkan semua sumber
daya yang mengacu pada MIDlet.
Dalam implementasinya, MIDlet memiliki struktur direktori sebagai
berikut:
src
Menyimpan source code unutk MIDlet dan kelas lain yang diperlukan.
res
Menyimpan sumber daya yang dibutuhkan oleh MIDlet, seperti misalnya
gambar icon, suara ataupun video.
lib
Menyimpan file JAR atau ZIP yang berisi library tambahan yang
dibutuhkan MIDlet.
bin
Menyimpan file JAR, JAD, dan fle manifest yang berisi muatan komponen
MIDlet.
2.9. Sekilas Mengenai Java Server Page (JSP)
JavaServer Pages atau JSP merupakan salah satu bagian dari J2EE (Java 2
Enterprise Edition). JSP dibangun di atas Servlet dan bertujuan untuk menambah
efisiensi. Kelebihan dari JSP yaitu:
JSP mengizikan pemakaian pustaka tag standar dan tag buatan sendiri
JSP dikompilasi terlebih dahulu sehingga proses server lebih efisien
JSP dapat dikombinasikan dengan Servlet
JSP adalah bagian dari J2EE sehingga dapat digunakan dalam aplikasi
enterprise
42
Pada saat klien mengirimkan request ke JSP maka kontainer web akan
mengecek apakah JSP telah terkompilasi, jika belum maka akan dikompilasi,
kemudian seperti halnya servlet, JSP diinisialisasi, memproses request, dan akan
menjalankan destroy ketika kontainer web dimatikan.
2.10. Sintaks JSP
JSP memiliki tag standar yang bisa disebut dengan JSP Standard Tag
Library (JSTL), tapi JSP juga mengizinkan tag-tag yang dapat dibuat sendiri
sesuai kebutuhan (custom element). Elemen standar pada JSP dapat
dikelompokkan menjadi tiga yaitu:
elemen perintah (directive element)
elemen skrip (scripting element)
elemen aksi (action element)
2.10.1. Elemen Perintah (Directive Element)
Elemen perintah (directive element) adalah elemen untuk
menspesifikasikan informasi tentang halaman yang bersangkutan. Secara umum
tag elemen perintah sebagai berikut:
<%@ elemen perintah (atribut=“nilai”)* %>
di mana tanda bintang (*) berarti elemen dapat memiliki atribut yang
diulang sebanyak nol atau beberapa kali. Tag-tag yang termasuk dalam deklarasi
elemen perintah sebagai berikut:
Tabel 2.28 Tag-Tag Deklarasi Elemen Perintah
Tag Keterangan
<%@ page
(atribut=“nilai”)*
%>
atau
<%@ page
atributl=“nilai
1”
mendefinisikan atribut halaman seperti error,
session, dan keperluan buffering
atribut yang dimiliki:
Atribut Keterangan
Language menspesifikasikan bahasa
43
Tag Keterangan
atribut2=“nilai 2”
.... %>yang digunakan dengan nilai
standar “Java”
info informasi mengenai JSP, nilai
standarnya berupa string
tergantung pada kontainer
web
contentType menspesifikasikan data yang
dikembalikan ke browser
dengan nilai standar
“text/html;charset=I
SO8859-1”
extends menspesifikasikan superclass
JSP dengan nilai standar none
import jika diperlukan mengimpor
pustaka lain dengan nilai
stazdar none
buffer besar penggunaan buffer
dengan nilai standar 8192
autoFlush metode flush untuk buffer
dengan nilai standar “true”
session diisi dengan true jika
memakai session dengan nilai
standar “true”
isThreadSafe mengizinkan penggunaan
banyak thread jika bernilai
true dengan nilai standar
“true”
errorPage berisi true jika JSP
merupakan halaman yang
44
Tag Keterangan
menangani error dengan
nilai standar “false”
<%@ include ... menyatakan file yang di-include
atau :
<%@ include
file=“includes/header.html” %>
<%
out.println(“<BODY>“) ;
%>
<%@ include
file=“includes/footer.html” %>
<%@ taglib … mendeklarasikan pustaka tag (tag library) berisi aksi
custom yang digunakan pada halaman web (custom
tag)
2.10.2. Elemen Skrip (Scripting Element)
Elemen skrip (scripting element) mengizinkan programmer memasukkan
kode Java pada kode JSP. Berikut adalah beberapa elemen skrip yang dapat
digunakan pada JSP:
Sintaks mendeklarasikan metode dan variabel sebagai berikut:
Sintaks pemakaian metode dan variabel tanpa ditampilkan hasil atau
nilainya sebagai berikut:
<%Pemakaian_metode_dan_variabel%>
45
Sintaks menampilkan variabel nilai sebagai berikut:
<%= variabel nilai atau metode
%>
Sintaks penulisan komentar pada JSP sebagai berikut:
<%!/ / komentar
%>
2.10.3. Elemen Aksi (Action Element)
Elemen aksi merespon aksi yang berdasarkan informasi yang dibutuhkan
halaman JSP ketika diminta oleh browser. Tag-tag yang termasuk dalam deklarasi
elemen aksi standar sebagai berikut:
Tabel 2.29 Tag-Tag Deklarasi Elemen Aksi Standar
Tag Keterangan
< jsp : useBean> membuat komponen JavaBeans tersedia di
halaman web
<jsp: getProperty> mengambil sebuah nilai properti dari sebuah
komponen JavaBeans dan
mengikutsertakannya dalam respon
pola:
<jsp:geLProperty name=“idBean”
property=“namaProperti”/>
<jsp:setProperty> mengeset nilai properti komponen JavaBeans
<jsp:include > mengikutsertakan respon dari servlet atau JSP
pada proses request (hampir sama dengan
elemen perintah include)
atau jika ingin melewatkan informasi di
dalamnya akan menjadi
46
<jsp:include
page=“relativeURL”
flush=“true”>
( <jsp:param ... /> )*
</jsp:include>
<jsp:forward> mengirimkan lagi proses request ke servlet
atau JSP (menterminasi eksekusi JSP)
<jsp:param> menambahkan sebuah nilai parameter ke
penanganan request servlet atau JSP lain
<jsp:plugin> menggenerasi HTML yang berisi elemen
OBJECT atau EMBED yang dibutuhkan
untuk mengeksekusi sebuah applet dengan
perangkat plug-in dari Java
<jsp:params> memiliki fungsi sama dengan tag param pada
kode HTML applet, hanya dapat digunakan di
dalam tag <jsp:plugin>
<jsp:fallback> menyediakan teks alternatif jika browser tidak
mendukung elemen OBJECT dan
EMBED HTML, hanya dapat digunakan di
dalam tag <jsp:plugin>
2.11. MySQL
MySQL merupakan software database yang termasuk paling popular
dalam lingkungan linux, kepopuleran ini ditunjang karena performansi query dari
databasenya yang sangat cepat dan jarang bermasalah.
Saat ini, MySQL telah tersedia juga dalam lingkungan Windows, software
MySQL dilingkungan windows dipasang pada direktori c:\mysql\bin adalah
direktori yang berisi daftar modul executable dari software MySQL.
Berikut akan ditampilkan perintah-perintah yang berhubungan dengan
pembuatan database dan table serta cara melakukan manipulasi.
Perintah untuk membuat database :
47
CREATE DATABASE [IF NOT EXISTS] db_name;
Perintah untuk mengaktifkan Database :
USE db_name;
Perintah untuk menghapus database :
DELETE db_name;
Perintah untuk membuat table :
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name;
Perintah utnuk menghapus table :
DELETE TABLE [IF EXISTS] tbl_name [, tbl_name,...] [RESTRICT| CASCADE];
Perintah mengetahui struktur isi tabel :
DESCRIBE tbl_name;
Menampilkan isi tabel :
SELECT * FROM tbl_name;
2.12. Diagram Alur (Flowchart)
Diagram alur atau yang biasa disebut flowchart adalah sebuah diagram
yang memiliki alur yang digunakan untuk menggambarkan alur logika atau urutan
langkah dari suatu program.
Flowchart dapat berupa satu diagram alur lengkap dari suatu aktivitas dan
bisa juga menggambarkan hanya bagain tertentu dari aktivitas tersebut. Hal ini
dilakukan bila algoritma begitu detail dan kompleks, sehingga satu halaman kertas
tidak mampu untuk melukiskan keseluruhan flowchart.
Bila ia menggambarkan suatu aktivitas, flowchart tersebut dimulai dengan
blok “mulai” dan diakhiri dengan blok “selesai”. Bila hanya sebagain, flowchart
dimulai dan diakhiri dengan lingkaran kecil serta diberi notasi abjad atau angka
yang menunjukkan sambungan dari bagian yang lain.
Tabel 2.30 Simbol-Simbol Diagram Alur
48
2.13. Struktur Navigasi
Struktur navigasi adalah alur cerita dari sebuah program. Terdapat empat
jenis struktur navigasi yang biasa digunakan yaitu navigasi linier, navigasi hirarki,
navigasi non linier, dan navigasi komposit (campuran).
2.13.1. Struktur Navigasi Linier
Struktur navigasi linier (satu alur) merupakan suatu struktur navigasi yang
hanya mempunyai satu rangkain cerita terurut. Struktur navigasi ini menampilkan
satu demi satu tampilan layer secara terurut sesuai urutannya.
Gambar 2.9 Struktur Navigasi Linier
2.13.2. Struktur Navigasi Non Linier
Struktur navigasi non linier merupakan pengembangan dari struktur
navigasi linier. Pada struktur navigasi ini dimungkinkan adanya percabagan,
namun percabangan yang dibuat pada struktur navigasi non linier ini berbeda
49
dengan percabangan yang dibuat pada struktur navigasi hirarki, karena tiap tiap
tampilan mempunyai kedudukan sama yaitu tidak ada menu utama dan halaman
pendukung.
Gambar 2.10 Struktur Navigasi Non Linier
2.13.3. Struktur Navigasi Hirarki
Struktur navigasi hirarki merupakan suatu struktur navigasi yang
memperbolehkan percabangan untuk menampilkan data atau gambar. Tampilan
menu utama disebut dengan master page. Menu utama ini memiliki percabangan
yang disebut pendukung, dapat disebut juga dengan slave page.
Gambar 2.11 Struktur Navigasi Hirarki
2.13.4. Struktur Navigasi Komposit
Struktur navigasi komposit merupakan gabungan dari ketiga struktur
navigasi sebelumnya, yaitu struktur navigasi linier, hirarki dan non linier. Struktur
navigasi ini disebut juga struktur navigasi campuran atau bebas.
50
Gambar 2.12 Struktur Navigasi Komposi
2.14. Algoritma RSA (Ron Rivest, Adi Shamir, Leonard Adleman)
Dari sekian banyak algoritma kriptografi kunci-publik yang pernah dibuat,
algoritma yang paling populer adalah algoritma RSA. Algoritma ini melakukan
pemfaktoran bilangan yang sangat besar. Oleh karena alasan tersebut RSA
dianggap aman. Untuk membangkitkan dua kunci, dipilih dua bilangan prima
acak yang besar. Algoritma RSA dibuat oleh 3 orang peneliti dari MIT
(Massachussets Institute of Technology) pada tahun 1976, yaitu : RON (R)ivest,
ADI (S)hamir, dan Leonard (A)dleman. RSA mengekspresikan teks-asli yang
dienkripsi menjadi blok-blok yang mana setiap blok memiliki nilai bilangan biner
yang diberi symbol “n”, blok teks-asli “M” dan blok teks-kode “C”. Untuk
melakukan enkripsi pesan “M”, pesan dibagi ke dalam blok-blok numeric yang
lebih kecil daripada “n” (data biner dengan pangkat terbesar), jika bilangan prima
yang panjangnya 200 digit, dapat ditambah beberapa bit 0 di kiri bilangan untuk
menjaga agar pesan tetap kurang dari nilai “n”.
Besaran yang digunakan pada algoritma RSA :
1. p dan q bilangan prima (rahasia)
2. r = p.q (tidak rahasia)
3. (r) = (p – 1)(q – 1) (rahasia)
4. PK (kunci enkripsi) (tidak rahasia)
5. SK (kunci dekripsi) (rahasia)
6. X (teks-asli) (rahasia)
7. Y (teks-kode) (tidak rahasia)
Agoritma RSA didasarkan pada teorema Euler yang menyatakan bahwa :
a(r) 1 (mod r) ………………………………………………………………..(1)
yang dalam hal ini :
1. a harus relatif prima terhadap r.
51
2. (r) = r(1 – 1/p1)(1 – 1 /p2) … (1 – 1/pn), yang dalam hal ini p1,p2, … , pn
adalah faktor prima dari r.
(r) adalah fungsi yang menemukan berapa banyak bilangan 1,2,3,…,r yang
relatif prima terhadap r.
Berdasarkan sifat am bm (mod r) untuk m bilangan bulat ≥ 1 maka
persamaan (1) dapat ditulis menjadi :
am(r) 1m (mod r)
atau
am(r) 1m (mod r) ……………………………………………………..(2)
Bila a diganti dengan X maka persamaan (2) menjadi :
X m(r) 1m (mod r) …………………………………………………….(3)
Berdasarkan sifat ac bc (mod r) maka bila persamaan (3) dikali dengan X
menjadi :
X m(r)+1 X (mod r) ……………………………………………………(4)
yang dalam hal ini X relative prima terhadap r.
Misalkan SK dan PK dipilih sedemikian rupa sehingga
SK . PK 1 (mod (r)) ………………………………………………..(5)
atau
SK . PK = m (r) +1 …………………………………………………..(6)
Sulihkan (6) ke dalam persamaan (4) menjadi :
XSK.PK X (mod r) ……………………………………………………(7)
Persamaan (7) dapat ditulis kembali menjadi :
(XPK)SK X (mod r) ………………………………………………….(8)
yang artinya perpangkatan X dengan PK diikuti dengan perpangkatan
dengan SK menghasilkan X semula.
Berdasarkan persamaan (8) maka enkripsi dan dekripsi dirumuskan sebagai
berikut :
EPK(X) = Y = XPK mod r ……………………………………………..(8)
DSK(Y) = X = YSK mod r ……………………………………………..(9)
52
Karena SK.PK = PK.SK, maka enkripsi diikuti dengan dekripsi ekuivalen dengan
dekripsi diikuti enkripsi:
ESK(DSK(X)) = DSK (EPK (X)) = XPK mod r …………………………(10)
Oleh karena XPK mod r (X + mr) PK mod r untuk sembarang bilangan
bulat m, maka tiap teks-asli X, X + r, X + 2r, … menghasilkan teks-kode yang
sama. Dengan kata lain, transformasinya adalah dari banyak ke satu. Agar
transformasinya satu ke satu maka X harus dibatasi dalam himpunan {0, 1, 2, .., r
– 1} sehingga enkripsi dan dekripsi tetap benar seperti pada persamaan (8) dan
(9).
2.15. Letak Kemanan RSA
Keamanan algoritma RSA terletak pada tingkat kesulitan dalam
memfaktorkan bilangan non-prima menjadi faktor primanya, yang dalam hal ini r
= p x q. Sekali r berhasil difaktorkan menjadi p dan q maka (r) = (p – 1)(q – 1)
dapat dihitung. Selanjutnya, karena kunci enkripsi PK diumumkan (tidak rahasia)
maka kunc dekripsi SK dapat dihitung dari persamaan PK.SK 1 (mod (r)).
Penemu algoritma RSA menyarankan agar panjang nilai p dan q lebih dari
100 digit. Dengan demikian hasil kali r = p x q akan lebih dari 200 digit. Menurut
Rivest dan kawan-kawan, usaha untuk mencari faktor bilangan 200 digit
membutuhkan waktu komputasi selama 4 milyar tahun! (dengan asumsi bahw
algortima pemfaktoran yang digunakan adalah algoritma yang tercepat saat ini
dan komputer yang dipakai mempunyai kecepatan 1 (milidetik). Algortima RSA
yang memfaktorkan bilangan yang besar belum ditemukan. Inilah yang membuat
algoritma RSA tetap dipakai. Selagi belum ditemuka algoritma yang mangkus
untuk memfaktorkan bilangan bulat menjadi faktor primanya maka algoritma
RSA tetap direkomendasikan untuk digunakan dalam penyandian pesan.
53