BAB III PERANCANGAN SIMULASI 3.1. Batasan dan Karakteristik Modifikasi LZW Dalam pembuatan simulasi dengan menggunakan tehnik modifikasi LZW (Lempel, Ziv, and Welch) ini, penulis menggunakan beberapa class java yang nantinya akan diaplikasikan pada simulator J2ME (Java 2 Micro Edition). Simulasi yang digunakan pada tugas akhir ini mempunyai beberapa kriteria di bawah ini : 1. Simulasi ini dibuat dengan menggunakan J2ME WTK (Wireless Tool Kit) versi 2.2 2. Simulasi ini hanya dapat berjalan jika emulator mempunyai konfigurasi minimal CLDC versi 1.0 dan MIDP 2.0 yang keduanya didefinisikan oleh SunMicrosystem 3. Simulasi ini hanya akan berjalan apabila pada emulator sudah terdapat program penerimaan dan pengiriman SMS serta beberapa class java yang diperlukan. 4. Besarnya kompresi dari tehnik ini tidak selalu tetap tergantung pada banyaknya huruf pada suatu kata yang akan dikirimkan. 5. Simulasi ini menggunakan dictionary static, maka dari itu dictionary harus selalu diperbaharui supaya perbendaharaan objek yang dapat dipakai pada tehnik ini juga semakin banyak. 6. Kapasitas dari dictionary static tersebut sebanyak 65.536, maka dari itu pengguna tidak perlu merasa khawatir akan kehabisan memori untuk menyimpan objek yang baru. Dengan kriteria diatas maka proses perancangan simulasi modifikasi LZW dapat dilakukan. Pembahasan mengenai definisi objek pada dictionary akan dilakukan pada bab selanjutnya. 10
3.1.1. Pemilihan Dictionary Technique LZW LZW sebenarnya bukan merupakan merupakan satu-satunya algoritma dalam dictionary techniques yang dapat digunakan untuk kompresi data. Tetapi setelah melalui beberapa pertimbangan maka diputuskan untuk mencoba performansi dari Dictionary Techniques LZW untuk kompresi SMS (Short Message Services). Pertimbangan-pertimbangan itu adalah sebagai berikut : 1. LZW merupakan tehnik dictionary yang terbaru, dan merupakan pengembangan dari tehnik-tehnik sebelumnya sehingga lebih mudah untuk diaplikasikan dalam bahasa pemrograman khususnya Java. 2. Dictionary Techniques LZW merupakan tehnik dictionary yang sangat bagus digunakan untuk kompresi terutama untuk kompresi data yang sangat besar, maka dari itu penulis ingin menguji performansinya jika digunakan untuk mengompresi data yang kecil seperti SMS. 3.1.2. Pemilihan J2ME J2ME dipilih sebagai platform untuk mengimplementasikan tehnik ini dengan beberapa pertimbangan sebagai berikut : 1. J2ME adalah sebuah teknologi yang telah banyak digunakan dalam pengembangan aplikasi pada ponsel dewasa ini, mulai dari aplikasi permainan sampai pada aplikasi pendukung yang lebih besar. 2. Tool yang digunakan untuk mengembangkan aplikasi yang berbasis pada J2ME bersifat gratis dan mudah didapatkan, yaitu J2ME WTK versi 2.2 3. Adanya dukungan komunitas J2ME yang cukup besar dan adanya dokumentasi J2ME yang cukup lengkap sehingga memudahkan pembangunan aplikasi yang berbasis pada J2ME. 3.2. Sistem Modifikasi LZW Simulasi LZW ini dibangun secara langsung dengan menggunakan J2ME WTK versi 2.2. Toolkit ini digunakan oleh penulis sebagai platform Java 2 Micro Edition untuk proses pengembangan simulasi dari awal sampai akhir.. 11
Sistem modifikasi dictionary techniques LZW akan digambarkan secara menyeluruh dengan menggunakan UML (Unified Modelling Language) yang akan dibagi menjadi dua bagian yaitu UML untuk SendSMS dan UML untuk TerimaSMS. 3.2.1 UML untuk SendSMS Sistem secara keseluruhan dari SendSMS secara sederhana akan digambarkan dalam suatu use case diagram dimana bagian detail dari proses dapat dilihat dalam sequence diagram dan dalam activity diagram. Untuk class java, method, serta atribut yang akan dipakai dapat dilihat dari class diagram dalam UML ini. 3.2.1.1. Use Case Diagram SendSMS SendSMS User PhoneInput KirimSMS ParsingKata DictTable ParsingHuruf Gambar III - 1 Use Case SendSMS Dari use case diagram diatas terlihat bahwa terdapat beberapa class yang diperlukan sebelum SMS dikirim ke penerima. Class-class tersebut antara lain : 1. SendSMS, digunakan untuk mengirim pesan ke suatu nomor tujuan dengan menggunakan port yang telah ditentukan sebelumnya. 12
2. PhoneInput, adalah suatu class yang berfungsi untuk menyediakan method TextField yang dapat kita gunakan untuk menuliskan pesan dalam simulator yang nantinya akan dipakai sebagai masukan untuk program ParsingKata. 3. ParsingKata, merupakan class utama dalam program kompresi. Class ini mengambil input dari kalimat yang kita ketikkan pada TextField di program PhoneInput kemudian mengubahnya menjadi kata-kata dimana setiap kata tersebut disimpan dalam suatu array sebagai masukan untuk program ParsingHuruf. 4. ParsingHuruf, adalah suatu class dimana kalimat yang telah diparsing menjadi kata akan diparsing lagi menjadi huruf. Pada class ini juga terdapat method untuk membandingkan setiap huruf yang didapat dengan kombinasi huruf yang terdapat pada class DictTable. Jika kombinasi huruf yang dibandingkan ada pada class DictTable, maka method huruf yang terdapat dalam class ini akan mengembalikan nilai berupa indeks dari kata tersebut. Jika kombinasi huruf yang dibandingkan tidak ada, maka indeks yang dikembalikan akan bernilai 0. 5. DictTable, adalah suatu class yang menyimpan objek yang telah disimpan sebelumnya dan digunakan sebagai pembandingkan dalam class ParsingHuruf. Keterangan bagaimana proses yang terjadi pada class-class diatas dapat dilihat dalam diagram-diagram UML selanjutnya. 13
3.2.1.2. Sequence Diagram SendSMS : ParsingHuruf : Dict Table : ParsingKata : PhoneInput : SendSMS input dari emulator kata yang telah diparsing huruf yang telah diparsing bandingkan dengan dict hasil pembandingan dengan dict return 0 jika kata tidak ada angka hasil perbandingan deretan angka String dari deretan angka tersebut Gambar III - 2 Sequence Diagram SendSMS Pada diagram ini dijelaskan tentang perpindahan data, serta input dan output dari masing-masing class dalam SendSMS. 14
3.2.1.3. Collaboration Diagram SendSMS : Dict Table 5: hasil pembandingan dengan dict 6: return 0 jika kata tidak ada 7: angka hasil perbandingan : ParsingKata 3: huruf yang telah diparsing 4: bandingkan dengan dict 2: kata yang telah diparsing 1: input dari emulator 8: deretan angka : ParsingHuruf 9: String dari deretan angka tersebut : PhoneInput : SendSMS Gambar III - 3 Collaboration Diagram SendSMS Collaboration diagram merupakan pengembangan dari sequence diagram. Pada diagram ini, selain diperlihatkan input dan output dari class-class pada SendSMS, juga diperlihatkan bagaimana urutan pengerjaan dari mulai input awal yang kita masukkan lewat simulator sampai output akhir yang nantinya akan dikirimkan melalui class SendSMS ke penerima. 3.2.1.4. Activity Diagram SendSMS Activity diagram adalah suatu diagram yang menjelaskan tentang proses dari suatu bagian dari awal sampai akhir. Pada diagram ini akan dibahas secara detail tentang bagaimana program tersebut dapat berjalan. Activity diagram untuk SendSMS akan dibagi menjadi dua yaitu Compressi dan SendSMS. Dibawah ini activity diagram untuk SendSMS. 15
Start Input dari emulator compressi output compressi simpan dalam short Ubah ke string kirim End Gambar III - 4 Activity Diagram SendSMS Diagram ini menjelaskan langkah-langkah yang terjadi dalam proses SendSMS. Penjelasannya sebagai berikut : 1. Menjalankan emulator (diwakilkan dengan tombol start) 2. Memasukkan input text yang kita inginkan lewat simulator tersebut 3. Input yang telah kita masukkan tadi akan mengalami proses kompresi yang proses detailnya akan dijelaskan dalam activity diagram Compess 4. Hasil dari proses kompresi, yaitu deretan angka, disimpan dalam suatu variabel short. Hal ini karena variabel keluaran dari program ParsingKata adalah short, sehingga variabel penampung dalam program PhoneInput juga harus short. 5. Variabel short tadi harus diubah kedalam bentuk string. Alasannya karena metode value of yang digunakan untuk mengambil nilai dari variabel penampung tersebut hanya bisa menerima atribut string. Jika yang 16
dikirimkan bukan string, maka penerima akan menerima hash code dan bukan input yang kita inginkan. 6. Mengirimkan deretan angka yang sudah diubah bentuknya ke dalam string. 7. Aktifitas dalam blok SendSMS telah selesai (diwakilkan dengan tanda End) Sekarang kita akan bahas aktifitas apa saja yang terjadi di dalam blok Compressi. Start input kalimat dari TextBox Lakukan Parsing kata Lakukan parsing huruf Cocokkan tiap huruf yang didapat dengan dictionary Return 0 Keluarkan angka hasil perbandingan dengan dictionary dalam file penampung short Ubah angka tersebut kedalam bentuk bit Untuk bit yang genap : geser byte ke kanan sebanyak 8 Untuk bit yang ganjil : kurangi byte dengan byte pertama yang digeser ke kiri sebanyak 8 Mas ukan ke SendSMS Gambar III - 5 Activity Diagram Compressi 17
Aktifitas yang terjadi di dalam blok Compressi adalah sebagai berikut : 1. Menjalankan emulator (diwakilkan dengan tombol Start) 2. Mengambil input kalimat dari TextField 3. Kalimat tadi kemudian mengalami proses parsing kata ketika dimasukkan ke program ParsingKata kemudian disimpan dalam suatu array. 4. Program Parsinghuruf yang dipanggil dalam program ParsingKata bertugas untuk memarsing kata yang ada dalam array menjadi huruf. 5. Kemudian kombinasi huruf tersebut dibandingkan dengan dictionary yang ada dalam program DictTable yang dipanggil dalam program ParsingHuruf. 6. Setelah itu terdapat dua buah kemungkinan. Yang pertama adalah kata tersebut tidak ada dalam dictionary sehingga program akan mengeluarkan nilai 0. 7. Kemungkinan kedua adalah kata tersebut ada dalam dictionary, maka program akan mengeluarkan indeks nilai sesuai dengan nilai yang ada dalam dictionary. 8. Karena nilai tersebut masih dalam bentuk integer, maka kita harus mengubahnya dalam bentuk bit sehingga kita bisa melakukan operator right-shift (>>>) dan left-shift (<<). 9. Kemudian dibuat sebuah bit yang disebut bit kedua (metode ini juga dipakai pada bit-bit genap) yang nilainya didapat dari nilai bit asli yang mengalami pergeseran ke kanan sebanyak 8 bit. 10. Untuk nilai bit yang pertama (metode ini juga dipakai pada bit-bit ganjil) didapat dari nilai bit asli yang dikurangi dengan nilai bit pertama yang digeser ke kanan sebanyak 8 bit. 11. Kemudian nilai tersebut akan menjadi input untuk program PhoneInput yang aktifitasnya telah dijelaskan pada activity diagram diatas. 18
3.2.1.5. Class Diagram SendSMS SendSMS display : Display cmexit, cmok : Command form : PhoneInput tbclip : TextBox public SendSMS() public void startapp() public void pauseapp() public void destroyapp() public void commandaction() public void exitmidlet() PhoneInput display : Display cmsend, cmcancel, cmexit : Command tfphone : TextField midlet : SendSMS msg : String itemcancel, itemsend, itemexit : StringItem al : Alert adr : String smsport : String m : short[ ] s : String public PhoneInput() public void itemstatechange() public void commandaction() public void run() ParsingKata kata : String[ ] katabaru : String[ ] j, l, i, m : int kalimat : String b : short [ ] temp : String z : byte [ ] baru : short [ ] public static short [ ] parser() Dict Table dict : Vector ParsingHuruf sisa : StringBuffer ketemu : boolean i, j : int dict : Vector temp, temp2 : String hasil : String public static int huruf() exception e MIDlet public static Vector getdict() Gambar III - 6 Diagram Class SendSMS Diagram class diatas menunjukkan class-class yang digunakan dalam SendSMS beserta dengan class-class, method, serta atribut-atribut dalam Java. : menunjukkan class Java, attribut dan operation yang dimiliki oleh class Java. Kolom pertama menunjukkan nama class Java, kolom kedua menunjukkan attribut, dan kolom ketiga menunjukkan method dari class Java. Kolom attribut dan method dari class Java yang dikosongkan tidak menunjukkan tidak adanya attribut dan operation dari class Java. 19
Penjelasan dari attribut dan operation dari class Java tersebut di atas dapat dilihat dibagian lampiran. Class Java yang disebutkan di atas juga menggunakan beberapa package dan mewariskan beberapa class yang sudah didefinisikan di dalam J2ME. 3.2.2. UML untuk TerimaSMS Seperti UML untuk SendSMS, UML untuk TerimaSMS juga mempunyai beberapa diagram seperti diagram pada SendSMS. Diagram-diagram itu adalah sebagai dijelaskan di bawah ini. 3.2.2.1. Use Case Diagram TerimaSMS Output Compressi (from Use Cases) Decompress (from Use Cases) TerimaSMS (from Use Cases) user DictTable (from Use Cases) Gambar III - 7 Use Case TerimaSMS Dari use case diagram diatas terlihat bahwa terdapat beberapa class yang diperlukan pada saat penerima menerima SMS. Class-class tersebut antara lain : 1. Decompress, merupakan class yang mengubah deretan huruf yang diterima pada class TerimaSMS menjadi kalimat asal. Pada class ini pula dipanggil class DictTable yang menyimpan objek yang akan digunakan sebagai pembanding. Untuk proses detail yang terjadi pada class ini akan ditunjukkan pada activity diagram. 20
2. TerimaSMS, merupakan class utama pada penerimaan SMS. Pada class ini output dari SendSMS akan diterima dan output dari program dekompresi akan ditampilkan kepada penerima. 3. DictTable, adalah suatu class yang menyimpan objek yang telah disimpan sebelumnya dan digunakan sebagai pembanding. Keterangan bagaimana proses yang terjadi pada class-class diatas dapat dilihat dalam diagram-diagram UML selanjutnya. 3.2.2.2. Sequence Diagram TerimaSMS : Decompress : DictTable : TerimaSMS input dari TerimaSMS bandingkan dengan dict kata hasil perbandingan kalimat asli Gambar III - 8 Sequence Diagram TerimaSMS Pada diagram ini dijelaskan tentang perpindahan data, serta input dan output dari masing-masing class dalam TerimaSMS. 21
3.2.2.3. Collaboration Diagram TerimaSMS 2: bandingkan dengan dict : Decompress : DictTable 3: kata hasil perbandingan 1: input dari TerimaSMS 4: kalimat asli : TerimaSMS Gambar III - 9 Collaboration Diagram TerimaSMS Collaboration diagram merupakan pengembangan dari sequence diagram. Pada diagram ini, selain diperlihatkan input dan output dari class-class pada TerimaSMS, juga diperlihatkan bagaimana urutan pengerjaan dari mulai input dari pengirim sampai dengan pengembalian pesan ke bentuk aslinya. 3.2.2.4. Activity Diagram TerimaSMS Activity diagram untuk TerimaSMS dibagi menjadi blok Decompress dan TerimaSMS. Berikut ini akan dibahas terlebih dahulu aktifitas yang terdapat pada TerimaSMS. 22
Start input dari emulator decompress output dari program decompress menampilkan kalimat hasil penggabungan kata dari program decompress End Gambar III - 10 Activity Diagram TerimaSMS Langkah-langkah yang terjadi pada TerimaSMS adalah sebagai berikut : 1. Menjalankan program (diwakilkan dengan tanda Start). 2. Mengambil input dari emulator yang merupakan output dari SendSMS. 3. Input tadi dimasukkan dalam program decompress untuk diproses sehingga didapat kalimat yang sama dengan kalimat asalnya. 4. Pada tugas akhir ini, kalimat aslinya tidak dapat langsung ditampilkan dalam emulator, sehingga output yang didapat (output ini yang tampil pada layar simulator) akan dimasukkan ke dalam salah satu JAVA Builder yaitu NetBeans untuk menampilkan kalimat aslinya. 5. Deretan angka tadi dimasukkan ke dalam NetBeans untuk mendapat kalimat yang tadi kita masukkan melalui simulator J2ME WTK 2.2 6. Mengakhiri simulasi (diwakilkan dengan tanda End). Sekarang kita akan bahas aktifitas apa saja yang terdaji pada blok Decompressi. 23
Start input dari TerimaSMS ubah input dari string ke byte Byte genap digeser ke kiri sebanyak 8 Byte ganjil dibiarkan saja gabungkan kedua byte dengan operasi logical OR Simpan hasil penggabungan dalam bentuk short Bandingkan hasil penggabungan dengan dictionary input untuk TerimaSMS Gambar III - 21 Activity Diagram Decompress Langkah-langkah yang terjadi pada blok Decompressi sebagai berikut : 1. Menjalankan simulasi (diwakilkan dengan tanda Start) 2. Mengambil input dari SendSMS. 3. Input yang diambil tadi masih dalam bentuk string karena pada waktu mengirim, SendSMS mengirim outputnya dalam bentuk string, maka dari itu harus diubah terlebih dahulu menjadi bit. 4. Bit kelipatan genap yang didapat digeser ke kiri sebanyak 8 bit. 5. Bit kelipatan ganjil diambil begitu saja nilainya tanpa harus diubah-ubah terlebih dahulu. 6. Kemudian masing-masing pasangan bit (satu bit ganjil dan satu bit genap) digabungkan dengan menggunakan operasi logika OR ( ). 7. Nilai yang didapat disimpan dalam suatu variabel short sehingga semua deretan angka 0 dan 1 pada bilangan bit tersebut dapat terakomodasi. 24
Misal : bit pertama : 11111111 dan bit kedua 00000000. Maka setelah kedua bit mengalami langkah 6, maka hasil yang didapat dalm bentuk short adalah 1111111100000000. 8. Kemudian hasil yang didapat dalam bentuk short tadi oleh program dengan sendirinya akan diubah menjadi nilai integer dan dalam program Decompress akan dibandingkan dengan dictionary dan ditampilkan hasilnya. Untuk hal ini, proses pemasukan input harus dilakukan secara manual ke dalam JAVA Builder NetBeans jika ingin mengetahui kalimat yang didapat cocok atau tidak dengan kalimat aslinya. 9. Output keluaran dari blok ini merupan input dari blok TerimaSMS yang langkah-langkahnya telah dijelaskan diatas. 3.2.2.5. Class Diagram TerimaSMS TerimaSMS display : Display alert : Alert tfpesan : TextBox thread : Thread conn : MessageConnection pesan : Message daftarkoneksi : String[ ] port : String karakter : String[ ] hilangkoma : String[ ] jumlahdata : int temp : int cmdkeluar : Command public TerimaSMS() public void startapp() public void pauseapp() public void destroyapp() public void commandaction() public void run() public void notifyincomingmessage() public void startnewthread() dict : Vector DictTable public static vector getdict() Decompress dict : Vector str : String ketemu : boolean temp : int hasil_decode : short[ ] data : byte [ ] public static String decompress() MIDLET Exception e Gambar III - 32 Diagram class TerimaSMS Diagram class diatas menunjukkan class-class yang digunakan dalam TerimaSMS beserta dengan class-class, method, serta atribut-atribut dalam Java. 25
Penjelasan dari attribut dan operation dari class Java tersebut di atas dapat dilihat dibagian lampiran. Class Java yang disebutkan di atas juga menggunakan beberapa package dan mewariskan beberapa class yang sudah didefinisikan di dalam J2ME. 26