PADA FILE DENGAN MENGGUNAKAN PENGKODEAN
BASE-64
SKRIPSI
Oleh :
LINGGA ADI F IRMANTO
( 0734010127 )``
PROGRAM STUDI TEKNIK INFORMATIKA
FAKULTAS TEKNOLOGI INDUSTRI
UNIVERSITAS PEMBANGUNANNASIONAL “VETERAN” J ATIM
SURABAYA
Pembimbing I : Dian Puspita Hapsari, S.Kom, M.Kom Pembimbing II : Achmad Junaidi, S.Kom.
Penyusun : Lingga Adi Firmanto
ABSTRAK
Kompresi data adalah upaya untuk memperkecil ukuran data tanpa kehilangan data aslinya. Sejumlah algoritma telah dikembangkan untuk memperoleh hasil kompresi sekecil mungkin, yang salah satunya adalah Huffman. Algoritma Huffman merupakan algoritma kompresi data berbasis statistik. Keunikan dari algoritma ini adalah semakin banyak terdapat karakter yang sama maka hasil kompresinya akan semakin kecil karena sejumlah karakter yang sama tersebut akan diwakili oleh satu pola saja. Penelitian ini berupaya agar data yang akan dikompresi memiliki “nilai kembar” sebanyak mungkin agar saat dikompresi dengan algoritma Huffman diperoleh hasil kompresi yang semakin kecil dengan melakukan pengkodean (encoding) berbasis 64 sebagai upaya yang bisa dilakukan untuk memperkecil interval. Terbatasnya jumlah karakter pola yang tersedia akan membuat peluang terjadinya karakter kembar semakin besar. Hasil akhir proses encode adalah berupa dokumen baru yang hanya terdiri dari susunan karakter pola saja. File ini selanjutnya akan dikompresi dengan algoritma Huffman.
Oleh karena itu, dalam tugas akhir ini, penulis membuat aplikasi yang mampu melakukan proses kompresi menggunakan algorithma huffman pada file yang mengalami pengkodean base-64 menggunakan bahasa pemrograman Java.
Alhamdulillaahi rabbil ‘alamin, segala puji bagi Allah Yang Maha Kuasa yang telah
memberikan kekuatan-Nya sehingga penulis bisa menyelesaikan tugas akhir yang berjudul :
“Kompresi File Dengan Algoritma Huffman Pada File Dengan Menggunakan Pengkodean
Base-64”. Serta kepada Nabi Muhammad SAW yang telah menuntun kita semua kejalan yang
lurus dan di ridhoi oleh Allah SWT.
Melalui tugas akhir ini, penulis merasa mendapat kesempatan besar untuk lebih
memperdalam ilmu pengetahuan yang diperoleh selama di perkuliahan.Terutama di bidang
pemrograman java. Namun demikian, penulis menyadari bahwa Tugas Akhir ini masih memiliki
banyak kelemahan dan kekurangan. Oleh karena itu penulis sangat mengharapkan kritik dan
sarannya untuk pengembangan ke depannya.
Secara khusus, dalam kesempatan ini pula, penulis ingin mengucapkan terima kasih dan
penghargaan sebesar-besarnya kepada:
1.
Bapak Ir. Sutiyono MT selaku Dekan Fakultas Teknologi Industri Universitas
Pembangunan Nasional “Veteran” Jawa Timur.
2.
Ibu Dr. Ir. Ni Ketut Sari, MT selaku Ketua Program Studi Teknik Informatika Universitas
Pembangunan Nasional ”Veteran” Jawa Timur.
restunya yang tiada henti.
5.
Teman-teman seperjuangan Indra,kiki,reza(ahong),farid,yursa,nanang yang selalu ada
untuk membantu meringankan pengerjaan tugas akhir ini.
6.
Rizky Novitasari atas dukungannya selama ini serta teman-teman dari drughi indonesia.
Saya menyadari bahwa dalam penyusunan laporan ini tidak terlepas dari kekurangan
dan kesalahan. Untuk itu, saya sangat terbuka bagi kritik dan saran yang bersifat membangun.
Semoga laporan tugas akhir ini bermanfaat bagi saya khususnya dan bagi pembaca umumnya.
Surabaya, 15 Juni 2012
2.9 Unified Modelling Language ... 21
BAB IV IMPLEMENTASI DAN PENGUJIAN SISTEM
4.1 Implementasi Hasil Perancangan ... 53
4.2 Implementasi Package Base64 ... 53
4.2.1 Implementasi Fungsi byte[] Encode () ... 53
4.2.2 Implementasi Fungsi int Encode() ... 54
4.2.3 Implementasi Fungsi byte[] Decode() ... 54
4.2.4 Implementasi Fungsi int Decode() ... 55
4.3 Implementasi Package Frequency Table ... 55
4.3.1 Implementasi Fungsi int getSymbolLimit() ... 55
4.3.2 Implementasi Fungsi int Get() ... 56
4.3.3 Implementasi Fungsi Set() ... 56
4.3.4 Implementasi Fungsi increment () ... 56
4.4 Implementasi Package Huffman Compress ... 57
4.4.1 Implementasi Fungsi FrequencyTable getFrequencies() ... 57
4.4.2 Implementasi Fungsi WriteCode() ... 58
4.4.3 Implementasi Fungsi Compress() ... 58
4.5 Pengujian Sistem ... 59
4.5.1 Pengujian Encoding dan Kompresi ... 59
4.5.2 Pengujian Decoding dan Dekompresi ... 63
BAB V PENUTUP 5.1 Kesimpulan…….. ... 67
5.2 Saran………. ... 67
D A F T AR G A M B A R
Gambar 2.1 Siklus Informasi ... 10
Gambar 2.2 Komponen Kualitas Informasi ... 11
Gambar 2.3 Representasi teks ABACCDA ... 16
Gambar 2.4 Pohon Huffman untuk teks ABACCDA ... 17
Gambar 2.14 Notasi Generalization... 32
Gambar 2.15 Notasi Realization ... 33
Gambar 3.1 Diagram Alir Aplikasi encoding dan kompresi ... 41
Gambar 3.2 Kelas Diagram Aplikasi Encode64 dan Kompresi Huffman ... 42
Gambar 3.3 Use Case Diagram Aplikasi Kompresi Data ... 47
Gambar 3.4 Sequence Diagram Compress ... 48
Gambar 3.5 Sequence Diagram Decompress ... 49
Gambar 3.6 Rancangan Form Kompresi ... 51
Gambar 3.7 Rancangan Form Dekompresi ... 52
Gambar 4.1 Pengujian encoding dan kompresi ... 59
Gambar 4.2 Grafik Hasil Uji Coba Kompresi ... 62
Gambar 4.3 Pengujian decoding dan dekompresi ... 63
DAFTAR TABEL
Tabel 2.1 Kode Huffman untuk “ABACCDA” ... 17
Tabel 2.2 Contoh Encoding dengan Metode Base-64 ... 20
Tabel 2.3 Perbandingan Java dengan Bahasa Lain ... 35
Tabel 4.1 Rangkuman Hasil Percobaan Encoding dan
Kompresi ... 60
Tabel 4.2 Rangkuman Hasil Percobaan Decoding dan
BAB I
PENDAHULUAN
1.1. Latar Belakang
Kompresi data adalah upaya untuk memperkecil ukuran data tanpa
kehilangan data aslinya. Bisa dikatakan bahwa hasil akhir dari proses kompresi
data adalah terbentuknya data baru yang merupakan modifikasi dari data asli
dengan algoritma tertentu dimana data baru ini memiliki ukuran lebih kecil
daripada data aslinya, Data hasil kompresi tidak bisa dibaca secara langsung
sebagaimana data asli; data hasil kompresi bisa dibaca setelah sebelumnya
di-dekompresi terlebih dahulu.
Sejumlah algoritma telah dikembangkan untuk memperoleh hasil
kompresi sekecil mungkin. Kebanyakan dari algoritma tersebut merupakan
pengembangan maupun perbaikan dari algoritma yang sudah ada, salah satunya
dikembangkan dari algoritma Huffman. Algoritma Huffman merupakan algoritma
kompresi data berbasis statistik. Struktur tree untuk menyusun karakter kompresi
diperoleh melalui perhitungan statistik berdasarkan jumlah kemunculan tiap
karakter. Keunikan dari algoritma ini adalah semakin banyak terdapat karakter
yang sama maka hasil kompresinya akan semakin kecil karena sejumlah karakter
yang sama tersebut akan diwakili oleh satu pola saja. Penelitian ini berupaya agar
data yang akan dikompresi memiliki “nilai kembar” sebanyak mungkin agar saat
dikompresi dengan algoritma Huffman diperoleh hasil kompresi yang semakin
Peluang untuk memperoleh data kembar ditentukan oleh
panjang-pendeknya interval kode karakter yang digunakan. Secara umum karakter di
komputer dikodifikasi dalam format ASCII (American Standard Code for
Information Interchange) dengan panjang interval 256, yaitu kode 0 sampai 255.
Tiap karakter akan disimpan oleh komputer dalam bentuk biner sebanyak 8 bit.
Dalam format ASCII, setiap karakter akan memiliki nilai biner antara 00000000
sampai dengan 11111111. Dengan panjang interval 256 maka tiap karakter akan
memiliki formasi biner berbeda dibandingkan dengan karakter lainnya. Bila
panjang interval ini diperkecil maka akan ada sejumlah karakter berbeda yang
memiliki nilai biner sama. Upaya yang bisa dilakukan untuk memperkecil interval
ini adalah dengan proses encode data.
Encode merupakan upaya untuk mengubah suatu karakter menjadi
karakter lain yang sudah disediakan. Ini berbeda dengan enkripsi yang
menggunakan persamaan matematika untuk mengubah suatu karakter menjadi
karakter lain. Pada encode, karakter yang akan menjadi karakter pengganti sudah
tersedia, tinggal harus dihitung berdasarkan rumus tertentu untuk mencari karakter
mana dalam pola yang harus digunakan untuk menggantikan karakter tertentu.
Algoritma Base-64 merupakan salah satu algoritma untuk proses encode
data dengan menyediakan karakter pola sebanyak 64 buah, yaitu
ABCDEFGHIJKLMNOPQRSTUVWXYZ, abcdefghijklmnopqrstuvwxyz,
0123456789, +/. Karakter pola tersebut hanya menggunakan 6 bit data. Karakter
yang di-encode dengan algoritma base 64 adalah karakter dengan lebar 8 bit,
diubah menjadi karakter pola dengan lebar 6 bit. Terbatasnya jumlah karakter pola
Hasil akhir proses encode adalah berupa dokumen baru yang hanya terdiri dari
susunan karakter pola saja. File ini selanjutnya akan dikompresi dengan algoritma
Huffman.
Oleh karena itu, dalam tugas akhir ini, penulis akan membuat aplikasi
yang mampu melakukan proses kompresi menggunakan algorithma huffman pada
file yang mengalami pengkodean base-64.
1.2. Rumusan Masalah
Berdasarkan latar belakang masalah di atas, permasalahan dalam
penelitian ini adalah : Bagaimana membuat aplikasi yang dapat menggabungkan
konsep encode base 64 dengan algoritma Huffman ?
1.3. Batasan Masalah
Agar tidak menyimpang dari tujuan yang ingin dicapai, penelitian ini
dibatasi pada hal-hal sebagai berikut:
1. Karakter yang ditulis dalam naskah adalah meliputi karakter-karakter yang
terdapat dalam tabel ASCII.
2. Penelitian ini dilaksanakan pada file berekstensi *.txt.
3. Penelitian ini tidak melakukan pembandingan antara hasil kompresi file asli
dengan hasil kompresi file yang telah di-encode sebelumnya.
4. Penelitian ini tidak membahas tentang banyaknya waktu yang dibutuhkan
untuk melakukan proses kompresi / dekompresi. Istilah kompresi di sini sudah
5. Aplikasi ini dapat berjalan pada sistem operasi Microsoft Windows XP, Vista
dan Seven
1.4. Tujuan
Adapun tujuan dari penelitian ini adalah menghasilkan aplikasi yang
dapat menggabungkan konsep encode data dengan kompresi data serta untuk
pengamanan file.txt setelah proses encoding.
1.5. Manfaat
Adapun manfaat yang ingin diperoleh dari pengerjaan tugas akhir ini
adalah dapat membuat perangkat lunak untuk mempermudah pengguna dalam
proses pengkodean base-64 sekaligus melakukan proses kompresi menggunakan
algorithma huffman.
1.6. Metodologi Penelitian
Metode penelitian merupakan tahapan-tahapan yang dilalui oleh peneliti
dari perumusan masalah sampai kesimpulan, yang membentuk sebuah alur yang
sistematis. Metodologi penelitian in digunakan sebagai pedoman penelitian dalam
pelaksanaan penelitian ini agar hasil yang dicapai tidak menyimpang dari tujuan
yang telah ditetapkan sebelumnya. Adapun metode penelitian yang dipergunakan
dalam pengerjaan tugas akhir ini adalah :
a. Studi Literatur
Mencari referensi dan bahan pustaka tentang teori-teori yang berhubungan
b. Studi Kasus
Mencari contoh-contoh kasus serupa yang berhubungan dengan permasalahan
dalam tugas akhir ini.
c. Analisis dan Perancangan
Membuat analisa berdasarkan data-data yang sudah dimiliki, membuat model
matematisnya dan merancang alur penyelesaian berdasarkan algoritma
Huffman dan encoding base64. Perancangan aplikasi dimulai dengan
perancangan antar muka aplikasi, kemudian merancang detail kombinasi dari
kedua algoritma tersebut.
d. Implementasi Program
Mengimplementasikan teknik algoritma yang akan digunakan. Detail
mengenai implementasi program dilakukan sesuai hasil analisis dan
perancangan aplikasi pada tahapan sebelumnya.
e. Pengujian Aplikasi
Pengujian dilakukan pada aplikasi yang telah dibuat. Menguji validitas dan
efektifitas algoritma yang diterapkan pada aplikasi.
f. Evaluasi dan Penarikan kesimpulan
Evaluasi dilakukan untuk mengetahui kinerja aplikasi kompresi data teks
sesuai ukuran dan format data teksnua, selanjutnya dilakukan penarikan
1.7. Sistematika Penulisan
Sistematika penulisan tugas akhir ini disusun untuk memberikan gambaran
umum tentang penelitian yang dijalankan. Sistematika penulisan tugas akhir ini
adalah sebagai berikut :
BAB I PENDAHULUAN
Bab ini berisi latar belakang masalah, identifikasi masalah, maksud
dan tujuan yang ingin dicapai, batasan masalah, metodologi
penelitian yang diterapkan dalam memperoleh dan mengumpulkan
data, waktu dan tempat penelitian, serta sistematika penulisan.
BAB II TINJ AUAN PUSTAKA
Membahas berbagai konsep dasar dan teori-teori yang berkaitan
dengan topik masalah yang diambil dan hal-hal yang berguna
dalam proses analisis permasalahan.
BAB III ANALISIS DAN PERANCANGAN
Menganalisis masalah dari model penelitian untuk memperlihatkan
keterkaitan antar variabel yang diteliti serta model matematis untuk
analisisnya.
BAB IV IMPLEMENTASI DAN PENGUJ IAN
Membahas mengenai pengimplementasian aplikasi yang telah
dibuat ke perangkat yang akan digunakan serta melakukan
pengujian terhadap aplikasi yang telah diimplementasikan tersebut.
BAB V PENUTUP
Berisi kesimpulan dan saran yang sudah diperoleh dari hasil
BAB II
TINJ AUAN PUSTAKA
2.1. Repr esentasi Data
Data disimpan di dalam komputer pada main memory untuk diproses.
Sebuah karakter data disimpan dalam main memory menempati posisi 1 byte.
Komputer generasi pertama, 1 byte terdiri dari 4 bit, komputer generasi kedua, 1
byte terdiri dari 6 bit dan komputer generasi sekarang, 1 byte terdiri dari 8 bit.
Suatu karakter data yang disimpan di main memory diwakili dengan kombinasi
dari digit binary (binary digit atau bit). Suatu kode biner dapat digunakan untuk
mewakili suatu karakter.
Suatu komputer yang berbeda menggunakan kode biner yang berbeda
untuk mewakili suatu karakter. Komputer yang 1 byte terdiri dari 4 bit,
menggunakan kode binary yang berbentuk kombinasi 4 bit, yaitu BCD (Binary
coded decimal). Komputer yang menggunakan 6 bit untuk 1 bytenya,
menggunakan kode biner yang terdiri dari kombinasi 6 bit, yaitu SBCDIC
(Standard Binary Coded Decimal Interchange Code). Komputer yang terdiri dari 8
bit, menggunakan kode biner yang terdiri dari kombinasi 8 bit, yaitu EBCDIC
(extended Binary coded decimal interchange code) atau ASCII (American
standard code of information interchange).
2.1.1. BCD (Binar y Coded Decimal)
BCD merupakan kode biner yang digunakan hanya untuk mewakili nilai
4 bit, sehingga sebanyak 16 (24 = 16) kemungkinan kombinasi yang dapat
diperoleh dan hanya 10 kombinasi yang dipergunakan.
Kode BCD yang orisinil sudah jarang dipergunakan untuk komputer
generasi sekarang, karena tidak dapat mewakili huruf atau simbol-simbol karakter
khusus.
2.1.2. SBCDIC (Standar d Binar y Coded Decimal)
SBCDIC merupakan kode biner perkembangan dari BCD. BCD dianggap
tanggung, karena masih ada 6 kombinasi yang tidak dipergunakan, tetapi tidak
dapat digunakan untuk mewakili karakter yang lainnya. SBCDIC menggunakan
kombinasi 6 bit , sehingga lebih banyak kombinasi yang bisa dihasilkan, sebanyak
64 kombinasi kode, yaitu 10 kode untuk digit angka, 26 kode untuk huruf
alphabet dan sisanya karakter-karakter khusus yang dipilih [1].
Posisi bit di SBCDIC dibagi menjadi 2 zone, yaitu 2 bit pertama disebut
dengan alphabet position dan 4 bit berikutnya disebut dengan numeric bit
position.
2.1.3. EBCDIC (Extended Binar y Coded Decimal)
EBCDIC terdiri dari kombinasi 8 bit yang memungkinkan untuk
mewakili karakter sebanyak 256 kombinasi karakter. Pada EBCDIC, high-order
bits atau 4 bit pertama disebut dengan zone bits dan low order bits atau 4 bit
kedua disebut dengan numeric bit.
2.1.4. ASCII (Amer ican Standar d Code for Infor mation Inter change)
Kode ASCII yang standard menggunakan kombinasi 7 bit, dengan
terdiri dari dua bagian, yaitu control characters dan information characters
merupakan karakter-karakter yang mewakili data.
(Sumber : Johnsonbaugh, R, 2005)
2.2. Konsep Dasar Infor masi
Konsep dasar informasi adalah data yang kemudian diolah dengan
kriteria tertentu untuk menghasilkan informasi yang dibutuhkan. Data dapat
diartikan segala sesuatu yang perlu diolah terlebih dahulu untuk
mendapatkan suatu informasi. Definisi Sistem Informasi Informasi merupakan
hal yang sangat penting bagi manajemen dalam mengambil suatu keputusan.
Suatu informasi dapat diperoleh dari sistem informasi atau juga disebut
dengan Processing system atau information Processing system atau
information-generating system. Sistem informasi didefinisikan oleh Robert A.
Leitchdan K. Roscoe Davis adalah “suatu sistem didalam sebuah organisasi
yang mempertemukan kebutuhan pengolahan transaksi harian, mendukung
orperasi, bersifat menejerial dan kegiatan strategi dari suatu organisasi dan
menyediakan pihak luar tertentu dengan laporan-laporan yang diperlukan”.
Penggunaan teknologi komputer sangat diperlukan untuk membantu pengolahan
data yang bersifat rutin dan membutuhkan ketelitian yang tinggi diantaranya :
siklus informasi, kualitas informasi, nilai informasi.
a. Siklus Informasi
Siklus informasi data merupakan bentuk yang masih mentah sehingga perlu diolah
untuk proses lebih lanjut. Data diolah melalui suatu model untuk dihasilkan
model proses tertentu agar dapat lebih berguna dalam bentuk informasi. Data yang
diolah melalui suatu model menjadi informasi, penerima kemudian menerima
informasi tersebut, membuat suatu keputusan dan melakukan tindakan dan
menghasilkan suatu tindakan yang akan membuat sejumlah data kembali. Data
tersebut akan ditangkap sebagai input, diproses kembali melalui suatu model
sampai membentuk suatu siklus informasi.
Gambar 2.1 Siklus Informasi
b. Kualitas Informasi
Kualitas informasi merupakan bagian dari karakteristik informasi, diukur
berdasarkan Relevansi, Tepat waktu, dan Akurasi hal ini dapat digambarkan pada
gambar 2.2 dibawah ini
Proses
Out put Input
Penerima Dat a
Keputusan Hasil
Tindakan
Dasar
Gambar 2.2. Komponen Kualitas Informasi
c. Nilai Informasi
Nilai dari informasi ditentukan dari dua hal, yaitu manfaat dan biaya untuk
mendapatkannya. Suatu informasi dikatakan bernilai bila manfaatnya lebih efektif
dibandingkan dengan biaya untuk mendapatkannya. Akan tetapi perlu
diperhatikan bahwa informasi yang digunakan didalam suatu sistem informasi
umumnya digunakan untuk beberapa kegunaan. Sehingga tidak memungkinkan
dan sulit untuk menghubungkan suatu bagian informasi pada suatu masalah
tertentu dengan biaya untuk memperolehnya. Pengukuran nilai informasi biasanya
dihubungkan dengan analisis Cost Effectiveness atau Cost Benefit.
(Sumber : Teguh Wahyono, 2004,)
2.3. Kompr esi Data
Pada akhir tahun 40-an dimana dimulainya tahun teori informasi, ide
pengembangan metode coding yang efesien baru dimulai dan dikembangkan.
Dimulainya penjelajahan ide dari entropy, information content dan redudansi.
Salah satu ide yang popular adalah apabila probabilitas dari simbol dalam suatu
pesan diketahui, maka terdapat cara untuk mengkodekan simbol, sehingga pesan
Model pertama yang muncul untuk kompresi sinyal digital adalah
Shannon-Fano coding. Shannon dan fano (1948) terus menerus mengembangkan
algoritma ini yang menghasilkan codeord biner untuk setiap symbol (unik) yang
terdapat pada data file.
Huffman coding (1952) memakai hampir semua karakteristik dari
Shannon-fano coding. Huffman coding dapat menghasilkan kompresi data yang
efektif dengan mengurangkan jumlah redudansi dalam mengkodingkan simbol.
Telah dapat dibuktikan, bahwa Huffman coding merupakan metode fixed-length
yang paling efesien.
Pada limabelas tahun terakhir, Huffman coding telah digantikan oleh
Arithmetic coding. Arithmetic coding melewatkan ide untuk menggantikan
sebuah simbol masukan dengan kode yang spesifik. Algoritma ini menggantikan
sebuah aliran simbol masukan dengan sebuah angka keluaran single
floating-point. Lebih banyak bit dibutuhkan dalam angka keluaran, maka semakin rumit
pesan yang diterima.
Algoritma dictionary-based compression menggunakan metode yang
sangat berbeda dalam mengkompres data. Algoritma ini menggantikan string
variable-length dari simbol menjadi sebuah token. Token merupakan sebuah indek
dalam susunan kata di kamus. Apabila token kecil dari susunan kata, maka token
akan menggantikan prase tersebut dan kompresi pun terjadi.
Kompresi data (pemampatan data) merupakan suatu teknik untuk
memperkecil jumlah ukuran data (hasil kompresi) dari data aslinya. Pemampatan
data umumnya diterapkan pada mesin komputer, hal ini dilakukan karena setiap
pada ASCII setiap simbol yang dimunculkan memiliki panjang 8 bit, misal kode
A pada ASCII mempunyai nilai decimal 65, jika dirubah dalam bilangan biner
menjadi 010000001. Pemampatan data digunakan untuk mengurangkan jumlah
bir-bit yang dihasilkan dari setiap simbol yang muncul. Dengan pemampatan ini
diharapkan dapat mengurangi (memperkecil ukuran data) dalam ruang
penyimpanan.
(Sumber : David Salomon, 2008)
2.4. Metode Kompr esi Data
Berdasarkan tipe peta kode yang digunakan untuk mengubah pesan awal
(isi file input) menjadi sekumpulan codeword, metode kompresi terbagi menjadi
dua kelompok, yaitu :
a. Metode Statik
Menggunakan peta kode yang selalu sama. Metode ini membutuhkan dua
fase (two-pass) : fase pertama untuk menghitung probabilitas kemunculan tiap
simbol/karakter dan menentukan peta kodenya dan fase kedua untuk mengubah
pesan menjadi kumpulan kode yang akan ditransmisikan. Contohnya pada
Huffman static, arithmetic coding
b. Metode Dinamik (adaptif)
Menggunakan peta kode yang dapat diubah dari waktu ke waktu. Metode
ini disebut adaptif karena peta kode mampu beradaptasi terhadap karakteristik isi
file selama proses kompresi berlangsung. metode ini bersifat onepass, karena isi
file selama dikompres hanya diperlakukan satu kali pembacaan terhadap isi file.
Berdasarkan teknik pengkodean atau pengubahan simbol yang
digunakan, metode kompresi dapat dibagi ke dalam tiga kategori, yaitu :
a. Metode simbolwise
Menghitung peluang kemunculan dari tiap simbol dalam file input, lalu
mengkodekan satu simbol dalam satu waktu, dimana simbol yang lebih sering
muncul diberi kode lebih pendek dibandinglan simbol yang lebih jarang muncul.
Contohnya pada Huffman coding, arithmetic coding.
b. Metode dictionary
Menggantikan karakter/fragmen dalam file input dengan indeks lokasi
dari karakter/fragmen tersebut dalam sebuah kamus (dictionary). Contohnya pada
algoritma LZW.
c. Metode predictive
Menggunakan model finite-context atau finite-state untuk memprediksi
distribusi probabilitas dari simbol-simbol selanjutnya. Contohnya pada algoritma
DMC
(Sumber : David Salomon, 2008)
2.5. Tek nik Kompr esi Da ta
Teknik kompresi data dapat digolongkan menjadi dua kelompok utama
yaitu : lossy dan lossless. Teknik kompresi secara lossy dimaksudkan dengan
teknik kompresi data dengan menghilangkan ketelitian data utama guna
mendapatkan data sekecil mungkin (kompresi data sebesar mengkin). Teknik
jumlah data yang terjadi redudansi (memiliki symbol yang sama) sebelum terjadi
kompresi.
a. Lossy Compression
Merupakan teknik kompresi yang menghilangkan beberapa informasi
data yang dianggap tidak penting. Sehingga hasil data yang telah terkompresi
tidak sama dengan data yang sebelum dikompresi. Namun data yang telah
terkompresi tersebut sudah cukup untuk digunakan, walaupun datanya telah
berubah. Keunggulan dari teknik ini adalah file atau data yang telah terkompresi
memiliki ukuran yang lebih kecil dari ukuran data aslinya. Biasanya teknik
kompresi ini banyak diaplikasikan pada data gambar dan data audio.
b. Lossless Compression
Merupakan teknik kompresi yang mempertahankan kebutuhan informasi
yang dikandung oleh data, sehingga informasi yang terkandung pada file yang
telah terkompresi tetap terjaga meskipun ukurannya telah berubah dari ukuran
data aslinya. Keunggulan dari teknik ini adalah data yang telah terkompresi,
apabila didekompresi kembali akan menghasilkan data yang sama persis dengan
data aslinya. Biasanya teknik kompresi ini banyak diaplikasikan pada data teks.
2.6. Algor ithma Huffman
Algoritma Huffman ditemukan oleh David Huffman pada tahun 1952.
Algoritma ini menggunakan pengkodean yang mirip dengan kode Morse [7].
Berdasarkan tipe kode yang digunakan algoritma Huffman termasuk metode
statistic. Sedangkan berdasarkan teknik pengkodeannya menggunakan metode
untuk mengompres teks. Berikut ini ilustrasi algoritma Huffman dengan
menggunakan file teks yg berisi “ABACCDA :
1. Pilih dua simbol dengan peluang (probability) paling kecil (pada contoh di
atas simbol B dan D). Kedua simbol tadi dikombinasikan sebagai simpul
orangtua dari simbol B dan D sehingga menjadi simbol BD dengan peluang
1/7 + 1/7 = 2/7, yaitu jumlah peluang kedua anaknya.
2. Selanjutnya, pilih dua simbol berikutnya, termasuk simbol baru, yang
mempunyai peluang terkecil.
3. Ulangi langkah 1 dan 2 sampai seluruh simbol habis.
Sebagai contoh, dalam kode ASCII string 7 huruf “ABACCDA”
membutuhkan representasi 7 × 8 bit = 56 bit (7 byte), dengan rincian sebagai
berikut :
Gambar 2.3. Representasi teks ABACCDA
Untuk mengurangi jumlah bit yang dibutuhkan, panjang kode untuk tiap
karakter dapat dipersingkat, terutama untuk karakter yang frekuensi
kemunculannya besar. Pada string di atas, frekuensi kemunculan A = 3, B = 1, C
= 2, dan D = 1, sehingga dengan menggunakan algoritma di atas diperoleh kode
Gambar 2.4. Pohon Huffman untuk teks ABACCDA
Tabel 2.1. Kode Huffman untuk “ABACCDA”
Dengan menggunakan kode Huffman ini, string “ABACCDA”
direpresentasikan menjadi rangkaian bit : 0 110 0 10 10 111 0. Jadi, jumlah bit
yang dibutuhkan hanya 13 bit dari yang seharusnya dibutuhkan 56 bit. Untuk
menguraikan kembali data yang sudah dikodekan sebelumnya dengan algoritma
Huffman, dapat digunakan cara sebagai berikut :
2. Lakukan traversal pada pohon Huffman mulai dari akar sesuai dengan bit
yang dibaca. Jika bit yang dibaca adalah 0 maka baca anak kiri, tetapi jika bit
yang dibaca adalah 1 maka baca anak kanan.
3. Jika anak dari pohon bukan daun (simpul tanpa anak) maka baca bit
berikutnya dari string biner masukan.
4. Hal ini diulang (traversal) hingga ditemukan daun.
5. Pada daun tersebut simbol ditemukan dan proses penguraian kode selesai.
6. Proses penguraian kode ini dilakukan hingga keseluruhan string biner
masukan diproses.
(Sumber : Roy Indra Haryanto, 2009)
2.7. Pengkodean Data
Pengkodean data menggunakan basis bilangan tertentu banyak
dipergunakan untuk menyimpan dan mengirim data, dengan maksud tertentu,
misalnya membatasi hak akses pembacaan terhadap data tersebut. Alasan lainnya
adalah sebagai kemudahan dalam melakukan editing karena cukup menggunakan
teks editor.
Dalam beberapa kondisi tertentu, penggunaan padding (‘=’) dalam basis
pengkodean tidak diperlukan atau digunakan. Tetapi secara umum. Ketika asumsi
panjang data tidak sesuai ketika dalam proses transfer data, karakter padding
diperlukan agar proses penguraian kodenya menjadi benar.
Pengkodean basis menggunakan alfabet untuk mengkodekan data biner.
Sedangkan karakter yang tidak termasuk alfabet bisa saja terdapat dalam data
Dengan kata lain pengkodean merupakan upaya untuk mengubah suatu
karakter menjadi karakter lain yang sudah disediakan. Ini berbeda dengan enkripsi
yang menggunakan persamaan matematika untuk mengubah suatu karakter
menjadi karakter lain. Pada encode, karakter yang akan menjadi karakter
pengganti sudah tersedia, tinggal harus dihitung berdasarkan rumus tertentu untuk
mencari karakter mana dalam pola yang harus digunakan untuk menggantikan
karakter tertentu.
2.8. Algor itma Pengkodean Base64
Algoritma Base-64 merupakan salah satu algoritma untuk proses encode
data dengan menyediakan karakter pola sebanyak 64 buah, yaitu
ABCDEFGHIJKLMNOPQRSTUVWXYZ, abcdefghijklmnopqrstuvwxyz,01234
56789, +/. Karakter pola tersebut hanya menggunakan 6 bit data. Karakter yang
di-encode dengan algoritma base 64 adalah karakter dengan lebar 8 bit, diubah
menjadi karakter pola dengan lebar 6 bit. Terbatasnya jumlah karakter pola yang
tersedia akan membuat peluang terjadinya karakter kembar semakin besar. Hasil
akhir proses encode adalah berupa dokumen baru yang hanya terdiri dari susunan
karakter pola saja. File ini selanjutnya akan dikompresi dengan algoritma
Huffman.
Pada umumnya karakter yang dikirim ditulis dalam bentuk ASCII,
dimana setiap karakternya terdiri dari 8 bit. Secara keseluruhan ada 256 karakter
ASCII, meliputi huruf, angka, karakter khusus (seperti %), karakter kontrol
(seperti CR), dan ada jenis lain. Untuk kebutuhan lain, panjang 8 bit ini tidak
terdiri dari 16 bit. Bagi sistem Base 64, tidak ada perbedaan antara lebar 8 bit dan
16 bit; semuanya akan diproses dengan cara yang sama. Cara yang dilakukan oleh
Base 64 Encoding adalah dengan mengubah karakter data sumber –sistem 8 bit
atau 16 bit—menjadi deretan kelompok 6 bit. Ada kemungkinan kelompok
terakhir akan kekurangan bit supaya lengkap 6 bit.
Solusinya adalah dengan menambahkan sejumlah bit '0' di belakangnya,
lalu sebagai tanda bahwa telah terjadi penambahan bit '0' maka setiap penambahan
2 buah bit '0' akan diganti dengan sebuah karakter '='. Terakhir, deretan karakter
ABCDEFGHIJKLMNOPQRSTUVWXYZ, abcdefghijklmnopqrstuvwxyz,01234
56789, +/ digunakan sebagai acuan untuk memperoleh nomor index dari setiap
karakter yang akan di-encode. Pada deretan tersebut huruf 'A' terletak pada index
0, huruf 'B' terletak pada index 1, dan seterusnya. Berikut ini diberikan contoh
konversi sebagaimana pada dengan mengambil string yang akan di-encode berupa
teks "Mary had".
Tabel 2.2 Contoh Encoding dengan Metode Base-64
ASCII text Mary had
010011 010110 000101 110010 011110 010010 000001 101000 011000 010110 010000=
Decimal representation of text in groups of 6 bits
19 22 05 50 30 18 01 40 24 22 16=
Base 64 encoded string TWFyeSBoYWQ=
2.8.1 Decoding Base 64 menjadi ASCII
Proses decoding adalah kebalikan dari encoding, yaitu mengembalikan
Langkah-langkah untuk melakukan decode adalah sebagai berikut :
a. Baca setiap karakter lalu tentukan nomor indeknya berdasarkan lokasi setiap
karakter ABCDEFGHIJKLMNOPQRSTUVWXYZ, abcdefghijklmnopqrstu
vwxyz, 0123456789, +/.
b. Lakukan konversi dari nomor indeks yang diperoleh ke dalam bentuk 6 bit.
c. Jika dijumpai karakter '=' pada akhir data ter-encode, buanglah 2 bit '0' untuk
setiap karakter '=' yang dijumpai.
d. Setelah seluruh bit diperoleh, bagilah bit-bit tersebut menjadi kelompok 8 bit.
e. Terjemahkan setiap kelompok 8 bit menjadi karakter ASCII yang bersesuaian.
(Sumber : Michael Burrows, 1952)
2.9. Unified Modelling Language
Unified Modelling Language (UML) adalah sebuah "bahasa" yang telah
menjadi standar dalam industri untuk menentukan, visualisasi, merancang dan
mendokumentasikan artifactdari sistem software, untuk memodelkan bisnis dan
sistem non software lainnya. UML merupakan suatu kumpulan teknik terbaik
yang telah terbukti sukses dalam memodelkan sistem yang besar dan kompleks.
Dengan menggunakan UML kita dapat membuat model untuk semua
jenis aplikasi piranti lunak, dimana aplikasi tersebut dapat berjalan pada piranti
keras, sistem operasi dan jaringan apapun, serta ditulis dalam bahasa
pemrograman apapun. Tetapi karena UML juga menggunakan class dan operation
dalam konsep dasarnya, maka ia lebih cocok untuk penulisan piranti lunak dalam
demikian, UML tetap dapat digunakan untuk modeling aplikasi prosedural dalam
VB atau C.
Seperti bahasa-bahasa lainnya, UML mendefinisikan notasi dan
syntax/semantik. Notasi UML merupakan sekumpulan bentuk khusus untuk
menggambarkan berbagai diagram piranti lunak. Setiap bentuk memiliki makna
tertentu, dan UML syntax mendefinisikan bagaimana bentuk-bentuk tersebut
dapat dikombinasikan. Notasi UML terutama diturunkan dari 3 notasi yang telah
ada sebelumnya: Grady Booch OOD (Object-Oriented Design), Jim Rumbaugh
OMT (Object Modeling Technique), dan Ivar Jacobson OOSE (Object-Oriented
Software Engineering).
Sejarah UML sendiri cukup panjang. Sampai era tahun 1990 seperti kita
ketahui puluhan metodologi pemodelan berorientasi objek telah bermunculan di
dunia. Diantaranya adalah: metodologi Booch, metodologi Coad , metodologi
OOSE, metodologi OMT, metodologi Shlaer-Mellor, metodologi Wirfs-Brock,
dan sebagainya. Masa itu terkenal dengan masa perang metodologi (method war)
dalam pendesainan berorientasi objek. Masing-masing metodologi membawa
notasi sendiri-sendiri, yang mengakibatkan timbul masalah baru apabila kita
bekerja sama dengan group/perusahaan lain yang menggunakan metodologi yang
berlainan.
Dimulai pada bulan Oktober 1994 Booch, Rumbaugh dan Jacobson, yang
merupakan tiga tokoh yang boleh dikatakan metodologinya banyak digunakan
mempelopori usaha untuk penyatuan metodologi pendesainan berorientasi objek.
Pada tahun 1995 direlease draft pertama dari UML (versi 0.8). Sejak tahun 1996
http://www.omg.org). Tahun 1997 UML versi 1.1 muncul, dan saat ini versi
terbaru adalah versi 1.5 yang dirilis bulan Maret 2003. Booch, Rumbaugh dan
Jacobson menyusun tiga buku serial tentang UML pada tahun 1999. Sejak saat
itulah UML telah menjelma menjadi standar bahasa pemodelan untuk aplikasi
berorientasi objek.
Object Management Group, Inc. (OMG) adalah sebuah organisasi
international yang dibentuk pada 1989, didukung lebih dari 800 anggota, terdiri
dari perusahaan sistem informasi, software developer, dan pada user sistem
komputer. Organisasi ini salah satunya bertugas membuat spesifikasi “manajemen
objek” untuk menetapkan kerangka bersama dalam rekayasa software.
Gambar 2.5. Metodologi dalam UML
Sasaran OMG adalah membantu perkembangan object-oriented
technology dan mengarahkannya dengan mendirikan Object Management
Architecture (OMA). OMA menentukan infrastruktur konseptual yang didasarkan
pada seluruh spesifikasi yang dikeluarkan OMG.
OMG kemudian mengeluarkan UML, dimana dengan adanya UML ini
diharapkan dapat mengurangi kekacauan dalam bahasa pemodelan yang selama
ini terjadi dalam lingkungan industri. UML diharapkan juga dapat menjawab
Saat ini piranti lunak semakin luas dan besar lingkupnya, sehingga tidak
bisa lagi dibuat asal-asalan. Piranti lunak saat ini seharusnya dirancang dengan
memperhatikan hal-hal seperti scalability, security, dan eksekusi yang robust
walaupun dalam kondisi yang sulit. Selain itu arsitekturnya harus didefinisikan
dengan jelas, agar bug mudah ditemukan dan diperbaiki, bahkan oleh orang lain
selain programmer aslinya. Keuntungan lain dari perencanaan arsitektur yang
matang adalah dimungkinkannya penggunaan kembali modul atau komponen
untuk aplikasi piranti lunak lain yang membutuhkan fungsionalitas yang sama.
Pemodelan (modeling) adalah proses merancang piranti lunak sebelum
melakukan pengkodean (coding). Model piranti lunak dapat dianalogikan seperti
pembuatan blueprint pada pembangunan gedung. Membuat model dari sebuah
sistem yang kompleks sangatlah penting karena kita tidak dapat memahami sistem
semacam itu secara menyeluruh. Semakin komplek sebuah sistem, semakin
penting pula penggunaan teknik pemodelan yang baik.
Dengan menggunakan model, diharapkan pengembangan piranti lunak
dapat memenuhi semua kebutuhan pengguna dengan lengkap dan tepat, termasuk
faktor-faktor seperti scalability, robustness, security, dan sebagainya. Kesuksesan
suatu pemodelan piranti lunak ditentukan oleh tiga unsur, yang kemudian terkenal
dengan sebutan segitiga sukses (the triangle for success). Ketiga unsur tersebut
adalah metode pemodelan (notation), proses (process) dan tool yang digunakan.
Memahami notasi pemodelan tanpa mengetahui cara pemakaian yang sebenarnya
(proses) akan membuat proyek gagal. Dan pemahaman terhadap metode
UML menyediakan beberapa notasi dan artifact standar yang bisa
digunakan sebagai alat komunikasi bagi para pelaku dalam proses analisis dan
desain. Artifact didalam UML didefinisikan sebagai informasi dalam bentuk yang
digunakan atau dihasilkan dalam proses pengembangan perangkat. Contohnya
adalah source code yang dihasilkan oleh proses pemrograman.
Yang harus diperhatikan untuk menjaga konsistensi antar artifact selama
proses analisis dan desain adalah bahwa setiap perubahan yang terjadi pada satu
artifact harus juga dilakukan pada atifact sebelumnya.
Untuk membuat suatu model, UML memiliki diagram grafis sebagai
berikut
use case diagram
class diagram
behavior diagram
statechart diagram
activity diagram
interaction diagram
o sequence diagram
o collaboration diagram
implementation diagram
component diagram
deployment diagram
Diagram-diagram tersebut diberi nama berdasarkan sudut pandang yang
berbeda-beda terhadap sistem dalam proses analisis atau rekayasa.
1. Setiap sistem yang kompleks selalu paling baik jika didekati melalui
himpunan berbagai sudut pandang yang kecil yang satu sama lain hampir
saling bebas (independent). Sudut pandang tunggal senantiasa tidak
mencukupi untuk melihat sistem yang besar dan kompleks.
2. Diagram yang berbeda-beda tersebut dapat menyatakan tingkatan yang
berbeda-beda dalam proses rekayasa.
3. Diagram-diagram tersebut dibuat agar model yang dibuat semakin mendekati
realitas.
2.10. Semantik Dalam UML
OMG telah menetapkan semantik (makna istilah) semua notasi UML
dalam model struktural dan model behavior. Model struktural (model statis),
menekankan stuktur obyek dalam sebuah sistem, menyangkut kelas-kelas,
interface, atribut dan hubungan antar komponen. Model behavioral (model
dinamis), menekankan perilaku obyek dalam sebuah sistem, termasuk metode,
interaksi, kolaborasi dan state history.
Tujuan utama UML diantaranya untuk :
1. Memberikan model yang siap pakai, bahasa pemodelan visual yang ekspresif
untuk mengembangkan dan saling menukar model dengan mudah dan
dimengerti secara umum.
2. Memberikan bahasa pemodelan yang bebas dari berbagai bahasa
pemrograman dan proses rekayasa.
Pertama, UML menggabungkan konsep Booch, OMT dan OOSE, sehingga UML
merupakan suatu bahasa pemodelan tunggal yang umum dan digunakan secara
luas oleh para user ketiga metode tersebut dan bahkan para user metode lainnya.
Kedua, UML menekankan pada apa yang dapat dikerjakan dengan metode-meode
tersebut.
Ketiga, UML berfokus pada suatu bahasa pemodelan standar, bahkan pada proses
standar. Meskipun UML harus diaplikasikan dalam konteks sebuah proses, dari
pengalaman, bahwa organisasi dan masalah yang berbeda juga memerlukan
proses yang berbeda pula.
UML tidak mencakup :
a. Bahasa Pemrograman
UML adalah bahasa pemodelan visual, bukan dimaksudkan untuk menjadi suatu
bahasa pemrograman visual, tetapi UML memberikan arah untuk bergerak kearah
kode.
b. Tool (software aplikasi) pemodelan
Membuat standar sebuah bahasa diperlukan oleh tool-tool dan proses. UML
mendefinisikan semantik dan notasi, bukan sebuah tool. Contoh tool yang
menggunakan UML sebagai bahasanya adalah Rational Rose dan Enterprise
Architect.
c. Proses rekayasa
UML digunakan sebagai bahasa dalam proyek dengan proses yang berbeda-beda.
UML bebas dari proses dan mendefinisikan sebuah proses standar bukan tujuan
UML atau RFP dari OMG. Dalam pembahasan ini kita akan menggunakan sebuah
2.11. Notasi Dalam UML
Seperti bahasa-bahasa lainnya, UML mendefinisikan notasi dan
syntax/semantik. Notasi UML merupakan sekumpulan bentuk khusus untuk
menggambarkan berbagai diagram piranti lunak.
Setiap bentuk memiliki makna tertentu, dan UML syntax mendefinisikan
bagaimana bentuk-bentuk tersebut dapat dikombinasikan. Notasi UML terutama
diturunkan dari 3 notasi yang telah ada sebelumnya: Grady Booch OOD
(Object-Oriented Design), Jim Rumbaugh OMT (Object Modeling Technique), dan Ivar
Jacobson OOSE (Object-Oriented Software Engineering). Berbagai gambar
berikut ini memakili notasi-notasi standar dalam UML.
2.11.1.Actor
Gambar 2.6. Notasi Actor
Actor menggambarkan segala pengguna software aplikasi (user). Actor
memberikan suatu gambaran jelas tentang apa yang harus dikerjakan software
aplikasi. Sebagai contoh sebuah actor dapat memberikan input kedalam dan
menerima informasi dari software aplikasi, perlu dicatat bahwa sebuah actor
berinteraksi dengan use case, tetapi tidak memiliki kontrol atas use case. Sebuah
actor mungkin seorang manusia, satu device, hardware atau sistem informasi
2.11.2.Use Ca se
Gambar 2.7. Notasi Use Case
Use case menjelaskan urutan kegiatan yang dilakukan actor dan sistem
untuk mencapai suatu tujuan tertentu. Walaupun menjelaskan kegiatan, namun
use case hanya menjelaskan apa yang dilakukan oleh actor dan sistem bukan
bagaimana actor dan sistem melakukan kegiatan tersebut.
Use-case Konkret adalah use case yang dibuat langsung karena keperluan actor.
Actor dapat melihat dan berinisiatif terhadapnya
Use-case Abstrak adalah use case yang tidak pernah berdiri sendiri. Use case
abstrak senantiasa termasuk didalam (include), diperluas dari (extend) atau
memperumum (generalize) use case lainnya. Untuk menggambarkannya dalam
use case model biasanya digunakan association relationship yang memiliki
stereotype include, extend atau generalization relationship. Hubungan include
menggambarkan bahwa suatu use case seluruhnya meliputi fungsionalitas dari use
case lainnya. Hubungan extend antar use case berarti bahwa satu use case
merupakan tambahan fungsionalitas dari use case yang lain jika kondisi atau
2.11.3.Class Diagr am
Gambar 2.8. Notasi Class
Class merupakan pembentuk utama dari sistem berorientasi obyek,
karena class menunjukkan kumpulan obyek yang memiliki atribut dan operasi
yang sama. Class digunakan untuk mengimplementasikan interface.
Class digunakan untuk mengabstraksikan elemen-elemen dari sistem yang sedang
dibangun. Class bisa merepresentasikan baik perangkat lunak maupun perangkat
keras, baik konsep maupun benda nyata.
Notasi class berbentuk persegi panjang berisi 3 bagian: persegi panjang
paling atas untuk nama class, persegi panjang paling bawah untuk operasi, dan
persegi panjang ditengah untuk atribut.
Atribut digunakan untuk menyimpan informasi. Nama atribut
menggunakan kata benda yang bisa dengan jelas merepresentasikan informasi
yang tersimpan didalamnya. Operasi menunjukkan sesuatu yang bisa dilakukan
oleh obyek dan menggunakan kata kerja.
2.11.4.Inter fa ce
Gambar 2.9. Notasi Interface
Interface merupakan kumpulan operasi tanpa implementasi dari suatu class.
Implementasi operasi dalam interface dijabarkan oleh operasi didalam class. Oleh
mengimplementasikan operasinya. Interface ini merupakan salah satu cara
mewujudkan prinsip enkapsulasi dalam obyek.
2.11.5.Inter action
Gambar 2.10. Notasi Interaction
Interaction digunakan untuk menunjukkan baik aliran pesan atau informasi antar
obyek maupun hubungan antar obyek. Biasanya interaction ini dilengkapi juga
dengan teks bernama operation signature yang tersusun dari nama operasi,
parameter yang dikirim dan tipe parameter yang dikembalikan
2.11.6.Note
Gambar 2.11. Notasi Note
Note digunakan untuk memberikan keterangan atau komentar tambahan dari suatu
elemen sehingga bisa langsung terlampir dalam model. Note ini bisa disertakan ke
semua elemen notasi yang lain.
2.11.7.Dependency
Gambar 2.12. Notasi Dependency
Dependency merupakan relasi yang menunjukan bahwa perubahan pada salah satu
elemen memberi pengaruh pada elemen lain. Elemen yang ada di bagian tanda
panah adalah elemen yang tergantung pada elemen yang ada dibagian tanpa tanda
Terdapat 2 stereotype dari dependency, yaitu include dan extend. Include
menunjukkan bahwa suatu bagian dari elemen (yang ada digaris tanpa panah)
memicu eksekusi bagian dari elemen lain (yang ada di garis dengan panah).
Extend menunjukkan bahwa suatu bagian dari elemen di garis tanpa panah bisa
disisipkan kedalam elemen yang ada di garis dengan panah.
2.11.8.Association
Gambar 2.13. Notasi Association
Association menggambarkan navigasi antar class (navigation), berapa banyak
obyek lain yang bisa berhubungan dengan satu obyek (multiplicity antar class)
dan apakah suatu class menjadi bagian dari class lainnya (aggregation).
Navigation dilambangkan dengan penambahan tanda panah di akhir garis.
Bidirectional navigation menunjukkan bahwa dengan mengetahui salah satu class
bisa didapatkan informasi dari class lainnya. Sementara UniDirectional
navigation hanya dengan mengetahui class diujung garis association tanpa panah
kita bisa mendapatkan informasi dari class di ujung dengan panah, tetapi tidak
sebaliknya. Aggregation mengacu pada hubungan “has-a”, yaitu bahwa suatu
class memiliki class lain, misalnya Rumah memiliki class Kamar.
2.11.9.Gener alization
Gambar 2.14. Notasi Generalization
Generalization menunjukkan hubungan antara elemen yang lebih umum ke
(subclass) akan menurunkan atribut dan operasi dari class yang lebih umum
(superclass) atau “subclass is superclass”. Dengan menggunakan notasi
generalization ini, konsep inheritance dari prinsip hirarki dapat dimodelkan.
2.11.10. Realization
Gambar 2.15. Notasi Realization
Realization menunjukkan hubungan bahwa elemen yang ada di bagian tanpa
panah akan merealisasikan apa yang dinyatakan oleh elemen yang ada di bagian
dengan panah. Misalnya class merealisasikan package, component merealisasikan
class atau interface.
(Sumber : Fowler, Martin, 2005)
2.12. Bahasa Pemr ograman J ava
Pada 1991, sekelompok insinyur Sun dipimpin oleh Patrick Naughton
dan James Gosling ingin merancang bahasa komputer untuk perangkat konsumer
seperti cable TV Box. Karena perangkat tersebut tidak memiliki banyak memori,
bahasa harus berukuran kecil dan mengandung kode yang liat. Juga karena
manufaktur – manufaktur berbeda memilih processor yang berbeda pula, maka
bahasa harus bebas dari manufaktur manapun. Proyek diberi nama kode ”Green”.
Kebutuhan untuk fleksibilitas, kecil, liat dan kode yang netral terhadap
platform mengantar tim mempelajari implementasi Pascal yang pernah dicoba.
Niklaus Wirth, pencipta bahasa Pascal telah merancang bahasa portabel yang
dengan mesin maya (virtual machine). Kode ini kemudian dapat digunakan di
sembarang mesin yang memiliki interpreter. Proyek Green menggunakan mesin
maya untuk mengatasi isu utama tentang netral terhadap arsitektur mesin.
Karena orang – orang di proyek Green berbasis C++ dan bukan Pascal
maka kebanyakan sintaks diambil dari C++, serta mengadopsi orientasi objek dan
bukan prosedural. Mulanya bahasa yang diciptakan diberi nama ”Oak” oleh James
Gosling yang mendapat inspirasi dari sebuah pohon yang berada pada seberang
kantornya, namun dikarenakan nama Oak sendiri merupakan nama bahasa
pemrograman yang telah ada sebelumnya, kemudian SUN menggantinya dengan
JAVA. Nama JAVA sendiri terinspirasi pada saat mereka sedang menikmati
secangkir kopi di sebuah kedai kopi yang kemudian dengan tidak sengaja salah
satu dari mereka menyebutkan kata JAVA yang mengandung arti asal bijih kopi.
Akhirnya mereka sepakat untuk memberikan nama bahasa pemrograman tersebut
dengan nama Java.
Produk pertama proyek Green adalah Star 7 (*7), sebuah kendali jarak
jauh yang sangat cerdas. Dikarenakan pasar masih belum tertarik dengan produk
konsumer cerdas maka proyek Green harus menemukan pasar lain dari teknologi
yang diciptakan. Pada saat yang sama, implementasi WWW dan Internet sedang
mengalami perkembangan pesat. Di lain pihak, anggota dari proyek Green juga
menyadari bahwa Java dapat digunakan pada pemrograman internet, sehingga
penerapan selanjutnya mengarah menjadi teknologi yang berperan di web.
Java telah mengakomodasi hampir seluruh fitur penting bahasa – bahasa
1. Dari SIMULA, bahasa pada tahun 65-an, bahasa yang paling mempengaruhi
Java sekaligus C++. Dari bahasa ini diadopsi bentukan – bentukan dasar dari
pemrograman berorientasi objek.
2. Dari LISP – bahasa tahun 55-an. Diadopsi fasilitas garbage collection, serta
kemampuan untuk meniru generic list processing, meski fasilitas ini jarang
yang memanfaatkannya.
3. Dari Algol – bahasa pada tahun 60-an, diambil struktur kendali yang
dimilikinya.
4. Dari C++, diadopsi sintaks, sebagian semantiks dan exception handling
5. Dari bahasa Ada, diambil strongly type, dan exception handling.
6. Dari Objective C, diambil fasilitas interface.
7. Dari bahasa SmallTalk, diambil pendekatan single-root class hiérarchie,
dimana objek adalah satu kesatuan hirarki pewarisan
8. Dari bahasa Eiffel, fasilitas assertion yang mulai diterapkan di sebagian JDK
1.4
Sebagai sebuah bahasa pemrograman, Java dapat membuat seluruh
bentuk aplikasi, desktop, web dan lainnya, sebagaimana dibuat dengan
menggunakan bahasa pemrograman konvensional yang lain.
Java adalah bahasa pemrograman yang berorientasi objek (OOP) dan
dapat dijalankan pada berbagai platform sistem operasi. Perkembangan Java tidak
hanya terfokus oada satu sistem operasi, tetapi dikembangkan untuk berbagai
sistem operasi dan bersifat open source. teknologi Java menyediakan banyak
tools, yaitu : compiler, interpreter, penyusun dokumentasi, paket kelas dan
sebagainya.
Aplikasi dengan teknologi Java secara umum adalah aplikasi serba guna
yang dapat dijalankan pada seluruh mesin yang memiliki Java Runtime
Environment (JRE). Terdapat dua komponen utama dari Deployment
Environment. Yang pertama adalah JRE, yang terdapat pada paket J2SDK,
mengandung kelas – kelas untuk semua paket teknologi Java yang meliputi kelas
dasar dari Java, komponen GUI dan sebagainya. Komponen yang lain terdapat
pada Web Browser. Hampir seluruh Web Browser komersial menyediakan
interpreter dan runtime environment dari teknologi Java.
Bahasa pemrograman Java memiliki karakteristik berikut :
1. Sederhana (Simple)
Bahasa pemrograman Java menggunakan Sintaks mirip dengan C++ namun
sintaks pada Java telah banyak diperbaiki terutama menghilangkan
penggunaan pointer yang rumit dan multiple inheritance. Java juga
2. Berorientasi objek (Object Oriented)
Java mengunakan pemrograman berorientasi objek yang membuat program
dapat dibuat secara modular dan dapat dipergunakan kembali. Pemrograman
berorientasi objek memodelkan dunia nyata kedalam objek dan melakukan
interaksi antar objek-objek tersebut.
3. Terdistribusi (Distributed)
Java dibuat untuk membuat aplikasi terdistribusi secara mudah dengan adanya
libraries networking yang terintegrasi pada Java.
4. Interpreted
Program Java dijalankan menggunakan interpreter yaitu Java Virtual Machine
(JVM). Hal ini menyebabkan source code Java yang telah dikompilasi
menjadi Java bytecodes dapat dijalankan pada platform yang berbeda-beda.
5. Robust
Java mempuyai reliabilitas yang tinggi. Compiler pada Java mempunyai
kemampuan mendeteksi error secara lebih teliti dibandingkan bahasa
pemrograman lain. Java mempunyai runtime-Exception handling untuk
membantu mengatasi error pada pemrograman.
6. Secure
Sebagai bahasa pemrograman untuk aplikasi internet dan terdistribusi, Java
memiliki beberapa mekanisme keamanan untuk menjaga aplikasi tidak
digunakan untuk merusak sistem komputer yang menjalankan aplikasi
7. Architecture Neutral
Program Java merupakan platform independent. Program cukup mempunyai
satu buah versi yang dapat dijalankan pada platform berbeda dengan Java
Virtual Machine.
8. Portable
Source code maupun program Java dapat dengan mudah dibawa ke platform
yang berbeda-beda tanpa harus dikompilasi ulang.
9. Performance
Performance pada Java sering dikatakan kurang tinggi. Namun performance
Java dapat ditingkatkan menggunakan kompilasi Java lain seperti buatan
Inprise, Microsoft ataupun Symantec yang menggunakan Just In Time
Compilers (JIT).
10.Multithreaded
Java mempunyai kemampuan untuk membuat suatu program yang dapat
melakukan beberapa pekerjaan secara sekaligus dan simultan.
11.Dynamic
Java didesain untuk dapat dijalankan pada lingkungan yang dinamis.
Perubahan pada suatu class dengan menambahkan properties ataupun method
dapat dilakukan tanpa menggangu program yang menggunakan class tersebut.
Dalam pemrogaman menggunakan java, terdapat JVM yaitu sebuah
mesin imajiner (maya) yang bekerja dengan menyerupai aplikasi pada sebuah
mesin nyata. JVM menyediakan spesifikasi hardware dan platform dimana
Java menjadi bebas dari platform manapun karena proses kompilasi diselesaikan
oleh JVM.
Aplikasi program Java diciptakan dengan file teks berekstensi .java.
Program ini dikompilasi menghasilkan satu berkas bytecode berekstensi .class
atau lebih. Bytecode adalah serangkaian instruksi serupa instruksi kode mesin.
Perbedaannya adalah kode mesin harus dijalankan pada sistem komputer dimana
kompilasi ditujukan, sementara bytecode berjalan pada java interpreter yang
BAB III
ANALISIS KEBUTUHAN DAN PERANCANGAN SISTEM
3.1. Analisis Kebutuhan
Aplikasi dalam tugas akhir ini digunakan untuk melakukan
pengkodean dan kompresi file teks. Sistem akan melakukan pengkodean file
teks yang akan dikompresi menjadi deretan kode semacam ciphertext dan
dapat melakukan proses dekompresi dan pengembalian kode menjadi teks
aslinya.
Dalam membangun aplikasi tugas akhir ini, diperlukan batasan yang
jelas sebagai tujuan utamanya agar tidak keluar dari rencana yang telah
ditetapkan. Beberapa kebutuhan sistem yang akan didefinisikan antara lain :
1. Memiliki kemampuan untuk encoding dan decoding file teks.
2. Memiliki kemampuan untuk kompresi dan dekompresi file teks hasil
pengkodean.
Tidak semua perangkat komputer dapat menjalankan aplikasi tugas
akhir ini. Pada perangkat komputer tersebut sudah harus terinstal Java Runtime
Environment, agar dapat menjalankan aplikasi tugas akhir ini.
3.2. Pemodelan Fungsional
Pemodelan fungsional digunakan untuk mendeskripsikan pemodelan
aliran sistem, notasi kelas diagram dan berbagai package seta kegunaan tiap
package yang dipergunakan dalam tugas akhir ini, sehingga dapat dijadikan
3.2.1. Diagr am Alir
Pada gambar 3.1 berikut merupakan diagram alir sistem. Pada diagram
alir sistem terdapat langkah-langkah dalam menjalankan aplikasi tugas akhir ini,
sehingga user dapat mengetahui cara kerja sistem secara umum.
Mulai Open file (.b64) Open file (.b64)
3.2.2. Kelas Diagr am
Berikut ini merupakan gambaran kelas diagram yang dipergunakan
dalam tugas akhir ini. Kelas diagram menunjukkan anggota kelas dan hirarkinya
dapat dilihat pada gambar 3.2 dibawah ini :
Pada gambar 3.2 diatas menjelaskan bahwa terdapat beberapa package
yang disertakan dalam aplikasi tugas akhir ini. Adapun package standar java yang
dipergunakan dalam tugas akhir ini adalah :
1. Java.lang.object, diperlukan untuk menggunakan beberapa fungsi standar yang
diperlukan seperti untuk operasi perbandingan karakter atau tipe data lainnya,
operasi matematika dasar, casting tipe data, array dan berbagai eksepsi.
2. Javax.swing, diperlukan karena berisi kelas dan antarmuka yang digunakan
oleh komponen JFileChooser.
3. Java.awt, diperlukan karena Berisi semua kelas untuk membuat antarmuka
pengguna dan untuk grafik dan gambar.
Sedangkan package buatan penulis yang dipergunakan dalam tugas akhir
ini adalah :
1. Huffman.BitInputStream, diperlukan untuk menentukan jumlah bit diantara 1
dan 32 bit berdasarkan file sumber yang dibaca.
2. Huffman.BitOuputStream, diperlukan untuk menuliskan bit diantara 1 dan 32
bit kedalam file
3. Huffman.CanonicalCode, diperlukan untuk proses pengkodean dan
penguraian kode yang nantinya akan dipergunakan untuk proses pembentukan
pohon huffman
4. Huffman.CodeTree, diperlukan untuk proses pembentukan pohon huffman
5. Huffman.FrequencyTable, dipergunakan untuk mencata frekuensi setiap
karakter
6. Huffman.Compress, diperlukan untuk fungsi kompresi
8. Huffman.Node, diperlukan untuk membentuk Node dalam Pohon Huffman
9. Base64, diperlukan untuk proses encoding dan decoding.
3.2.3. Pseudocode Ecoding Base64
writeout(encodingTable[(a1 >>> 2) & 0x3f])
writeout(encodingTable[((a1 << 4) | (a2 >>> 4)) & 0x3f])
writeout(encodingTable[((a2 << 2) | (a3 >>> 6)) & 0x3f])
writeout(encodingTable[a3 & 0x3f]) i += 3 }
switch (modulus){
case 0: break
case 1: d1 = data[off + dataLength] & 0xff b1 = (d1 >>> 2) & 0x3f
Fungsi dari pseudocode encoding diatas adalah mengubah data input,
dalam hal ini karakter teks menghasilkan stream basis 64 bit. Dalam proses
tersebut spasi akan diabaikan oleh sistem dan stream tersebut disimpan dalam
bentuk byte array.
3.2.4. Pseudocode Decoding Base64
int outLen = 0
int end = off + length
while (end > off){ if (!ignore((char)data[end - 1])){ break }
Fungsi dari pseudocode diatas adalah mengubah data terkode menjadi
bentuk asliny. Dalam proses tersebut spasi akan diabaikan oleh sistem. Hasilnya
berupa byte array dari karakter aslinya.
3.2.5. Pseudocode Kompr esi Huffman
Fungsi dari pseudocode diatas adalah melakukan proses kompresi dari
file teks yang telah terkode dan menyimpan hasilnya kedalam bentuk file. Dalam
melakukukan proses kompresi sistem terlebih dahulu akan menghitung frekuensi
simbol. Hasilnya berupa code yang dioptimalkan untuk kode huffman statis dan
disimpan ke bentuk file. Dikarenakan sifatnya yang statis, walaupun nilai dari
simbol tersebut berubah, panjang kode yang dihasilkan akan tetap sama.
3.2.6. Pseudocode Dekompr esi Huffman
Freq = getFrequencies(inputFile) increment(freq,256)
code = buildCodeTree()
code = toCodeTree(canonCode (code, 257)) writeCode(out, canonCode)
Fungsi dari pseudocode diatas adalah melakukan proses kompresi dari
file terkompresi, langkah diatas menjelaskan langkah penguraian kode kompresi.
Langkah dekompresi dilakukan dengan mengganti code tree dengan code
canonical. Nilai code mungkin berubah tetapi panjangnya tetap sama.
3.3. Use Case Diagr am
Use case diagram digunakan untuk menggambarkan fungsionalitas yang
diharapkan dari sebuah sistem. Sebuah use case merepresentasikan sebuah
interaksi antara aktor dengan sistem. Use case diagram pada Gambar 3.1
menggambarkan bagaimana proses yang terjadi pada aplikasi kompresi data dan
transfer data serta bagaimana pengguna melakukan interaksi terhadap user.
Pada use case dalam gambar 3.1 tersebut terjadi beberapa proses yaitu :
1. User dapat melakukan proses kompresi file
2. User dapat melakukan proses dekompresi file
Syst em
User
Br o wse input file
Ou t pu t f ile
De co m pr ess Br ow se _in put f ile < < include> >
< < include> > < < include> > Co m pr e ss
3.4. Sequence Diagr am
Data Sequence diagram menggambarkan interaksi antar objek di dalam
dan di sekitar sistem (termasuk pengguna, display, dan sebagainya) berupa
message yang digambarkan terhadap waktu. Sequence diagram terdiri atar
dimensi vertikal (waktu) dan dimensi horizontal (objek-objek yang terkait)
Sequence diagram biasa digunakan untuk menggambarkan skenario atau
rangkaian langkah-langkah yang dilakukan sebagai respons dari sebuah event
untuk menghasilkan output tertentu. Diawali sesuatu yang men-trigger aktivitas
tersebut, proses dan perubahan apa saja yang terjadi secara internal dan output apa
yang dihasilkan.
Sequence Diagram yang digambarkan dalam perancangan sistem adalah
sebagai berikut :
3.4.1. Sequence Diagr a m Compr ess
Sequence diagram menu compress dapat dilihat pada gambar :
Pada sequence diagram di atas terjadi beberapa proses yaitu :
1. User masuk ke page compress
2. Mengambil file yang akan di kompres
3. Membuat file hasil kompresi
4. Melakukan proses kompresi dan sistem menampilkan informasi file yang telah
dikompres
3.4.2. Sequence Diagr a m Decompr ess
Pada sequence diagram decompress di bawah ini terjadi beberapa proses yaitu :
1. User masuk ke page decompress
2. Menyimpan file hasil dekompresi
3. Melakukan proses dekompresi dan sistem menampilkan informasi file yang telah
didekompres.
Sequence diagram menu decompress dapat dilihat pada gambar 3.3 dibawah ini :
3.5. Per ancangan Sistem
Perancangan sistem adalah suatu proses yang menggambarkan
bagaimana suatu sistem dibangun untuk memenuhi kebutuhan pada fase analisis.
Adapun tahapan yang dilakukan dalam perancangan sistem ini membahas
mengenai tujuan perancangan sistem, dan perancangan antar muka
Perancangan sistem merupakan tindak lanjut dari tahap analisa.
Perancangan sistem bertujuan untuk memberikan gambaran sistem yang akan
dibuat. Dengan kata lain perancangan sistem didefinisikan sebagai penggambaran
atau pembuatan sketsa dari beberapa elemen yang terpisah kedalam satu kesatuan
yang utuh dan berfungsi. Selain itu juga perancangan bertujuan untuk lebih
mengarahkan sistem yang terinci, yaitu pembuatan perancangan yang jelas dan
lengkap yang nantinya akan digunakan untuk pembuatan simulasi. Aplikasi
kompresi ini dibuat dengan sederhana, sehingga diharapkan user dapat dengan
mudah menggunakan aplikasi kompresi ini.
Manfaat lain yang didapat dari perancangan sistem adalah apabila dalam
proses implementasi terjadi hambatan, dapat dilakukan perancangan ulang sistem
secara lebih mudah dengan demikian pengembang dapat menghemat waktu dan
mereview kembali kelemahan dari desain sistem yang lama. Maka dari uraian
tersebut dapat disimpulkan bahwa perancangan sistem memegang peranan cukup
penting selama proses pembuatan perangkat lunak dalam tugas akhir ini.
3.6. Per ancangan Antar Muka
Perancangan antarmuka adalah proses membuat perancangan