BAB II TINJAUAN PUSTAKA
2.1 Surabaya Surabaya, adalah ibukota provinsi Jawa Timur. Letak geografisnya antara 07°12’LS - 07°21’LS dengan luas wilayah 280,44 kilometer persegi dan berpenduduk lebih dari 3 juta orang, menjadikan Surabaya sebagai kota terbesar kedua di Indonesia. Surabaya, sebagai kota metropolitan ke 2 di Indonesia setelah Jakarta, mempunyai masalah yang pelik mengenai penataan arus lalu lintas selain masalahmasalah lain yang berhubungan dengan tata kota. Sama halnya dengan kota-kota besar lainnya, masalah lalu lintas menjadi perhatian serius pemerintah daerah masingmasing. Bahkan, terkadang pengambilan keputusan strategis penataan lalu-lintas manjadi terkesan lambat. Sebenarnya, pemkot Surabaya pun sudah memikirkan jalan keluar untuk mengatasi masalah lalu lintas ini. Beberapa ruas jalan alternatif, atau lebih di kenal ring-road sudah dibangun, pelebaran di beberapa ruas jalan serta rekayasa lalu lintas. Lalu pernah juga ada pembahasan mengenai tol dalam kota, pembangunan ruas tol lingkar timur yang tembus langsung ke jembatan suramadu, sampai terakhir penerapan program time shift yang dicanangkan oleh pemkot Surabaya. Beberapa alternatif yang disebutkan diatas, sampai saat ini belum juga ada kabarnya. Sedangkan, program time shift yang dicanangkan oleh pemkot beberapa waktu yang lalu tampaknya belum juga membuahkan hasil yang optimal. Ini terlihat dari kondisi lalu lintas di jalan-jalan protokol pada jam-jam sibuk (pagi dan sore hari) belakangan ini.
7
8
2.2 Permasalahan Jalur Terpendek Jalur terpendek adalah suatu jaringan pengarahan perjalanan dimana seorang pengarah jalan ingin menentukan jalur terpendek antara dua tempat berdasarkan beberapa jalur alternative yang tersedia, dimana titik tujuan hanya satu.
Gambar 2.1 Graf ABCDEFG
Pada gambar diatas, misalkan kita dari titik A dan ingin menuju titik G. untuk menuju ke titik G dapat dipilih beberapa jalur yang tersedia. Tabel 2.1 Penyelesaian Graf ABCDEFG A→B→C→D→E→G A→B→D→G A→B→C→D→F→G A→B→E→G A→B→C→D→G A→C→D→E→G A→B→C→F→G A→C→D→F→G A→B→D→E→G A→C→D→G A→B→D→F→G A→C→F→G
Berdasarkan data diatas, dapat dihitung jalur terpendek dengan mencari jarak antara jalur tersebut. Apabila jarak antar jalur belum diketahui, jarak dapar dihitung berdasarkan koordinat titik-titik tersebut. Kemudian menghitung jalur terpendek yang dapat dilalui.
9
2.3 Graf Menurut
zakaria (2006), Graf adalah kumpulan simpul (nodes) yang
dihubungkan satu sama lain melalui sisi/busur (edge). Suatu graf G terdiri dari dua himpunan yaitu himpunan V dan himpunan E: V = verteks (simpul) Himpunan simpul yang terbatas dan tidak kosong E = edge (sisi/busur) Himpunan busur yang menghubungkan sepasang simpul Simpul-simpul pada graf dapat merupakan objek-objek seperti kota, atomatom suatu zat, nama anak, jenis buah, komponen alat elektronik dan juga suatu jalan. Busur dapat menunjukkan hubungan (relasi) sembarang seperti rute penerbangan, sambungan telepon, ikan kimia dan jalan raya. Notasi graf: G(V,E) yang artinya suatu graf G memiliki V simpul dan E busur.
2.3.1 Macam-macam Graf Menurut arah dan bobotnya, graf dibagi menjadi 4 bagian, yaitu: 1. Graf berarah dan berbobot: tiap busur memiliki anak panah dan bobot.
Gambar 2.2 Graf Berarah dan Berbobot
10
Gambar 2.2 menunjukkan graf berarah dan berbobot yang mempunyai tujuh titik. Dan masing-masing titik telah memiliki arah dan memiliki bobot. 2. Graf tidak berarah dan berbobot: tiap busur tidak memiliki arah, tetapi memiliki bobot pada masing-masing sisinya.
Gambar 2.3 Graf Tidak Berarah dan Berbobot
Gambar 2.3 menunjukkan graf tidak berarah dan berbobot yang mempunyai tujuh titik yang memiliki nilai pada masing-masing sisinya tetapi tidak memiliki arah pada setiap simpulnya. 3. Graf berarah dan tidak berbobot: tiap busur mempunyai anak panah yang tidak berbobot. Gambar 2.4 menunjukkan graf berarah dan tidak berbobot
Gambar 2.4 Graf Berarah dan Tidak Berbobot
11
4. Graf tidak berarah dan tidak berbobot: tiap busur tidak memiliki anak panah dan tidak memiliki bobot.
Gambar 2.5 Graf Tidak Berarah dan Tidak Berbobot
2.4 Perbandingan Macam-macam Tipe Algoritma Penentu Jarak Terpendek Secara umum pencarian jarak terpendek dapat dilakukan menggunakan 2 metode, yaitu metode konvensional dan metode heuristic. Metode kenventional diterapkan dengan menggunakan perhitungan matematis biasa, sedangkan metode heuristik diterapkan dengan perhitungan kecerdasan buatan. a. Metode kenvensional metode konvensional adalah metode yang menggunakan perhitungan matematis biasa. Ada beberapa metode konvensional yang sering digunakan untuk melakukan pencarian jalur terpendek, diantaranya: algoritma dijkstra, algoritma floyd-warshall, dan algoritma bellman-ford b. Metode heuristic metode heuristic adalah sub bidang dari kecerdasan buatan yang digunakan untuk melakukan pencarian dan optimasi. Ada beberapa metode heuristic yang sering digunakan dalam permasalahan optimasi, diantaranya: algoritma
12
genetika, algoritma semut, logika fuzzy, jaringan syaraf tiruan, pencarian tabu, simulated annealing.
2.4.1 Algoritma Dijkstra Algoritma dijkstra, dinamai menurut penemunya, edsger dijkstra, adalah sebuah algoritma rakus (greedy algorithm) dalam memecahkan permasalahan jarak terpendek (shortest path problem) untuk mencari sebuah graf berarah (directed graf) dengan bobot-bobot sisi yang tidak bernilai negatif. Misalnya, bila vertices dari sebuah graf melambangkan kota-kota tersebut, maka algoritma dijkstra dapat digunakan untuk menemukan jarak terpendek antara 2 kota tersebut. Input algoritma ini adalah sebuah graf berarah yang berbobot (weighted directed graf) G dan sebuah sumber vertex s dalam G dan V adalah himpunan semua vertices dalam graf G. setiap sisi dari graf ini adalah pasangan vertices (u,v) yang melambangkan hubungan dari vertex u ke vertex v. himpunan semua tepi disebut E. Pseudocode
Sumber http://www.id.wikipedia.org/wiki/HuffAlgoritma_dijkstra
Gambar 2.6 Pseudocode Algoritma dijkstra
13
Sebagai contoh, carilah lintasan terpendek dari vertex a ke z dalam graf berbobot tersambung dan tidak berarah berikut berikut: b
2
2 2 a
4
d
c 3
1 z
e 4
1
7
3 f
g
6
5
Gambar 2.7 Contoh Graf Berbobot Tersambung
Hasil pelaksanaan baris ke 2-4 dari algoritma 2.6, L(a) = 0, L(b) = L(c) = L(d) = L(e) = L(f) = L(g) = L(z) =∞. Pada baris ke 7 z tidak dilingkari. Kita lanjutkan ke baris 9, di mana kita memilih verteks a, verteks tak dilingkari dengan label terkecil, dan melingkarinya. Pada baris 11 dan 12 kita perbarui setiap verteks tak terlinkari, b dan f, yang berdekatan dengan a. Kita dapatlkan label-label baru L(b) = min{∞, 0+2} = 2, L(f) = min{∞, 0+1} = 1. Sampai pada bagian ini, kita kembali ke baris 7. Karena z tak dilingkari, kita lanjutkan ke baris 9, di mana kita memilih verteks f, verteks tak dilingkari dengan label terkecil, dan melingkarinya. Pada baris 12 dan 13 kita perbarui setiap label dari verteks tak dilingkari, d dan g, yang berdekatan dengan f. Kita dapatkan label-label baru L(d) = min{∞, 1+3} = 4, L(f) = min{∞, 1+5} = 6. Sampai pada bagian ini, kita kembali ke baris 7. Demikian seterusnya dan pada akhir algoritma, z dilabeli 5, menyatakan panjang lintasan terpendek dari a ke z adalah 5. Sebuah lintasan terpendek diberikan oleh a,b,c,z.
14
2.4.2 Algoritma Floyd-Warshall Algoritma floyd-warshall membandingkan semua kemungkinan lintasan pada graf untuk setiap sisi dari semua simpul. Menariknya, algoritma ini mampu mengerjakan proses perbandingan ini sebanyak V3. hal tersebut bisa terjadi karena adanya perkiraan pengambilan keputusan pada setiap tahap antara dua simpul, hingga perkiraan tersebut diketahui sebagai nilai optimal. Pseudocode
sumber http://www.id.wikipedia.org/wiki/HuffAlgoritma_floyd-warshall
Gambar 2.8 Pseudocode Algoritma Floyd-Warshall
Misalkan terdapat suatu graf berbobot yang mempresentasikan kondisi keterhubungan antar kota di suatu daerah, dengan ilustrasi sebagai berikut:
Gambar 2.9 Representasi Keterhubungan Antar Kota Dalam Graf Berbobot
15
Misalkan seseorang akan melakukan perjalanan dari kota A ke kota C dengan menerapkan algoritma floyd-warsahall untuk mencari jalur terpendek dari kota A ke C. Tahap 1: Tabel 2.2 Penyelesaian Algoritma Floyd-Warshall Tahap 1 S Jarak (f 1 ) 33 30 34
B F H
Solusi Awal(x 1 ) A A A
Dari table diatas dapat kita lihat kota-kota yang terhubung dengan kota A yaitu B(33km), F(30km), H(34km). Tahap 2: Table 2.3 Penyelesaian Algoritma Floyd-Warshall Tahap 2
C E G
B 74 ∞ ∞
Total Jarak ke F 90 56 94
H ∞ ∞ 89
Solusi Jarak(f 2 ) Awal(x 2 ) 74 B 26 F 89 H
Tahap 2 penyelesaian di atas menunjukkan jalur terpendek dari kota A ke kota C dengan jarak 74km (A-B-C).
2.4.3 Algoritma Bellman-Ford Algoritma Bellman-Ford menghitung jarak terpendek (dari satu sumber) pada sebuah di graf berbobot. Maksudnya dari satu sumber ialah bahwa ia menghitung semua jarak terpendek yang berawal dari satu titik node. Algoritma Dijkstra dapat lebih cepat mencari hal yang sama dengan syarat tidak ada sisi (edge) yang berbobot
16
negatif. Maka Algoritma Bellman-Ford hanya digunakan jika ada sisi berbobot negatif. Algoritma Bellman-Ford menggunakan waktu sebesar O(V.E), di mana V dan E adalah banyaknya sisi dan titik. pseudocode
Gambar 2.10 Pseudocode Algoritma Bellman-ford
2.5 Java 2 Micro Edition (J2ME) Menurut Raharjo dan Heryanto (2007), Java adalah bahasa pemrograman yang disusun oleh James Gosling dan dibantu oleh rekan-rekannya seperti Patrick Naughton, Chris Warth, Ed Frank, dan Mike Sheridan pada tahun 1991 di suatu perusahaan perangkat lunak bernama Sun Microsystems. Bahasa pemrograman ini mula-mula diinisialisasi dengan nama “Oak”, namun pada tahun 1995 diganti namanya menjadi “Java”. http://java.sun.com
17
Alasan utama pembentukan bahasa Java adalah untuk membuat aplikasiaplikasi yang dapat diletakkan di berbagai macam perangkat elektronik, seperti microwave oven dan remote control, sehingga Java harus bersifat portable atau yang sering disebut dengan platform-independent (tidak tergantung pada platform). Itulah yang menyebabkan dalam dunia pemrograman java, dikenal adanya istilah ‘write once, run everywhere’, yang berarti kode program hanya ditulis sekali, namun dapat dijalankan di bawah platform manapun, tanpa harus melakukan perubahan kode program. Sun Microsystems telah mendefinisikan tiga buah edisi dari Java 2, yaitu sebagai berikut: 1. Java 2 Standard Edition (J2SE), yang digunakan untuk mengembangkan aplikasiaplikasi desktop dan applet (aplikasi Java yang dapat dijalankan di dalam browser web). 2. Java 2 Enterprise Edition (J2EE), Merupakan superset dari J2SE yang memperbolehkan untuk mengembangkan aplikasi-aplikasi berskala besar, yaitu dengan pembuatan aplikasi-aplikasi di sisi server dengan mengunakan EJBs (Enterprise JavaBeans), aplikasi web dengan menggunakan Servlet dan JSP (Java Server Pages) dan teknologi lainnya seperti CORBA (Common Object Request Broker Architecture) dan XML (Extensible Markup Language). 3. Java 2 Micro Edition (J2ME), merupakan subset dari J2SE yang digunakan untuk menangani pemrograman di dalam perangkat-perangkat kecil, yang tidak memungkinkan untuk mendukung implementasi dari J2SE secara penuh. J2ME merupakan sebuah kombinasi yang terbentuk antara sekumpulan interface Java yang sering disebut dengan Java API (Application Programming Interface) dengan JVM (Java Virtual Machine) yang didesain khusus untuk perangkat
18
dengan ruang memori terbatas. Kombinasi tersebut kemudian digunakan untuk melakukan pembuatan aplikasi-aplikasi yang dapat berjalan pada mobile device.
2.5.1 Midlet MIDlet adalah aplikasi yang ditulis untuk MIDP. Aplikasi MIDlet adalah bagian dari kelas javax.microedition.midlet. MIDlet yang didefinisikan pada MIDP. MIDlet berupa sebuah kelas abstrak yang merupakan sub kelas dari bentuk dasar aplikasi sehingga antarmuka antara aplikasi J2ME dan aplikasi manajemen pada perangkat dapat terbentuk.
2.5.2 Siklus Hidup Aplikasi J2ME Application Management Software (AMS) merupakan lingkungan tempat sebuah Midlet dapat di-install, dijalankan, dihentikan maupun di-uninstall. AMS akan membuat instance baru dari Midlet dan dapat mengontrol keadaannya, yaitu dengan cara menjalankan (start), mengistirahatkan (pause) maupun menghentikannya (destroy) secara langsung oleh dirinya sendiri. Terdapat tiga buah method yang harus diimplementasikan oleh setiap Midlet. Dengan kata lain, setiap Midlet yang dibuat harus memilik ketiga buah method tersebut.
Adapun
method-method
tersebut
adalah
startApp(),
pauseApp(),
destroyApp(). Setiap Midlet dapat berada dalam salah satu keadaan (state) berikut,: Pause, Active, maupun Destroyed. Gambar Siklus berikut ini akan mengilustrasikan ketiga buah keadaan tersebut dan pada saat kapan Midlet akan berada dalam keadaan tertentu.
19
Sumber e-zest.net/j2me.html
Gambar 2.11 Siklus Hidup Midlet
Tampak pada Gambar 2.11 bahwa pada saat pembuatan Midlet baru, mulamula Midlet akan berada dalam keadaan Paused. Apabila proses pembuatan Midlet gagal atau mengakibatkan kesalahan, maka Midlet akan langsung berada pada keadaan Destroyed. Namun apabila proses pembuatan Midlet berjalan dengan baik, maka setelah Midlet dijalankan, maka AMS secara otomatis akan mengeksekusi method startApp(), method yang berfungsi untuk menjalankan Midlet dan hal ini akan mengubah MIDlet untuk berada dalam keadaan Active dan dapat diubah kembali menjadi keadaan Paused melalui pemanggilan method pauseApp(), method yang berfungsi untuk menghentikan Midlet sejenak atau diubah menjadi keadaan Destroyed melalui pemanggilan method destroyApp(). Sebagai contoh, pada saat Midlet akan mengalami perubahan keadaan, yaitu dari Active menjadi Destroyed, atau pada saat Midlet berada pada kedaan Paused melalui pemanggilan method pauseApp().
20
2.5.3 J2ME Configuration Untuk mendukung berbagai jenis produk ponsel dan PDA yang sesuai dengan skopa J2ME, Sun Microsystem memperkenalkan konfigurasi pada J2ME yang sampai saat ini terdapat dua konfigurasi yaitu : 1. CLDC (Connected Limited Device Coniguration) CLDC atau Connected Limited Device Coniguration adalah perangkat dasar J2ME, spesifikasi dasar yang berupa library dan API yang diimplementasikan pada J2ME, seperti yang digunakan dalam telephone seluler, pager, dan PDA. Perangkat tersebut dibatasi dengan keterbatasan memory, sumber daya, dan kemampuan memproses. Spesifikasi CLDC pada J2ME adalah spesifikasi minimal dari package, kelas,dan sebagai fungsi Java Virtual Machine yang dikurangi agar dapat diimplementasikan dengan keterbatasan sumber daya pada alat-alat tersebut, JVM yang digunakan disebut KVM (Kilobyte Virtual Machine). 2. CDC (Connected Device Configuration) CDC atau Connected Device Configuration adalah spesifikasi dari konfigurasi dari J2ME yang memiliki standarisasi. Implementasi CDC pada J2ME adalah source code yang menyambungkan dengan macam-macam platform. Berikut adalah perbedaan CLDC dan CDC. Perbedaan CDC dan CLDC dapat dilihat pada table 2.3 Tabel 2.4 Perbandingan CDC dan CLDC Sumber plex.coe.psu.ac.th/java/j2me/intro.html
CDC
CLDC
Implementasi J2SE
Seluruh feature
Susbset
Java Virtual Machine
CVM
KVM
Memori Prosesor
Minimal 2 MB 32 bit
160-512 KB 16 dan 32 bit
21
2.5.4 Mobile Information Device Profil (MIDP) MIDP atau Mobile Information Device Profile adalah spesifikasi untuk profil J2ME. MIDP memiliki lapisan di atas CLDC, API tambahan untuk daur hidup aplikasi, antarmuka, jaringan, dan penyimpanan persisten. Pada saat ini terdapat MIDP 1.0 adalah API untuk multimedia. Pada MIDP 2.0 terdapat dukungan memainkan tone, tone sequence, dan file WAV walaupun tanpa adanya Mobile Media API (MMAPI). Profil merupakan bagian perluasan dari konfigurasi. Artinya, selain sekumpulan kelas yang terdapat pada konfigurasi, terdapat juga beberapa kelas-kelas spesifik yang didefinisikan lagi dalam profil. Dengan kata lain, profil akan membantu secara fungsional yaitu dengan menyediakan kelas-kelas yang tidak terdapat pada level konfigurasi Adapun profil yang sangat popular penggunaannya adalah profil yang disediakan oleh Sun Microsystems, yaitu yang dinamakan dengan MIDP. Beberapa profil yang tersedia untuk kebutuhan-kebutuhan spesifik lainnya: -
Personal Digital Assistant Profile (PDAP), yaitu profil untuk PDA yang memperluas fungsi-fungsi pada konfigurasi CLDC dan digunakan khusus untuk menambahkan kemampuan-kemampuan lebih apabila dibandingkan dengan penggunaan MIDP
-
Foundation Profile, yaitu profil yang digunakan untuk konfgurasi CDC. Profil ini menambahkan beberapa kelas dari J2SE ke dalam konfigurasi CDC, dan berperan juga dalam pondasi untuk membentuk profil baru lainnya.
22
-
Personal Profile, yaitu profil yang mendefinisikan ulang personal Java sebagai profil yang dapat digunakan sebagai profil dalam J2ME. Profil ini merupakan hasil perluasan dari Foundation profile.
-
Remote Method Invocation (RMI), yaitu profil yang menambakan dukungan RMI ke dalam konfigurasi CDC.
2.5.5 Linked List Linked list lebih tepat disebut sebagai sebuah STRUKTUR DATA, daripada sebagai sebuah tipe data karena linked list berhubungan dengan alokasi penyimpanan data di memori, bukan melakukan operasi terhadap isi datanya. Secara struktur, linked list hampir sama dengan array/ larik tersusun dari elemen/ data yang banyak dan bersambung. Namun linked list bersifat DINAMIS, sedangkan array bersifat statis. Dikatakan dinamis karena alokasi memori yang dipakai bisa bertambah dan berkurang sesuai dengan kebutuhan program.
Gambar 2.12 Linked List
2.5.5.1 MANFAAT/ PENGGUNAAN Struktur data linked list sering dipakai dalam konsep ADT. Misalkan untuk mendefinisikan/ merepresentasikan Stack, Queue, Tree, Graph dsb - tentu saja yang bersifat dinamis.
23
2.5.5.2 BEBERAPA OPERASI DASAR -
Insert Node memasukkan simpul baru ke dalam linked list
baru = (simpul) malloc(sizeof (struct node)) // siapkan lokasi memorinya baru->info = data // masukkan datanya baru->next = NULL // set lokasi data selanjutnya adalah NULL if (head == NULL) // pengisian data yg pertama kali head = baru // semua pointer menunjuk lokasi memori yg sama tail = baru else // pengisian data berikutnya tail->next = baru // sambungkan pointer baru ke pointer tail tail = baru // pointer tail menunjuk alamat yg sama dgn baru Gambar 2.13 Contoh Proses Insert Linked List
Pada gambar diatas telah dijelaskan setiap langkahnya, mulai dari proses memasukkan data, pengisian data, serta proses yang menghubungkan pointer satu dengan yang lainnya. -
View Node menampilkan semua isi linked list
temp = head while(temp!=NULL) output(temp->info) temp = temp->next
// pointer temp dan head menunjuk alamat data yg sama // selama pointer tidak bernilai NULL // tampilkan isi simpul // lompat baca simpul selanjutnya
Gambar 2.14 Contoh Proses View Linked List
Pada Gambar 2.14 menjelaskan selama pointer tidak bernilai null proses tersebut akan menampilkan isi simpul serta simpul selanjutnya. -
Find Node mencari simpul dengan informasi tertentu dalam linked list pada gambar 2.15 menjelaskan cara mencari node, mula-mula masukkan data
yang akan dicari, arahkan pointer temp ke alamat yang sama dengan head lakukan pencarian sampai data yang dicari ditemukan lalu ubah pointer temp dengan alamat selanjutnya.
24
input(cari)
// masukkan data yg akan dicari
temp = head
// pointer temp diarahkan ke alamat yg sama dgn head
while((temp!=NULL)&&(temp->info!=cari))
// cari sampai habis
ketemu temp = temp->next // ubah nilai pointer temp dgn alamat selanjutnya if(temp->info == cari) output("Data Ditemukan") else output("Data Tidak Ditemukan") Gambar 2.15 Contoh Proses find Linked List
-
Delete Node menghapus simpul tertentu dari linked list Pada Gambar 2.16 menjelaskan cara menghapus simpul dari linked list, mula-
mula masukkan data yang akan dihapus arahkan pointer temp ke alamat yang ditunjuk oleh head, proses selanjutnya menemukan data yang akan dihapus dan apabila telah ditemukan proses tersebut akan menghapus alokasi memori yang sudah tidak terpakai. input(hapus) // masukkan data yg akan dihapus temp = head // arahkan pointer temp ke alamat yg ditunjuk oleh head while((temp!=NULL)&&(temp->info!=hapus)) // temukan data yg akan dihapus prev = temp temp = temp->next if(temp->info == hapus) // data ada di dalam linked list if(temp->next != NULL) // jika data berada pada posisi tengah prev->next = temp->next else if (head==temp) // jika data berada pada posisi head head = NULL else // jika data berada pada posisi tail prev->next = NULL free(temp) // hapus alokasi memori yang sudah tak terpakai } else output("Data Tidak Ditemukan"); Gambar 2.16 Contoh Proses Delete Linked List
25
2.5.6 Push Registry Enrique (2003) mengemukakan bahwa Push Registry adalah suatu mekanisme dalam midlet untuk menghidupkan aplikasi midlet secara otomatis tanpa ada campur tangan dari pengguna, dengan mengirimkan sinyal tertentu ke handphone sehingga aplikasi di handphone bisa hidup. Sinyal yang dikirimkan bisa berupa sms, socket atau datagram. Push Registry terletak di dalam klas
javax.microedition.io.PushRegistry
pada MIDP 2.0. gambar 2.3 menjelaskan elemen-elemen Push Registry:
Gambar 2.13 Elemen - elemen Push Registry
2.6 Teknologi Nirkabel atau Mobile Mobile atau biasa disebut dengan telepon genggam adalah perangkat telekomunikasi elektronik yang mempunyai kemampuan dasar yang sama dengan telepon fixed line konvensional, namun dapat dibawa ke mana-mana (portabel) dan tidak perlu disambungkan dengan jaringan telepon menggunakan kabel (nirkabel; wireless). Saat ini Indonesia mempunyai dua jaringan telepon nirkabel yaitu sistem
26
GSM (Global System For Mobile Telecommunications) dan sistem CDMA (Code Division Multiple Access). Selain berfungsi untuk melakukan dan menerima panggilan telepon, handphone umumnya juga mempunyai fungsi pengiriman dan penerimaan pesan singkat (short message service, SMS). Mengikuti perkembangan teknologi digital, kini ponsel juga dilengkapi dengan berbagai pilihan fitur, seperti bisa menangkap siaran radio dan televisi, perangkat lunak pemutar audio (mp3) dan video, kamera digital, game, Java, MIDP, dan layanan internet (WAP, GPRS, 3G). Ada pula penyedia jasa telepon genggam di beberapa negara yang menyediakan layanan generasi ketiga (3G) dengan menambahkan jasa videophone, sebagai alat pembayaran, maupun untuk televisi online di telepon genggam mereka. Sekarang, telepon genggam menjadi gadget yang multifungsi. Selain fitur-fitur tersebut, ponsel sekarang sudah ditanamkan fitur komputer. Jadi di ponsel tersebut, orang bisa mengubah fungsi ponsel tersebut menjadi mini komputer.
2.7 Unified Modelling Language (UML) Dalam suatu proses pengembangan software, analisa dan rancangan telah merupakan terminologi yang sangat tua. Pada saat masalah ditelusuri dan spesifikasi dinegosiasikan, dapat dikatakan bahwa kita berada pada tahap rancangan. merancang adalah menemukan suatu cara untuk menyelesaikan masalah, salah satu tool/model untuk merancang pengembangan software yang berbasis object-oriented adalah UML. Alasan mengapa UML digunakan adalah, pertama, scalability dimana objek lebih mudah dipakai untuk menggambarkan sistem yang besar dan komplek. Kedua, dynamic modeling, dapat dipakai untuk pemodelan sistem dinamis dan real time.
27
Sebagaimana dalam tulisan pertama, penulis menjelaskan konsep mengenai obyek, OOA&D (Obyek Oriented Analyst/ Design) dan pengenalan UML, maka dalam tulisan kedua ini lebih ditekankan pada cara bagaimana UML digunakan dalam merancang sebuah pengembangan software yang disertai gambar atau contoh dari sebuah aplikasi. (http:www.staffsite.gunadarma.ac.id/wsilfi/index.php)
2.7.1 Use Case Sebuah use case menggambarkan suatu urutan interaksi antara satu atau lebih aktor dan sistem. Dalam fase requirements, model use case mengambarkan sistem sebagai sebuah kotak hitam dan interaksi antara aktor dan sistem dalam suatu bentuk naratif, yang terdiri dari input user dan respon-respon sistem. Setiap use case menggambarkan perilaku sejumlah aspek sistem, tanpa mengurangi struktur internalnya. Selama pembuatan model use case secara pararel juga harus ditetapkan obyek-obyek yang terlibat dalam setiap use case. Perhatikan satu contoh sederhana dari proses perbankan, yaitu mesin teller otomatis (Automated Teller Machine-ATM) yang memberikan kemudahan pada customer - nya untuk mengambil uang dari rekening bank secara langsung. Pada proses ini terdapat satu aktor, yaitu ATM Customer dan satu use case, yaitu Penarikan Dana. Proses ini dapat dilihat pada Gambar 2.6. Use case Penarikan Dana menggambarkan urutan interaksi antara customer dengan sistem, diawali ketika customer memasukan kartu ATM ke dalam mesin pembaca kartu dan akhirnya menerima pengeluaran uang yang dilakukan oleh mesin ATM.
28
Gambar 2.6 Contoh Aktifitas Aktor dan Use Case
2.7.2 Aktor Sebuah aktor mencirikan suatu bagian outside user atau susunan yang berkaitan dengan user yang berinteraksi dengan sistem [Rumbaugh, Booch, dan Jacobson 1999]. Dalam model use case, aktor merupakan satu-satunya kesatuan eksternal yang berinteraksi dengan sistem. Terdapat beberapa variasi bagaimana aktor dibentuk [Fowler dan Scott 1999]. Sebuah aktor sering kali merupakan manusia (human user). Pada sejumlah sistem informasi, manusia adalah satu-satunya aktor. Dan mungkin saja dalam sistem informasi, seorang aktor bisa saja menjadi suatu sistem eksternal. Pada aplikasi realtime dan distribusi, sebuah aktor bisa saja menjadi satu perangkat eksternal I/O atau sebuah alat pengatur waktu. Perangkat eksternal I/O dan pengatur waktu aktor secara khusus lazimnya berada dalam real-time yang tersimpan dalam sistem (real-time embedded systems), sistem berinteraksi dengan lingkungan eksternal melalui sensor dan aktuator. Primary actor (aktor utama) memprakarsai sebuah use case. Jadi, suatu primary aktor memegang peran sebagai proaktif dan yang memulai aksi dalam sistem. Aktor lainnya yang berperan sebagai secondary aktor bisa saja terlibat dalam use case dengan menerima output dan memberikan input. Setidaknya satu aktor harus mendapatkan nilai dari use case. Biasanya adalah primary aktor (aktor utama). Bagaimanapun, dalam real-time embedded systems, primary aktor dapat berperan
29
sebagai perangkat eksternal I/O atau pengatur waktu, penerima utama dari use case bisa menjadi secondary human aktor yang menerima sejumlah informasi dari sistem. Aktor manusia bisa saja menggunakan berbagai perangkat I/O untuk berinteraksi fisik dengan sistem. Aktor manusia dapat berinteraksi dengan sistem melalui perangkat standar I/O, seperti keyboard, display, atau mouse. Aktor manusia bisa juga berinteraksi dengan sistem melalui perangkat non-standar I/O seperti bermacammacam sensor. Dalam keseluruhan hal tersebut, manusia merupakan aktor dan perangkat I/O adalah bukan aktor. Perhatikan beberapa contoh human aktor (aktor manusia). Pada sistem perbankan, satu contoh aktor adalah manusia yang berperan sebagai teller yang berinteraksi dengan sistem melalui perangkat standar I/O, seperti keyboard, display, atau mouse. Contoh lainnya adalah manusia yang berperan sebagai customer yang berinteraksi dengan sistem melalui mesin teller otomatis (ATM). Dalam hal ini, customer berinteraksi dengan sistem dengan menggunakan beberapa perangkat I/O, termasuk perangkat pembaca kartu (card reader), pengeluar uang (cash dispenser), dan pencetak tanda terima (receipt printer), ditambah lagi keyboard dan display. Pada beberapa kasus, bagaimana pun juga sebuah aktor bisa saja berupa perangkat I/O. Hal ini bisa terjadi ketika sebuah use case tidak melibatkan manusia, seperti yang sering terjadi pada aplikasi-aplikasi real-time. Dalam hal ini, I/O aktor berinteraksi dengan sistem melalui sebuah sensor. Contoh aktor yang merupakan perangkat input adalah Arrival Sensor pada Sistem Kontrol Elevator. Sensor ini mengidentifikasi elevator tersebut pada saat hendak mencapai lantai dan perlu dihentikan. Kemudian sensor tersebut menginisiasikan Stop Elevator at Floor use case. Aktor lain dalam Elevator Control System adalah orang yang berada dalam
30
elevator (human passenger) yang berinteraksi dengan sistem melalui tombol-tombol nomor pada tingkat lantai dan tombol-tombol elevator. Input dari aktor secara aktual dideteksi melalui sensor-sensor tombol lantai dan sensor-sensor tombol elevator berturut-turut. Aktor dapat pula menjadi sebuah alat pengukur waktu yang secara periodik mengirimkan pengukuran waktu kejadian (timer events) pada sistem. Use caseuse case secara periodik diperlukan ketika beberapa informasi perlu di-output oleh sistem pada suatu basis reguler. Hal ini sangat penting dalam sistem-sistem real-time, dan juga sangat berguna dalam sistem informasi. Walaupun sejumlah metodologi menganggap pengukur waktu merupakan hal internal bagi sistem, dan akan lebih berguna dalam desain aplikasi real-time untuk memperhatikan pengukur-pengukur waktu sebagai eksternal logis bagi sistem dan menganggapnya sebagai primary aktor yang memulai aksi dalam sistem. Contohnya, pada sistem monitoring mobil, beberapa use case di-inisialisasi dengan suatu aktor pengukur waktu. Sebagai contoh dapat dilihat pada Gambar 2.7 Timer aktor mengawali Calculate Trip Speed use case, yang secara periodik menghitung rata-rata kecepatan melalui suatu jalan/ jejak dan menampilkan nilai ini ke driver. Dalam hal ini, pengukur waktu merupakan primary aktor (aktor utama) dan driver merupakan secondary aktor (aktor kedua).
Gambar 2.7 Contoh Aktor Pengukur Waktu
Suatu aktor bisa juga menjadi sistem eksternal yang melakukan inisiatif (sebagai primary aktor) atau partisipan (sebagai secondary aktor) dalam use case.
31
Satu contoh aktor sistem eksternal adalah pabrik robot dalam Automation System. Robot mengawali proses dengan use case Generate Alarm dan Notify, robot menggerakkan
alarm
conditions
yang
dikirim
ke
operator
pabrik
yang
berkepentingan, yang telah terdaftar untuk menerima alarms. Dalam use case ini, robot merupakan primary aktor yang mengawali inisiatif use case, dan operator merupakan secondary aktor yang menerima alarms.
2.7.3 Identifikasi Use Case Sebuah use case dimulai dengan masukan/input dari seorang aktor. Use case merupakan suatu urutan lengkap kejadian-kejadian yang diajukan oleh seorang aktor, dan spesifikasi interaksi antara aktor dengan sistem. Use case yang sederhana hanya melibatkan satu interaksi/hubungan dengan sebuah aktor, dan use case yang lebih kompleks melibatkan beberapa interaksi dengan aktor. Use cases yang lebih kompleks juga melibatkan lebih dari satu aktor. Untuk menjabarkan use case dalam sistem, sangat baik bila dimulai dengan memperhatikan aktor dan actions/aksi yang mereka lakukan dalam sistem. Setiap use case menggambarkan suatu urutan interaksi antara aktor dengan sistem. Sebuah use case harus memberikan sejumlah nilai pada satu aktor. Kemudian, kebutuhan fungsional sistem dijelaskan dalam use case yang merupakan suatu spesifikasi eksternal dari sebuah sistem. Bagaimanapun juga, ketika membuat use case, sangatlah penting menghindari suatu dekomposisi fungsional yang dalam beberapa use case kecil lebih menjelaskan fungsi-fungsi individual sistem daripada menjelaskan urutan kejadian yang memberikan hasil yang berguna bagi aktor.
32
Perhatikan lagi contoh pada perbankan. Disamping penarikan melalui ATM, ATM Customer, aktor juga bisa menanyakan jumlah rekening atau mentransfer dana antar dua rekening. Karena terdapat fungsi-fungsi yang berbeda yang diajukan oleh customer dengan hasil-hasil guna yang berbeda, fungsi-fungsi pertanyaan dan pentransferan harus dibuat sebagai use case yang terpisah, daripada menjadi bagian dari original use case. Oleh karena itu, customer dapat mengajukan tiga use case seperti yang dapat dilihat di Gambar 2.8 Withdraw Funds (Penarikan dana), Query Account, dan Transfer Funds (Pentransferan Dana).
Gambar 2.8 Aktor dan Use Case Dalam Sistem Bank
Urutan utama use case menjelaskan urutan interaksi yang paling umum antara aktor dan sistem. Dan mungkin saja terdapat cabang-cabang urutan use case utama, yang mengarah pada berkurangnya frekuensi interaksi antara aktor dengan sistem. Deviasi-deviasi dari urutan utama hanya dilaksanakan pada beberapa situasi, contohnya jika aktor melakukan kesalahan input pada sistem. Ketergantungan pada aplikasi kebutuhan, alternatif ini memecahkan use case dan kadang-kadang bersatu kembali dengan urutan utama. Cabang-cabang alternatif digambarkan juga dalam use case.
33
Dalam use case Withdraw Funds, urutan utama adalah urutan tahap-tahap dalam keberhasilan pelaksanaan penarikan (withdrawal). Cabang-cabang alternatif digunakan untuk mengarahkan berbagai error cases, seperti ketika kartu ATM tidak dikenali atau dilaporkan telah hilang dan lain sebagainya.
2.7.4 Dokumentasi Model Use Case Use case didokumentasi dalam use case model sebagai berikut: 1. Use Case Name. Setiap use case diberi nama. 2. Summary. Deskripsi singkat use case, biasanya satu atau dua kalimat 3. Dependency. Bagian ini menggambarkan apakah use case yang satu tergantung pada use case yang lain, dalam arti apakah use case tersebut termasuk pada use case yang lain atau malah memperluas use case lain. 4. Actors. Bagian ini memberikan nama pada actor dalam use case. Selalu terdapat use case utama (primary use case) yang memulai use case. Disamping itu terdapat juga secondary use case yang terlibat dalam use case. Contohnya, dalam use case Withdraw Funds, ATM Customer adalah actor-nya. 5. Preconditions. Satu atau lebih kondisi harus berjalan dengan baik pada permulaan use case; contohnya mesin ATM yang tidak jalan, menampilkan pesan Selamat Datang. 6. Deskripsi. Bagian terbesar dari use case merupakan deskripsi naratif dari urutan
utama use case yang merupakan urutan yang paling umum dari
interaksi antara aktor dan sistem. Deskripsi tersebut dalam bentuk input dari aktor, diikuti oleh respon pada sistem.
BAB III ANALISA DAN PERANCANGAN SISTEM
3.1 Analisa sistem Aplikasi penentuan rute jalur terpendek di kota Surabaya menggunakan perangkat mobile seperti handphone di kembangkan dengan cara membaca graf kota Surabaya yang kemudian dapat di teruskan dengan pencarian jalur terpendek yang akan dilalui oleh pengguna. Graf kota Surabaya tersebut diperoleh dengan cara melihat peta kota Surabaya yang berskala 1:20.000, sedangkan untuk jarak dari masing-masing jalan protokol yang ada di kota Surabaya di peroleh dengan pengukuran secara manual peta kota Surabaya yang memiliki skala yang sama. Untuk pembacaan graf dan penentuan jalur terpendek kota Surabaya menggunakan algoritma dijkstra, yaitu apabila suatu jalur terpadat beberapa lintasan yang dapat ditempuh maka algoritma dijkstra akan memilih jalur terpendek disetiap lintasan dan jika terdapat beberapa lintasan lagi di langkah selanjutnya maka algoritma dijkstra akan memilih jalur terpendek yang harus dilalui dilangkah tersebut, cara tersebut dilakukan sampai diperoleh lokasi yang diinginkan. Setalah Jalur terpendek diperoleh, aplikasi akan mengeluarkan output berupa teks yang menunjukkan jalur-jalur yang harus ditempuh untuk sampai pada tempat yang dituju oleh pengguna.
3.2 Perancangan sistem Perancangan sistem berisikan penjelasan mengenai cara kerja sistem secara umum, yang meliputi use case diagram, class diagram, activity diagram, sequence
34
35
diagram serta dibuat perancangan antar muka aplikasi. Diharapkan dapat memperjelas dan memberi petunjuk pada aplikasi yang dikembangkan.
3.2.1 Deskripsi Umum Sistem a. Pengguna terlebih dahulu menginstall aplikasi pada Handphone yang mendukung Java MIDP 2.0 b. Setelah aplikasi dijalankan pengguna dapat menginputkan posisi mula-mula dan posisi yang akan dituju pada form yang telah disediakan. c. Pada tahap ini setelah posisi awal dan tujuan diketahui maka aplikasi akan membaca graph kota Surabaya, kemudian aplikasi akan memulai mencari jalur terpendek dari tempat awal ke tempat tujuan menggunakan algoritma dijkstra. d. Jika jalur terpendek telah diperoleh, aplikasi akan menampilkan output berupa text yang menjelaskan jalan-jalan yang harus ditempuh untuk sampai ketempat tujuan.
3.2.2 Kebutuhan Sistem Dari deskripsi umum sistem diatas dapat diketahui fokus utama dari sistem berada pada aplikasi J2ME/MIDlet yang dibuat , sedangkan graph kota surabaya hanya digunakan untuk menentukan jalur/panjang lintasan yang di implementasikan dalam suatu tabel database. Dengan demikian kebutuhan sistem dapat dikategorikan menjadi 2 bagian yaitu kebutuhan pengguna dan kebutuhan database. Dalam hal ini database yang digunakan dalam aplikasi ini menggunakan Linked list .
36
3.2.2.1 Kebutuhan Pengguna Dalam memenuhi kebutuhan pengguna mengenai interaksi dengan sistem dan untuk mengetahui kebutuhan-kebutuhan apa saja yang sangat berpengaruh, maka perlu dijabarkan kebutuhan apa saja yang akan dibutuhkan oleh pengguna, antara lain: a. Handphone atau perangkat mobile yang berbasis java MIDP 2.0. b. Menu untuk inputan posisi mula-mula dan posisi tujuan c. Menu untuk output berupa teks yang menjelaskan jalur yang harus ditempat agar sampai ketempat yang dituju.
3.2.2.2 Kebutuhan Database Ada beberapa algoritma untuk menentukan jalur terpendek antara lain algoritma Dijkstra, algoritma Floyd Warshall, algoritma Bellman ford. Dari beberapa algoritma tersebut yang cocok diterapkan pada aplikasi ini adalah algoritma Dijkstra karena algoritma menghitung jarak yang tidak bernilai negatif sedangkan algoritma jalur terpendek lainnya juga menghitung jarak yang bernilai negatif. Untuk memaksimalkan kinerja aplikasi ini maka dibuat tabel untuk menyimpan panjang masing-masing jalan protokol yang ada di kota Surabaya. Jarak masing-masing jalan protokol yang ada di Surabaya diperoleh dengan cara pengukuran secara manual menggunakan peta Surabaya yang berskala 1:20.000. Dari analisa keterangan diatas aplikasi ini nantinya akan hanya membutuhkan 1 tabel saja yaitu tabel Graf. Tabel ini berisi 5 buah field untuk menyimpan Id, asal, tujuan, panjang jalan dan nama.
37
Gambar 3.1 Model Data Fisik Aplikasi Setalah dilakukan pengukuran panjang jalan secara manual pada peta yang berskala 1:20.000, didapatkan ada 128 jalan protokol yang ada dikota Surabaya beserta panajang masing-masing jalan. Tabel 3.1 Contoh Nama-Nama Jalan Protokol Dikota Surabaya ID 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
Asal cc cb ae ae ca bn bw bx bw dz bx by bj y z bj bv bw br bs bm bl y dt cb aa bk da bl
Tujuan cb cc ac dq bn ca bx bw dz bw by bx y bj bj z bw bv bs br bl bm dt y aa cb da bk bk
Penamaan Bungtomo Bungtomo gubeng pojok gubeng pojok jembatan jagir wonokromo jagir wonokromo jemur andayani jemur andayani jemur andayani tengah jemur andayani tengah jemursari jemursari kertajaya gramedia kertajaya gramedia kertajaya pombensin kertajaya pombensin kutisari kutisari letjen suprapto letjen suprapto manyar manyar manyar kertoarjo manyar kertoarjo ngagel ngagel ngagel jaya ngagel jaya ngagel jaya selatan
Panjang Jalan 0.4 0.4 0.52 0.46 2.4 2.4 0.6 0.6 0.58 0.58 0.3 0.3 0.64 0.64 0.58 0.58 0.4 0.4 1.4 1.4 0.7 0.7 1.9 1.9 2.8 2.8 0.7 0.7 0.7
38
Berikut adalah tabel yang dibuat dari graf jalan protokol peta kota Surabaya yang berskala 1:20.000. tabel ini akan digunakan selama proses pencarian jalur terpendek dilakukan.
Id
Asal
1 2 3 4 5 6 7 8 9 10
a b b c c d a e e f
Tabel 3.2 Contoh Graf Jalan Protokol Kota Surabaya Tujuan Dam Nama Id Asal Tujuan Dam b a c b d c e a f e
96 96 56 56 62 62 97 97 98 98
Kutisari Kutisari Jemursari Jemursari Raya rungkut Raya rungkut Wadung asri Wadung asri Sumatra Sumatra
11 12 13 14 15 16 17 18 19 20
f g f h h i g j j k
g f h f i h j g k J
103 103 101 101 102 102 125 125 53 53
Nama Sulawesi Sulawesi Raya nginden Raya nginden Raya ngagel Raya ngagel Ngagel Ngagel Manyar Manyar
3.2.3 Use Case Diagram Diagram berikut menjelaskan tentang aktivitas yang bisa dilakukan oleh pengguna aplikasi jalur terpendek.
<
>
Input asal-tujuan
Pilih jalan
User
output jalur terpendek
Gambar 3.2 Usecase Diagram Aplikasi Jalur Terpendek
39
Input asal-tujuan merupakan aktivitas yang dilakukan oleh pengguna dalam penentuan jarak terpendek. Untuk menentukan jarak terpendek antara jalan raya di kota Surabaya, ketikkan nama jalan tempat asal kita, kemudian dilanjutkan dengan mengetikkan tempat jalan raya yang menjadi tempat tujuan kita. Pilih jalan merupakan aktivitas dimana user dapat memilih tempat asal dan tempat tujuan tanpa harus mengetikkan nama jalan terlebih dahulu. Output jalur terpendek merupakan hasil yang diperoleh setelah proses penentuan jalur terpendek dijalankan. Dalam hal ini hasil yang diperoleh berupa teks yang menunjukkan jalan-jalan yang harus ditempuh untuk sampai ke tempat tujuan.
3.2.4 Activity Diagram Diagram berikut menjelaskan tentang activity diagram yang ada pada aplikasi penentuan jalur terpendek.
Gambar 3.3 Activity Diagram
40
Untuk memulai aplikasi ini dimulai dengan membuka pilihan menu dan pilih menu utama kemudian pilih menu jalur terpendek, lalu tulis tempat asal dengan cara mengetik langsung atau membaca dari memori telpon, setelah pengguna mengetikkan tempat asal pengguna harus mengisi tempat tujuan dengan cara yang sama. Pada proses ini aplikasi akan mulai menentukan jalur terpendek pada proses background yang hasilnya dapat langsung dilihat pada menu utama serta disimpan pada memori telepon.
3.2.5 Sequence Diagram
: User
menu utama
background
penentuan jalur terpendek
pilih menu utama
input data
algoritma dijkstra
info jalur terpendek
Gambar 3.4 Sequence Diagram
Diagram diatas menunjukkan urutan proses yang dikerjakan oleh aplikasi dimulai dari menjalankan aplikasi, input data serta penggunaan algoritma dijkstra
41
oleh aplikasi dan hasil yang diperoleh berupa info jalur terpendek dilakukan dalam beberapa tahap.
3.2.6 Proses Perancangan Latar Perancangan antarmuka merupakan perancangan halaman aplikasi yang nantinya akan berinteraksi secara langsung dengan pengguna. Berikut perancangan yang akan dibuat: 1. Antarmuka menu utama merupakan tampilan awal ketika memasuki aplikasi, pada form ini terdapat dua tombol, yaitu tombol select dan tombol close. pengguna dapat memilih aktifitas apa yang akan dilakukan. Jika user ingin menjalankan aplikasi maka pilih tombol select, untuk mengakhiri penggunaan aplikasi pilih tombol close.
Gambar 3.5 Antarmuka Menu Utama
Terdapat beberapa button yang dapat dimanfaatkan oleh pengguna untuk menjalankan aplikasi yaitu: a. Jalur terpendek, digunakan untuk menjalankan fungsi utama aplikasi yaitu penentuan jalur terpendek.
42
b. Nama jalan, digunakan untuk melihat jalan-jalan protokol yang ada di kota Surabaya. c. Select, untuk memilih button yang ada d. Exit, command untuk keluar dari aplikasi
2. Antarmuka penentuan jalur terpendek, form yang digunakan untuk menentukan asal dan tujuan dua tempat yang akan dicari jalur tercepat untuk
melewatinya.
Untuk
kenyamanan
pengguna
form
dibuat
sesederhana mungkin.
Gambar 3.6 Antarmuka Penentuan Jalur Terpendek
Pada form ini terdapat 2 field. Field tersebut antara lain: a. Field asal, untuk menginputkan posisi mula-mula b. Field tujuan, untuk menginputkan posisi yang dituju oleh pengguna Serta terdapat beberapa button yang digunakan untuk proses atau tindakan selanjutnya, menu dan back: a. Menu, untuk memproses fields yang berada pada form tersebut, memasukkan data yang akan di proses, serta menghapus secara langsung apabila data yang di masukkan salah.
43
b. Back, tombil ini dapat digunakan untuk kembali pada form utama atau keluar dari aplikasi.
3. Antarmuka hasil dari penentuan jalur terpendek, form yang digunakan untuk menampilkan hasil yang diperoleh, setelah aplikasi memproses data yang telah di input.
Gambar 3.7 Antarmuka Hasil Penentuan Jalur Terpendek
Pada form ini terdapat beberapa field yang berada sebelah atas form, field tersebut berfungsi untuk menerangkan proses sebelumnya yaitu, jalan asal dan jalan tujuan. Misalnya, field pertama berisi jalan Kertajaya dan field kedua berisi jalan Pahlawan, hal ini berarti jarak terpendek dari jalan kertajaya ke jalan pahlawan. Dan diberikan penjelasan secara detail pada field penjelasan tentang jalan-jalan yang harus dilalui Form ini juga memiliki beberapa button yaitu: a. Menu, didalamnya terdapat perintah exit b. Back, untuk kembali ke form sebelumnya Berikut ini contoh output dari penentuan jalur terpendek antar 2 jalan yang telah ditentukan:
44
Gambar 3.8 Antarmuka Contoh Output Aplikasi
Pada gambar diatas dapat dilihat output aplikasi yang menjelaskan tentang jalan terpendek antara Jalan Raya Nginden dan Jalan Raya Rungkut. Dan dibawah nya terdapat sebuah field yang menjelaskan jalan-jalan mana saja yang harus dilalui untuk sampai ke tempat yang dituju dengan jarak yang terpendek.
4. Antarmuka nama jalan, form ini berisi tentang nama-nama jalan protokol yang ada di kota Surabaya, form ini dibuat untuk memudahkan penginputan data yang ada pada form penentuan jalur terpendek.
Gambar 3.9 Antarmuka Nama Jalan
45
Pada form ini hanya terdapat beberapa button, yang didalamnya berisi: a. Menu, pada button ini ada beberapa action diantaranya memasukkan nama jalan yang akan diproses pada form jalur terpendek. b. Exit, untuk keluar dari aplikasi
BAB IV HASIL DAN PEMBAHASAN
4.1. Lingkungan Implementasi Pada bagian ini akan dijelaskan mengenai spesifikasi handphone pada gambar 4.1 yang akan digunakan dalam implementasi sistem kali ini.
Gambar 4.1. Spesifikasi Handphone Nokia 6600
Selain handphone, perangkat lain yang digunakan untuk implementasi sistem yaitu laptop dengan spesifikasi berikut: Perangkat Keras: - Intel Celeron 2.66 GHZ RAM 512 MB Perangkat Lunak: - Microsoft Windows XP SP2 - Java Development Kit 6 Update 2 - NetBeans IDE 6.0 46
47
4.2. Implementasi Basis Data Pada tahap ini akan dibahas mengenai implementasi basis data dari perancangan yang telah dibahas sebelumnya. Berbeda dengan pemrograman database pada aplikasi web maupun desktop, pada pemrograman java midlet tidak dikenal adanya penyimpanan data ke dalam file. Untuk menyimpan data, pemrograman java midlet menyediakan suatu mekanisme penyimpanan data secara persisten (tetap) di memori device bersangkutan, yang berupa kumpulan-kumpulan record. Mekanisme penyimpanan data seperti ini dinamakan dengan Linked list yang merupakan sebuah struktur data, daripada sebagai sebuah tipe data karena linked list berhubungan dengan alokasi penyimpanan data di memori, bukan melakukan operasi terhadap isi datanya. Pada perancangan yang telah dibuat sebelumnya, terdapat satu tabel yang akan digunakan oleh aplikasi, namun satu tabel tersebut tidak digunakan untuk operasi insert melainkan hanya operasi select saja, yaitu tabel graf. karena pada tabel ini nantinya akan sering di akses oleh aplikasi dalam proses penentuan jarak terpendek oleh algoritma dijkstra, maka tabel graf tidak akan disimpan di memori melainkan disimpan dalam array yang dideklarasikan dari suatu class agar proses pembacaan data dapat dilakukan dengan cepat. Tabel graf akan direpresentasikan dengan 1(satu) buah array yang menyimpan detail dari sebuah jalan. Sedangkan implementasi dari satu tabel lainnya yaitu dengan cara menyimpannya pada memori device bersangkutan melalui method-method yang tersedia. Berikut penjelasan dari script-script yang digunakan untuk implementasi tabel tersebut:
48
public void enterdata() { map newMap=new map(); newMap.startRoad="a"; newMap.endRoad="b"; newMap.valueRoad=240; newMap.name="jagir wonokromo"; newMap.nextList=null; startMap=newMap; mapAcc=startMap; newMap=new map(); newMap.startRoad="b"; newMap.endRoad="a"; newMap.valueRoad=240; newMap.name="jagir wonokromo"; newMap.nextList=null; mapAcc.nextList=newMap; mapAcc=mapAcc.nextList; newMap=new map(); newMap.startRoad="c"; newMap.endRoad="d"; newMap.valueRoad=60; newMap.nextList=null; newMap.name="jemur andayani"; mapAcc.nextList=newMap; mapAcc=mapAcc.nextList; newMap=new map(); newMap.startRoad="d"; newMap.endRoad="c"; newMap.valueRoad=60; newMap.name="jemur andayani"; newMap.nextList=null; mapAcc.nextList=newMap; mapAcc=mapAcc.nextList; }
Gambar 4.2 Script Data Tabel Graf
Data yang terdapat pada tabel graf berasal dari string-string yang telah di input terlebih dahulu seperti pada Gambar 4.2 string tersebut berisi tentang detail yang terdapat pada tabel graf seperti yang sudah dibahas sebelumnya. Misal,
49
newMap.startRoad="a"; newMap.endRoad="b"; newMap.valueRoad=240; newMap.name="jagir wonokromo"; newMap.nextList=null; startMap=newMap; mapAcc=startMap;
Gambar 4.3 Contoh Data Table Graf
dari gambar tersebut diatas berarti pada node awal = titik a, node akhir = titik b, serta memiliki panjang 240dam, penamaan jalan= jagirwonokromo. kali ini satuan panjang menggunakan dam, karena apabila menggunakan km panjang jalan akan akan bernilai not ril sedangkan fungsi yang dipakai untuk pencarian jalur terpendek menggunakan integer.
4.3 Implementasi Antarmuka Pada tahap ini akan dijabarkan tentang implementasi antarmuka dari aplikasi berdasarkan perancangan yang telah dibuat. Form-form tersebut, yaitu : 1. Daftar menu utama 2. Form Jalur Terpendek 3. Form Jalan 4. Form Hasil 5. Form Peringatan
4.3.1 Form Daftar Menu Utama Aplikasi ini tidak memiliki splashscreen, apabila aplikasi ini dijalankan, form daftar menu utama akan muncul. Form Daftar Menu Utama ini menampilkan menu-
50
menu yang tersedia, pengguna dapat memilih salah satu menu dengan menekan tombol select, atau menekan tombol close untuk mengakhiri pemakaian aplikasi.
Gambar 4.4 Form Daftar Menu Utama 4.3.2 Form Jalur Terpendek Form ini merupakan bagian yang terpenting dari aplikasi, form yang digunakan untuk memproses pencarian jalur terpendek antar jalan-jalan yang ada dikota Surabaya, dalam hal ini jalan jalan yang sudah ditentukan. Teks field pada form ini bersifat read-only, Untuk menggunakan form ini digunakan suatu command yang memiliki fungsi untuk memanggil Form jalan yang fungsinya untuk mengisi teks field yang bersifat read-only.
Gambar 4.5 Form Jalur Terpendek
51
Berikut penjelasan Gambar 4.6, seperti yang telah dijelaskan di atas, form jalur terpendek memiliki beberapa button yang memiliki beberapa fungsi antara lain, pada command option terdapat button “masukkan nama jalan”, yang berfungsi untuk menampilkan form nama jalan. Kemudian button “hapus”, yang berfungsi untuk menghapus seluruh isi dari textfield yang ada. Kemudian button “jalankan”, yang berfungsi untuk menjalankan aplikasi atau memanggil fungsi dijkstra yang berada didalam aplikasi.
Gambar 4.6 Contoh Proses Pengisian Data Pada Form Jalur Terpendek.
4.3.3 Form Jalan Form ini memiliki fungsi untuk melihat nama-nama jalan yang terdapat pada aplikasi, selain itu form ini juga memiliki fungsi untuk mengisi teks-field yang terdapat di form jalur terpendek. Didalam form ini terdapat beberapa command yang berfungsi untuk menghubungkan form dengan form yang lainnya, dan sebuah
52
choicegroup yang bersifat exclusive, yang berarti hanya dapat memilih satu item saja, jadi pengguna tidak dapat memilih jalan lebih dari satu untuk setiap prosesnya. Selain itu dalam form ini juga terdapat command “close” untuk keluar dari aplikasi secara langsung.
Gambar 4.7 Form Jalan
4.3.4 Form Hasil Form ini hanya digunakan untuk menampilkan hasil yang diperoleh dari proses yang dijalankan oleh form jalur terpendek. Dalam hal ini hasil yang ditampilkan hanya berupa string saja dan bersifat read-only. Pada form hasil ini terdapat command “kembali”, yang memiliki fungsi untuk menampilkan kembali form sebelum form hasil, yaitu form jalur terpendek dan command “option” yang berisi Button close yang memiliki fungsi untuk keluar secara langsung dari aplikasi.
Gambar 4.8 Form Hasil
53
4.3.5 Form Peringatan Form peringatan ini akan tampil apabila pengguna belum mengisi teks field yang ada di form jalur terpendek, baik teks field untuk jalan “asal” maupun teks field untuk jalan “tujuan”. Apabila button “OK” di klik maka akan kembali ke form jalur terpendek.
Gambar 4.9 Form Peringatan
BAB V UJI COBA DAN EVALUASI
5.1 Lingkungan Uji Coba Pada bagian ini akan dijelaskan mengenai spesifikasi berbagai merk handphone yang akan digunakan dalam uji coba, namun untuk step-by-step uji coba hanya screenshot merk nokia, karena merk lainnya tidak mendukung untuk screenshot.
Gambar 5.1 Spesifikasi Nokia 6600
Gambar 5.2 Spesifikasi Nokia 7610
Gambar 5.3 Spesifikasi Nokia K530i 54
55
5.2 Skenario Uji Coba untuk memastikan bahwa aplikasi ini berjalan lancar, penyusun akan menyusun skenario, yang akan diuji coba, antara lain: 1. Uji coba install aplikasi ke berbagai macam merk handphone untuk mengetahui apakah aplikasi tidak tergantung dengan merk handphone. 2. Uji coba uninstall aplikasi dari handphone untuk memastikan bahwa aplikasi bisa dihapus jika tidak diperlukan lagi.
5.3 Pelaksanaan Uji Coba Pada sub-bab ini akan dijelaskan step-by-step mengenai pelaksanaan skenario uji coba yang telah dijabarkan pada sub-bab sebelumnya, untuk membuktikan uji coba aplikasi disertakan gambar tentang kejadian-kejadian yang sedang berlangsung pada handphone. 5.3.1. Uji Coba Install Aplikasi Uji coba langkah-langkah installasi pada handphone dibagi menjadi 4 tahap, yaitu install file, deskripsi tentang aplikasi meliputi nama, versi, format, alamat penyedia serta ukuran file, pemilihan directory yang akan digunakan untuk meng install file, kemudian proses install complete antara lain : 1. Gambar 5.4 adalah ketika file installer aplikasi yang berbentuk format *.jar dipilih maka otomatis akan menampilkan pertanyaan kepada pengguna apakah aplikasi sbydijkstra akan di install.
56
Gambar 5.4 Installasi bagian 1
2. Gambar 5.5 adalah ketika user menyetujui langkah sebelumnya maka akan ditampilkan deskripsi tentang aplikasi meliputi nama, versi, format, alamat penyedia serta ukuran file, kemudian pengguna dapat melanjutkan proses installasi.
Gambar 5.5 Installasi bagian 2
3. Gambar 5.6 adalah pemilihan dimana aplikasi akan diinstall, user dapat memilih menyimpan pada memori telpon atau memori kartu jika handphone terdapat kartu memori tambahan, setelah itu pengguna dapat melihat animasi progress bar status installasi.
57
Gambar 5.6 Installasi bagian 3
4. Gambar 5.7 adalah proses installasi pada handphone selesai ditandai dengan info yang berisi installation complete. untuk membuktikan aplikasi berhasil terinstall, buka menu apakah icon costfix ada atau tidak, pada gambar tersebut ada iconnya berarti proses installasi berhasil.
Gambar 5.7 Installasi bagian 4 5.3.2 Uji Coba Uninstall Aplikasi Uji coba langkah-langkah uninstall aplikasi pada handphone dibagi menjadi 3 tahap, antara lain : 1. Gambar 5.8 adalah langkah-langkah uninstall aplikasi, seperti halnya komputer untuk uninstall mempunyai menu khusus, pada nokia masuk ke menu Manager, kemudian ditampilkan daftar aplikasi-aplikasi yang terinstall.
58
Gambar 5.8 Uninstall bagian 1
2. Gambar 5.9 adalah tamplian konfirmasi pengguna apakah aplikasi akan dihapus, untuk melanjutkan proses uninstall, pengguna dapat memilih tombol yes, sesaat kemudian akan ditampilkan progrss bar uninstall.
Gambar 5.9 Uninstall bagian 2
3. Gambar 5.10 adalah proses uninstall berhasil ditandai dengan penuhnya progress bar dan hilangnya aplikasi sbydijkstra dari daftar aplikasi-aplikasi yang terinstall pada handphone.
59
Gambar 5.10 Uninstall bagian 3
5.3.3 Uji Coba Menjalankan Aplikasi Uji coba dimulai dengan menjalankan aplikasi yang telah terpasang pada handphone.
Gambar 5.11 Menjalankan Aplikasi
5.3.4 Uji Coba Menggunakan Form Jalur Terpendek Setelah menjalankan aplikasi dan masuk pada form utama, pengguna dapat memakai form jalur terpendek dan menggunakannya untuk mencari jalur tercepat antar jalan raya di kota Surabaya. Mula-mula dengan menekan tombol option dan pilih “masukkan nama jalan”, kemudian akan ditampilkan daftar nama jalan di kota Surabaya, setelah menemukan nama jalan yang di inginkan pengguna dapat langsung memilihnya.
60
Gambar 5.12 Menggunakan Form Jalur Terpendek
5.3.5 Uji Coba Menggunakan Form Jalan setelah menjalankan aplikasi dan masuk pada form utama, pengguna juga dapat memakai form jalan dan menggunakannya secara langsung untuk mengisi teks field yang ada pada form jalur terpendek, dengan demikian proses ini diharapkan dapat mempermudah pengguna untuk mengoperasikan pengisian data yang akan di proses di form jalur terpendek. Untuk menggunakan form ini pengguna hanya memilih jalan yang diinginkan, setelah menemukan jalan yang diinginkan, pengguna dapat langsung menginputkan data ke form jalur terpendek dengan cara menekan tombol option menekan tombol option dan menentukan jalan tersebut sebagai jalan asal atau jalan tujuan.
Gambar 5.13 Menggunakan Form Jalur Terpendek
61
5.3.6 Uji Coba Apabila Teks Field Diketikan Secara Manual Pada uji coba kali ini dilakukan didalam form jalur terpendek, teks field yang tersedia ini bersifat read-only jadi pengguna hanya dapat mengisi teks field tersebut melalui form jalan dengan langkah-langkah telah dijelaskan di atas.
Gambar 5.14 Teks Field Diketikkan Secara Manual
5.3.7 Uji Coba Apabila Teks Field Belum Diisi Uji coba kali ini dilakukan didalam form jalur terpendek, untuk menjalankan proses pencarian jalur tercepat teks field yang berada didalam form ini harus diisi seluruhnya, gambar 5.12 ini merupakan hasil apabila salah satu teks field tidak di isi dengan nama jalan yang telah disediakan.
Gambar 5.15 Teks Field Belum Diisi
62
5.3.8 Uji Coba Mencari Jarak Terpendek Uji coba mencari jarak terpendek pada aplikasi ini dibagi menjadi 3 tahap antara lain: 1. Setelah pengguna memilih form jalur terpendek, sesaat kemudian akan ditampilkan form jalur terpedek yang berisi beberapa teks field yang harus di isi untuk proses pencarian jalur terpendek. Cara mengisi teks field tersebut dengan cara menekan tombol option, kemudian pilih “masukkan nama jalan”. Seperti ditunjukkan pada Gambar 5.12. 2. Pengguna memilih nama jalan yang dikehendaki pada form jalan, kemudian menekan option dan memilih dimana data jalan tersebut akan diisikan. Seperti ditunjukkan pada Gambar 5.13. 3. Setelah proses pengisian teks field pada form jalur terpendek selesai, pengguna dapat menekan tombol option pada form jalur terpendek dan menekan jalankan. Maka hasil yang diperoleh akan tampak seperti pada Gambar 5.16 dibawah ini.
63
Gambar 5.16 Proses Mencari Jarak Terpendek kutisari – letjen suprapto
Gambar 5.16 adalah proses uji coba pencarian jarak terpendek dari jalan kutisari menuju ke jalan letjen suprapto, dari uji coba di atas dapat diketahui waktu untuk proses pencarian jalur terpendek menggunakan algoritma dijkstra berlangsung selama 4 detik, rute yang ditempuh raya kendang sari industri-rungkut raya industrirungkut industri kidul-rungkut tengah-wadung asri-letjen suprapto.
Gambar 5.17 Proses Mencari Jarak Terpendek Jagir Wonokromo – Raya Jend. A Yani JTV
64
Gambar 5.17 adalah proses uji coba pencarian jarak terpendek dari jalan jagir wonokromo menuju ke jalan Raya jend. A yani JTV, dari uji coba di atas dapat diketahui waktu untuk proses pencarian jalur terpendek menggunakan algoritma dijkstra berlangsung selama 3 detik, rute yang ditempuh st. Wonokromo-wonokromo RSI-Raya Jend A. Yani.
Gambar 5.18 Proses Mencari Jarak Terpendek Raya Panjang Jiwo – Rungkut Tengah
Gambar 5.18 adalah proses uji coba pencarian jarak terpendek dari jalan Raya Panjang Jiwo – Rungkut Tengah, dari uji coba di atas dapat diketahui waktu untuk proses pencarian jalur terpendek menggunakan algoritma dijkstra berlangsung selama 4 detik, rute yang ditempuh raya panjang jiwo-raya rungkut-rungkut tengah.
65
Gambar 5.19 Proses Mencari Jarak Terpendek Jemur Sari – Rungkut Tengah
Gambar 5.19 adalah proses uji coba pencarian jarak terpendek dari jalan Jemur Sari – Rungkut Tengah, dari uji coba di atas dapat diketahui waktu untuk proses pencarian jalur terpendek menggunakan algoritma dijkstra berlangsung selama 4 detik, rute yang ditempuh raya jemur sari RSI-raya jemur sari prapen-raya jemur sari panjang jiwo-raya rungkut-rungkut tengah.
66
Gambar 5.20 Proses Mencari Jarak Terpendek Raya Jemur Sari RSI – Raya Jend A Yani Royal
Gambar 5.20 adalah proses uji coba pencarian jarak terpendek dari jalan Raya Jemur Sari RSI – Raya Jend A Yani Royal, dari uji coba di atas dapat diketahui waktu untuk proses pencarian jalur terpendek menggunakan algoritma dijkstra berlangsung selama 4 detik, rute yang ditempuh raya jemur sari RSI-jemursari-raya jend A yani JTV-raya jend A yani royal.
Gambar 5.21 Proses Mencari Jarak Terpendek Letjen Suprapto – Kutisari
67
Gambar 5.21 adalah proses uji coba pencarian jarak terpendek dari jalan Letjen Suprapto – Kutisari, dari uji coba di atas dapat diketahui waktu untuk proses pencarian jalur terpendek menggunakan algoritma dijkstra berlangsung selama 5 detik, rute yang ditempuh wadung asri-rungkut tengah-rungkut industri kidul-rungkut raya industri-raya kendang sari industri-kutisari.
Gambar 5.22 Proses Mencari Jarak Terpendek Raya Panjang Jiwo – Letjen Suprapto
Gambar 5.22 adalah proses uji coba pencarian jarak terpendek dari jalan Raya Panjang Jiwo – Letjen Suprapto, dari uji coba di atas dapat diketahui waktu untuk proses pencarian jalur terpendek menggunakan algoritma dijkstra berlangsung selama 5 detik, rute yang ditempuh raya panjang jiwo-raya rungkut-rungkut tengah-wadung asri-letjen suprapto.
68
Gambar 5.23 Proses Mencari Jarak Terpendek jemur andayani tengah – letjen suprapto
Gambar 5.23 adalah proses uji coba pencarian jarak terpendek dari jalan jemur andayani tengah – letjen suprapto, dari uji coba di atas dapat diketahui waktu untuk proses pencarian jalur terpendek menggunakan algoritma dijkstra berlangsung selama 5 detik, rute yang ditempuh kutisari-raya kendang sari industri-rungkut raya industrirungkut industri kidul-rungkut tengah-wadung asri-letjen suprapto.
69
Gambar 5.24 Proses Mencari Jarak Terpendek jemur andayani – rungkut tengah
Gambar 5.24 adalah proses uji coba pencarian jarak terpendek dari jalan jemur andayani – rungkut tengah, dari uji coba di atas dapat diketahui waktu untuk proses pencarian jalur terpendek menggunakan algoritma dijkstra berlangsung selama 4 detik, rute yang ditempuh kutisari-raya kendang sari industri-rungkut raya industrirungkut industri kidul-rungkut tengah.
5.4 Evaluasi Hasil evaluasi dari uji coba terhadap beberapa skenario yang telah dilakukan membuktikan bahwa aplikasi yang telah berjalan dengan baik sesuai dengan fungsinya. Untuk waktu proses algoritma Dijkstra menggunakan 48 data juga berlangsung cukup cepat, antara 5-10 detik. Selain itu proses uji coba yang dilakukan juga telah membuktikan bahwa aplikasi telah dilengkapi dengan fasilitas penanganan kesalahan saat berinteraksi dengan pengguna yang sangat membantu sistem untuk berjalan secara optimal.
BAB VI PENUTUP
6.1 Kesimpulan Setelah dilakukan uji coba maka dapat diambil kesimpulan yaitu: 1. Dengan menggunkan aplikasi sbydijkstra dapat meningkatkan penyelesaian jalur terpendek antar jalan dalam setiap proses pengambilan jalan yang akan ditempuh. 2. Dengan menerapkan use-case modelling pada proses perancangan sistem, dapat mengidentifikasi
kebutuhan-kebutuhan
sistem
yang
benar
dan
menspesifikasikannya ke dalam cara yang mudah dipahami oleh pengguna sehingga kebutuhan dapat diverifikasi dan divalidasi. 3. Dengan memanfaatkan linked list, graf yang digunakan untuk proses pembacaan algoritma dijkstra dapat disimpan, dan di akses sewaktu-waktu sesuai kebutuhan pengguna.
6.2 Saran Berdasarkan pengalaman dalam proses pembuatan aplikasi ini, terdapat beberapa saran yang diusulkan oleh penyusun terkait untuk pengembangan aplikasi lebih lanjut. Saran-saran tersebut antara lain: 1. Memaksimalkan hasil pencarian jalur terpendek dengan mengembangkan algoritma shortestpath yang sudah ada atau menggunakan teknik algoritma shortestpath lainnya.
70
71
2. Hasil yang ditampilkan oleh aplikasi ini tidak hanya berupa teks saja, melainkan dapat menampilkan hasil berupa gambar, animasi flash atau penunjuk berupa suara. 3. Memperluas scope area yang dapat proses oleh aplikasi dengan cara memperbaiki graf agar handphone dapat memproses lebih banyak data.
DAFTAR PUSTAKA
Avestro, Joyce. 2007. Pengenalan Pemrograman Java. JENI. Jakarta. Gunadarma. 2007. Unified Modelling Language (UML), diakses online 02-02-2009 dari http:www.staffsite.gunadarma.ac.id/wsilfi/index.php Hartanto, A., 2004 “Pemrograman Mobile Java Dengan MIDP 2.0”, Penerbit Andi, Yogyakarta, 129 hal. Ivan Michael Siregar, Membangun Aplikasi Chat Lewat GPRS dengan menggunakan netBeans IDE 5.0, Gava Media 2007 M.Shalahudin, Rosa A.S, Pemrograman J2ME Belajar Cepat Pemrograman Perangkat teekomunikasi Mobile, Informatika 2006. Raharjo, Budi & Heryanto, Imam. 2007. Tuntunan Pemrograman Java untuk Handphone. Informatika. Bandung Rinaldi, Munir. 2005. Strategi Algoritmik. ITB. Bandung Suprasetiawan, Eko Budhi. 2002. Pemrograman Multithreading, diakses online 1002-2010 dari http://ikc.depsos.go.id/berseri/eko-java/thread.php. Suyoto, 2005, “Membuat Sendiri Aplikasi Ponsel”, Gava Media, Yogyakarta, 195 hal. Qusay, H. Mahmud. 2003. J2ME Low-Level Network Programming with MIDP 2.0, diakses online 08-09-2009 diakses dari dari http://developers.sun.com/mobility/reference/techart/index.jsp
Wikipedia.
2007.
Algoritma
dijkstra,
diakses
online
02-02-2009
dari
http://www.id.wikipedia.org/wiki/HuffAlgoritma_dijkstra
Wikipedia. 2007. Algoritma Floyd-Warshall, diakses online 02-02-2009 dari http://www.id.wikipedia.org/wiki/HuffAlgoritma_Floyd-warshall
72
73 LAMPIRAN Data Graf Aplikasi
74 f
GRAF 64
p
60
48
v
a
240
b
l
160
k
84
r
180 242
78 180 96 30
d
c
60
40
g
206
58
h
70
q
134
t
52 s
140
e
m
u 92
n
58 i
88
140
o j
75
*Source Code Aplikasi import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class Spath extends MIDlet implements CommandListener { private boolean midletPaused = false; node nodeStart=new node(); node nodeEnd=new node(); node nodeAcc=new node(); map startMap=new map(); map mapAcc=new map(); long levelAcc; private Form FormJT; private TextField textField2; private TextField textField3; private TextField textField; private TextField textField1; private Form FormHasil; private StringItem stringItem; private StringItem stringItem1; private StringItem stringItem2; private StringItem stringItem3; private Spacer spacer; private Spacer spacer1; private Form FormJalan; private ChoiceGroup choiceGroup; private List FormMenu; private Alert Peringatan; private Command exitCommand; private Command okCommand; private Command okCommand1; private Command backCommand; private Command exitCommand1; private Command okCommand3; private Command okCommand2; private Command backCommand1; private Command okCommand4; private Image image1; private Image image2; private Image image3; private Image image; public Spath() { } private void initialize() { } public void startMIDlet() { switchDisplayable(null, getFormMenu()); } public void resumeMIDlet() { } public void switchDisplayable(Alert alert, Displayable nextDisplayable) { Display display = getDisplay(); if (alert == null) { display.setCurrent(nextDisplayable); } else { display.setCurrent(alert, nextDisplayable); } } public void commandAction(Command command, Displayable displayable) { if (displayable == FormHasil) { if (command == backCommand1) { text1(); switchDisplayable(null, getFormJT()); } } else if (displayable == FormJT) { if (command == exitCommand) { switchDisplayable(null, getFormMenu()); } else if (command == okCommand) { switchDisplayable(null, getFormJalan()); } else if (command == okCommand2) { text1(); } else if (command == okCommand3) { switchDisplayable(null, getFormHasil()); if (textField.getString().equals("") || textField1.getString().equals("") || textField2.getString().equals("") || textField3.getString().equals("")) { switchDisplayable(null, getPeringatan()); } else { dijkstra(); } } } else if (displayable == FormJalan) { if (command == backCommand) { switchDisplayable(null, getFormMenu()); } else if (command == okCommand1) { switchDisplayable(null, getFormJT()); if (choiceGroup.isSelected(0)) { textField.setString("jagir wonokromo"); textField2.setString("a"); } else if (choiceGroup.isSelected(1)){ textField.setString("jemur andayani"); textField2.setString("c"); } else if (choiceGroup.isSelected(2)){
76
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
textField.setString("jemur andayani tengah"); textField2.setString("c"); else if (choiceGroup.isSelected(3)){ textField.setString("jemur sari"); textField2.setString("d"); else if (choiceGroup.isSelected(4)){ textField.setString("kutisari"); textField2.setString("h"); else if (choiceGroup.isSelected(5)){ textField.setString("letjen suprapto"); textField2.setString("i"); else if (choiceGroup.isSelected(6)){ textField.setString("margorejo indah"); textField2.setString("k"); else if (choiceGroup.isSelected(7)){ textField.setString("raya jemur sari prapen"); textField2.setString("l"); else if (choiceGroup.isSelected(8)){ textField.setString("raya jemur sari RSI"); textField2.setString("l"); else if (choiceGroup.isSelected(9)){ textField.setString("raya jend. A. yani bundaran waru"); textField2.setString("m"); else if (choiceGroup.isSelected(10)){ textField.setString("raya jend. A. yani graha"); textField2.setString("g"); else if (choiceGroup.isSelected(11)){ textField.setString("raya jend. A. yani JTV"); textField2.setString("g"); else if (choiceGroup.isSelected(12)){ textField.setString("raya jend. A. yani perbatasan"); textField2.setString("n"); else if (choiceGroup.isSelected(13)){ textField.setString("raya jend. A. yani royal"); textField2.setString("k"); else if (choiceGroup.isSelected(14)){ textField.setString("raya kendang sari industri"); textField2.setString("q"); else if (choiceGroup.isSelected(15)){ textField.setString("raya panjang jiwo"); textField2.setString("b"); else if (choiceGroup.isSelected(16)){ textField.setString("raya rungkut"); textField2.setString("r"); else if (choiceGroup.isSelected(17)){ textField.setString("rungkut industri kidul"); textField2.setString("s"); else if (choiceGroup.isSelected(18)){ textField.setString("rungkut raya industri"); textField2.setString("t"); else if (choiceGroup.isSelected(19)){ textField.setString("rungkut tengah"); textField2.setString("s"); else if (choiceGroup.isSelected(20)){ textField.setString("st. wonokromo"); textField2.setString("v"); else if (choiceGroup.isSelected(21)){ textField.setString("wadung asri"); textField2.setString("u"); else if (choiceGroup.isSelected(22)){ textField.setString("wonokromo DTC"); textField2.setString("v"); else if (choiceGroup.isSelected(23)){ textField.setString("wonokromo RSI"); textField2.setString("p");
} } else if (command == okCommand4) { switchDisplayable(null, getFormJT()); if (choiceGroup.isSelected(0)) { textField1.setString("jagir wonokromo"); textField3.setString("b"); } else if (choiceGroup.isSelected(1)){ textField1.setString("jemur andayani"); textField3.setString("d");
77
} else if (choiceGroup.isSelected(2)){ textField1.setString("jemur andayani tengah"); textField3.setString("e"); } else if (choiceGroup.isSelected(3)){ textField1.setString("jemur sari"); textField3.setString("g"); } else if (choiceGroup.isSelected(4)){ textField1.setString("kutisari"); textField3.setString("c"); } else if (choiceGroup.isSelected(5)){ textField1.setString("letjen suprapto"); textField3.setString("j"); } else if (choiceGroup.isSelected(6)){ textField1.setString("margorejo indah"); textField3.setString("l"); } else if (choiceGroup.isSelected(7)){ textField1.setString("raya jemur sari prapen"); textField3.setString("b"); } else if (choiceGroup.isSelected(8)){ textField1.setString("raya jemur sari RSI"); textField3.setString("d"); } else if (choiceGroup.isSelected(9)){ textField1.setString("raya jend. A. yani bundaran waru"); textField3.setString("n"); } else if (choiceGroup.isSelected(10)){ textField1.setString("raya jend. A. yani graha"); textField3.setString("m"); } else if (choiceGroup.isSelected(11)){ textField1.setString("raya jend. A. yani JTV"); textField3.setString("k"); } else if (choiceGroup.isSelected(12)){ textField1.setString("raya jend. A. yani perbatasan"); textField3.setString("o"); } else if (choiceGroup.isSelected(13)){ textField1.setString("raya jend. A. yani royal"); textField3.setString("p"); } else if (choiceGroup.isSelected(14)){ textField1.setString("raya kendang sari industri"); textField3.setString("h"); } else if (choiceGroup.isSelected(15)){ textField1.setString("raya panjang jiwo"); textField3.setString("r"); } else if (choiceGroup.isSelected(16)){ textField1.setString("raya rungkut"); textField3.setString("s"); } else if (choiceGroup.isSelected(17)){ textField1.setString("rungkut industri kidul"); textField3.setString("t"); } else if (choiceGroup.isSelected(18)){ textField1.setString("rungkut raya industri"); textField3.setString("q"); } else if (choiceGroup.isSelected(19)){ textField1.setString("rungkut tengah"); textField3.setString("u"); } else if (choiceGroup.isSelected(20)){ textField1.setString("st. wonokromo"); textField3.setString("a"); } else if (choiceGroup.isSelected(21)){ textField1.setString("wadung asri"); textField3.setString("i"); } else if (choiceGroup.isSelected(22)){ textField1.setString("wonokromo DTC"); textField3.setString("f"); } else if (choiceGroup.isSelected(23)){ textField1.setString("wonokromo RSI"); textField3.setString("v"); } } } else if (displayable == FormMenu) { if (command == List.SELECT_COMMAND) { FormMenuAction(); } } }
78
public Form getFormJT() { if (FormJT == null) { FormJT = new Form("FORM JALUR TERPENDEK", new Item[] { getTextField(), getTextField2(), getTextField1(), getTextField3() }); FormJT.addCommand(getOkCommand()); FormJT.addCommand(getOkCommand2()); FormJT.addCommand(getOkCommand3()); FormJT.addCommand(getExitCommand()); FormJT.setCommandListener(this); } return FormJT; } public Command getExitCommand() { if (exitCommand == null) { exitCommand = new Command("Exit", Command.EXIT, 0); } return exitCommand; } public Command getOkCommand() { if (okCommand == null) { okCommand = new Command("Masukkan Nama Jalan", Command.OK, 0); } return okCommand; } public TextField getTextField() { if (textField == null) { textField = new TextField("Asal:", null, 32, TextField.ANY | TextField.UNEDITABLE); } return textField; } public TextField getTextField1() { if (textField1 == null) { textField1 = new TextField("Tujuan:", null, 32, TextField.ANY | TextField.UNEDITABLE); } return textField1; } public TextField getTextField2() { if (textField2 == null) { textField2 = new TextField("", null, 32, TextField.ANY | TextField.UNEDITABLE); } return textField2; } public TextField getTextField3() { if (textField3 == null) { textField3 = new TextField("", null, 32, TextField.ANY | TextField.UNEDITABLE); } return textField3; } public Form getFormJalan() { if (FormJalan == null) { FormJalan = new Form("FORM JALAN", new Item[] { getChoiceGroup() }); FormJalan.addCommand(getOkCommand1()); FormJalan.addCommand(getOkCommand4()); FormJalan.addCommand(getBackCommand()); FormJalan.setCommandListener(this); } return FormJalan; } public Form getFormHasil() { if (FormHasil == null) { FormHasil = new Form("FORM HASIL", new Item[] { getStringItem1(), getSpacer1(), getStringItem2(), getSpacer(), getStringItem(), getStringItem3() }); FormHasil.addCommand(getBackCommand1()); FormHasil.setCommandListener(this); } return FormHasil; } public StringItem getStringItem() {
79
if (stringItem == null) { stringItem = new StringItem("Rute Yang Disarankan :", null); } return stringItem; } public List getFormMenu() { if (FormMenu == null) { FormMenu = new List("~ MENU UTAMA ~", Choice.IMPLICIT); FormMenu.append("Jalur Terpendek", getImage1()); FormMenu.append("Nama Jalan", getImage2()); FormMenu.setCommandListener(this); FormMenu.setSelectedFlags(new boolean[] { false, false }); } return FormMenu; } public void FormMenuAction() { // enter pre-action user code here String __selectedString = getFormMenu().getString(getFormMenu().getSelectedIndex()); if (__selectedString != null) { if (__selectedString.equals("Jalur Terpendek")) { switchDisplayable(null, getFormJT()); } else if (__selectedString.equals("Nama Jalan")) { switchDisplayable(null, getFormJalan()); } } } public Alert getPeringatan() { if (Peringatan == null) { Peringatan = new Alert("PERINGATAN", "Input Terlebih Dahulu !!!", null, AlertType.INFO); Peringatan.setTimeout(Alert.FOREVER); } return Peringatan; } public Command getOkCommand1() { if (okCommand1 == null) { okCommand1 = new Command("Asal", Command.OK, 0); } return okCommand1; } public Command getExitCommand1() { if (exitCommand1 == null) { exitCommand1 = new Command("Exit", Command.EXIT, 0); } return exitCommand1; } public Command getBackCommand() { if (backCommand == null) { backCommand = new Command("Back", Command.BACK, 0); } return backCommand; } public Command getOkCommand2() { if (okCommand2 == null) { okCommand2 = new Command("Hapus", Command.OK, 0); } return okCommand2; } public Command getOkCommand3() { if (okCommand3 == null) { okCommand3 = new Command("Jalankan", Command.OK, 0); } return okCommand3; } public Command getBackCommand1() { if (backCommand1 == null) { backCommand1 = new Command("Back", Command.BACK, 0); } return backCommand1; } public Command getOkCommand4() { if (okCommand4 == null) { okCommand4 = new Command("Tujuan", Command.OK, 0);
80
} return okCommand4; } public Image getImage1() { if (image1 == null) { try { image1 = Image.createImage("/14332313as.PNG"); } catch (java.io.IOException e) { e.printStackTrace(); } } return image1; } public Image getImage2() { if (image2 == null) { try { image2 = Image.createImage("/JT.png"); } catch (java.io.IOException e) { e.printStackTrace(); } } return image2; } public ChoiceGroup getChoiceGroup() { if (choiceGroup == null) { choiceGroup = new ChoiceGroup("Nama Jalan :", Choice.EXCLUSIVE); choiceGroup.append("jagir wonokromo", null); choiceGroup.append("jemur andayani", null); choiceGroup.append("jemur andayani tengah", null); choiceGroup.append("jemursari", null); choiceGroup.append("kutisari", null); choiceGroup.append("letjen suprapto", null); choiceGroup.append("margorejo indah", null); choiceGroup.append("raya jemur sari prapen", null); choiceGroup.append("raya jemur sari RSI", null); choiceGroup.append("raya jend. A. yani bundaran waru", null); choiceGroup.append("raya jend. A. yani graha pangeran", null); choiceGroup.append("raya jend. A. yani JTV", null); choiceGroup.append("raya jend. A. yani perbatasan", null); choiceGroup.append("raya jend. A. yani royal", null); choiceGroup.append("raya kendang sari industri", null); choiceGroup.append("raya panjang jiwo", null); choiceGroup.append("raya rungkut", null); choiceGroup.append("rungkut industri kidul", null); choiceGroup.append("rungkut raya industri", null); choiceGroup.append("rungkut tengah", null); choiceGroup.append("st. wonokromo", null); choiceGroup.append("wadung asri", null); choiceGroup.append("wonokromo DTC", null); choiceGroup.append("wonokromo RSI", null); choiceGroup.setSelectedFlags(new boolean[] {false,false,false,false,false,false,false,false,false,false,false,false,false,false,f alse,false,false,false,false,false,false,false,false,false,}); choiceGroup.setPreferredSize(220, -1); choiceGroup.setFont(0, null); choiceGroup.setFont(1, null); choiceGroup.setFont(2, null); choiceGroup.setFont(3, null); choiceGroup.setFont(4, null); choiceGroup.setFont(5, null); choiceGroup.setFont(6, null); choiceGroup.setFont(7, null); choiceGroup.setFont(8, null); choiceGroup.setFont(9, null); choiceGroup.setFont(10, null); choiceGroup.setFont(11, null); choiceGroup.setFont(12, null); choiceGroup.setFont(13, null); } return choiceGroup; } public StringItem getStringItem1() { if (stringItem1 == null) {
81
stringItem1 = new StringItem("Asal :", null); } return stringItem1; } public StringItem getStringItem2() { if (stringItem2 == null) { stringItem2 = new StringItem("Tujuan :", null); } return stringItem2; } public Image getImage() { if (image == null) { image = Image.createImage(1, 1); } return image; } public Image getImage3() { if (image3 == null) { try { image3 = Image.createImage("/14332313asa.PNG"); } catch (java.io.IOException e) { e.printStackTrace(); } } return image3; } public StringItem getStringItem3() { if (stringItem3 == null) { stringItem3 = new StringItem("Panjang Rute :", null); } return stringItem3; } public Spacer getSpacer() { if (spacer == null) { spacer = new Spacer(16, 1); } return spacer; } public Spacer getSpacer1() { if (spacer1 == null) { spacer1 = new Spacer(16, 1); } return spacer1; } public Display getDisplay () { return Display.getDisplay(this); } public void exitMIDlet() { switchDisplayable (null, null); destroyApp(true); notifyDestroyed(); } public void startApp() { if (midletPaused) { resumeMIDlet (); } else { initialize (); startMIDlet (); } midletPaused = false; } public void pauseApp() { midletPaused = true; } public void destroyApp(boolean unconditional) { } public void text() { textField.setString(""); textField2.setString(""); textField1.setString(""); textField3.setString(""); }
82
public void text1() { stringItem.setText(""); } public void enterdata() { map newMap=new map(); newMap.startRoad="a"; newMap.endRoad="b"; newMap.valueRoad=2400; newMap.name="jagir wonokromo"; newMap.nextList=null; startMap=newMap; mapAcc=startMap; newMap=new map(); newMap.startRoad="b"; newMap.endRoad="a"; newMap.valueRoad=2400; newMap.name="jagir wonokromo"; newMap.nextList=null; mapAcc.nextList=newMap; mapAcc=mapAcc.nextList; newMap=new map(); newMap.startRoad="c"; newMap.endRoad="d"; newMap.valueRoad=600; newMap.nextList=null; newMap.name="jemur andayani"; mapAcc.nextList=newMap; mapAcc=mapAcc.nextList; newMap=new map(); newMap.startRoad="d"; newMap.endRoad="c"; newMap.valueRoad=600; newMap.name="jemur andayani"; newMap.nextList=null; mapAcc.nextList=newMap; mapAcc=mapAcc.nextList; //* data keseluruhan lihat tabel } boolean pengecekan(node cekNode,String strName) { boolean answer=false; int i=0; String temp=""; for(i=0;i
83
{ mapAcc=startMap; stop=false; while(!stop) { if(mapAcc.startRoad.compareTo(nodeAcc.name)==0) { if(!pengecekan(nodeAcc, mapAcc.endRoad)) { System.out.println(nodeAcc.pathString+"=>"+mapAcc.endRoad); if(mapAcc.endRoad.compareTo(endNode)==0) { newNode=new node(); newNode.name=mapAcc.endRoad; newNode.value=nodeAcc.value+mapAcc.valueRoad; newNode.pathString=nodeAcc.pathString+mapAcc.name+"\n"; newNode.level=levelAcc+1; nodeEnd.nextList=newNode; nodeEnd=nodeEnd.nextList; foundEnd=true; } else { newNode=new node(); newNode.name=mapAcc.endRoad; newNode.value=nodeAcc.value+mapAcc.valueRoad; newNode.pathString=nodeAcc.pathString+mapAcc.name+"\n"; newNode.level=levelAcc+1; nodeEnd.nextList=newNode; nodeEnd=nodeEnd.nextList; } } } if(mapAcc.nextList==null) stop=true; else mapAcc=mapAcc.nextList; } } if(nodeAcc.nextList==null) stopAcc=true; else nodeAcc=nodeAcc.nextList; } if(!foundEnd) { levelAcc++; jalankan(startNode, endNode); } } node cari(String finish) { node valNode=new node(); nodeAcc=nodeStart; boolean stop=false; boolean foundPath=false; long sortedValue=0; String panjang; while(!stop) { System.out.println(nodeAcc.pathString+"=====>"+sortedValue+"\n"+nodeAcc.value); if(nodeAcc.name.compareTo(finish)==0 && (sortedValue==0 || nodeAcc.value<sortedValue)) { valNode=nodeAcc; sortedValue=nodeAcc.value; panjang=String.valueOf(sortedValue); stringItem3.setText(panjang+" Meter"); } if(nodeAcc.nextList==null)
84
stop=true; else nodeAcc=nodeAcc.nextList; } return valNode; } void dijkstra() { node newNode=new node(); node finishNode=new node(); enterdata(); String start=textField2.getString(); String finish=textField3.getString(); String start1=textField.getString(); String start2=textField.getString(); String start3=textField1.getString(); levelAcc=0; newNode=new node(); newNode.name=start; newNode.pathString="\n"+start1+"\n"; newNode.value=0; newNode.level=levelAcc; nodeStart=newNode; nodeEnd=nodeStart; jalankan(start, finish); finishNode=cari(finish); stringItem.setText(finishNode.pathString); stringItem1.setText(start2); stringItem2.setText(start3); } } public class map { public String startRoad; public String endRoad; public long valueRoad; public String name; public map nextList; } public class node { public String name; public long value; public String pathString; public node nextList; public long level; public void node () { name=""; value=0; pathString=""; nextList=new node(); } }