Tugas Pertemuan 6 PPL - Low Level Design
Nama | Akmal Sulthon Fathulloh |
---|---|
NRP | 5025211047 |
Kelas | PPL - A |
Low Level Design (LLD) adalah proses dalam pengembangan perangkat lunak di mana detail teknis dari sebuah sistem atau komponen sistem didefinisikan dengan sangat rinci. LLD berada di tingkat yang lebih mendetail daripada Desain Tingkat Tinggi (High Level Design) dan lebih dekat dengan implementasi aktual dalam bahasa pemrograman tertentu. Dalam LLD, fokus utamanya adalah pada implementasi teknis dari rancangan yang dibuat dalam tahap Desain Tingkat Tinggi. Ini melibatkan pembuatan diagram, spesifikasi, dan dokumen teknis lainnya yang menjelaskan bagaimana setiap fitur atau komponen sistem akan diimplementasikan. Pada pertemuan kelima mata kuliah Perancangan Perangkat Lunak kali ini, kita diminta untuk berlatih membuat high-level design (HLD) dan low-level design (LLD) dari sebuah dokumentasi pengembangan perangkat lunak, bisa dari tugas akhir, kerja praktik, maupun dokumen perusahaan. Berikut adalah referensi dokumen yang saya gunakan.
Deskripsi Umum
Perangkat lunak pada dokumentasi di atas bertajuk "Rancang Bangun Aplikasi Travel Online Berbasis Android".
System Requirements
Kebutuhan Fungsional
- Pengguna dapat melihat jadwal keberangkatan travel berupa rute kota asal hingga kota tujuan, hari dan waktu keberangkatan
- Pengguna memesan tiket dengan memasukkan data diri yang terdiri dari nama dan nomor hp
- Pengguna dapat melihat rute, jarak, dan harga jika sudah memasukkan alamat asal dan alamat tujuan
Kebutuhan Non-fungsional
Kebutuhan non-fungsional (non-functional requirements) tidak dijelaskan secara spesifik dalam jurnal di atas. Namun, berikut adalah beberapa kebutuhan non-fungsional yang umumnya diperlukan dalam pengembangan perangkat lunak tersebut.
- Performa: Aplikasi harus responsif dan tidak lambat saat digunakan
- Keamanan: Data pengguna harus terenkripsi dan tidak mudah diakses oleh pihak yang tidak berhak
- Usability: Aplikasi harus mudah digunakan oleh pengguna
- Portabilitas: Aplikasi harus dapat berjalan di berbagai perangkat Android
High-Level Design (HLD)
Arsitektur Sistem
Aplikasi travel online dibangun berbasis Android dan menggunakan webservice untuk mengirim dan menerima data dari aplikasi ke server. Untuk menjalan aplikasi ini dibutuhkan koneksi internet untuk komunikasi antara klien dan server. Data yang dikirim dan diterima baik oleh Android maupun server tidak bisa dijalankan jika pada smarthphone tidak ada jaringan internet. Pada Praktik menampilkan rute, jarak, dan harga, menggunakan Google Maps Distance Matrix API sehingga dibutuhkan juga koneksi intenet agar fitur ini berjalan. Arsitektur yang digunakan pada sistem digambarkan pada gambar berikut.
Cara Kerja Layanan
Pada aplikasi travel online, proses untuk melakukan pemesanan tiket pertama kali adalah dengan melihat jadwal. Calon penumpang bisa melihat jadwal yang tersedia pada halaman jadwal. Jika ada jadwal yang sesuai dengan keinginan, penumpang bisa melanjutkan pemesanan dengan kembali ke halaman awal lalu memasukkan identitas berupa nama dan nomor hp. Jika sudah mengisikan data diri, pengguna bisa melanjutkan memasukkan alamat penjemputan dan alamat tujuan. Aplikasi akan menampilkan rute, jarak dan biaya berdasarkan alamat yang dimasukkan pengguna. Diagram alur bisa dilihat pada gambar di bawah.
Desain Model Data
Berikut adalah model data yang digunakan dalam aplikasi ini.
Low-Level Design (LLD)
Perangkat Bantu Implementasi Aplikasi
Aplikasi diimplementasikan dan dikembangkan dalam lingkungan pemrograman dengan spesifikasi berikut ini:
- Windows 10
- Android Studio sebagai IDE
- Android SDK
- Android Development Tools
- Ponsel pintar Android Redmi 1S
- Emulator Android Studio
- XAMPP sebagai Apache Server
Komponen dan Antarmuka
Komponen Jadwal
Pada proses melihat jadwal, sistem akan menampilkan data yang diambil dari database server. Sistem menggunakan retrofit untuk mengubah REST API ke Interface Java. Untuk mengubah JSON string menjadi JAVA objek menggunakan library GSON.
Implementasi Membuat Tabel Jadwal
CREATE TABLE `coba_json` (
`id` int(11) NOT NULL,
`hari` varchar(10) NOT NULL,
`kotaasal` varchar(25) NOT NULL,
`kotatujuan` varchar(25) NOT NULL,
`jam` time NOT NULL
)
Implementasi Webservice Menampilkan Jadwal
public class TravelRestManager {
private TravelRestService mRestService;
public TravelRestService getmRestService() {
if(mRestService == null) {
Retrofit retrofit = new Retrofit.Builder().baseUrl(Constants.BASE_URL).addConverterFactory(GsonConverterFactory.create()).build();
mRestService = retrofit.create(TravelRestService.class);
}
return mRestService;
}
}
Implementasi Mengambil Data dari Database
public void onBindViewHolder(RecyclerView.ViewHolderholder, int position) {
JadwalVH vh = (JadwalVH) holder;
Jadwal item = mItems.get(position);
vh.tv_hari.setText(item.hari);
vh.tv_rute.setText(item.kotaAsal + " - " + item.kotaTujuan);
vh.tv_jam.setText(item.jam);
vh.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
}
Implementasi Menampilkan Jadwal
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
JadwalVH vh = (JadwalVH) holder;
Jadwal item = mItems.get(position);
vh.tv_hari.setText(item.hari);
vh.tv_rute.setText(item.kotaAsal + " - " + item.kotaTujuan);
vh.tv_jam.setText(item.jam);
vh.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
}
Komponen Pemesanan Tiket
Pada fitur memesan tiket, pengguna memasukkan nama dan nomor hp kemudian akan disimpan ke server oleh sistem.
Implementasi Membuat Tabel Penumpang
CREATE TABLE `penumpang` (
`ID_PENUMPANG` varchar(10) NOT NULL,
`NAMA_PENUMPANG` text NOT NULL,
`NO_HP` varchar(12) NOT NULL
)
Implementasi Memesan Tiket
simpan.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
ArrayList postParameters = new ArrayList();
postParameters.add(new BasicNameValuePair("nama", namax.getText().toString()));
postParameters.add(new BasicNameValuePair("nohp", nohpx.getText().toString()));
}
});
Komponen Menampilkan Rute, Jarak, dan Harga
Pada fitur Menampilkan Rute, Jarak, dan Harga, pertama pada tampilan ditampilkan peta dengan fragmen ditunjukkan dalam kode seperti pada Gambar 4.7. Untuk menampilkan rute ditunjukkan pada Gambar 4.8 dan untuk Perhitungan jarak ditunjukkan pada gambar 4.9.
Implementasi Tampilan Peta
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:map="http://schemas.android.com/apk/resauto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">
<fragment android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" />
</LinearLayout>
Implementasi Rute
public void onDirectionFinderStart() {
progressDialog = ProgressDialog.show(this, "Please wait.", "Finding direction..!", true);
if (originMarkers != null) {
for (Marker marker:originMarkers) {
marker.remove();
}
}
if (destinationMarkers != null) {
for (Marker marker:destinationMarkers) {
marker.remove();
}
}
if (polylinePaths != null) {
for (Polyline polyline:polylinePaths) {
polyline.remove();
}
}
}
Implementasi Jarak
public void onDirectionFinderSuccess(List routes) {
progressDialog.dismiss();
polylinePaths = new ArrayList<>();
originMarkers = new ArrayList<>();
destinationMarkers = new ArrayList<>();
int cost = 1000;
for (Route route : routes) {
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(route.startLocation, 16));
((TextView) findViewById(R.id.tvDuration)).setText(route.duration.text);
((TextView) findViewById(R.id.tvDistance)).setText(route.distance.text);
((TextView) findViewById(R.id.tvCost)).setText("14000");
originMarkers.add(mMap.addMarker(new MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.start_blue)).title(route.startAddress).position(route.startLocation)));
destinationMarkers.add(mMap.addMarker(new MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.end_green)).title(route.endAddress).position(route.endLocation)));
PolylineOptions polylineOptions = new PolylineOptions().geodesic(true).color(Color.BLUE).width(10);
for (int i = 0; i < route.points.size(); i++)
polylineOptions.add(route.points.get(i));
polylinePaths.add(mMap.addPolyline(polylineOptions));
}
}
Komentar
Posting Komentar