BAB II LANDASAN TEORI 2.1 Kompresi Data Secara singkat Khalid Sayood (2006: 1) menyebut bahwa kompresi data adalah sebuah seni atau ilmu dalam menyajikan data dalam bentuk yang lebih compact. Kompresi data adalah proses merubah suatu input (data asli) menjadi sebuah data lain dengan ukuran yang lebih kecil (David Salomon: 2004, 1-2). Gambar 2.1 Analogi Kompresi Data. (Sumber: http://www.newmediarepublic.com/dvideo/compression/adv04.html) Dapat dilihat pada gambar 2.1, kompresi data dianalogikan seperti melipat sebuah surat yang akan dimasukan ke dalam amplop yang kecil, agar dapat dikirim dengan mudah dan murah. Data yang telah dikompres (seperti halnya surat yang dilipat) tidak mudah dibaca dan harus didekompres terlebih dahulu untuk mengembalikan ke bentuk aslinya. 5 http://digilib.mercubuana.ac.id/ 6 Kompresi data adalah sebuah metode untuk mengurangi ukuran file agar proses pengiriman file tersebut lebih efisien (Minhaj Ahmad Kahn 2012: 362). Secara umum, proses kompresi data adalah mengambil sekelompok simbol dari suatu input teks, memprosesnya dan mengubahnya ke dalam bentuk kode-kode yang kemudian ditulis ke dalam file hasil kompresi. Tujuan dilakukan pengompresian data tersebut adalah untuk meminimalkan ukuran data dan memaksimalkan kecepatan transfer data dari suatu lokasi ke lokasi lainnya yang biasanya melewati suatu media transmisi. Kompresi data dikatakan efektif jika hasil dari kode-kode itu lebih kecil dibandingkan dengan simbol-simbol aslinya. Dalam istilah kompresi data, simbol adalah unit terkecil dari suatu informasi. Pembuatan kode untuk simbol tertentu berdasarkan pada suatu model. Model adalah kumpulan dari data statistik yang digunakan untuk memproses input simbol-simbol dan menentukan kode-kode apa saja sebagai output-nya. Untuk pengubahan simbol ke dalam bentuk kode yaitu dengan menggunakan suatu aturan yang disebut encoding. Teknik kompresi data sangat membantu pada bidang teknologi sehingga terus dikembangkan oleh para ahli teknologi di selurah dunia. Contoh nyata yang dapat kita temui dalam kehidupan sehari-hari adalah pada penggunaan teknologi internet. Data yang diminta oleh pengguna pada pengaksesan suatu informasi pada sebuah internet akan dikompres dahulu agar informasi dapat lebih cepat dibaca, sehingga pada akhirnya meminimalkan waktu transfer data. 2.1.1 Kompresi Lossless dan Lossy Teknik pengompresian dapat diklasifikasikan menjadi dua tipe kompresi yaitu pengompresian lossless dan lossy. Kompresi lossless dan lossy merupakan istilah yang mendeskripsikan apakahseluruh informasi data dari suatu file asli dapat dikembalikan ke seperti semula atau tidak pada saat proses dekompresi. Dalam kompresi lossless, setiap bit data padafile asli tidak akan berubah setelah file didekompres. Semua informasi dikembalikan secara lengkap. Kompresi ini pada umumnya digunakan untuk menyimpan semua jenis data termasuk teks, file lembar kerja, basis data, program komputer, informasi finansial, dan informasi lainnya yang harus disimpan dalam bentuk aslinya. Pada http://digilib.mercubuana.ac.id/ 7 aplikasi-aplikasi ini kompresi lossless sangat diperlukan karena jika terjadi kehilangan walaupun hanya satu bit akan merupakan masalah besar. Pada sisi lain, kompresi lossy mengurangi suatu file secara permanen dengan menghilangkan informasi tertentu. Pada saat file tersebut didekompres, hanya sebagian informasi dari file asli yang tidak berubah. Kompresi lossy pada umumnya digunakan untukfile audio dan video, dimana jumlah informasi tertentu yang hilang tidak akan terdeteksi oleh kebanyakan pemakai. File gambar JPEG, biasanya digunakan untuk foto menggunakan kompresi lossy dengan cara membuang sejumlah bit gambar untuk membuat gambar berukuran lebih kecil. Tingkat pembuangan informasi gambar ini biasanya ditentukan oleh pemakai. 2.1.2 Encoding, Decoding dan Rasio Kompresi Pada umumnya pengompresan data terdiri dari dua proses yang digunakan dalam program yaitu: 1. Encoding adalah suatu proses pada software atau hardware dimana program atau peralatan melakukan pengkodean dalam format tertentu. Program atau peralatan melakukan proses encoding disebut encoder atau coder. Dalam kompresi data, file-file data yang akan dikompres menggunakan program encoding. Bit-bit dalam file aslinya akan di-encode dengan menggunakan algoritma pengompresan yang diinginkan, sehingga ukuran hasil kompresi akan lebih kecil dari ukuran aslinya. 2. Decoding adalah suatu proses pada software atau hardware dimana program atau peralatan melakukan penguraian kode dari file hasil encoding. Program atau peralatan yang melakukan proses decoding disebut decoder. Peralatan yang dapat melakukan proses decoding disebut codec. Dalam proses decoding, file hasil dari proses encoding akan dikembalikan ke bentuk aslinya dengan menggunakan algoritma pengompresan. Rasio kompresi adalah sebuah nilai untuk mengukur performa suatu metode kompresi (David Salomon,2004,10).Rasio kompresi dapat dihitung dengan rumus 2.1. = ...(2.1) (Sumber: David Salomon,2004,10) http://digilib.mercubuana.ac.id/ 8 Dimana, R = Rasio Kompresi O = Ukuran filesetelah dikompres P = Ukuran filesebelum dikompres Jika sebuah nilai rasio 0.6 artinya sebuah kompresi menghasilkan data yang lebih kecil 60% dari ukuran aslinya. 2.1.3 Teori Umum Kompresi Data Beberapa teknik pengompresan data secara lossless yang dapat digunakan pada berbagai tipe data yaitu: 1. Run Length Encoding Run Length Encoding adalah suatu teknik kompresi yang menggantikansimbol yang berurutan dengan simbol itu sendiri diikuti dengan jumlah perulangan yang terjadi. Sebagai contoh,string 111110000003355 dapat diekspresikan dengan 15063252.Sudah jelas bahwa teknik kompresi ini sangat berguna untuk simbol-simbol yang berurutan dan berulang. Dengan demikian, teknik kompresi ini berguna untuk file-file gambar dimana pixelpixel gambar tersebut mempunyai nilai yang sama. 2. Relative Encoding Relative Encoding adalah suatu teknik kompresi yang mencoba untuk membuktikan efisiensi dengan mentransmisikan perbedaan antara masingmasing nilan dan predecessor-nya, ke tempat nilai itu sendiri. Dengan demikian, nilai 15106433003 akan ditransmisikan sebagai 1+4-4-1+6-2-1+03+0+3. Akibatnya transmitter memprediksikan bahwa masing-masing nilai adalah sama seperti predecessor-nya dan data yang ditransmisikan merupkan perbedaan hasil prediksi dan nilai sebenarnya.Different Pulse Code Modulation (DPCM) adalah contoh dari relative encoding ini. 3. Huffman Coding Huffman Coding merupakan salah satu teknik pengompresan yang banyak digunakan dan sangat popular. Teori pengkodean ini diciptakan oleh David A. Huffman pada tahun 1952. Huffman Coding yaitu teknik pengompresan data yang menempatkan Variable Length Codes(VLC) ke dalam simbol-simbol, sehingga simbol-simbol yang sering muncul memiliki kode yang paling http://digilib.mercubuana.ac.id/ 9 singkat. Pada proses dekompresi simbol-simbol tersebut akan dikembalikan ukuran kode aslinya. Ketika digunakan untuk mengompres teks, contohnya Variable Length Codes digunakan sebagai ganti kode-kode ASCII, dan karakter-karakter yang sering muncul, biasanya spasi,c dan a digunakan sebagai kode-kode terpendek. Dengan cara ini jumlah total bit yang diperlukan untuk mentransmisikan data dapat dipertimbangkan lebih sedikit dibandingkan jika kode yang diambil sama untuk semua karakter. Huffman Coding secara khusus lebih efektif jika simbol pada data tidak banyak variasi. 4. Arithmetic Coding Walaupun Huffman Coding sangat efisien, teknik tersebut hanya optimal jika kemungkinan simbol-simbol adalah 2n.Arithmetic Coding tidak mempunyai pengecualian ini dan biasanya lebih efisien dibandingkan dengan teknik Huffman Coding yang lebih popular.Walaupun lebih efisien, algoritma Arithmetic Coding lebih rumit. 5. Lempel-Ziv Coding Lempel-Ziv coding menggunakan sebuah kamus simbol-simbol yang berurutan. Ketika sebuah urutan tersebut diulang maka akan diganti dengan suatu referensi ke posisinya dalam kamus tersebut. Ada beberapa variasi dari teknik Lempel-Ziv coding dan masing-masing berbeda dalam pengaturan kamusnya.Teknik kompresi data dari Lempel-Ziv yang paling terkenal yaitu Lempel-Ziv Welch. 2.2 Teori Huffman Coding Algoritma Huffman, yang dibuat oleh seorang mahasiswa MIT David Huffman pada tahun 1952, merupakan salah satu contoh metode paling terkenal dalam kompresi teks. Algoritma Huffman menggunakan prinsip pengkodean yang mirip dengan kode Morse, yaitu setiap karakter atau simbol dikodekan hanya dengan rangkaian beberapa bit, dimana karakter yang sering muncul dikodekan dengan rangkaian bit yang pendek dan karakter yang jarang muncul dikodekan dengan rangkaian bit yang lebih panjang. Berdasarkan tipe peta kode yang digunakan untuk mengubah pesan awal (isi data yang diinput) menjadi sekumpulan prefix code, algoritma Huffman http://digilib.mercubuana.ac.id/ 10 Coding termasuk kedalam kelas yang menggunakan metode statik. Metode statik adalah metode yang selalu menggunakan peta kode yang sama, metode ini membutuhkan dua fase: fase pertama menghitung frekuensi kemunculan setiap karakter atau simbol dan membetuk sebuah binary tree yang disebut Huffman Tree, selanjutnya fase kedua adalah mengubah teks menjadi susunan prefix code. Dalam studi komparasi algoritma terhadap teks tahun 2011 memberikan hasil: rasio kompresi untuk Huffman coding algoritma jatuh di kisaran 0,57-0,81. Rasio kompresi yang diperoleh algoritma ini lebih baik dibandingkan dengan algoritma Shannon-Fano denganjumlah bitsrata-rata per karakter adalah 5.27 (Robert Lourdusamy 2011: 72). 2.2.1 Huffman Tree Setiap node yang bukan leaf dari suatu tree mempunyai 2 childnode, childnode kiri dan childnode kanan.Node yangbukan leaf merupakan parent dari dua node ini.Demikian pula, parent dari parentnode adalah grandparent dari childnode yang disebut sebagai descendants’ dari ancestors. Pada tree Gambar 2.2,node 3 adalah parent dari node 6 dan7. Node 1 adalah parent dari 3 yang juga merupakan grandparent dari node 6 dan 7. Maka, node 3 dan 1 adalah ancestors dari node 6 dan 7. Gambar 2.2 Huffman Tree http://digilib.mercubuana.ac.id/ 11 Ingat bahwa jika n karakter terdapat dalam sebuah file maka jumlah node dalam Huffman tree adalah 2n-1. Jumlah kode maksimum untuk mewakili sebuah karakter adalah jumlah level dikurangi 1. Panjang kode sebuah karakter dapat ditentukan dari level dimana karakter tersebut berada. Jika panjang kode sebuah karakter adalah n, maka karakter tersebut terletak pada level ke-n+1 dari tree tersebut. Contohnya, kode karakter D adalah 011, panjang kodenya adalah 3, maka karakter ini terletak pada level 4 tree. Untuk mendapatkan kode dari tiap karakter dimulai dari rootnode dan kemudian telusuri kearah leafyang mewakili karakter.Ketika bergerak ke childnodekiri, “0” ditambahkan pada kode dan ketika bergerak ke childnode sebelah kanan, “1” ditambahkan pada kode. Dapat dilihat pada gambar 2.2 Untuk mendapatkan kode ‘A’ dari tree, pertama-tama kita mulai dari root node (node 1). Karena karakter ‘A’ adalah descendant dari childnode sebelah kanan (Kita tentukan cabang mana yang diikuti dengan melihat cabang lain yang merupkan leafnode dari karakter atau ancestornya) kita bergerka ke kanan dan menambahkan ‘1’ untuk kode karakter ‘A’. Sekarang kita berada di node 3.Leafnode dari karakter ‘A’ terletak di sebelah kanannode ini,sehingga kita bergerak lagi ke kanan dan menambahkan ‘1’ ke kodenya. Sekarang kita telah sampai pada node 7 dimana merupakan leafnode dari karakter ‘A’. Jadi, kode untuk karakter ‘A’ adalah 11. Dengan cara yang sama, kode untuk karakter lain dapat diperoleh. Kita dapat melihat bahwa kode karakter yang sering muncul lebih pendek dari karakter yang jarang muncul. 2.2.2 Pembuatan Huffman Tree Huffman Coding pada dasarnya merupakan prefix code. Prefix code adalah himpunan yang berisi sekumpulan kode biner, dimana pada prefix code ini tidak ada kode biner yang menjadi awal bagi kode biner yang lain. Prefix code biasanya direpresentasikan sebagai birnary tree yang diberikan nilai atau label. Langkah-langkah pembentukan Huffman Tree adalah sebagai berikut: 1. Baca semua karakter di dalam teks untuk menghitung frekuensi kemunculan setiap karakter. http://digilib.mercubuana.ac.id/ 12 2. Urutkan berdasarkan frekuensi kemunculan. 3. Gabungkan dua buah pohon yang mempunyai frekuensi terkecil pada sebuah root. Setelah digabungkan root tersebut mempunyai frekuensi dari jumlah dua buah pohon-pohon penyusunnya. 4. Ulangi langkah 3 sampai hanya tersisa satu buah root. 2.2.3 Encoding dan Decoding Encoding adalah cara menyusun string biner dari teks yang ada. Proses untuk satu karakter dimulai dengan membuat Huffman Tree terlebih dahulu. Setelah itu, kode untuk satu karakter dibuat dengan menyusun bilangan biner yang dibaca dari root sampai leaf dimana karakter tersebut ditempatkan. Langkah-langkah untuk men-encoding suatu teks adalah sebagai berikut: 1. Tentukan karakter yang akan di-encoding. 2. Mulai dari root, setiap melewati leaf sebelah kiri maka tambahkan bit 0 pada prefix code dan sebaliknya jika melewati leaf kanan tambahkan bit 1 pada prefix code sampai berada padaleaf dimana karakter itu berada. 3. Ulangi langkah 2 sampai seluruh karakter di-encoding. Untuk merubah hasil kompresi menjadi bentuk awal teks maka dilakukan decoding.Decoding merupakan kebalikan menyusun string kembali susunan dari encoding.Decoding biner menjadi sebuah berarti karakter kembali.Decoding dapat dilakukan dengan dua cara, yang pertama dengan menggunakan Huffman Tree dan yang kedua dengan menggunakan tabel Huffman Coding. Langkah-langkah untuk men-decoding dengan menggunakan Huffman Tree adalah sebagai berikut: 1. Baca sebuah bit biner. 2. Mulai dari root. 3. Untuk setiap bit pada langkah1, jika bit bernilai 1, arahkan pencarian ke leaf kanan dan jika bit bernilai 0 maka arahkan pencarian ke leaf sebelah kiri. 4. Ulangi langkah 1, 2, dan 3 sampai bertemu dengan leaf. 5. Ulangi dari langkah 1 sampai semua bit di-decoding. http://digilib.mercubuana.ac.id/ 13 2.3 Bahasa Pemrograman Java Java adalah bahasa pemrograman yang dapat berjalan pada berbagai jenis platform komputer seperti Windows,MacOS,linux bahkan telepon genggam. Bahasa pemrograman ini dikembangkan pertama kali oleh James Gosling saat masih bergabung dengan sebuah perusahaan bernama Sun Microsystem dan dirilis pada tahu 1995. Sintak bahasa pemrogram java banyak mengadopsi sintaksi yang terdapat dalam C maupun C++ namun lebih sederahana. Aplikasi-aplikasi berbasis java umumnya dikompilasi kedalam bytecode dan berjalan dalam Java Virtual Machine (JVM). Java merupakan bahasa pemrograman umum, dan secara khusus didesain untuk memanfaatkan dependensi implementasi seminimal mungkin. Fungsionalitasnya memungkinkan aplikasi berbasis java mampu berjalan di beberapa platform berbeda, sesuai dengan slogannya “tulis sekali, jalankan dimanapun”. Sebagai sebuah platform, Java terdiri atas dua bagian utama yaitu: 1. Java Virtual Machine (JVM). 2. Java Application Programming Interface (API). Java memiliki beberapa kelebihan dibandingkan dengan bahasa pemrograman lainnya. Adapun kelebihan tersebut diantaranya: 1. Sederhana Jika dibandingkan dengan bahasa pemograman lainnya seperti C++, Java lebih sederhana.Walaupun sebagian besar Java dibuat menggunakan bahasa C++, tetapi Java dibuat lebih sederhana dan memiliki kemampuan yang lebih tinggi.Java menggunakan alkasi memori otomatis dan memiliki garbage collection. 2. Berorientasi objek Java dirancang untuk memenuhi kemampua pemograman berorientasi objek.Pemograman berorientasi objek merupakan pendekatan atau metodologi perancangan program berdasarkan objek.Semua hal dalam pemograman berorientasi objek dapat dianggap sebagai objek. 3. Distributed http://digilib.mercubuana.ac.id/ 14 Distributed Computingadalah metode komputerisasi dengan menggunakan beberapa komputer yang dihubungkan dengan jaringan untuk mengelola tugas-tugas tertentu. Java memilki kemampuan networking yang baik, yang menjadikan programmer networking dapat mengirim dan menerima data dari sebuah file. 4. Netral terhadap berbagai arsitektur Program yang dihasilkan oleh Java tidak tergantung kepada arsitektur computer tertentu, karena Java berjalan dalam lingkungan JVM (Java Virtual Machine), program Java dapat dijalankan pada arsitektur computer yang berbeda-beda. 5. Terintrepetasi Ini merupakan karakteristik yang penting dan harus dimengerti oleh pengguna Java yang baru mengenal Java. Java adalah bahasa yang menggunakan interpreter atau penerjemah untuk dapat menjalankan program. Agar program dapat dijalankan, makan computer tujuan harus memiliki interpreter. Hal tersebut dikarenakan interpreter Java menerjemahkan kode bytecode ke dalam bahasa mesin dari computer yang bersangkutan. 6. Robust Robust berarti dapat diandalkan. Java dapat diandalkan untuk berbagai keperluan karena Java telah melewati berbagai macam proses dalam perkembangannya. Java telah menghilangkan dan mengantisipasi berbagai macam gangguan (bug) dan kesalahan-kesalahan yang umum terjadi dalam pemrograman 7. Multithreated Java juga dibekali dengan pemrosesan beberapa tugas seara bersamaan (multithreading) seperti bahasa pemograman lainnya (C, C++, dsb).Kemampuan ini sangat baik digunakan pada GUI (GraphicalUserInterface) dan pemograman jaringan.Pada pemograman GUI banyak hal bisa terjadi bersamaan, misalnya user dapat mendengarkan music sambil mengetik.Pada pemograman jaringan sebuah server dapat melayani beberapa permintaan servis dari client-client secara bersamaan. 8. Pengumpulan sampah otomatis http://digilib.mercubuana.ac.id/ 15 2.3.1 J2SE (Java 2 Standard Edition) Aplikasi yang dibuat penulis dalam penulisan ini menggunakan bahasa pemrograman berbasis Java 2 Standard Edition (J2SE). Pada bagian ini, penulis akan menjelaskan dasar-dasar J2SE. J2SE atau Java 2 Standard Edition merupakan salah satu arsitektur Java untuk aplikasi desktop. Pada J2SE terdapat 2 kelompok komponen Java untuk membantu membuat dan menjalankan aplikasi, tanpa tergantung jenis platform yang digunakan, yaitu: 1. Java Runtime Environtment (JRE), tugasnya adalah menyediakan perpustakaan, Java Virtual Machine (JVM), dan komponen lain untuk menjalankan applet dan aplikasi yang ditulis dengan bahasa pemrograman Java. 2. Java Development Kit (JDK), merupakan perangkat lunak yang digunakan untuk manajemen dan membangun berbagai aplikasi Java. Tabel 2.1 Tabel Package pada J2SE Package Language Utilities I/O Nama Package java.lang java.util java.io Text java.text Math java.math AWT Swing java.awt java.swing Javax Applet Beans Reflection SQL RMI Networking Security javax java.applet java.beans java.lang.reflect java.sql java.rmi java.net java.security Keterangan Class-class yang merupakan inti dari bahasa Java. Class-class yang mendukung utilitas struktur Java Class-class yang mendukung berbagai macam tipe input dan output Class yang mendukung lokalisasi penanganan teks, tanggal, bilangan, dan message. Class untuk melakukan perhitungan aritmatik arbitraryprecission, baik integer atau floating point Class untuk perancangan user-interface dan event-handling Class untuk membuat berbagai komponen dalam Java uang bertingkah laku sama dengan berbagai platform Perluasan dari bahasa Java Class untuk membuat applet Class untuk membuat Java beans Class untk memperoleh informasi runtime Class untuk mendukung akses dan pengolahan database Class untuk mendukung distributed programming Class untuk mendukung aplikasi jaringan Class untuk mendukung keamanan dan kriptografi http://digilib.mercubuana.ac.id/ 16 Bahasa pemrograman java menyediakan beberapa pustaka standar yang telah di-compile dan dapat langsung digunakan dalam implementasi pembuatan sebuah aplikasi.Dapat dilihat pada Tabel 2.1, pada sebuah pustaka terdapat berbagai macam class yang dapat digunakan dan telah dikelompokan ke dalam package sesuai dengan fungsi class-class tersebut. 2.3.2 Swing Java Swing merupakan library Java yang digunakan untuk membuat Graphical User Interface (GUI) yang berbasis cross platform atau OS independent. Antarmuka grafis yang dibangun dengan Java dapat dijalankan pada sistem operasi yang mendukung Java dengan tampilan yang relatif sama, bahkan dapat menyerupai antarmuka Windows XP, Mac Os atau Linux. Swing diperkenalkan sebagai mekanisme yang dapat dilihat dan dirasakan tiap-tiap komponen dalam sebuah aplikasi tanpa membuat perubahan pada substansi dalam pengkodean dari aplikasi. Secara umum, komponen swing terdiri dari lima bagian yang sering digunakan, yaitu: 1. Top-level container Merupakan container dasar dimana komponen lainnya diletakan. Toplevel Container ini terdiri dari Frame, Dialog, dan Applet yang diimplementasikan dalam class JFrame, JDialog dan JApplet. 2. Intermediate Container Merupakan komponen perantara untuk peletakan komponen lainnya, yaitu JPanel. 3. Atomic Container Merupakan komponen yang memiliki fungsi spesifik dan biasanya user berinteraksi langsung dengan jenis komponen ini. Contohnya: Jbutton, Jtextfield, dan masih banyak lagi. 4. Layout Manager Layout Manager berfungsi untuk mengatur posisi dari komponen yang diletakan pada container. Terdapat 5 macam layout, yaitu: BorderLayout, BoxLayout, FlowLayout, GridBagLayout, dan GridLayout http://digilib.mercubuana.ac.id/ 17 5. Event Handling Event Handling berfungsi untuk menangani event yang dilakukan user, misalnya menekan tombol, klik mouse, dan lain sebagainya. 2.3.3 Java Graphics Kelas Graphics adalah kelas abstrak yang menyediakan interface grafis untuk menampilkan bentuk dan gambar di layar (screen) di platform berbeda. Ketika metoda paint(Graphics g) atau paintComponent(Graphics g) digunakan, g adalah objek subclass konkret dari kelas abstrak Graphics. Tabel 2.2 menunjukan kelas Graphics mempunyai banyak metoda yang dapat digunakan untuk menggambar string, line, dan berbagai bentuk bangun (lihat Tabel 2.2).Anda dapat memanggil metoda-metoda tersebut menggunakan variabel acuan g yang mengacu ke objek dari kelas Graphics, yang merupakan parameter dari metoda pain dan paintComponent Tabel 2.2 Metoda Dalam Kelas Graphics Nama Metoda drawstring(String str,int x,int y) drawLine(int x1,int y1,int x2,int y2) drawRect(int x,int y,int width,int height) fillRect(int x,int y,int width,int height) drawOval(int x,int y,int width,int height) fillOval(int x,int y,int width,int height) drawRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeight) fillRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeight) draw3DRect(int x,int y,int width,int height,Boolean b) fill3DRect(int x,int y,int width,int height,Booleanb) Keterangan Menggambar string dengan(koordinat) ditentukan oleh x dan y Menggambar garis dengan titik pertama x1 dan y1 dan titik kedua x2 dan y2 Menggambar persegi panjang dengan sudut kiri atas ditentukan oleh x dan y serta lebar dan panjang ditentukan oleh width dan height Menggambar persegi panjang berwarna dengan sudut kiri atas ditentukan oleh x dan y serta lebar dan panjang ditentukan oleh width dan height Menggambar lingkaran lonjong dengan panjang dan sudut kiri atas ditentukan oleh x dan y. Lebar dan panjang ditentukan oleh width dan height Menggambar lingkaran berwarna dengan panjang dan sudut kiri atas ditentukan oleh x dan y. Lebar dan panjang ditentukan oleh width dan height Menggambar persegi panjang dengan sudut melingkar, lebar dan tinggi ditentukan oleh width dan height. Sudut-sudut melingkar ditentukan oleh arcWidth dan arcHeight Menggambar persegi dengan sudut melingkar berwarna, lebar dan tinggi ditentukan oleh width dan height. Sudut-sudut melingkar ditentukan oleh arcWidth dan arcHeight Menggambar persegi dengan efek tiga dimensi Menggambar persegi dengan efek tiga dimensi http://digilib.mercubuana.ac.id/ 18 2.4 Java IDE IDE atau Integrated Development Environment merupakan tools pembantu untuk pembuatan program atau aplikasi Java. Berbeda dengan Visual Basic atau bahasa pemrograman lain dimana pengguna tidak diperbolehkan memilih IDE-nya sendiri. Java membebaskan penggunanya untuk memilih IDE yang mereka sukai. Beberapa IDE Java yang populer antara lain sebagai berikut: 1. Netbeans 2. Eclipse 3. Jdeveloper 2.5 Simulasi 2.5.1 Pengertian Simulasi Simulasi adalah suatu peniruan sesuatu yang nyata, keadaan sekelilingnya, atau proses.Aksi melakukan simulasi sesuatu secara umum mewakilkan suatu karakteristik kunci atau kelakuan dari sistem-sistem fisik atau abstrak (Wikipedia). Clark Aldrich (2004:i) menyebutkan bahwa simulasi adalah sebuah perubahan dalam sistem pendidikan setelah buku tulis (textbook). Simulasi memasukan lapisan otomatisasi untuk mempermudah suatu proses pembelajaran. James J. Nutaro (2011:1) menyebutkan juga bahwa simulasi memungkinkan sebuah sistem yang tidak dapat dipraktekan menjadi dapat dipraktekan.Simulasi juga dapat mengurangi biaya karena dengan adanya sebuah sistem simulasi biaya pengadaan untuk prototype dapat dikurangi. 2.5.2 Struktur Dasar Model Simulasi Setiap model memiliki unsur-unsur berikut ini: 1. Komponen-komponen model, yakni entitas yang membentuk model, didefinisikan sebagai objek system yang menjadi perhatian pokok. 2. Variabel, nilai yang selalu berubah. http://digilib.mercubuana.ac.id/ 19 3. Parameter, yakni nilai yang tetap pada suatu saat, tapi bias berubah pada waktu yang berbeda. 4. Hubungan fungsional, yakni hubungan antar komponen-komponen model. 5. Konstrain, yakni batasan dari permasalahan yang dihadapi. 2.5.3 Langkah-langkah Simulasi Dalam melakukan simulasi terdapat langkah-langkah yang perlu dilakukan: 1. Pendefinisian sistem, menentukan batasan system dan identifikasi variabel. 2. Formulasi Model, merumuskan hubungan antar komponen. 3. Pengambilan data, yakni identifikasi data yang diperlukan model sesuai tujuan pembuatannya. 4. Pembuatan model, yakni menyesuaikan penyusunan model dengan jenis bahasa simulasi yang digunakan. 5. Verifikasi Model, yakni proses pengecekan terhadap model apakah sudah bebas dari kesalahan. Dalam tahap ini perlu disesuaikan dengan bahasa simulasi yang digunakan. 6. Validasi model, yakni proses pengujian terhadap model apakah sudah sesuai dengan sistem nyatanya. 7. Skenariosasi, penyusunan scenario terhadap model. Setelah model dianggap valid, maka berikutnya adalah membuat beberapa scenario atau eksperimen untuk memperbaiki kinerja system sesuai dengan keinginan. Secara umum jenis-jenis skenario ini adalah: a. Skenario parameter dilakukan dengan mengubah nilai parameter model. b. Skenario struktur dilakukan dengan mengubah struktur model. 8. Interpretasi Model, yakni proses penarikan kesimpulan dari hasil output model simulasi. 9. Implementasi, yakni penerapan model pada system nyata. 10. Dokumentasi, proses penyimpanan hasil output model. http://digilib.mercubuana.ac.id/ 20 2.6 UML Menurut Dan Pilone dan Neil Pitman (2005:14) UML atau Unified Modeling Language adalah sebuah bahasa visual untuk merepresentasikan design dan patterns suatu software. UML juga berfungsi untuk menggambarkan hubungan dan perilaku objek-objek dalam suatu rancangan sistem atau sistem. UML adalah suatu bahasa yang digunakan untuk menentukan,memvisualisasikan, membangun, dan mendokumentasikan suatu sistem informasi.UML juga dapat digunakan untuk memahamidan mendokumentasikansistem informasi. UML menyediakan macam-macam diagram untuk memodelkan aplikasi berorientasi objek, yaitu: 1. Use case Diagram untuk memodelkan proses bisnis. 2. Activity Diagram untuk memodelkan perilaku Use cases dan objek di dalam sistem. 3. Sequence Diagram untuk memodelkan pengiriman pesan (message) antar objek. 4. Class Diagram untuk memodelkan struktur kelas. 2.6.1 Use Case Diagram Use case diagram mendeskripsikan fungsi dan kebutuhan terhadap sistem. Use case diagram berisi sebuah fungsi, dan sesuatu atau seseorang yang menggunakan fungsi tersebut (Dan Pilone: 2005,115). Use case diagram menjelaskan tentang hubungan antara sistem dengan aktor. Hubungan ini dapat berupa input dari aktor ke sistem ataupun output dari sistem ke aktor. Use case diagram merupakan dokumen naratif yang mendeskripsikan kasus-kasus atau kejadian-kejadian daripada aktor dalam menggunakan sistem untuk menyelesaikan proses. Dalam sebuah use case diagram terdapat beberapa komponen notasi diantaranya: 1. Use cases Uses Cases merepresentasikan fungsi dari sistem atau apa saja yang dapat dilakukan user terhadap sistem. Seperti pada http://digilib.mercubuana.ac.id/ Gambar 2.3, use 21 casesdinotasikan dengan sebuah oval. Nama uses case ditulis didalam oval tersebut dan harus unik. Gambar 2.3Notasi use case 2. Actors Actors adalah para pengguna (users) dari sebuah sistem. Kadangkala sebuah sistem merupakan actors bagi sistem lain. Actor adalah seseorang atau sesuatu yang harus berinteraksi dengan sistem. Pada Gambar 2.4 kita dapat melihat bahwa actors dinotasikan dengan sebuah “stick man” dan memiliki sebuah label dibawahnya. Label ini adalah sebuah instant dari actor, contoh: pelanggan, dosen, dan kasir. Gambar 2.4Notasi Actor 3. Communication Line Sebuah garis yang menghubungkan actors dengan Use Case. 4. Use Case Relationship Hubungan antar use cases, dinotasikan dengan tanda anak panah putus-putus dengan sebuah label. Gunakan label <<Extend>> jika use case yang satu mirip dengan use case yang lain, dan gunakan label <<Include>> jika use case menggunakan kembali use case yang lain. 5. System Boundaries Dinotasikan dengan sebuah persegi yang membungkus semua use case, System Boundaries ini membedakan sistem satu dengan yang lain dalam hal fungsi dan tanggung jawab sistem tersebut. http://digilib.mercubuana.ac.id/ 22 2.6.2 Activity Diagram Activity diagram menggambarkan aliran aktifitas dalam sistem yang sedang dirancang, bagaimana masing-masing aliran berawal, decision yang mungkin terjadi, dan bagaimana aliran proses itu berakhir. Menurut Dan Pilone (2005: 152) activity diagram fokus terhadap rangkaian eksekusi dan aliran proses sebuah sistem daripada bagaimana sistem tersebut dibangun. Gambar 2.5Contoh Activity Diagram (Sumber: http://msdn.microsoft.com/en-us/library/dd409360.aspx) Gambar 2.6Activity Diagram Dengan Concurence Flow (Sumber: http://msdn.microsoft.com/en-us/library/dd409360.aspx) http://digilib.mercubuana.ac.id/ 23 Gambar 2.5 dan gambar 2.6 adalah contoh activity diagram, penjelasan mengenai simbol-simbol notasi dapat dilihat pada tabel 2.3 di bawah ini. Tabel 2.3 Notasi Activity Diagram No Nama Element/Notasi Deskripsi 1 Action State dari sistem yang mencerminkan eksekusi suatu aksi 2 Control Flow Menunjukan urutan dalam sebuah aktivitas. 3 Initial Node Awal sebuah activity 4 Activity Final Node Akhir dari activty 5 Decision Node Kondisi percabangan, memiliki 1 buah input dan 2 atau lebih output. 6 Guard 7 Merge Node Dibutuhkan untuk menggambungkan aliran yang sebelumnya displit oleh decision node. 8 Comment Untuk tambahan informasi mengenai elemen terkait. 9 Call Behaviour Sebuah action yang memiliki detail dari activity diagram lain. 11 Fork Node Membagi aliran proses menjadi beberapa aliran yang saling konkuren. 12 Join Node Menggambung aliran paralel. 13 Send Signal Action Notasi untuk pengiriman sinyal atau pesan. 14 Accept Event Action Notasi untuk penerimaan sinyal atau pesan. 2.6.3 Sequence Diagram Sequence diagram menggambarkan urutan interaksi antar objek dalam sistem (Russ Miles: 2006, 109). Sequence diagram terdiri dari dimensi vertikal dan dimensi horizontal. Dimensi vertikal adalah poros waktu, berjalan ke bawah.Sedangkan dimensi horizontal merepresentasikan objek-objek individual. Tiap objek (termasuk aktor) mempunyai waktu aktif yang gambarkan oleh kolom vertikal yang disebut lifeline.Pesan direpresentasikan sebagai tanda panah dari suatu lifeline ke lifeline yang. http://digilib.mercubuana.ac.id/ 24 Simbol dan notasi dasar sequence diagram adalah sebagai berikut: 1. Class Roles Class roles menggambarkan way (jalan) sebuah objek akan menunjukan reaksi dalam sebuah keadaan.Notasi untuk class roles dapat dilihat pada gambar 2.7. Gambar 2.7 Notasi Activations (Sumber: http://www.smartdraw.com/resources/tutorials/uml-sequence-diagram/) 2. Activation Activation merepresentasikan waktu yang dibutuhkan oleh objek untuk melaksanakan proses.Notasi untuk activation dapat dilihat pada gambar 2.8. Gambar 2.8Notasi Activations Lainnya (Sumber: http://www.smartdraw.com/resources/tutorials/uml-sequence-diagram/) 3. Messages Pada gambar 2.9messages digambarkan dengan tanda panah merepresentasikan komunikasi antar objek. yang Message berguna untuk mengirimkan perintah kepada lifeline.Message bisa berasal dari aktor kepada http://digilib.mercubuana.ac.id/ 25 lifeline atau dari lifeline ke lifeline lainnya.Gambar 2.10 menunjukan berbagai notasi message. Gambar 2.9 Notasi Message (Sumber: http://www.smartdraw.com/resources/tutorials/uml-sequence-diagram/) Gambar 2.10 Notasi Message Lainnya (Sumber: http://www.smartdraw.com/resources/tutorials/uml-sequence-diagram/) 4. Lifelines Lifeline digambarkan dengan garisputus-putusvertikalyang menunjukkankeberadaanobjekdari waktu ke waktu.Gambar 2.11 adalah contoh notasi lifeline. http://digilib.mercubuana.ac.id/ 26 Gambar 2.11 Notasi Lifeline (Sumber: http://www.smartdraw.com/resources/tutorials/uml-sequencediagram/) 5. Destroying Objects Obyek dapat dihentikan lebih awal menggunakan panah yang bertuliskan "<<destroy>>" yang menunjuk ke sebuah X. Lihat Gambar 2.12. Gambar 2.12 Notasi Destroy (Sumber: http://www.smartdraw.com/resources/tutorials/uml-sequence-diagram/) 6. Loops Suatu pengulangan digambarkan dengan perseagi panjang. Kondisi untuk keluar dari loop ditulis pada bagian kiri bawah.Lihat gambar 2.13. http://digilib.mercubuana.ac.id/ 27 Gambar 2.13 Notasi Loop (Sumber: http://www.smartdraw.com/resources/tutorials/uml-sequencediagram/) 2.6.4 Class Diagram Menurut Dan Pilone & Neil Pitman (2005, 29) class mewakili sekelompok hal-hal yang memiliki keadaan atau sifat dan perilaku. Contohnya: Volkswagen, Toyota, dan Ford dapat diwakili dengan class bernama mobil. Sedangkan menurut Russ Miles and Kim Hamilton (2006, 64) class adalah tipe dari sesuatu.Class adalah sebuah “cetak biru” dalam sebuah objek yang akan dibangun. Class merupakan sekelompok hal-hal yang memiliki keadaan dan perilaku umum. Class diagram adalah salah satu jenis diagram yang paling mendasar dalam UML. Class diagram digunakan untuk merepresentasikan hubungan statis sistem, classapa saja yang mengandung referensi class lain, class apa saja yang dimiliki oleh suatu class (Dan Pilone & Neil Pitman: 2005, 28). Elemen-elemen notasi class diagram dalam UML terdiri dari: 1. Classes Pada Gambar 2.14 sebuah class dinotasikan dengan gambar persegi yang dibagi menjadi 3 bagian dipisahkan oleh sebuah garis. Bagian paling atas diisi oleh namaclass ditulis kapital dan tebal. Bagian kedua berisi atribut-atribut yang dimiliki class.Bagian paling bawah diisi oleh operasi-operasi yang dapat dilakukan class. http://digilib.mercubuana.ac.id/ 28 Gambar 2.14 Notasi Class (Sumber: http://www.smartdraw.com/resources/tutorials/uml-class-diagrams/) 2. Active Classes Kelas aktif memulai dan mengontrol aliran aktivitas, sedangkan kelas pasif menyimpan data dan melayani kelas-kelas lain. Menggambarkan kelas aktif dengan perbatasan tebal seperti pada Gambar 2.15. Gambar 2.15 Notasi Class Lainnya (Sumber: http://www.smartdraw.com/resources/tutorials/uml-class-diagrams/) 3. Visibility Notasi visibility adalah sebuah tanda untuk membedakan hak akses terhadap informasi yang ada pada suatu class.Jika sebuah atribut atau operasi memiliki visibilitas private maka informasi disembunyikan dari luar class.Public memungkinkan class-class lain melihat/mengambil informasi.Sedangkan Protected membolehkan hanya class-class turunan saja.Visibility dinotasikan dengan simbol +, _, dan # seperti ditunjukan oleh Gambar 2.16. 4. Associations Associations adalah hubungan statis antar class. Nama Associations ditempatkan di atas atau di bawah garis yang menghubungkan 2 class.Tanda panah menandakan arah hubungan. Roles merepresentasikan peran class terhadap class lain. Contoh notasi dapat dilihat pada Gambar 2.17. http://digilib.mercubuana.ac.id/ 29 Gambar 2.16 Notasi Visibility (Sumber: http://www.smartdraw.com/resources/tutorials/uml-class-diagrams/) 5. Multiplicity/Kardinalitas Sebuah asosiasi yang merupakan hubungan struktural antara objekobjek.Dalam banyaksituasipemodelan,penting untuk menyatakan berapa banyak objek dapatdihubungkan melintasi sebuah instancedalam sebuah asosiasi. Gambar 2.18 merupakan contoh notasi multiplicity, satu buah perusahaan mempunyai satu atau lebih karyawan dan seorang karyawan bekerja pada satu perusahaan. Gambar 2.17 Notasi Associations (Sumber: http://www.smartdraw.com/resources/tutorials/uml-class-diagrams/) Gambar 2.18 Notasi Multiplicity (Sumber: http://www.smartdraw.com/resources/tutorials/uml-class-diagrams/) http://digilib.mercubuana.ac.id/ 30 6. Composition dan Aggregation Menunjukan hubungan antar class “terdiri atas..”. Gambar 2.19 menunjukan notasi Compostion dan Aggregation bahwa classA terdiri atas class B. Gambar 2.19 Notasi Composition dan Aggregation (Sumber: http://www.smartdraw.com/resources/tutorials/uml-class-diagrams/) 7. Generalisasi Generalisasi adalah istilah lain untuk penurunan atau inheritance. Sebuah class bisa saja turunan dari class lain. Sebuah class turunan mempunyai semua atribut dan operasi dari parent class-nya.Gambar 2.20 menunjukan contoh notasi untuk generalisasi pada class diagram. Gambar 2.20 Notasi Generalisasi (Sumber: http://www.smartdraw.com/resources/tutorials/uml-class-diagrams/) 2.7 Rekayasa Perangkat Lunak Rekayasa Perangkat Lunak menurut Roger S. Pressman (2001) adalah disiplin ilmu yang membahas semua aspek produksi perangkat lunak, mulai tahap http://digilib.mercubuana.ac.id/ 31 awal spesifikasi sistem sampai pemeliharaan sistem setelah digunakan. Beberapa tujuan dari rekayasa perangkat lunak yaitu : 1. Meningkatkan keakuratan, performance & efficiency produk secara keseluruhan dalam pengembangan. 2. Menerapkan metodologi yang terdefinisi dengan baik untuk resolusi perangkat lunak. 3. Rekayasa Perangkat Lunak berhubungan dengan masalah-masalah praktis untuk menghasilkan suatu perangkat lunak. Pendekatan dilakukan dengan model bisnis dan strategi bisnis suatu perangkat lunak. Dalam perancangan perangkat lunak dikenal istilah SDLC (System Development Life Cycle) yaitu tahapan-tahapan pekerjaan yang dilakukan oleh analis sistem dan programmer dalam membangun sistem informasi. Pada pengembangan aplikasi simulasi algoritma Huffman Coding ini, penulis menerapkan model pengembangan perangkat lunak waterfall. Model waterfall, kadang disebut juga classic life cycle adalah sistem pendekatan pengembangan perangkat lunak secara linear sequential. Dapat dilihat pada gambar 2.4 model pengembangan waterfall dimulai secara berurutan seperti berikut: 1. Analisis. Langkah pertama adalah analisa kebutuhan sistem.Apa saja masukan ke sistem. Apa saja proses yang dilakukan sistem serta apa saja yang dikeluarkan (output) oleh sistem. 2. Desain. Proses ini berfokus pada: struktur data, arsitektur perangkat lunak, representasi interface, dan detail (algoritma) prosedural. 3. Kode atau implementasi. Desainharus diterjemahkanke dalam bentukmesin yang dapat dibaca. Langkahpembuatan kodemelakukantugas ini. Jikadesaindilakukandengan cara yangrinci, pembuatan kodedapat diselesaikansecara mekanis. 4. Pengujian. Tujuan testing adalah menemukan kesalahan-kesalahan terhadap sistem tersebut dan kemudian bisa diperbaiki, memastikan semua fungsi berjalan http://digilib.mercubuana.ac.id/ 32 dengan baik, juga memastikan bahwa output sistem sudah sesuai dengan kondisi input. Terdapat 2 metode pengujian terhadap perangkat lunak, yaitu: a. Whitebox Pengujianyang didasarkan pada pengecekan terhadap detail perancangan, menggunakan struktur kontrol dari desain program secara prosedural untuk membagi pengujian ke dalam beberapa kasus pengujian. Secara sekilas dapat diambil kesimpulan white box testing merupakan petunjuk untuk mendapatkan program yang benar secara 100%. b. Blackbox Pengujian blackbox hanya fokus pada fungsional aplikasi tanpa melihat struktur internal aplikasi. Pengujian blackbox cenderung menemukan: kesalahan fungsi, kesalahan antarmuka, kesalahan performa, dan lain-lain. Gambar 2.21 Alur Pendekatan PL Model Waterfall http://digilib.mercubuana.ac.id/